Exemplo n.º 1
0
    def test_requires_dist(self):
        fields = {'name': 'project',
                  'version': '1.0',
                  'requires_dist': ['other', 'another (==1.0)']}
        metadata = Metadata(mapping=fields)
        self.assertEqual(metadata['Requires-Dist'],
                         ['other', 'another (==1.0)'])
        self.assertEqual(metadata['Metadata-Version'], '1.2')
        self.assertNotIn('Provides', metadata)
        self.assertEqual(metadata['Requires-Dist'],
                         ['other', 'another (==1.0)'])
        self.assertNotIn('Obsoletes', metadata)

        # make sure write_file uses one RFC 822 header per item
        fp = StringIO()
        metadata.write_file(fp)
        lines = fp.getvalue().split('\n')
        self.assertIn('Requires-Dist: other', lines)
        self.assertIn('Requires-Dist: another (==1.0)', lines)

        # test warnings for invalid version constraints
        # XXX this would cause no warnings if we used update (or the mapping
        # argument of the constructor), see comment in Metadata.update
        metadata = Metadata()
        metadata['Requires-Dist'] = 'Funky (Groovie)'
        metadata['Requires-Python'] = '1-4'
        self.assertEqual(len(self.get_logs()), 2)

        # test multiple version matches
        metadata = Metadata()

        # XXX check PEP and see if 3 == 3.0
        metadata['Requires-Python'] = '>=2.6, <3.0'
        metadata['Requires-Dist'] = ['Foo (>=2.6, <3.0)']
        self.assertEqual(self.get_logs(), [])
Exemplo n.º 2
0
 def test_check_name_strict(self):
     metadata = Metadata()
     metadata['Version'] = '1.0'
     metadata['Home-page'] = 'http://pypi.python.org'
     metadata['Author'] = 'Monty Python'
     metadata.docutils_support = False
     self.assertRaises(MetadataMissingError, metadata.check, strict=True)
Exemplo n.º 3
0
 def test_upload(self):
     "Test upload"
     self.check_pypi_server_available()
     self.check_testdist_available()
     if self.run_test_server:
         self.remove_package(self.dist_project, self.dist_version)
     d = os.path.join(HERE, self.testdir)
     data = self.load_package_metadata(d)
     md = Metadata()
     md.update(self.get_index_metadata(data))
     #import pdb; pdb.set_trace()
     self.index.gpg_home = os.path.join(HERE, 'keys')
     try:
         zip_name = os.path.join(HERE, '%s.zip' % self.testdir)
         self.assertRaises(DistlibException, self.index.upload_file, md,
                           'random-' + zip_name, 'Test User', 'tuser')
         response = self.index.upload_file(md, zip_name,
                                           'Test User', 'tuser')
         self.assertEqual(response.code, 200)
         if self.run_test_server:
             fn = os.path.join(HERE, 'packages', os.path.basename(zip_name))
             self.assertTrue(os.path.exists(fn))
     except HTTPError as e:
         # Treat as success if it already exists
         if e.getcode() != 400 or 'already exists' not in e.msg:
             raise
Exemplo n.º 4
0
 def test_write(self):
     dfn = self.temp_filename()
     # Read legacy, write new
     sfn = os.path.join(HERE, 'fake_dists', 'choxie-2.0.0.9.dist-info',
                        LEGACY_METADATA_FILENAME)
     md = Metadata(path=sfn)
     md.write(path=dfn)
     with codecs.open(dfn, 'r', 'utf-8') as f:
         data = json.load(f)
     self.assertEqual(
         data, {
             'metadata_version': '2.0',
             'generator': 'distlib (%s)' % __version__,
             'name': 'choxie',
             'version': '2.0.0.9',
             'license': 'BSD',
             'summary': 'Chocolate with a kick!',
             'description': 'Chocolate with a longer kick!',
             'provides': ['truffles (1.0)', 'choxie (2.0.0.9)'],
             'run_requires': [{
                 'requires': ['towel-stuff (0.1)', 'nut']
             }],
             'keywords': [],
         })
     # Write legacy, compare with original
     md.write(path=dfn, legacy=True)
     nmd = Metadata(path=dfn)
     d1 = md.todict()
     d2 = nmd.todict()
     self.assertEqual(d1, d2)
Exemplo n.º 5
0
 def test_check_homepage(self):
     metadata = Metadata()
     metadata['Version'] = '1.0'
     metadata['Name'] = 'vimpdb'
     metadata['Author'] = 'Monty Python'
     metadata.docutils_support = False
     missing, warnings = metadata.check()
     self.assertEqual(missing, ['Home-page'])
Exemplo n.º 6
0
 def test_check_author(self):
     metadata = Metadata()
     metadata['Version'] = '1.0'
     metadata['Name'] = 'vimpdb'
     metadata['Home-page'] = 'http://pypi.python.org'
     metadata.docutils_support = False
     missing, warnings = metadata.check()
     self.assertEqual(missing, ['Author'])
Exemplo n.º 7
0
 def test_fullname(self):
     md = Metadata()
     md['Name'] = 'a b c'
     md['Version'] = '1 0 0'
     s = md.get_fullname()
     self.assertEqual(s, 'a b c-1 0 0')
     s = md.get_fullname(True)
     self.assertEqual(s, 'a-b-c-1.0.0')
