Esempio n. 1
0
 def get_reqs(extra=None):
     for req in run_requires:
         req_, sep, marker = req.rpartition(';')
         if not sep:
             yield req
         elif interpret(marker, {'extra': extra}):
             yield req_.rstrip()
Esempio n. 2
0
    def parse_from_toml(
            cls, dep_name: str,
            dep_metadata: Union[str, InlineTable]) -> 'VersionedDependency':
        if isinstance(dep_metadata, str):
            return VersionedDependency(dep_name, dep_metadata)

        version = dep_metadata['version']
        markers = None
        if 'markers' in dep_metadata:
            markers = dep_metadata['markers']
            try:
                interpret(markers)
            except SyntaxError as e:
                raise InvalidEnvironmentMarkers(e.args[0])

        return VersionedDependency(dep_name, version, markers=markers)
Esempio n. 3
0
 def get_reqs(extra=None):
     for req in run_requires:
         assert isinstance(req, text_type)
         req_, sep, marker = req.rpartition(';')
         if not sep:
             yield req
         elif interpret(marker.lstrip(), {'extra': extra}):
             yield req_.rstrip()
Esempio n. 4
0
 def requires(self):
     requires = []
     for extra in chain([None], self.wheel_metadata.extras):
         reqs = []
         for req in self.wheel_metadata.run_requires:
             if req.get('extra') == extra:
                 marker = req.get('environment')
                 if not marker or interpret(marker):
                     reqs.extend(req['requires'])
         if reqs:
             requires.append((extra, reqs))
     return requires
Esempio n. 5
0
def _get_requires_json(wheel_metadata):
    """ Compute requirements, grouped by extra.

    This expects wheel_metadata.run_requires to be in the JSON format
    as described at
    https://www.python.org/dev/peps/pep-0426/#dependencies

    """
    by_extra = defaultdict(set)
    for req in wheel_metadata.run_requires:
        extra = req.get('extra')
        marker = req.get('environment')
        if not marker or interpret(marker):
            by_extra[extra].update(req['requires'])

    for extra in sorted(by_extra.keys(),
                        key=lambda extra: (extra is not None, extra)):
        yield extra, sorted(by_extra[extra])
Esempio n. 6
0
    def test_interpret(self):
        sys_platform = sys.platform
        version = sys.version.split()[0]
        os_name = os.name
        platform_version = platform.version()
        platform_machine = platform.machine()
        platform_python_implementation = python_implementation()

        self.assertTrue(interpret("sys_platform == '%s'" % sys_platform))
        self.assertTrue(interpret(
            "sys_platform == '%s' and python_full_version == '%s'" %
            (sys_platform, version)))
        self.assertTrue(interpret("'%s' == sys_platform" % sys_platform))
        self.assertTrue(interpret('os_name == "%s"' % os_name))
        self.assertTrue(interpret(
            'platform_version == "%s" and platform_machine == "%s"' %
            (platform_version, platform_machine)))
        self.assertTrue(interpret('platform_python_implementation == "%s"' %
            platform_python_implementation))

        self.assertTrue(interpret('platform_in_venv == "%s"' % in_venv()))

        # stuff that need to raise a syntax error
        ops = ('os_name == 2', "'2' == '2'",
               'okpjonon', '', 'os_name ==', 'python_version == 2.4')
        for op in ops:
            self.assertRaises(SyntaxError, interpret, op)

        # combined operations
        OP = 'os_name == "%s"' % os_name
        FALSEOP = 'os_name == "buuuu"'
        AND = ' and '
        OR = ' or '
        self.assertTrue(interpret(OP + AND + OP))
        self.assertTrue(interpret(OP + AND + OP + AND + OP))
        self.assertTrue(interpret(OP + OR + OP))
        self.assertTrue(interpret(OP + OR + FALSEOP))
        self.assertTrue(interpret(OP + OR + OP + OR + FALSEOP))
        self.assertTrue(interpret(OP + OR + FALSEOP + OR + FALSEOP))
        self.assertTrue(interpret(FALSEOP + OR + OP))
        self.assertFalse(interpret(FALSEOP + AND + FALSEOP))
        self.assertFalse(interpret(FALSEOP + OR + FALSEOP))

        # other operators
        self.assertTrue(interpret("os_name != 'buuuu'"))
        self.assertTrue(interpret("python_version > '1.0'"))
        self.assertTrue(interpret("python_version < '5.0'"))
        self.assertTrue(interpret("python_version <= '5.0'"))
        self.assertTrue(interpret("python_version >= '1.0'"))
        self.assertTrue(interpret("'%s' in os_name" % os_name))
        self.assertTrue(interpret("'buuuu' not in os_name"))
        self.assertTrue(interpret(
            "'buuuu' not in os_name and '%s' in os_name" % os_name))

        # execution context
        self.assertTrue(interpret('python_version == "0.1"',
                                  {'python_version': '0.1'}))

        # parentheses and extra
        if sys.platform != 'win32':
            relop = '!='
        else:
            relop = '=='
        expression = ("(sys_platform %s 'win32' or python_version == '2.4') "
                      "and extra == 'quux'" % relop)
        self.assertTrue(interpret(expression, {'extra': 'quux'}))
