1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import pkg_resources
- import utils
- from package import Package
- class ReqPackage(Package):
- """Wrapper class for Requirements instance
- :param obj: The `Requirements` instance to wrap over
- :param dist: optional `pkg_resources.Distribution` instance for
- this requirement
- """
- UNKNOWN_VERSION = '?'
- def __init__(self, obj, dist=None):
- super(ReqPackage, self).__init__(obj)
- self.dist = dist
- @property
- def version_spec(self):
- specs = self._obj.specs
- return ','.join([''.join(sp) for sp in specs]) if specs else None
- @property
- def installed_version(self):
- if not self.dist:
- return utils.guess_version(self.key, self.UNKNOWN_VERSION)
- return self.dist.version
- def is_conflicting(self):
- """If installed version conflicts with required version"""
- # unknown installed version is also considered conflicting
- if self.installed_version == self.UNKNOWN_VERSION:
- return True
- ver_spec = (self.version_spec if self.version_spec else '')
- req_version_str = '{0}{1}'.format(self.project_name, ver_spec)
- req_obj = pkg_resources.Requirement.parse(req_version_str)
- return self.installed_version not in req_obj
- def as_dict(self):
- return {'key': self.key,
- 'package_name': self.project_name,
- 'installed_version': self.installed_version,
- 'required_version': self.version_spec}
|