diff options
author | Arfrever Frehtes Taifersar Arahesis <Arfrever.FTA@GMail.Com> | 2012-11-02 18:48:30 +0100 |
---|---|---|
committer | Arfrever Frehtes Taifersar Arahesis <Arfrever.FTA@GMail.Com> | 2012-11-02 18:48:30 +0100 |
commit | 83b2066aa4a6e221dfd383e72c7a243850849c9d (patch) | |
tree | 6267d5d25249aefe8fdf37a442a51b05b4cbc289 /_markerlib/markers.py | |
parent | a3966d17f6f7f0769b83d5ef56fc8f97f6a4b415 (diff) | |
download | external_python_setuptools-83b2066aa4a6e221dfd383e72c7a243850849c9d.tar.gz external_python_setuptools-83b2066aa4a6e221dfd383e72c7a243850849c9d.tar.bz2 external_python_setuptools-83b2066aa4a6e221dfd383e72c7a243850849c9d.zip |
Work around Jython bugs #1980 and #1981.
--HG--
branch : distribute
extra : rebase_source : 3cc01234cdeeff2ed979316bb06319adab296dd6
Diffstat (limited to '_markerlib/markers.py')
-rw-r--r-- | _markerlib/markers.py | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/_markerlib/markers.py b/_markerlib/markers.py index 54c2828a..23091e64 100644 --- a/_markerlib/markers.py +++ b/_markerlib/markers.py @@ -17,9 +17,7 @@ where EXPR belongs to any of those: __all__ = ['default_environment', 'compile', 'interpret'] -from ast import Compare, BoolOp, Attribute, Name, Load, Str, cmpop, boolop -from ast import parse, copy_location, NodeTransformer - +import ast import os import platform import sys @@ -46,27 +44,31 @@ def default_environment(): """Return copy of default PEP 385 globals dictionary.""" return dict(_VARS) -class ASTWhitelist(NodeTransformer): +class ASTWhitelist(ast.NodeTransformer): def __init__(self, statement): self.statement = statement # for error messages - - ALLOWED = (Compare, BoolOp, Attribute, Name, Load, Str, cmpop, boolop) - + + ALLOWED = (ast.Compare, ast.BoolOp, ast.Attribute, ast.Name, ast.Load, ast.Str) + # Bool operations + ALLOWED += (ast.And, ast.Or) + # Comparison operations + ALLOWED += (ast.Eq, ast.Gt, ast.GtE, ast.In, ast.Is, ast.IsNot, ast.Lt, ast.LtE, ast.NotEq, ast.NotIn) + def visit(self, node): """Ensure statement only contains allowed nodes.""" if not isinstance(node, self.ALLOWED): raise SyntaxError('Not allowed in environment markers.\n%s\n%s' % - (self.statement, + (self.statement, (' ' * node.col_offset) + '^')) - return NodeTransformer.visit(self, node) - + return ast.NodeTransformer.visit(self, node) + def visit_Attribute(self, node): """Flatten one level of attribute access.""" - new_node = Name("%s.%s" % (node.value.id, node.attr), node.ctx) - return copy_location(new_node, node) + new_node = ast.Name("%s.%s" % (node.value.id, node.attr), node.ctx) + return ast.copy_location(new_node, node) def parse_marker(marker): - tree = parse(marker, mode='eval') + tree = ast.parse(marker, mode='eval') new_tree = ASTWhitelist(marker).generic_visit(tree) return new_tree |