Exemplo n.º 8
0
 def test_description_invalid_rst(self):
     # make sure bad rst is well handled in the description attribute
     metadata = Metadata()
     description = ':funkie:`str`'  # mimic Sphinx-specific markup
     metadata['description'] = description
     missing, warnings = metadata.check(restructuredtext=True)
     warning = warnings[0][1]
     self.assertIn('funkie', warning)
Exemplo n.º 9
0
def process_egg(egg):
    logger.debug(egg)
    pkginfo = os.path.join(egg, 'PKG-INFO')
    toplevel = os.path.join(egg, 'top_level.txt')
    if os.path.exists(pkginfo):
        metadata = Metadata(path=pkginfo)
        logger.debug(metadata.todict())

    return metadata
Exemplo n.º 10
0
 def test_check_matchers(self):
     metadata = Metadata()
     metadata['Version'] = 'rr'
     metadata['Name'] = 'vimpdb'
     metadata['Home-page'] = 'http://pypi.python.org'
     metadata['Author'] = 'Monty Python'
     metadata['Requires-dist'] = ['Foo (a)']
     metadata['Obsoletes-dist'] = ['Foo (a)']
     metadata['Provides-dist'] = ['Foo (a)']
     missing, warnings = metadata.check()
     self.assertEqual(len(warnings), 4)
Exemplo n.º 11
0
 def test_register(self):
     "Test registration"
     self.check_pypi_server_available()
     self.check_testdist_available()
     d = os.path.join(HERE, self.testdir)
     data = self.load_package_metadata(d)
     md = Metadata()
     self.assertRaises(MetadataMissingError, self.index.register, md)
     md['Name'] = self.dist_project
     self.assertRaises(MetadataMissingError, self.index.register, md)
     md.update(self.get_index_metadata(data))
     response = self.index.register(md)
     self.assertEqual(response.code, 200)
Exemplo n.º 12
0
    def test_add_requirements(self):
        md = Metadata()
        md.name = 'bar'
        md.version = '0.5'
        md.add_requirements(['foo (0.1.2)'])
        self.assertEqual(md.run_requires, [{'requires': ['foo (0.1.2)']}])

        fn = os.path.join(HERE, 'fake_dists', 'choxie-2.0.0.9.dist-info',
                          LEGACY_METADATA_FILENAME)
        md = Metadata(path=fn)
        md.add_requirements(['foo (0.1.2)'])
        self.assertEqual(set(md.run_requires),
                         set(['towel-stuff (0.1)', 'nut', 'foo (0.1.2)']))
Exemplo n.º 13
0
 def test_register(self):
     "Test registration"
     self.check_pypi_server_available()
     self.check_testdist_available()
     d = os.path.join(HERE, self.testdir)
     data = self.load_package_metadata(d)
     md = Metadata()
     self.assertRaises(MetadataMissingError, self.index.register, md)
     md.name = self.dist_project
     self.assertRaises(MetadataMissingError, self.index.register, md)
     md.version = data['version']
     md.summary = data['summary']
     response = self.index.register(md)
     self.assertEqual(response.code, 200)
Exemplo n.º 14
0
    def test_instantiation(self):
        PKG_INFO = os.path.join(HERE, 'PKG-INFO')
        f = codecs.open(PKG_INFO, 'r', encoding='utf-8')
        try:
            contents = f.read()
        finally:
            f.close()

        fp = StringIO(contents)

        m = Metadata()
        self.assertRaises(MetadataUnrecognizedVersionError, m.items)

        m = Metadata(PKG_INFO)
        self.assertEqual(len(m.items()), 22)

        m = Metadata(fileobj=fp)
        self.assertEqual(len(m.items()), 22)

        m = Metadata(mapping=dict(name='Test', version='1.0'))
        self.assertEqual(len(m.items()), 17)

        d = dict(m.items())
        self.assertRaises(TypeError, Metadata,
                          PKG_INFO, fileobj=fp)
        self.assertRaises(TypeError, Metadata,
                          PKG_INFO, mapping=d)
        self.assertRaises(TypeError, Metadata,
                          fileobj=fp, mapping=d)
        self.assertRaises(TypeError, Metadata,
                          PKG_INFO, mapping=m, fileobj=fp)
Exemplo n.º 15
0
 def test_register(self):
     "Test registration"
     self.check_pypi_server_available()
     self.check_testdist_available()
     d = os.path.join(HERE, self.testdir)
     data = self.load_package_metadata(d)
     md = Metadata()
     self.assertRaises(MetadataMissingError, self.index.register, md)
     md.name = self.dist_project
     self.assertRaises(MetadataMissingError, self.index.register, md)
     md.version = data['version']
     md.summary = data['summary']
     response = self.index.register(md)
     self.assertEqual(response.code, 200)
Exemplo n.º 16
0
 def test_write(self):
     dfn = self.temp_filename()
     # Read legacy, write new
     sfn = os.path.join(HERE, 'fake_dists', 'choxie-2.0.0.9.dist-info',
                        'METADATA')
     md = Metadata(path=sfn)
     md.write(path=dfn)
     with codecs.open(dfn, 'r', 'utf-8') as f:
         data = json.load(f)
     self.assertEqual(data, {
         'metadata_version': '2.0',
         'generator': 'distlib (%s)' % __version__,
         'name': 'choxie',
         'version': '2.0.0.9',
         'license': 'BSD',
         'summary': 'Chocolate with a kick!',
         'description': 'Chocolate with a longer kick!',
         'provides': ['truffles (1.0)', 'choxie (2.0.0.9)'],
         'run_requires': [{'requires': ['towel-stuff (0.1)', 'nut']}],
         'keywords': [],
     })
     # Write legacy, compare with original
     md.write(path=dfn, legacy=True)
     nmd = Metadata(path=dfn)
     d1 = md.todict()
     d2 = nmd.todict()
     self.assertEqual(d1, d2)