Esempio n. 7
0
    def test_interpret(self):
        sys_platform = sys.platform
        version = sys.version.split()[0]
        os_name = os.name
        platform_version = platform.version()
        platform_machine = platform.machine()
        platform_python_implementation = python_implementation()

        self.assertTrue(interpret("sys_platform == '%s'" % sys_platform))
        self.assertTrue(
            interpret("sys_platform == '%s' and python_full_version == '%s'" %
                      (sys_platform, version)))
        self.assertTrue(interpret("'%s' == sys_platform" % sys_platform))
        self.assertTrue(interpret('os_name == "%s"' % os_name))
        self.assertTrue(
            interpret('platform_version == "%s" and platform_machine == "%s"' %
                      (platform_version, platform_machine)))
        self.assertTrue(
            interpret('platform_python_implementation == "%s"' %
                      platform_python_implementation))

        self.assertTrue(interpret('platform_in_venv == "%s"' % in_venv()))

        # stuff that need to raise a syntax error
        ops = ('os_name == 2', "'2' == '2'", 'okpjonon', '', 'os_name ==',
               'python_version == 2.4')
        for op in ops:
            self.assertRaises(SyntaxError, interpret, op)

        # combined operations
        OP = 'os_name == "%s"' % os_name
        FALSEOP = 'os_name == "buuuu"'
        AND = ' and '
        OR = ' or '
        self.assertTrue(interpret(OP + AND + OP))
        self.assertTrue(interpret(OP + AND + OP + AND + OP))
        self.assertTrue(interpret(OP + OR + OP))
        self.assertTrue(interpret(OP + OR + FALSEOP))
        self.assertTrue(interpret(OP + OR + OP + OR + FALSEOP))
        self.assertTrue(interpret(OP + OR + FALSEOP + OR + FALSEOP))
        self.assertTrue(interpret(FALSEOP + OR + OP))
        self.assertFalse(interpret(FALSEOP + AND + FALSEOP))
        self.assertFalse(interpret(FALSEOP + OR + FALSEOP))

        # other operators
        self.assertTrue(interpret("os_name != 'buuuu'"))
        self.assertTrue(interpret("python_version > '1.0'"))
        self.assertTrue(interpret("python_version < '5.0'"))
        self.assertTrue(interpret("python_version <= '5.0'"))
        self.assertTrue(interpret("python_version >= '1.0'"))
        self.assertTrue(interpret("'%s' in os_name" % os_name))
        self.assertTrue(interpret("'buuuu' not in os_name"))
        self.assertTrue(interpret("'buu' in os_name", {'os_name': 'buuu'}))
        self.assertTrue(
            interpret("'buuuu' not in os_name and '%s' in os_name" % os_name))

        # execution context
        self.assertTrue(
            interpret('python_version == "0.1"', {'python_version': '0.1'}))

        # parentheses and extra
        if sys.platform != 'win32':
            relop = '!='
        else:
            relop = '=='
        expression = ("(sys_platform %s 'win32' or python_version == '2.4') "
                      "and extra == 'quux'" % relop)
        self.assertTrue(interpret(expression, {'extra': 'quux'}))