code: def from_environment_or_defaults(cls, environment=None):
          
          if environment is None:
              environment = os.environ
          run_id = environment.get(env.RUN_ID)
          resume = environment.get(env.RESUME)
          storage_id = environment.get(env.RUN_STORAGE_ID)
          mode = environment.get(env.MODE)
          disabled = InternalApi().disabled()
          if not mode and disabled:
              mode = "dryrun"
          elif disabled and mode != "dryrun":
              wandb.termlog(
                  "WARNING: WANDB_MODE is set to run, but W&B was disabled.  Run `wandb on` to remove this message")
          elif disabled:
              wandb.termlog(
                  'W&B is disabled in this directory.  Run `wandb on` to enable cloud syncing.')
  
          group = environment.get(env.RUN_GROUP)
          job_type = environment.get(env.JOB_TYPE)
          run_dir = environment.get(env.RUN_DIR)
          sweep_id = environment.get(env.SWEEP_ID)
          program = environment.get(env.PROGRAM)
          description = environment.get(env.DESCRIPTION)
          args = env.get_args()
          wandb_dir = env.get_dir()
          tags = env.get_tags()
          config = Config.from_environment_or_defaults()
          run = cls(run_id, mode, run_dir,
                    group, job_type, config,
                    sweep_id, storage_id, program=program, description=description,
                    args=args, wandb_dir=wandb_dir, tags=tags,
                    resume=resume)
          return run
docs: Create a Run object taking values from the local environment where possible.
  
          The run ID comes from WANDB_RUN_ID or is randomly generated.
          The run mode ("dryrun", or "run") comes from WANDB_MODE or defaults to "dryrun".
          The run directory comes from WANDB_RUN_DIR or is generated from the run ID.
  
          The Run will have a .config attribute but its run directory won't be set by
          default.