Exemplo n.º 17
0
    def test_description_folding(self):
        # make sure the indentation is preserved
        out = StringIO()
        desc = dedent("""\
        example::
              We start here
            and continue here
          and end here.
        """)

        metadata = Metadata()
        metadata['description'] = desc
        metadata.write_file(out)

        folded_desc = desc.replace('\n', '\n' + (7 * ' ') + '|')
        self.assertIn(folded_desc, out.getvalue())
Exemplo n.º 18
0
 def test_upload_documentation(self):
     "Test upload of documentation"
     raise unittest.SkipTest('Skipped, as pythonhosted.org is being '
                             'de-emphasised and this functionality may '
                             'no longer be available')
     self.check_pypi_server_available()
     self.check_testdist_available()
     d = os.path.join(HERE, self.testdir)
     data = self.load_package_metadata(d)
     md = Metadata(mapping=data)
     d = os.path.join(d, 'doc')
     # Non-existent directory
     self.assertRaises(DistlibException, self.index.upload_documentation,
                       md, d + '-random')
     # Directory with no index.html
     self.assertRaises(DistlibException, self.index.upload_documentation,
                       md, HERE)
     response = self.index.upload_documentation(md, d)
     self.assertEqual(response.code, 200)
     if not self.run_test_server:
         url = 'http://packages.python.org/%s/' % self.dist_project
         response = urlopen(url)
         self.assertEqual(response.code, 200)
         data = response.read()
         expected = b'This is dummy documentation'
         self.assertIn(expected, data)
Exemplo n.º 19
0
    def test_metadata_read_write(self):
        PKG_INFO = os.path.join(HERE, 'PKG-INFO')
        metadata = Metadata(PKG_INFO)
        out = StringIO()
        metadata.write_file(out)

        out.seek(0)
        res = Metadata()
        res.read_file(out)
        self.assertEqual(metadata.values(), res.values())
Exemplo n.º 20
0
def convert_egg_info(libdir, prefix):
    files = os.listdir(libdir)
    ei = list(filter(lambda d: d.endswith('.egg-info'), files))[0]
    olddn = os.path.join(libdir, ei)
    di = EGG_INFO_RE.sub('.dist-info', ei)
    newdn = os.path.join(libdir, di)
    os.rename(olddn, newdn)
    files = os.listdir(newdn)
    for oldfn in files:
        pn = os.path.join(newdn, oldfn)
        if oldfn == 'PKG-INFO':
            md = Metadata(path=pn)
            mn = os.path.join(newdn, METADATA_FILENAME)
            md.write(mn)
        os.remove(pn)
    manifest = Manifest(os.path.dirname(libdir))
    manifest.findall()
    dp = DistributionPath([libdir])
    dist = next(dp.get_distributions())
    dist.write_installed_files(manifest.allfiles, prefix)
Exemplo n.º 21
0
def convert_egg_info(libdir, prefix):
    files = os.listdir(libdir)
    ei = list(filter(lambda d: d.endswith('.egg-info'), files))[0]
    olddn = os.path.join(libdir, ei)
    di = EGG_INFO_RE.sub('.dist-info', ei)
    newdn = os.path.join(libdir, di)
    os.rename(olddn, newdn)
    files = os.listdir(newdn)
    for oldfn in files:
        pn = os.path.join(newdn, oldfn)
        if oldfn == 'PKG-INFO':
            md = Metadata(path=pn)
            mn = os.path.join(newdn, METADATA_FILENAME)
            md.write(mn)
        os.remove(pn)
    manifest = Manifest(os.path.dirname(libdir))
    manifest.findall()
    dp = DistributionPath([libdir])
    dist = next(dp.get_distributions())
    dist.write_installed_files(manifest.allfiles, prefix)
Exemplo n.º 22
0
    def test_add_requirements(self):
        md = Metadata()
        md.name = 'bar'
        md.version = '0.5'
        md.add_requirements(['foo (0.1.2)'])
        self.assertEqual(md.run_requires, [{ 'requires': ['foo (0.1.2)']}])

        fn = os.path.join(HERE, 'fake_dists', 'choxie-2.0.0.9.dist-info',
                          'METADATA')
        md = Metadata(path=fn)
        md.add_requirements(['foo (0.1.2)'])
        self.assertEqual(set(md.run_requires),
                         set(['towel-stuff (0.1)', 'nut', 'foo (0.1.2)']))
Exemplo n.º 23
0
    def test_project_url(self):
        metadata = Metadata()
        metadata['Project-URL'] = [('one', 'http://ok')]
        self.assertEqual(metadata['Project-URL'], [('one', 'http://ok')])
        metadata.set_metadata_version()
        self.assertEqual(metadata['Metadata-Version'], '1.2')

        # make sure this particular field is handled properly when written
        fp = StringIO()
        metadata.write_file(fp)
        self.assertIn('Project-URL: one,http://ok', fp.getvalue().split('\n'))

        fp.seek(0)
        metadata = Metadata()
        metadata.read_file(fp)
        self.assertEqual(metadata['Project-Url'], [('one', 'http://ok')])
