code: def upload_workflow_description_file(self, filename):
          '''Uploads workflow description from a *YAML* file.
  
          Parameters
          ----------
          filename: str
              path to the file from which description should be read
  
          See also
          --------
          :meth:`tmclient.api.TmClient.upload_workflow_description`
          '''
          if (
              not filename.lower().endswith('yml') and
              not filename.lower().endswith('yaml')
          ):
              raise ResourceError('filename must have "yaml" or "yml" extension')
          with open(filename) as f:
              logger.info('load workflow description from file: %s', filename)
              description = yaml.safe_load(f.read())
          self.upload_workflow_description(descriptionf upload_workflow_description_file(self, filename):
          '''Uploads workflow description from a *YAML* file.
  
          Parameters
          ----------
          filename: str
              path to the file from which description should be read
  
          See also
          --------
          :meth:`tmclient.api.TmClient.upload_workflow_description`
          '''
          if (
              not filename.lower().endswith('yml') and
              not filename.lower().endswith('yaml')
          ):
              raise ResourceError('filename must have "yaml" or "yml" extension')
          with open(filename) as f:
              logger.info('load workflow description from file: %s', filename)
              description = yaml.safe_load(f.read())
          self.upload_workflow_description(description)
docs: Uploads workflow description from a *YAML* file.
  
          Parameters
          ----------
          filename: str
              path to the file from which description should be read
  
          See also
          --------
          :meth:`tmclient.api.TmClient.upload_workflow_description`