Fix NameError during installation with Python implementations (e.g. Jython)...

Fix NameError during installation with Python implementations (e.g. Jython) not containing parser module.
parent 9eb9ea1b
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
CHANGES CHANGES
======= =======
-----
2.0.2
-----
* Fix NameError during installation with Python implementations (e.g. Jython)
not containing parser module.
----- -----
2.0.1 2.0.1
----- -----
......
...@@ -1213,6 +1213,32 @@ class MarkerEvaluation(object): ...@@ -1213,6 +1213,32 @@ class MarkerEvaluation(object):
""" """
return cls.interpret(parser.expr(text).totuple(1)[1]) return cls.interpret(parser.expr(text).totuple(1)[1])
@classmethod
def _markerlib_evaluate(cls, text):
"""
Evaluate a PEP 426 environment marker using markerlib.
Return a boolean indicating the marker result in this environment.
Raise SyntaxError if marker is invalid.
"""
import _markerlib
# markerlib implements Metadata 1.2 (PEP 345) environment markers.
# Translate the variables to Metadata 2.0 (PEP 426).
env = _markerlib.default_environment()
for key in env.keys():
new_key = key.replace('.', '_')
env[new_key] = env.pop(key)
try:
result = _markerlib.interpret(text, env)
except NameError:
e = sys.exc_info()[1]
raise SyntaxError(e.args[0])
return result
if 'parser' not in globals():
# Fall back to less-complete _markerlib implementation if 'parser' module
# is not available.
evaluate_marker = _markerlib_evaluate
@classmethod @classmethod
def interpret(cls, nodelist): def interpret(cls, nodelist):
while len(nodelist)==2: nodelist = nodelist[1] while len(nodelist)==2: nodelist = nodelist[1]
...@@ -1242,34 +1268,8 @@ class MarkerEvaluation(object): ...@@ -1242,34 +1268,8 @@ class MarkerEvaluation(object):
return s[1:-1] return s[1:-1]
raise SyntaxError("Language feature not supported in environment markers") raise SyntaxError("Language feature not supported in environment markers")
def _markerlib_evaluate(text):
"""
Evaluate a PEP 426 environment marker using markerlib.
Return a boolean indicating the marker result in this environment.
Raise SyntaxError if marker is invalid.
"""
import _markerlib
# markerlib implements Metadata 1.2 (PEP 345) environment markers.
# Translate the variables to Metadata 2.0 (PEP 426).
env = _markerlib.default_environment()
for key in env.keys():
new_key = key.replace('.', '_')
env[new_key] = env.pop(key)
try:
result = _markerlib.interpret(text, env)
except NameError:
e = sys.exc_info()[1]
raise SyntaxError(e.args[0])
return result
invalid_marker = MarkerEvaluation.is_invalid_marker invalid_marker = MarkerEvaluation.is_invalid_marker
evaluate_marker = MarkerEvaluation.evaluate_marker
if 'parser' in globals():
evaluate_marker = MarkerEvaluation.evaluate_marker
else:
# fallback to less-complete _markerlib implementation if 'parser' module
# is not available.
evaluate_marker = _markerlib_evaluate
class NullProvider: class NullProvider:
"""Try to implement resources and metadata for arbitrary PEP 302 loaders""" """Try to implement resources and metadata for arbitrary PEP 302 loaders"""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment