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)
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
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'])
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
def __init__(self, *args): __status__ = u"Initializing fake source." super(FakeSource, self).__init__(*args) self.requirements = Requirements.parse( self.options.get('packages', '').as_list())