Exemplo n.º 24
0
 def test_upload_documentation(self):
     "Test upload of documentation"
     self.check_pypi_server_available()
     self.check_testdist_available()
     d = os.path.join(HERE, self.testdir)
     data = self.load_package_metadata(d)
     md = Metadata()
     md.update(self.get_index_metadata(data))
     d = os.path.join(d, 'doc')
     # Non-existent directory
     self.assertRaises(DistlibException, self.index.upload_documentation,
                       md, d+'-random')
     # Directory with no index.html
     self.assertRaises(DistlibException, self.index.upload_documentation,
                       md, HERE)
     response = self.index.upload_documentation(md, d)
     self.assertEqual(response.code, 200)
     if not self.run_test_server:
         url = 'http://packages.python.org/%s/' % self.dist_project
         response = urlopen(url)
         self.assertEqual(response.code, 200)
         data = response.read()
         expected = b'This is dummy documentation'
         self.assertIn(expected, data)
Exemplo n.º 25
0
    def test_read_metadata(self):
        fields = {'name': 'project',
                  'version': '1.0',
                  'description': 'desc',
                  'summary': 'xxx',
                  'download_url': 'http://example.com',
                  'keywords': ['one', 'two'],
                  'requires_dist': ['foo']}

        metadata = Metadata(mapping=fields)
        PKG_INFO = StringIO()
        metadata.write_file(PKG_INFO)
        PKG_INFO.seek(0)

        metadata = Metadata(fileobj=PKG_INFO)

        self.assertEqual(metadata['name'], 'project')
        self.assertEqual(metadata['version'], '1.0')
        self.assertEqual(metadata['summary'], 'xxx')
        self.assertEqual(metadata['download_url'], 'http://example.com')
        self.assertEqual(metadata['keywords'], ['one', 'two'])
        self.assertEqual(metadata['platform'], [])
        self.assertEqual(metadata['obsoletes'], [])
        self.assertEqual(metadata['requires-dist'], ['foo'])
Exemplo n.º 26
0
def _make_distributions(metadata_list, locator_url):
    from distlib.database import Distribution
    from distlib.metadata import Metadata
    distributions = []
    url = locator_url + "/packages/"
    for md in metadata_list:
        try:
            wheel = md["wheel"]
        except KeyError:
            pass
        else:
            md["source_url"] = url + wheel
            del md["wheel"]
        distributions.append(Distribution(Metadata(mapping=md)))
    return distributions
Exemplo n.º 27
0
def convert_egg_info(libdir, prefix, options):
    files = os.listdir(libdir)
    ei = list(filter(lambda d: d.endswith('.egg-info'), files))[0]
    olddn = os.path.join(libdir, ei)
    di = EGG_INFO_RE.sub('.dist-info', ei)
    newdn = os.path.join(libdir, di)
    os.rename(olddn, newdn)
    if options.compatible:
        renames = {}
    else:
        renames = {
            'entry_points.txt': 'EXPORTS',
        }
    excludes = set([
        'SOURCES.txt',          # of no interest in/post WHEEL
        'installed-files.txt',  # replaced by RECORD, so not needed
        'requires.txt',         # added to METADATA, so not needed
        'PKG-INFO',             # replaced by METADATA
        'not-zip-safe',         # not applicable
    ])
    files = os.listdir(newdn)
    metadata = mdname = reqts = None
    for oldfn in files:
        pn = os.path.join(newdn, oldfn)
        if oldfn in renames:
            os.rename(pn, os.path.join(newdn, renames[oldfn]))
        else:
            if oldfn == 'requires.txt':
                with open(pn, 'r') as f:
                    reqts = get_requirements(f.read())
            elif oldfn == 'PKG-INFO':
                metadata = Metadata(path=pn)
                pd = get_package_data(metadata.name, metadata.version)
                metadata = Metadata(mapping=pd['index-metadata'])
                mdname = os.path.join(newdn, 'pydist.json')
            if oldfn in excludes or not options.compatible:
                os.remove(pn)
    if metadata:
        # Use Metadata 1.2 or later
        metadata.provides += ['%s (%s)' % (metadata.name,
                                           metadata.version)]
        # Update if not set up by get_package_data
        if reqts and not metadata.run_requires:
            metadata.dependencies = reqts
        metadata.write(path=mdname)
    manifest = Manifest(os.path.dirname(libdir))
    manifest.findall()
    paths = manifest.allfiles
    dp = DistributionPath([libdir])
    dist = next(dp.get_distributions())
    dist.write_installed_files(paths, prefix)
Exemplo n.º 28
0
def make_metadata(project_dir):
    md = Metadata()
    md.name = input('name >>> ')
    md.version = input('version >>> ')
    md.summary = input('summary >>> ')
    dist_path = os.path.join(project_dir, 'dist-info')
    if not os.path.exists(dist_path):
        os.makedirs(dist_path)
    md.write(path=os.path.join(dist_path,
                               'pydist.json'))
    return md
