parameters: (cls, value, package_dir=None)
return_statement: return value
docstring: Represents value as a module attribute.
  
          Examples:
              attr: package.attr
              attr: package.module.attr
  
          :param str value:
          :rtype: str
docstring_summary: Represents value as a module attribute.
docstring_tokens: Represents value as a module attribute .
function: def _parse_attr(cls, value, package_dir=None):
          """Represents value as a module attribute.
  
          Examples:
              attr: package.attr
              attr: package.module.attr
  
          :param str value:
          :rtype: str
          """
          attr_directive = 'attr:'
          if not value.startswith(attr_directive):
              return value
  
          attrs_path = value.replace(attr_directive, '').strip().split('.')
          attr_name = attrs_path.pop()
  
          module_name = '.'.join(attrs_path)
          module_name = module_name or '__init__'
  
          parent_path = os.getcwd()
          if package_dir:
              if attrs_path[0] in package_dir:
                  # A custom path was specified for the module we want to import
                  custom_path = package_dir[attrs_path[0]]
                  parts = custom_path.rsplit('/', 1)
                  if len(parts) > 1:
                      parent_path = os.path.join(os.getcwd(), parts[0])
                      module_name = parts[1]
                  else:
                      module_name = custom_path
              elif '' in package_dir:
                  # A custom parent directory was specified for all root modules
                  parent_path = os.path.join(os.getcwd(), package_dir[''])
          sys.path.insert(0, parent_path)
          try:
              module = import_module(module_name)
              value = getattr(module, attr_name)
  
          finally:
              sys.path = sys.path[1:]
  
          return value
function_tokens: def _parse_attr ( cls , value , package_dir = None ) : attr_directive = 'attr:' if not value . startswith ( attr_directive ) : return value attrs_path = value . replace ( attr_directive , '' ) . strip ( ) . split ( '.' ) attr_name = attrs_path . pop ( ) module_name = '.' . join ( attrs_path ) module_name = module_name or '__init__' parent_path = os . getcwd ( ) if package_dir : if attrs_path [ 0 ] in package_dir : # A custom path was specified for the module we want to import custom_path = package_dir [ attrs_path [ 0 ] ] parts = custom_path . rsplit ( '/' , 1 ) if len ( parts ) > 1 : parent_path = os . path . join ( os . getcwd ( ) , parts [ 0 ] ) module_name = parts [ 1 ] else : module_name = custom_path elif '' in package_dir : # A custom parent directory was specified for all root modules parent_path = os . path . join ( os . getcwd ( ) , package_dir [ '' ] ) sys . path . insert ( 0 , parent_path ) try : module = import_module ( module_name ) value = getattr ( module , attr_name ) finally : sys . path = sys . path [ 1 : ] return value