class_docstr: Metadata about a run.
class_docstr_tok: ["Metadata","about","a","run","."]
code: def from_proto(cls, proto):
      end_time = proto.end_time
      # The proto2 default scalar value of zero indicates that the run's end time is absent.
      # An absent end time is represented with a NoneType in the `RunInfo` class
      if end_time == 0:
          end_time = None
      return cls(
          run_uuid=proto.run_uuid,
          run_id=proto.run_id,
          run_name=proto.run_name,
          experiment_id=proto.experiment_id,
          user_id=proto.user_id,
          status=RunStatus.to_string(proto.status),
          start_time=proto.start_time,
          end_time=end_time,
          lifecycle_stage=proto.lifecycle_stage,
          artifact_uri=proto.artifact_uri,
      )
  
imports: from mlflow.entities._mlflow_object import _MLflowObject
  from mlflow.entities.lifecycle_stage import LifecycleStage
  from mlflow.entities.run_status import RunStatus
  from mlflow.exceptions import MlflowException
  from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE
  from mlflow.protos.service_pb2 import RunInfo
label_desc: Use image node_id 16 for calling the RunInfo obj's underlying member method code with example usage: obj.from_proto(cls, proto) and returns: cls