parameters: (lines)
return_statement: return props
docstring: Parse the lines of an os-release file.
  
          Parameters:
  
          * lines: Iterable through the lines in the os-release file.
                   Each line must be a unicode string or a UTF-8 encoded byte
                   string.
  
          Returns:
              A dictionary containing all information items.
docstring_summary: Parse the lines of an os-release file.
docstring_tokens: Parse the lines of an os - release file .
function: def _parse_os_release_content(lines):
          """
          Parse the lines of an os-release file.
  
          Parameters:
  
          * lines: Iterable through the lines in the os-release file.
                   Each line must be a unicode string or a UTF-8 encoded byte
                   string.
  
          Returns:
              A dictionary containing all information items.
          """
          props = {}
          lexer = shlex.shlex(lines, posix=True)
          lexer.whitespace_split = True
  
          # The shlex module defines its `wordchars` variable using literals,
          # making it dependent on the encoding of the Python source file.
          # In Python 2.6 and 2.7, the shlex source file is encoded in
          # 'iso-8859-1', and the `wordchars` variable is defined as a byte
          # string. This causes a UnicodeDecodeError to be raised when the
          # parsed content is a unicode object. The following fix resolves that
          # (... but it should be fixed in shlex...):
          if sys.version_info[0] == 2 and isinstance(lexer.wordchars, bytes):
              lexer.wordchars = lexer.wordchars.decode('iso-8859-1')
  
          tokens = list(lexer)
          for token in tokens:
              # At this point, all shell-like parsing has been done (i.e.
              # comments processed, quotes and backslash escape sequences
              # processed, multi-line values assembled, trailing newlines
              # stripped, etc.), so the tokens are now either:
              # * variable assignments: var=value
              # * commands or their arguments (not allowed in os-release)
              if '=' in token:
                  k, v = token.split('=', 1)
                  if isinstance(v, bytes):
                      v = v.decode('utf-8')
                  props[k.lower()] = v
              else:
                  # Ignore any tokens that are not variable assignments
                  pass
  
          if 'version_codename' in props:
              # os-release added a version_codename field.  Use that in
              # preference to anything else Note that some distros purposefully
              # do not have code names.  They should be setting
              # version_codename=""
              props['codename'] = props['version_codename']
          elif 'ubuntu_codename' in props:
              # Same as above but a non-standard field name used on older Ubuntus
              props['codename'] = props['ubuntu_codename']
          elif 'version' in props:
              # If there is no version_codename, parse it from the version
              codename = re.search(r'(\(\D+\))|,(\s+)?\D+', props['version'])
              if codename:
                  codename = codename.group()
                  codename = codename.strip('()')
                  codename = codename.strip(',')
                  codename = codename.strip()
                  # codename appears within paranthese.
                  props['codename'] = codename
  
          return props
function_tokens: def _parse_os_release_content ( lines ) : props = { } lexer = shlex . shlex ( lines , posix = True ) lexer . whitespace_split = True # The shlex module defines its `wordchars` variable using literals, # making it dependent on the encoding of the Python source file. # In Python 2.6 and 2.7, the shlex source file is encoded in # 'iso-8859-1', and the `wordchars` variable is defined as a byte # string. This causes a UnicodeDecodeError to be raised when the # parsed content is a unicode object. The following fix resolves that # (... but it should be fixed in shlex...): if sys . version_info [ 0 ] == 2 and isinstance ( lexer . wordchars , bytes ) : lexer . wordchars = lexer . wordchars . decode ( 'iso-8859-1' ) tokens = list ( lexer ) for token in tokens : # At this point, all shell-like parsing has been done (i.e. # comments processed, quotes and backslash escape sequences # processed, multi-line values assembled, trailing newlines # stripped, etc.), so the tokens are now either: # * variable assignments: var=value # * commands or their arguments (not allowed in os-release) if '=' in token : k , v = token . split ( '=' , 1 ) if isinstance ( v , bytes ) : v = v . decode ( 'utf-8' ) props [ k . lower ( ) ] = v else : # Ignore any tokens that are not variable assignments pass if 'version_codename' in props : # os-release added a version_codename field.  Use that in # preference to anything else Note that some distros purposefully # do not have code names.  They should be setting # version_codename="" props [ 'codename' ] = props [ 'version_codename' ] elif 'ubuntu_codename' in props : # Same as above but a non-standard field name used on older Ubuntus props [ 'codename' ] = props [ 'ubuntu_codename' ] elif 'version' in props : # If there is no version_codename, parse it from the version codename = re . search ( r'(\(\D+\))|,(\s+)?\D+' , props [ 'version' ] ) if codename : codename = codename . group ( ) codename = codename . strip ( '()' ) codename = codename . strip ( ',' ) codename = codename . strip ( ) # codename appears within paranthese. props [ 'codename' ] = codename return props