Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/libpasteurize/fixes/fix_features.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
| author | shellac |
|---|---|
| date | Sat, 02 May 2020 07:14:21 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:26e78fe6e8c4 |
|---|---|
| 1 u""" | |
| 2 Warn about features that are not present in Python 2.5, giving a message that | |
| 3 points to the earliest version of Python 2.x (or 3.x, if none) that supports it | |
| 4 """ | |
| 5 | |
| 6 from .feature_base import Feature, Features | |
| 7 from lib2to3 import fixer_base | |
| 8 | |
| 9 FEATURES = [ | |
| 10 #(FeatureName, | |
| 11 # FeaturePattern, | |
| 12 # FeatureMinVersion, | |
| 13 #), | |
| 14 (u"memoryview", | |
| 15 u"power < 'memoryview' trailer < '(' any* ')' > any* >", | |
| 16 u"2.7", | |
| 17 ), | |
| 18 (u"numbers", | |
| 19 u"""import_from< 'from' 'numbers' 'import' any* > | | |
| 20 import_name< 'import' ('numbers' dotted_as_names< any* 'numbers' any* >) >""", | |
| 21 u"2.6", | |
| 22 ), | |
| 23 (u"abc", | |
| 24 u"""import_name< 'import' ('abc' dotted_as_names< any* 'abc' any* >) > | | |
| 25 import_from< 'from' 'abc' 'import' any* >""", | |
| 26 u"2.6", | |
| 27 ), | |
| 28 (u"io", | |
| 29 u"""import_name< 'import' ('io' dotted_as_names< any* 'io' any* >) > | | |
| 30 import_from< 'from' 'io' 'import' any* >""", | |
| 31 u"2.6", | |
| 32 ), | |
| 33 (u"bin", | |
| 34 u"power< 'bin' trailer< '(' any* ')' > any* >", | |
| 35 u"2.6", | |
| 36 ), | |
| 37 (u"formatting", | |
| 38 u"power< any trailer< '.' 'format' > trailer< '(' any* ')' > >", | |
| 39 u"2.6", | |
| 40 ), | |
| 41 (u"nonlocal", | |
| 42 u"global_stmt< 'nonlocal' any* >", | |
| 43 u"3.0", | |
| 44 ), | |
| 45 (u"with_traceback", | |
| 46 u"trailer< '.' 'with_traceback' >", | |
| 47 u"3.0", | |
| 48 ), | |
| 49 ] | |
| 50 | |
| 51 class FixFeatures(fixer_base.BaseFix): | |
| 52 | |
| 53 run_order = 9 # Wait until all other fixers have run to check for these | |
| 54 | |
| 55 # To avoid spamming, we only want to warn for each feature once. | |
| 56 features_warned = set() | |
| 57 | |
| 58 # Build features from the list above | |
| 59 features = Features([Feature(name, pattern, version) for \ | |
| 60 name, pattern, version in FEATURES]) | |
| 61 | |
| 62 PATTERN = features.PATTERN | |
| 63 | |
| 64 def match(self, node): | |
| 65 to_ret = super(FixFeatures, self).match(node) | |
| 66 # We want the mapping only to tell us the node's specific information. | |
| 67 try: | |
| 68 del to_ret[u'node'] | |
| 69 except Exception: | |
| 70 # We want it to delete the 'node' from the results | |
| 71 # if it's there, so we don't care if it fails for normal reasons. | |
| 72 pass | |
| 73 return to_ret | |
| 74 | |
| 75 def transform(self, node, results): | |
| 76 for feature_name in results: | |
| 77 if feature_name in self.features_warned: | |
| 78 continue | |
| 79 else: | |
| 80 curr_feature = self.features[feature_name] | |
| 81 if curr_feature.version >= u"3": | |
| 82 fail = self.cannot_convert | |
| 83 else: | |
| 84 fail = self.warning | |
| 85 fail(node, reason=curr_feature.message_text()) | |
| 86 self.features_warned.add(feature_name) |