Exemplo n.º 29
0
    def test_get_file(self):
        # Create a fake dist
        temp_site_packages = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, temp_site_packages)

        dist_name = 'test'
        dist_info = os.path.join(temp_site_packages, 'test-0.1.dist-info')
        os.mkdir(dist_info)

        metadata_path = os.path.join(dist_info, 'pydist.json')
        resources_path = os.path.join(dist_info, 'RESOURCES')
        md = Metadata()
        md.name = 'test'
        md.version = '0.1'
        md.summary = 'test'
        md.write(path=metadata_path)
        test_path = 'test.cfg'

        fd, test_resource_path = tempfile.mkstemp()
        os.close(fd)
        self.addCleanup(os.remove, test_resource_path)

        fp = open(test_resource_path, 'w')
        try:
            fp.write('Config')
        finally:
            fp.close()

        fp = open(resources_path, 'w')
        try:
            fp.write('%s,%s' % (test_path, test_resource_path))
        finally:
            fp.close()

        # Add fake site-packages to sys.path to retrieve fake dist
        self.addCleanup(sys.path.remove, temp_site_packages)
        sys.path.insert(0, temp_site_packages)

        # Try to retrieve resources paths and files
        d = DistributionPath()
        self.assertEqual(d.get_file_path(dist_name, test_path),
                         test_resource_path)
        self.assertRaises(KeyError, d.get_file_path, dist_name, 'i-dont-exist')
Exemplo n.º 30
0
    def test_description(self):
        content = self.get_file_contents('PKG-INFO')
        metadata = Metadata()
        metadata.read_file(StringIO(content))

        # see if we can read the description now
        DESC = os.path.join(HERE, 'LONG_DESC.txt')
        f = open(DESC)
        try:
            wanted = f.read()
        finally:
            f.close()
        self.assertEqual(wanted, metadata['Description'])

        # save the file somewhere and make sure we can read it back
        out = StringIO()
        metadata.write_file(out)
        out.seek(0)

        out.seek(0)
        metadata = Metadata()
        metadata.read_file(out)
        self.assertEqual(wanted, metadata['Description'])
Exemplo n.º 31
0
    def test_metadata_markers(self):
        # see if we can be platform-aware
        content = self.get_file_contents('PKG-INFO')
        metadata = Metadata(platform_dependent=True)

        metadata.read_file(StringIO(content))
        self.assertEqual(metadata['Requires-Dist'], ['bar'])
        metadata['Name'] = "baz; sys.platform == 'blah'"
        # FIXME is None or 'UNKNOWN' correct here?
        # where is that documented?
        self.assertEqual(metadata['Name'], None)

        # test with context
        context = {'sys.platform': 'okook'}
        metadata = Metadata(platform_dependent=True, execution_context=context)
        metadata.read_file(StringIO(content))
        self.assertEqual(metadata['Requires-Dist'], ['foo'])
Exemplo n.º 32
0
    def test_get_file(self):
        # Create a fake dist
        temp_site_packages = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, temp_site_packages)

        dist_name = 'test'
        dist_info = os.path.join(temp_site_packages, 'test-0.1.dist-info')
        os.mkdir(dist_info)

        metadata_path = os.path.join(dist_info, 'pydist.json')
        resources_path = os.path.join(dist_info, 'RESOURCES')
        md = Metadata()
        md.name = 'test'
        md.version = '0.1'
        md.summary = 'test'
        md.write(path=metadata_path)
        test_path = 'test.cfg'

        fd, test_resource_path = tempfile.mkstemp()
        os.close(fd)
        self.addCleanup(os.remove, test_resource_path)

        fp = open(test_resource_path, 'w')
        try:
            fp.write('Config')
        finally:
            fp.close()

        fp = open(resources_path, 'w')
        try:
            fp.write('%s,%s' % (test_path, test_resource_path))
        finally:
            fp.close()

        # Add fake site-packages to sys.path to retrieve fake dist
        self.addCleanup(sys.path.remove, temp_site_packages)
        sys.path.insert(0, temp_site_packages)

        # Try to retrieve resources paths and files
        d = DistributionPath()
        self.assertEqual(d.get_file_path(dist_name, test_path),
                         test_resource_path)
        self.assertRaises(KeyError, d.get_file_path, dist_name,
                          'i-dont-exist')
Exemplo n.º 33
0
 def test_upload(self):
     "Test upload"
     self.check_pypi_server_available()
     self.check_testdist_available()
     if self.run_test_server:
         self.remove_package(self.dist_project, self.dist_version)
     d = os.path.join(HERE, self.testdir)
     data = self.load_package_metadata(d)
     md = Metadata(mapping=data)
     self.index.gpg_home = os.path.join(HERE, 'keys')
     try:
         zip_name = os.path.join(HERE, '%s.zip' % self.testdir)
         self.assertRaises(DistlibException, self.index.upload_file, md,
                           'random-' + zip_name, 'Test User', 'tuser')
         response = self.index.upload_file(md, zip_name, 'Test User',
                                           'tuser')
         self.assertEqual(response.code, 200)
         if self.run_test_server:
             fn = os.path.join(HERE, 'packages', os.path.basename(zip_name))
             self.assertTrue(os.path.exists(fn))
     except HTTPError as e:
         # Treat as success if it already exists
         if e.getcode() != 400 or 'already exists' not in e.msg:
             raise
