Exemplo n.º 1
0
    def test_versions(self):
        metadata = DistributionMetadata()
        metadata['Obsoletes'] = 'ok'
        self.assertEqual(metadata['Metadata-Version'], '1.1')

        del metadata['Obsoletes']
        metadata['Obsoletes-Dist'] = 'ok'
        self.assertEqual(metadata['Metadata-Version'], '1.2')

        self.assertRaises(MetadataConflictError, metadata.set,
                          'Obsoletes', 'ok')

        del metadata['Obsoletes']
        del metadata['Obsoletes-Dist']
        metadata['Version'] = '1'
        self.assertEqual(metadata['Metadata-Version'], '1.0')

        PKG_INFO = os.path.join(os.path.dirname(__file__),
                                'SETUPTOOLS-PKG-INFO')
        metadata.read_file(StringIO(open(PKG_INFO).read()))
        self.assertEqual(metadata['Metadata-Version'], '1.0')

        PKG_INFO = os.path.join(os.path.dirname(__file__),
                                'SETUPTOOLS-PKG-INFO2')
        metadata.read_file(StringIO(open(PKG_INFO).read()))
        self.assertEqual(metadata['Metadata-Version'], '1.1')

        metadata.version = '1.618'
        self.assertRaises(MetadataUnrecognizedVersionError, metadata.keys)
Exemplo n.º 2
0
 def test_mapper_apis(self):
     PKG_INFO = os.path.join(os.path.dirname(__file__), 'PKG-INFO')
     content = open(PKG_INFO).read()
     content = content % sys.platform
     metadata = DistributionMetadata()
     metadata.read_file(StringIO(content))
     self.assertIn('Version', metadata.keys())
     self.assertIn('0.5', metadata.values())
     self.assertIn(('Version', '0.5'), metadata.items())
Exemplo n.º 3
0
    def test_metadata_read_write(self):

        PKG_INFO = os.path.join(os.path.dirname(__file__), 'PKG-INFO')
        metadata = DistributionMetadata(PKG_INFO)
        out = StringIO()
        metadata.write_file(out)
        out.seek(0)
        res = DistributionMetadata()
        res.read_file(out)
        for k in metadata.keys():
            self.assertTrue(metadata[k] == res[k])
Exemplo n.º 4
0
    def test_metadata_markers(self):
        # see if we can be platform-aware
        PKG_INFO = os.path.join(os.path.dirname(__file__), 'PKG-INFO')
        content = open(PKG_INFO).read()
        content = content % sys.platform
        metadata = DistributionMetadata(platform_dependant=True)
        metadata.read_file(StringIO(content))
        self.assertEquals(metadata['Requires-Dist'], ['bar'])

        # test with context
        context = {'sys.platform': 'okook'}
        metadata = DistributionMetadata(platform_dependant=True,
                                        execution_context=context)
        metadata.read_file(StringIO(content))
        self.assertEquals(metadata['Requires-Dist'], ['foo'])
Exemplo n.º 5
0
    def test_project_urls(self):
        # project-url is a bit specific, make sure we write it
        # properly in PKG-INFO
        metadata = DistributionMetadata()
        metadata['Version'] = '1.0'
        metadata['Project-Url'] = [('one', 'http://ok')]
        self.assertEqual(metadata['Project-Url'], [('one', 'http://ok')])
        file_ = StringIO()
        metadata.write_file(file_)
        file_.seek(0)
        res = file_.read().split('\n')
        self.assertIn('Project-URL: one,http://ok', res)

        file_.seek(0)
        metadata = DistributionMetadata()
        metadata.read_file(file_)
        self.assertEqual(metadata['Project-Url'], [('one', 'http://ok')])
Exemplo n.º 6
0
    def test_description(self):
        PKG_INFO = os.path.join(os.path.dirname(__file__), 'PKG-INFO')
        content = open(PKG_INFO).read()
        content = content % sys.platform
        metadata = DistributionMetadata()
        metadata.read_file(StringIO(content))

        # see if we can read the description now
        DESC = os.path.join(os.path.dirname(__file__), 'LONG_DESC.txt')
        wanted = open(DESC).read()
        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)
        metadata.read_file(out)
        self.assertEqual(wanted, metadata['Description'])
