class_docstr: Specifies what flows belong to the same project.
  
  A project-specific namespace is created for all flows that
  use the same `@project(name)`.
  
  Parameters
  ----------
  name : str
      Project name. Make sure that the name is unique amongst all
      projects that use the same production scheduler. The name may
      contain only lowercase alphanumeric characters and underscores.
code: def flow_init(
      self,
      flow,
      graph,
      environment,
      flow_datastore,
      metadata,
      logger,
      echo,
      options,
  ):
      self._option_values = options
      project_name = self.attributes.get("name")
      project_flow_name, branch_name = format_name(
          flow.name,
          project_name,
          options["production"],
          options["branch"],
          get_username(),
      )
      is_user_branch = (
          options["branch"] is None and not options["production"]
      )
      echo(
          "Project: *%s*, Branch: *%s*" % (project_name, branch_name),
          fg="magenta",
          highlight="green",
      )
      current._update_env(
          {
              "project_name": project_name,
              "branch_name": branch_name,
              "is_user_branch": is_user_branch,
              "is_production": options["production"],
              "project_flow_name": project_flow_name,
          }
      )
      metadata.add_sticky_tags(
          sys_tags=[
              "project:%s" % project_name,
              "project_branch:%s" % branch_name,
          ]
      )
  
file_path: metaflow/metaflow/plugins/project_decorator.py
imports: from metaflow.exception import MetaflowException
  from metaflow.decorators import FlowDecorator
  from metaflow import current
  from metaflow.util import get_username
  import os
  import re
label_desc: Use image node_id 1 for calling the ProjectDecorator obj's underlying member method code with example usage: obj.flow_init(flow, graph, environment, flow_datastore, metadata, logger, echo, options) without return types