Exemplo n.º 34
0
    def test_get_file(self):
        # Create a fake dist
        temp_site_packages = tempfile.mkdtemp()
        self.addCleanup(shutil.rmtree, temp_site_packages)

        dist_name = "test"
        dist_info = os.path.join(temp_site_packages, "test-0.1.dist-info")
        os.mkdir(dist_info)

        metadata_path = os.path.join(dist_info, "pydist.json")
        resources_path = os.path.join(dist_info, "RESOURCES")
        md = Metadata()
        md.name = "test"
        md.version = "0.1"
        md.summary = "test"
        md.write(path=metadata_path)
        test_path = "test.cfg"

        fd, test_resource_path = tempfile.mkstemp()
        os.close(fd)
        self.addCleanup(os.remove, test_resource_path)

        fp = open(test_resource_path, "w")
        try:
            fp.write("Config")
        finally:
            fp.close()

        fp = open(resources_path, "w")
        try:
            fp.write("%s,%s" % (test_path, test_resource_path))
        finally:
            fp.close()

        # Add fake site-packages to sys.path to retrieve fake dist
        self.addCleanup(sys.path.remove, temp_site_packages)
        sys.path.insert(0, temp_site_packages)

        # Try to retrieve resources paths and files
        d = DistributionPath()
        self.assertEqual(d.get_file_path(dist_name, test_path), test_resource_path)
        self.assertRaises(KeyError, d.get_file_path, dist_name, "i-dont-exist")
Exemplo n.º 35
0
 def wheel_modifier_ver(self, path_map):
     mdpath = path_map["dummy-0.1.dist-info/pydist.json"]
     md = Metadata(path=mdpath)
     md.version = "0.1+123"
     md.write(path=mdpath)
     return True
Exemplo n.º 36
0
 def wheel_modifier(self, path_map):
     mdpath = path_map["dummy-0.1.dist-info/pydist.json"]
     md = Metadata(path=mdpath)
     md.add_requirements(["numpy"])
     md.write(path=mdpath)
     return True
Exemplo n.º 37
0
 def wheel_modifier(self, path_map):
     mdpath = path_map['dummy-0.1.dist-info/pydist.json']
     md = Metadata(path=mdpath)
     md.add_requirements(['numpy'])
     md.write(path=mdpath)
     return True
Exemplo n.º 38
0
 def test_requirements(self):
     fn = os.path.join(HERE, METADATA_FILENAME)
     md = Metadata(path=fn)
     self.assertEqual(md.meta_requires, [{'requires': ['bar (1.0)']}])
     r = md.get_requirements(md.run_requires)
     self.assertEqual(r, ['foo'])
     r = md.get_requirements(md.run_requires, extras=['certs'])
     self.assertEqual(r, ['foo', 'certifi (0.0.8)'])
     r = md.get_requirements(md.run_requires, extras=['certs', 'ssl'])
     if sys.platform != 'win32':
         self.assertEqual(r, ['foo', 'certifi (0.0.8)'])
     else:
         self.assertEqual(
             set(r), set(['foo', 'certifi (0.0.8)', 'wincertstore (0.1)']))
     for ver in ('2.5', '2.4'):
         env = {'python_version': ver}
         r = md.get_requirements(md.run_requires,
                                 extras=['certs', 'ssl'],
                                 env=env)
         if sys.platform != 'win32':
             self.assertEqual(set(r),
                              set(['foo', 'certifi (0.0.8)', 'ssl (1.16)']))
         elif ver == '2.4':
             self.assertEqual(
                 set(r),
                 set([
                     'certifi (0.0.8)', 'ssl (1.16)', 'wincertstore (0.1)',
                     'foo', 'ctypes (1.0.2)'
                 ]))
         else:
             self.assertEqual(
                 set(r),
                 set([
                     'certifi (0.0.8)', 'ssl (1.16)', 'wincertstore (0.1)',
                     'foo'
                 ]))
     env['sys_platform'] = 'win32'
     r = md.get_requirements(md.run_requires,
                             extras=['certs', 'ssl'],
                             env=env)
     self.assertEqual(
         set(r),
         set([
             'foo', 'certifi (0.0.8)', 'ssl (1.16)', 'ctypes (1.0.2)',
             'wincertstore (0.1)'
         ]))
     env['python_version'] = '2.5'
     r = md.get_requirements(md.run_requires,
                             extras=['certs', 'ssl'],
                             env=env)
     self.assertEqual(
         set(r),
         set(['foo', 'certifi (0.0.8)', 'ssl (1.16)',
              'wincertstore (0.1)']))
     r = md.get_requirements(md.run_requires, extras=[':test:'])
     self.assertEqual(r, ['foo', 'nose'])
     r = md.get_requirements(md.run_requires, extras=[':test:', 'udp'])
     self.assertEqual(set(r), set(['foo', 'nose', 'nose-udp']))
     self.assertEqual(
         md.dependencies, {
             'provides': ['foobar (0.1)'],
             'meta_requires': [{
                 'requires': ['bar (1.0)']
             }],
             'extras': ['ssl', 'certs'],
             'build_requires': [],
             'test_requires': [{
                 'requires': ['nose'],
             }, {
                 'requires': ['nose-udp'],
                 'extra': 'udp',
             }],
             'run_requires': [{
                 'requires': ['foo']
             }, {
                 'requires': ['certifi (0.0.8)'],
                 'extra': 'certs',
             }, {
                 'requires': ['wincertstore (0.1)'],
                 'extra': 'ssl',
                 'environment': "sys_platform=='win32'",
             }, {
                 'requires': ['ctypes (1.0.2)'],
                 'extra':
                 'ssl',
                 'environment':
                 "sys_platform=='win32' and "
                 "python_version=='2.4'",
             }, {
                 'requires': ['ssl (1.16)'],
                 'extra': 'ssl',
                 'environment': "python_version in '2.4, 2.5'",
             }]
         })
