Exemple #1
0
def read_pkg_requires(path):
    """Read a package requires.txt
    """
    try:
        data = open(os.path.join(path, 'requires.txt'), 'r')
    except IOError:
        return Requirements(), {}
    lines = []
    requires = []
    extras = {}
    current = None
    for line in data.readlines():
        line = line.strip()
        if not line or line[0] in '#;':
            continue
        if line[0] == '[' and line[-1] == ']':
            # New extra
            if current is None:
                requires = lines
            else:
                extras[current] = Requirements.parse(lines)
            lines = []
            current = line[1:-1]
        else:
            lines.append(line)
    # Store last extra
    if current is None:
        requires = lines
    else:
        extras[current] = Requirements.parse(lines)
    return Requirements.parse(requires), extras
    def test_add_fail(self):
        """Test adding two incompatible set of requirements together
        """
        reqs = Requirements.parse(
            ['zeam.form.base',
             'zeam.test>=2.1'])
        other_reqs = Requirements.parse(
            ['zeam.form.ztk[test] >=1.0b1',
             'zeam.test <=1.0'])

        self.assertRaises(IncompatibleVersion, operator.add, reqs, other_reqs)
Exemple #3
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
Exemple #4
0
 def add_recipe_packages(self, names):
     """Install a list of packages required for the parts to
     execute. Packages are enabled in the current Python
     environment so that the parts can use them directly.
     """
     # This must be used only to install recipe and recipe dependency.
     requirements = Requirements.parse(names)
     install_set = self._installer(
         requirements,
         strategy=self.strategy)
     for requirement in requirements:
         install_set.get(requirement.key).activate()
    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
    def test_add(self):
        """Test adding two sets of requirements together
        """
        reqs = Requirements.parse(
            ['zeam.form.base',
             'zeam.test>=2.1',
             'zope.testing<=3.7dev'])
        self.assertRaises(ValueError, operator.add, reqs, 42)
        self.assertRaises(ValueError, operator.add, reqs, "zeam >= 1.1")

        other_reqs = Requirements.parse(
            ['zeam.form.ztk[test] >=1.0b1',
             'zeam.test <=4.0, !=3.0'])

        result_reqs = reqs + other_reqs

        self.assertEqual(
            str(result_reqs).split('\n'),
            ['zeam.form.base',
             'zeam.form.ztk[test]>=1.0b1',
             'zeam.test>=2.1,!=3.0,<=4.0',
             'zope.testing<=3.7dev'])
    def test_parse(self):
        """Test requirements parsing and printing
        """
        reqs = Requirements.parse([])
        self.assertEqual(len(reqs), 0)
        self.assertEqual(len(reqs.requirements), 0)

        reqs = Requirements.parse('test.software')
        self.assertEqual(len(reqs), 1)
        self.assertEqual(len(reqs.requirements), 1)
        self.assertEqual(str(reqs), 'test.software')

        reqs = Requirements.parse(
            ['zeam.form.base',
             'zeam.test>=2.1',
             'zope.testing<=3.7dev'])
        self.assertEqual(len(reqs), 3)
        self.assertEqual(len(reqs.requirements), 3)
        self.assertEqual(
            str(reqs).split('\n'),
            ['zeam.form.base',
             'zeam.test>=2.1',
             'zope.testing<=3.7dev'])
Exemple #8
0
    def __init__(self, options, status):
        super(Package, self).__init__(options, status)
        self.isolation = options.get(
            'isolation', 'on').as_bool()
        self.directory = options.get(
            'lib_directory',
            '${setup:lib_directory}').as_directory()
        self.bin_directory = options.get(
            'bin_directory',
            '${setup:bin_directory}').as_directory()

        requirements = []
        self.extra_sets = []
        if 'packages' in options:
            for requirement in options['packages'].as_list():
                match = INSTALLED_SET.match(requirement)
                if match:
                    self.extra_sets.append(match.group('name'))
                else:
                    requirements.append(requirement)
        else:
            requirements = [get_package_name(options).as_text()]
        self.requirements = Requirements.parse(requirements)
        if self.extra_sets:
            status.depends.update(self.extra_sets)
        if self.requirements:
            # Run the recipe is installer settings changed.
            status.enable(is_installer_changed(options))

        self.wanted_scripts = None
        if 'scripts' in options:
            self.wanted_scripts = options['scripts'].as_list()
        self.extra_args = []
        if 'extra_args' in options:
            self.extra_args = options['extra_args'].as_list()
        self.extra_paths = []
        if 'extra_paths' in options:
            self.extra_paths = options['extra_paths'].as_list()

        self.working_set = None
Exemple #9
0
 def __init__(self, *args):
     __status__ = u"Initializing fake source."
     super(FakeSource, self).__init__(*args)
     self.requirements = Requirements.parse(
         self.options.get('packages', '').as_list())