Exemplo n.º 7
0
    def test_metadata_markers(self):
        # see if we can be platform-aware
        PKG_INFO = os.path.join(os.path.dirname(__file__), 'PKG-INFO')
        content = open(PKG_INFO).read()
        content = content % sys.platform
        metadata = DistributionMetadata(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.assertEquals(metadata['Name'], None)

        # test with context
        context = {'sys.platform': 'okook'}
        metadata = DistributionMetadata(platform_dependent=True,
                                        execution_context=context)
        metadata.read_file(StringIO(content))
        self.assertEqual(metadata['Requires-Dist'], ['foo'])
Exemplo n.º 8
0
    def test_versions(self):
        metadata = DistributionMetadata()
        metadata['Obsoletes'] = 'ok'
        self.assertEquals(metadata['Metadata-Version'], '1.1')

        del metadata['Obsoletes']
        metadata['Obsoletes-Dist'] = 'ok'
        self.assertEquals(metadata['Metadata-Version'], '1.2')

        del metadata['Obsoletes-Dist']
        metadata['Version'] = '1'
        self.assertEquals(metadata['Metadata-Version'], '1.0')

        PKG_INFO = os.path.join(os.path.dirname(__file__),
                                'SETUPTOOLS-PKG-INFO')
        metadata.read_file(StringIO(open(PKG_INFO).read()))
        self.assertEquals(metadata['Metadata-Version'], '1.0')

        PKG_INFO = os.path.join(os.path.dirname(__file__),
                                'SETUPTOOLS-PKG-INFO2')
        metadata.read_file(StringIO(open(PKG_INFO).read()))
        self.assertEquals(metadata['Metadata-Version'], '1.1')
Exemplo n.º 9
0
def create_projects(env, **proj_metadata):
    """
    Create git repositories and an index for projects within env.

    env should be an Environment

    proj_metadata should be a dict mapping project names to
    DistributionMetadata objects representing their metadata.  

    Returns (index,projdirs) where:

    * index is the path to the locally-generated index

    * projdirs is a dict mapping project names to the paths to the
      locally-generated git repositories.
    """
    from distutils2.metadata import DistributionMetadata

    index = env.scratch_path/'index'
    mktree(index)
    repo = env.scratch_path/'repo'
    
    open(index/'index.html', 'w').write(
        '\n'.join(
            ['<html><head><title>Simple Index</title></head><body>']
            + [ '<a href=%r/>%s</a><br/>' % (p,p) for p in proj_metadata ]
            + ['</body></html>'])
        )
    
    projects = {}

    for p,metadata in proj_metadata.items():

        mktree(index/p)
        
        root = repo/p
        projects[p] = Project(p, root, env)
        mktree(root)

        env.run('git', 'init', cwd = root)

        dot_ryppl = root/'.ryppl'

        if isinstance(metadata, basestring):
            m = DistributionMetadata()
            m.read_file(StringIO(metadata))
            metadata = m
        elif isinstance(metadata, dict):
            m = DistributionMetadata()
            for k,v in metadata.items():
                m[k] = v
            metadata = m

        metadata['Name'] = p
        if metadata['Version'] == 'UNKNOWN':
            metadata['Version'] = '0.9'
        if metadata['Requires-Python'] == 'UNKNOWN':
            metadata['Requires-Python'] = '>2.0'
            

        mktree(dot_ryppl)
        metadata.write(dot_ryppl/'METADATA')

        # mktree(root/p)
        # open(root/p/'__init__.py', 'w').write('print "importing module %s"' % p)

        env.run('git', 'add', '*', Path('.ryppl')/'*', cwd = root)
        env.run('git', 'commit', '-m', 'initial checkin', cwd = root)

        repo_url = pathname2url(root)

        open(index/p/'index.html', 'w').write(
            '<html><head><title>Links for %(p)s</title></head>'
            '<body>'
            '<h1>Links for %(p)s</h1>'
            '<a href="git+file://%(repo_url)s#egg=%(p)s">Git Repository</a><br/>'
            '</body></html>'
            % locals()
            )
        
    return 'file://'+pathname2url(index),projects
Exemplo n.º 10
0
def create_projects(env, **projects):
    from distutils2.metadata import DistributionMetadata

    index = env.scratch_path / "index"
    mktree(index)
    repo = env.scratch_path / "repo"

    open(index / "index.html", "w").write(
        "\n".join(
            ["<html><head><title>Simple Index</title></head><body>"]
            + ["<a href=%r/>%s</a><br/>" % (p, p) for p in projects]
            + ["</body></html>"]
        )
    )

    paths = {}

    for p, metadata in projects.items():

        mktree(index / p)

        root = repo / p
        paths[p] = root
        mktree(root)

        env.run("git", "init", cwd=root)

        dot_ryppl = root / ".ryppl"

        if isinstance(metadata, basestring):
            m = DistributionMetadata()
            m.read_file(StringIO(metadata))
            metadata = m
        elif isinstance(metadata, dict):
            m = DistributionMetadata()
            for k, v in metadata.items():
                m[k] = v
            metadata = m

        metadata["Name"] = p
        if metadata["Version"] == "UNKNOWN":
            metadata["Version"] = "0.9"
        if metadata["Requires-Python"] == "UNKNOWN":
            metadata["Requires-Python"] = ">2.0"

        mktree(dot_ryppl)
        metadata.write(dot_ryppl / "METADATA")

        # mktree(root/p)
        # open(root/p/'__init__.py', 'w').write('print "importing module %s"' % p)

        env.run("git", "add", "*", Path(".ryppl") / "*", cwd=root)
        env.run("git", "commit", "-m", "initial checkin", cwd=root)

        repo_url = pathname2url(root)

        open(index / p / "index.html", "w").write(
            "<html><head><title>Links for %(p)s</title></head>"
            "<body>"
            "<h1>Links for %(p)s</h1>"
            '<a href="git+file://%(repo_url)s#egg=%(p)s">Git Repository</a><br/>'
            "</body></html>" % locals()
        )

    return index, paths