Exemplo n.º 39
0
 def wheel_modifier_ver(self, path_map):
     mdpath = path_map['dummy-0.1.dist-info/pydist.json']
     md = Metadata(path=mdpath)
     md.version = '0.1+123'
     md.write(path=mdpath)
     return True
Exemplo n.º 40
0
    def test_init(self):
        "Test initialisation"
        md = Metadata()
        self.assertIsNone(md._legacy)
        self.assertRaises(MetadataMissingError, md.validate)
        md.name = 'dummy'
        self.assertRaises(MetadataMissingError, md.validate)
        md.version = '0.1'
        self.assertRaises(MetadataMissingError, md.validate)
        md.summary = 'Summary'
        md.validate()
        self.assertEqual(md.name, 'dummy')
        self.assertEqual(md.version, '0.1')

        # Initialise from mapping
        md = Metadata(mapping={
                        'metadata_version': '2.0',
                        'name': 'foo',
                        'version': '0.3.4',
                        'summary': 'Summary',
                      })
        md.validate()
        self.assertEqual(md.name, 'foo')
        self.assertEqual(md.version, '0.3.4')
        self.assertEqual(md.run_requires, [])
        self.assertEqual(md.meta_requires, [])
        self.assertEqual(md.provides, ['foo (0.3.4)'])

        # Initialise from legacy metadata
        fn = os.path.join(HERE, 'fake_dists', 'choxie-2.0.0.9.dist-info',
                          'METADATA')
        md = Metadata(path=fn)
        md.validate()
        self.assertIsNotNone(md._legacy)
        self.assertEqual(set(md.run_requires), set(['towel-stuff (0.1)', 'nut']))
        self.assertEqual(md.metadata_version, '1.2')
        self.assertEqual(md.version, '2.0.0.9')
        self.assertEqual(md.meta_requires, [])
        self.assertEqual(set(md.provides),
                         set(['choxie (2.0.0.9)', 'truffles (1.0)']))

        # Initialise from new metadata
        fn = os.path.join(HERE, METADATA_FILENAME)
        md = Metadata(path=fn)
        md.validate()
        self.assertIsNone(md._legacy)
        self.assertEqual(md.metadata_version, '2.0')
        self.assertEqual(md.name, 'foobar')
        self.assertEqual(md.version, '0.1')
        self.assertEqual(md.provides, ['foobar (0.1)'])
Exemplo n.º 41
0
 def test_valid(self):
     """
     Tests to check that missing and invalid metadata is caught.
     """
     md = Metadata()
     self.assertRaises(MetadataMissingError, md.validate)
     try:
         md.name = 'Foo Bar'
     except MetadataInvalidError:
         pass
     md.name = 'foo_bar'
     # Name now OK, but version and summary to be checked
     self.assertRaises(MetadataMissingError, md.validate)
     try:
         md.version = '1.0a'
     except MetadataInvalidError:
         pass
     md.version = '1.0'
     # Name and version now OK, but summary to be checked
     self.assertRaises(MetadataMissingError, md.validate)
     try:
         md.summary = ''
     except MetadataInvalidError:
         pass
     try:
         md.summary = ' ' * 2048
     except MetadataInvalidError:
         pass
     md.summary = ' ' * 2047
     md.validate()
     md.summary = ' '
     md.validate()
Exemplo n.º 42
0
 def wheel_modifier(self, path_map):
     mdpath = path_map['dummy-0.1.dist-info/%s' % LEGACY_METADATA_FILENAME]
     md = Metadata(path=mdpath)
     md.add_requirements(['numpy'])
     md.write(path=mdpath, legacy=True)
     return True
Exemplo n.º 43
0
 def test_valid(self):
     """
     Tests to check that missing and invalid metadata is caught.
     """
     md = Metadata()
     self.assertRaises(MetadataMissingError, md.validate)
     try:
         md.name = 'Foo Bar'
     except MetadataInvalidError:
         pass
     md.name = 'foo_bar'
     # Name now OK, but version and summary to be checked
     self.assertRaises(MetadataMissingError, md.validate)
     try:
         md.version = '1.0a'
     except MetadataInvalidError:
         pass
     md.version = '1.0'
     # Name and version now OK, but summary to be checked
     self.assertRaises(MetadataMissingError, md.validate)
     try:
         md.summary = ''
     except MetadataInvalidError:
         pass
     try:
         md.summary = ' ' * 2048
     except MetadataInvalidError:
         pass
     md.summary = ' ' * 2047
     md.validate()
     md.summary = ' '
     md.validate()
Exemplo n.º 44
0
 def wheel_modifier_ver(self, path_map):
     mdpath = path_map['dummy-0.1.dist-info/%s' % LEGACY_METADATA_FILENAME]
     md = Metadata(path=mdpath)
     md.version = '0.1+123'
     md.write(path=mdpath, legacy=True)
     return True
