예제 #1
0
 def test_comparaison_lt_or_gt(self):
     """Test strict comparaison between versions
     """
     v1 = Version.parse('2a1')
     v2 = Version.parse('2b1')
     self.assertTrue(v1 < v2)
     self.assertFalse(v1 > v2)
     self.assertTrue(v2 > v1)
     self.assertFalse(v2 < v1)
예제 #2
0
 def test_comparaison_latest(self):
     """Test comparaison with latest version
     """
     v1 = Version.parse('1.0')
     v2 = Version.parse('9999999999999.0')
     latest = Version.parse('latest')
     self.assertTrue(v1 < v2)
     self.assertTrue(v1 < latest)
     self.assertTrue(v2 < latest)
예제 #3
0
 def test_comparaison_le_or_ge(self):
     """Test comparaison beween versions
     """
     v1 = Version.parse('2a1')
     v2 = Version.parse('2b1')
     self.assertTrue(v1 <= v2)
     self.assertFalse(v1 >= v2)
     self.assertTrue(v2 >= v1)
     self.assertFalse(v2 <= v1)
예제 #4
0
 def test_comparaison_equality(self):
     """Test equality comparaison between versions
     """
     v1 = Version.parse('1.2')
     v2 = Version.parse('1.2')
     v3 = Version.parse('3.3')
     self.assertTrue(v1 == v2)
     self.assertFalse(v1 != v2)
     self.assertTrue(v1 != v3)
     self.assertFalse(v1 == v3)
예제 #5
0
    def load(self):
        egginfo = self.configuration['egginfo']
        self.distribution.name = egginfo['name'].as_text()
        self.distribution.version = Version.parse(egginfo['version'].as_text())
        self.distribution.summary = egginfo.get('summary', '').as_text()
        self.distribution.author = egginfo.get('author', '').as_text()
        self.distribution.author_email = egginfo.get(
            'author_email', '').as_text()
        self.distribution.license = egginfo.get('license', '').as_text()
        self.distribution.classifiers = egginfo.get('classifier', '').as_list()
        self.distribution.format = None
        self.distribution.pyversion = None
        self.distribution.platform = None
        self.distribution.requirements = Requirements.parse(
            egginfo.get('requires', '').as_list())
        self.distribution.extras = {}

        # Source path of the extension
        path = os.path.join(self.path, egginfo.get('source', '.').as_text())
        if not os.path.isdir(path):
            raise PackageError(path, 'Invalid source path "%s"' % path)
        self.distribution.path = os.path.abspath(path)
        self.distribution.package_path = self.path

        # Entry points
        self.distribution.entry_points = {}
        entry_points = egginfo.get('entry_points', None)
        if entry_points is not None:
            for category_name in entry_points.as_list():
                info = self.configuration['entry_points:' + category_name]
                self.distribution.entry_points[category_name] = info.as_dict()

        return self.distribution
예제 #6
0
 def get(self, requirement, default=None):
     if self._activated:
         __status__ = u"Looking version for %s in Known Good Set %s." % (
             str(requirement), self.name)
         if requirement.key in self.versions:
             self.used.add(requirement.key)
             return Version.parse(self.versions[requirement.key].version)
     return default
예제 #7
0
 def __init__(self, context, requirement):
     self.context = context
     self.name = requirement.name
     self.key = requirement.key
     if (len(requirement.versions) == 1 and
         requirement.versions[0][0] == operator.eq):
         self.version = requirement.versions[0][1]
     else:
         self.version = Version.parse('latest')
     self.extras = {}
     for extra in requirement.extras:
         self.extras[extra] = Requirements()
