docs: def create_module(
          project: 'projects.Project',
          step: 'projects.ProjectStep'
  ):
      """
      Creates an artificial module that will encompass the code execution for
      the specified step. The target module is populated with the standard dunder
      attributes like __file__ to simulate the normal way that Python populates
      values when loading a module.
  
      :param project:
          The currently open project.
      :param step:
          The step whose code will be run inside the target_module.
      :return
          The created and populated module for the given step.
      """
  
      module_name = step.definition.name.rsplit('.', 1)[0]
      target_module = types.ModuleType(module_name)
  
      dunders = dict(
          __file__=step.source_path,
          __package__='.'.join(
              [project.id.replace('.', '-')] +
              step.filename.rsplit('.', 1)[0].split(os.sep)
          )
      )
  
      for key, value in dunders.items():
          setattr(target_module, key, value)
  
      return target_module