Exemplo n.º 45
0
 def test_requirements(self):
     fn = os.path.join(HERE, METADATA_FILENAME)
     md = Metadata(path=fn)
     self.assertEqual(md.meta_requires, [{'requires': ['bar (1.0)']}])
     r = md.get_requirements(md.run_requires)
     self.assertEqual(r, ['foo'])
     r = md.get_requirements(md.run_requires, extras=['certs'])
     self.assertEqual(r, ['foo', 'certifi (0.0.8)'])
     r = md.get_requirements(md.run_requires, extras=['certs', 'ssl'])
     if sys.platform != 'win32':
         self.assertEqual(r, ['foo', 'certifi (0.0.8)'])
     else:
         self.assertEqual(set(r), set(['foo', 'certifi (0.0.8)',
                                       'wincertstore (0.1)']))
     for ver in ('2.5', '2.4'):
         env = {'python_version': ver}
         r = md.get_requirements(md.run_requires,
                                 extras=['certs', 'ssl'], env=env)
         if sys.platform != 'win32':
             self.assertEqual(set(r), set(['foo', 'certifi (0.0.8)',
                                           'ssl (1.16)']))
         elif ver == '2.4':
             self.assertEqual(set(r), set(['certifi (0.0.8)', 'ssl (1.16)',
                                           'wincertstore (0.1)', 'foo',
                                           'ctypes (1.0.2)']))
         else:
             self.assertEqual(set(r), set(['certifi (0.0.8)', 'ssl (1.16)',
                                           'wincertstore (0.1)', 'foo']))
     env['sys_platform'] = 'win32'
     r = md.get_requirements(md.run_requires,
                             extras=['certs', 'ssl'], env=env)
     self.assertEqual(set(r), set(['foo', 'certifi (0.0.8)', 'ssl (1.16)',
                                   'ctypes (1.0.2)', 'wincertstore (0.1)']))
     env['python_version'] = '2.5'
     r = md.get_requirements(md.run_requires,
                             extras=['certs', 'ssl'], env=env)
     self.assertEqual(set(r), set(['foo', 'certifi (0.0.8)', 'ssl (1.16)',
                                   'wincertstore (0.1)']))
     r = md.get_requirements(md.run_requires, extras=[':test:'])
     self.assertEqual(r, ['foo', 'nose'])
     r = md.get_requirements(md.run_requires, extras=[':test:', 'udp'])
     self.assertEqual(set(r), set(['foo', 'nose', 'nose-udp']))
     self.assertEqual(md.dependencies, {
         'provides': ['foobar (0.1)'],
         'meta_requires': [
             {
                 'requires': ['bar (1.0)']
             }
         ],
         'extras': ['ssl', 'certs'],
         'build_requires': [],
         'test_requires': [
             {
                 'requires': ['nose'],
             },
             {
                 'requires': ['nose-udp'],
                 'extra': 'udp',
             }
         ],
         'run_requires': [
             {
                 'requires': ['foo']
             },
             {
                 'requires': ['certifi (0.0.8)'],
                 'extra': 'certs',
             },
             {
                 'requires': ['wincertstore (0.1)'],
                 'extra': 'ssl',
                 'environment': "sys_platform=='win32'",
             },
             {
                 'requires': ['ctypes (1.0.2)'],
                 'extra': 'ssl',
                 'environment': "sys_platform=='win32' and "
                                "python_version=='2.4'",
             },
             {
                 'requires': ['ssl (1.16)'],
                 'extra': 'ssl',
                 'environment': "python_version in '2.4, 2.5'",
             }
         ]
     })
Exemplo n.º 46
0
    def test_init(self):
        "Test initialisation"
        md = Metadata()
        self.assertIsNone(md._legacy)
        self.assertRaises(MetadataMissingError, md.validate)
        md.name = 'dummy'
        self.assertRaises(MetadataMissingError, md.validate)
        md.version = '0.1'
        self.assertRaises(MetadataMissingError, md.validate)
        md.summary = 'Summary'
        md.validate()
        self.assertEqual(md.name, 'dummy')
        self.assertEqual(md.version, '0.1')

        # Initialise from mapping
        md = Metadata(
            mapping={
                'metadata_version': '2.0',
                'name': 'foo',
                'version': '0.3.4',
                'summary': 'Summary',
            })
        md.validate()
        self.assertEqual(md.name, 'foo')
        self.assertEqual(md.version, '0.3.4')
        self.assertEqual(md.run_requires, [])
        self.assertEqual(md.meta_requires, [])
        self.assertEqual(md.provides, ['foo (0.3.4)'])

        # Initialise from legacy metadata
        fn = os.path.join(HERE, 'fake_dists', 'choxie-2.0.0.9.dist-info',
                          LEGACY_METADATA_FILENAME)
        md = Metadata(path=fn)
        md.validate()
        self.assertIsNotNone(md._legacy)
        self.assertEqual(set(md.run_requires),
                         set(['towel-stuff (0.1)', 'nut']))
        self.assertEqual(md.metadata_version, '1.2')
        self.assertEqual(md.version, '2.0.0.9')
        self.assertEqual(md.meta_requires, [])
        self.assertEqual(set(md.provides),
                         set(['choxie (2.0.0.9)', 'truffles (1.0)']))

        # Initialise from new metadata
        fn = os.path.join(HERE, METADATA_FILENAME)
        md = Metadata(path=fn)
        md.validate()
        self.assertIsNone(md._legacy)
        self.assertEqual(md.metadata_version, '2.0')
        self.assertEqual(md.name, 'foobar')
        self.assertEqual(md.version, '0.1')
        self.assertEqual(md.provides, ['foobar (0.1)'])
Exemplo n.º 47
0
 def test_fields(self):
     md = Metadata()
     self.assertTrue(md.is_multi_field('Requires-Dist'))
     self.assertFalse(md.is_multi_field('Name'))
     self.assertTrue(md.is_field('Obsoleted-By'))
     self.assertFalse(md.is_field('Frobozz'))