예제 #8
0
 def load(self):
     pkg_info = read_pkg_info(self.egg_info)
     self.distribution.package_path = self.path
     self.distribution.name = pkg_info['name']
     self.distribution.version = Version.parse(pkg_info['version'])
     self.distribution.summary = pkg_info.get('summary', '')
     self.distribution.author = pkg_info.get('author', '')
     self.distribution.author_email = pkg_info.get('author-email', '')
     self.distribution.license = pkg_info.get('license', '')
     self.distribution.classifiers = pkg_info.get('classifier', '')
     self.distribution.path = os.path.abspath(self.source_path)
     self.distribution.entry_points = read_pkg_entry_points(self.egg_info)
     self.distribution.requirements, self.distribution.extras = \
         read_pkg_requires(self.egg_info)
     self.distribution.extensions = read_native_libs(self.egg_info)
     return self.distribution
예제 #9
0
def parse_filename(link, **extra):
    """Parse package information encoded inside a filename.
    """
    info = RELEASE_TARBALL.match(link)
    if info:
        try:
            result = {'name': info.group('name'),
                      'version': Version.parse(info.group('version')),
                      'format': info.group('format'),
                      'pyversion': info.group('pyversion'),
                      'platform':  info.group('platform')}
        except InvalidVersion:
            logger.debug(
                u"Link to '%s' seems to be a package, "
                u"but can't make sense out of it, ignoring it." % link)
            return {}
        result.update(extra)
        return result
    return {}
예제 #10
0
 def __init__(self, name=None, version=None, path=None,
              pyversion=None, platform=None, url=None,
              format=None, package_path=None):
     self.name = name
     self.version = Version.parse(version)
     self.summary = ''
     self.author = ''
     self.author_email = ''
     self.license = ''
     self.classifiers = []
     self.format = format
     self.url = url
     self.pyversion = pyversion
     self.platform = platform
     self.path = path
     self.package_path = package_path or path
     self.entry_points = {}
     self.requirements = []
     self.extras = {}
     self.extensions = []
예제 #11
0
    def load(self, distribution, interpretor):
        distribution.package_path = self.path

        # Read extracted configuration
        config = Configuration.read_lines(self.source.splitlines, self.path)
        setuptool_config = config['setuptools']
        distribution.version = Version.parse(
            setuptool_config['version'].as_text())

        # Look for requirements
        if 'install_requires' in setuptool_config:
            distribution.requirements = Requirements.parse(
                setuptool_config['install_requires'].as_list())
        if 'extras_require' in setuptool_config:
            extra_config = config[setuptool_config['extras_require'].as_text()]
            for extra, extra_requirements in extra_config.items():
                distribution.extras[extra] = Requirements.parse(
                    extra_requirements.as_list())

        # Look for source directory
        if 'package_dir' in setuptool_config:
            package_config = config[
                setuptool_config['package_dir'].as_text()]
            if '_' in package_config:
                prefix = package_config['_'].as_text()
                distribution.path = os.path.join(self.path, prefix)
        if 'description' in setuptool_config:
            distribution.description = setuptool_config['description'].as_text()
        if 'license' in setuptool_config:
            distribution.license = setuptool_config['license'].as_text()
        if 'author' in setuptool_config:
            distribution.author = setuptool_config['author'].as_text()
        if 'autor_email' in setuptool_config:
            distribution.author_email = \
                setuptool_config['author_email'].as_text()
        if 'ext_modules' in setuptool_config:
            libraries = self.extensions(prefix, setuptool_config)
            create_autotools(distribution, prefix, libraries)
            distribution.extensions = libraries
        return distribution
