old_contents: import tarfile
  from email.parser import Parser
  from os import path
  
  def parse_package_list(package_spec):
      if not package_spec:
          return []
  
      return [
          spec.strip()
          for spec in package_spec.split(',')
      ]
  
  def inspect_r_package(filename, fileobj, *args, **kwargs):
  
      tf = tarfile.open(filename, fileobj=fileobj)
  
      pkg_info = next(name for name in tf.getnames() if name.endswith('/DESCRIPTION'))
      fd = tf.extractfile(pkg_info)
      raw_attrs = dict(Parser().parse(fd).items())
  
      name = raw_attrs.pop('Package')
      version = raw_attrs.pop('Version')
      summary = raw_attrs.pop('Title', None)
      description = raw_attrs.pop('Description', None)
      license = raw_attrs.pop('License', None)
  
      attrs = {}
      attrs['NeedsCompilation'] = raw_attrs.get('NeedsCompilation', 'no')
      attrs['depends'] = parse_package_list(raw_attrs.get('Depends'))
      attrs['suggests'] = parse_package_list(raw_attrs.get('Suggests'))
  
      built = raw_attrs.get('Built')
  
      if built:
          r, _, date, platform = built.split(';')
          r_version = r.strip('R ')
          attrs['R'] = r_version
          attrs['os'] = platform.strip()
          attrs['type'] = 'package'
      else:
          attrs['type'] = 'source'
  
      package_data = {'name': name,
                      'summary': summary,
                      'license': license,
                      }
      release_data = {
                      'version': version,
                      'description': description,
                      }
      file_data = {
                   'basename': path.basename(filename),
                   'attrs': attrs,
                   }
  
      return package_data, release_data, file_data
  
new_contents: import tarfile
  import email.parser
  from os import path
  
  # Python 3 requires BytesParser which doesn't exist in Python 2
  Parser = getattr(email.parser, 'BytesParser', email.parser.Parser)
  
  def parse_package_list(package_spec):
      if not package_spec:
          return []
  
      return [
          spec.strip()
          for spec in package_spec.split(',')
      ]
  
  def inspect_r_package(filename, fileobj, *args, **kwargs):
  
      tf = tarfile.open(filename, fileobj=fileobj)
  
      pkg_info = next(name for name in tf.getnames() if name.endswith('/DESCRIPTION'))
      fd = tf.extractfile(pkg_info)
      raw_attrs = dict(Parser().parse(fd).items())
  
      name = raw_attrs.pop('Package')
      version = raw_attrs.pop('Version')
      summary = raw_attrs.pop('Title', None)
      description = raw_attrs.pop('Description', None)
      license = raw_attrs.pop('License', None)
  
      attrs = {}
      attrs['NeedsCompilation'] = raw_attrs.get('NeedsCompilation', 'no')
      attrs['depends'] = parse_package_list(raw_attrs.get('Depends'))
      attrs['suggests'] = parse_package_list(raw_attrs.get('Suggests'))
  
      built = raw_attrs.get('Built')
  
      if built:
          r, _, date, platform = built.split(';')
          r_version = r.strip('R ')
          attrs['R'] = r_version
          attrs['os'] = platform.strip()
          attrs['type'] = 'package'
      else:
          attrs['type'] = 'source'
  
      package_data = {'name': name,
                      'summary': summary,
                      'license': license,
                      }
      release_data = {
                      'version': version,
                      'description': description,
                      }
      file_data = {
                   'basename': path.basename(filename),
                   'attrs': attrs,
                   }
  
      return package_data, release_data, file_data
  
subject: Fix Python 3 compatibility for R inspect package