예제 #12
0
    def test_parse(self):
        """Test version parsing
        """
        for version in ['1.2a1', '0.12', '1.10b2']:
            parsed_version = Version.parse(version)
            self.assertEqual(str(parsed_version), version)
        self.assertEqual(str(Version.parse('3.5.0-1')), '3.5-1')
        self.assertEqual(str(Version.parse('3.5final-1')), '3.5-1')
        self.assertEqual(str(Version.parse('3.5alpha2')), '3.5a2')
        self.assertEqual(str(Version.parse('3.5beta1')), '3.5b1')
        self.assertEqual(str(Version.parse('3.5.post42')), '3.5-42')
        self.assertEqual(str(Version.parse('1b2.2')), '1.0b2.2')
        self.assertEqual(str(Version.parse('1.dev')), '1.0dev')
        self.assertEqual(str(Version.parse('1.0dev')), '1.0dev')
        self.assertEqual(str(Version.parse('1.0.0dev')), '1.0dev')
        self.assertEqual(str(Version.parse('10')), '10.0')
        self.assertEqual(str(Version.parse('latest')), 'latest')

        self.assertRaises(InvalidVersion, Version.parse, 'lol.best-of-world')
예제 #13
0
 def test_parse_filename(self):
     """Test installer name parsing
     """
     self.assertEqual(
         parse_filename('ZODB3-3.9.1a10.tar.gz'),
         {'name': 'ZODB3', 'format': 'tar.gz',
          'pyversion': None, 'platform': None,
          'version': Version.parse('3.9.1a10')})
     self.assertEqual(
         parse_filename('setup-0.1dev.tar.gz'),
         {'name': 'setup', 'format': 'tar.gz',
          'pyversion': None, 'platform': None,
          'version': Version.parse('0.1dev')})
     self.assertEqual(
         parse_filename('setup-0.1dev-py2.4.tar.gz'),
         {'name': 'setup', 'format': 'tar.gz',
          'pyversion': '2.4', 'platform': None,
          'version': Version.parse('0.1dev')})
     self.assertEqual(
         parse_filename('setup-2.0beta1-py2.6.tar.gz'),
         {'name': 'setup', 'format': 'tar.gz',
          'pyversion': '2.6', 'platform': None,
          'version': Version.parse('2.0b1')})
     self.assertEqual(
         parse_filename('setup-2.0-py2.6-linux.tar.gz'),
         {'name': 'setup', 'format': 'tar.gz',
          'pyversion': '2.6', 'platform': 'linux',
          'version': Version.parse('2.0')})
     self.assertEqual(
         parse_filename('setup-1.0-py2.7-win32.tar.gz'),
         {'name': 'setup', 'format': 'tar.gz',
          'pyversion': '2.7', 'platform': 'win32',
          'version': Version.parse('1.0')})
     self.assertEqual(
         parse_filename('setup-1.0a1-py2.7.tgz'),
         {'name': 'setup', 'format': 'tgz',
          'pyversion': '2.7', 'platform': None,
          'version': Version.parse('1.0a1')})
     self.assertEqual(
         parse_filename('setup-1.0-py2.7.zip'),
         {'name': 'setup', 'format': 'zip',
          'pyversion': '2.7', 'platform': None,
          'version': Version.parse('1.0')})
     self.assertEqual(
         parse_filename('setup-1.0-py2.7-win32.egg'),
         {'name': 'setup', 'format': 'egg',
          'pyversion': '2.7', 'platform': 'win32',
          'version': Version.parse('1.0')})
     self.assertEqual(
         parse_filename('setup-1.0-py2.7-win-amd64.egg'),
         {'name': 'setup', 'format': 'egg',
          'pyversion': '2.7', 'platform': 'win-amd64',
          'version': Version.parse('1.0')})
     self.assertEqual(
         parse_filename('setup-3.5.0-1.tar.gz'),
         {'name': 'setup', 'format': 'tar.gz',
          'pyversion': None, 'platform': None,
          'version': Version.parse('3.5-1')})
     self.assertEqual(
         parse_filename('setup-3.5.0-1-py2.6-mac.tar.gz'),
         {'name': 'setup', 'format': 'tar.gz',
          'pyversion': '2.6', 'platform': 'mac',
          'version': Version.parse('3.5-1')})
     self.assertEqual(
         parse_filename('setup-3.5.0-1-py2.6-macosx-10.6-x86_64.tar.gz'),
         {'name': 'setup', 'format': 'tar.gz',
          'pyversion': '2.6', 'platform': 'macosx-10.6-x86_64',
          'version': Version.parse('3.5-1')})
     self.assertEqual(
         parse_filename('setuptools-0.6c11-py2.6.egg'),
         {'name': 'setuptools', 'format': 'egg',
          'pyversion': '2.6', 'platform': None,
          'version': Version.parse('0.6c11')})
     self.assertEqual(
         parse_filename('elementtree-1.2.7-20070827.zip'),
         {'name': 'elementtree', 'format': 'zip',
          'pyversion': None, 'platform': None,
          'version': Version.parse('1.2.7-20070827')})
     self.assertEqual(
         parse_filename('elementtree-1.2.7-20070827-preview.zip'),
         {'name': 'elementtree', 'format': 'zip',
          'pyversion': None, 'platform': None,
          'version': Version.parse('1.2.7-20070827-preview')})
     self.assertEqual(
         parse_filename('python-dateutil-1.4.tar.gz'),
         {'name': 'python-dateutil', 'format': 'tar.gz',
          'pyversion': None, 'platform': None,
          'version': Version.parse('1.4')})
     self.assertEqual(
         parse_filename('python-dateutil-1.4dev-r42.tar.gz'),
         {'name': 'python-dateutil', 'format': 'tar.gz',
          'pyversion': None, 'platform': None,
          'version': Version.parse('1.4dev-r42')})
     self.assertEqual(
         parse_filename('python-dateutil-1.4dev-r42-py2.5.tar.gz'),
         {'name': 'python-dateutil', 'format': 'tar.gz',
          'pyversion': '2.5', 'platform': None,
          'version': Version.parse('1.4dev-r42')})
     self.assertEqual(
         parse_filename('python-dateutil-1.4dev-r42-py2.5-win.tar.gz'),
         {'name': 'python-dateutil', 'format': 'tar.gz',
          'pyversion': '2.5', 'platform': 'win',
          'version': Version.parse('1.4dev-r42')})
     self.assertEqual(
         parse_filename('python-dateutil-1.4dev-r42-py2.5-win-i386.tar.gz'),
         {'name': 'python-dateutil', 'format': 'tar.gz',
          'pyversion': '2.5', 'platform': 'win-i386',
          'version': Version.parse('1.4dev-r42')})
     self.assertEqual(
         parse_filename('five.megrok.z3cform-0.1a1-infrae.tar.gz'),
         {'name': 'five.megrok.z3cform', 'format': 'tar.gz',
          'pyversion': None, 'platform': None,
          'version': Version.parse('0.1a1-infrae')})
     self.assertEqual(
         parse_filename('five.megrok.z3cform-0.1a1-infrae-all.tar.gz'),
         {'name': 'five.megrok.z3cform', 'format': 'tar.gz',
          'pyversion': None, 'platform': None,
          'version': Version.parse('0.1a1-infrae-all')})
     self.assertEqual(
         parse_filename(
             'five.megrok.z3cform-0.1a1-infrae-py2.6-linux.tar.gz'),
         {'name': 'five.megrok.z3cform', 'format': 'tar.gz',
          'pyversion': '2.6', 'platform': 'linux',
          'version': Version.parse('0.1a1-infrae')})
     self.assertEqual(
         parse_filename(
             'five.megrok.z3cform-0.1a1-ext-all-py2.6-linux.tar.gz'),
         {'name': 'five.megrok.z3cform', 'format': 'tar.gz',
          'pyversion': '2.6', 'platform': 'linux',
          'version': Version.parse('0.1a1-ext-all')})
     self.assertEqual(
         parse_filename(
             'five.megrok.z3cform-0.1a1-ext-all-py2.6-linux-x86_64.tar.gz'),
         {'name': 'five.megrok.z3cform', 'format': 'tar.gz',
          'pyversion': '2.6', 'platform': 'linux-x86_64',
          'version': Version.parse('0.1a1-ext-all')})