99911f6c4c
Retains python2.7 compatibility for all files. Fixes only syntax errors, tests still fail on python3 for various reasons.
141 lines
3.9 KiB
Python
Executable File
141 lines
3.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from importlib import import_module
|
|
import sys
|
|
import os
|
|
|
|
__author__ = 'roland'
|
|
|
|
|
|
def load(head, tail):
|
|
if head == "":
|
|
if sys.path[0] != ".":
|
|
sys.path.insert(0, ".")
|
|
else:
|
|
sys.path.insert(0, head)
|
|
|
|
if tail.endswith(".py"):
|
|
tail = tail[:-3]
|
|
|
|
return import_module(tail)
|
|
|
|
|
|
def intcmp(s1, s2):
|
|
try:
|
|
_i1 = int(s1)
|
|
_i2 = int(s2)
|
|
except ValueError:
|
|
_i1 = s1
|
|
_i2 = s2
|
|
|
|
if _i1 < _i2:
|
|
return -1
|
|
if _i1 > _i2:
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
|
|
class AMap(object):
|
|
def __init__(self, head, tail, indent=4 * " "):
|
|
self.mod = load(head, tail)
|
|
self.variable = {}
|
|
self.vars = []
|
|
self.text = []
|
|
self.indent = indent
|
|
for key, val in self.mod.__dict__.items():
|
|
if key.startswith("__"):
|
|
continue
|
|
elif key == "MAP":
|
|
continue
|
|
else:
|
|
self.variable[key] = val
|
|
self.vars.append(key)
|
|
self.vars.sort()
|
|
|
|
def sync(self):
|
|
for key, val in self.mod.MAP["fro"].items():
|
|
try:
|
|
assert self.mod.MAP["to"][val] == key
|
|
except KeyError: # missing value
|
|
print("# Added %s=%s" % (self.mod.MAP["to"][val], key))
|
|
self.mod.MAP["to"][val] = key
|
|
except AssertionError:
|
|
raise Exception("Mismatch key:%s '%s' != '%s'" % (
|
|
key, val, self.mod.MAP["to"][val]))
|
|
|
|
for val in self.mod.MAP["to"].values():
|
|
if val not in self.mod.MAP["fro"]:
|
|
print("# Missing URN '%s'" % val)
|
|
|
|
def do_fro(self):
|
|
txt = ["%s'fro': {" % self.indent]
|
|
i2 = self.indent + self.indent
|
|
_fro = self.mod.MAP["fro"]
|
|
for var in self.vars:
|
|
_v = self.variable[var]
|
|
li = [k[len(_v):] for k in _fro.keys() if k.startswith(_v)]
|
|
li.sort(intcmp)
|
|
for item in li:
|
|
txt.append("%s%s+'%s': '%s'," % (i2, var, item,
|
|
_fro[_v + item]))
|
|
txt.append('%s},' % self.indent)
|
|
return txt
|
|
|
|
def do_to(self):
|
|
txt = ["%s'to': {" % self.indent]
|
|
i2 = self.indent + self.indent
|
|
_to = self.mod.MAP["to"]
|
|
_keys = _to.keys()
|
|
_keys.sort()
|
|
invmap = dict([(v, k) for k, v in self.variable.items()])
|
|
|
|
for key in _keys:
|
|
val = _to[key]
|
|
for _urn, _name in invmap.items():
|
|
if val.startswith(_urn):
|
|
txt.append("%s'%s': %s+'%s'," % (i2, key, _name,
|
|
val[len(_urn):]))
|
|
|
|
txt.append('%s}' % self.indent)
|
|
return txt
|
|
|
|
def __str__(self):
|
|
self.sync()
|
|
text = []
|
|
for key in self.vars:
|
|
text.append("%s = '%s'" % (key, self.variable[key]))
|
|
|
|
text.extend(["", ""])
|
|
|
|
text.append("MAP = {")
|
|
text.append("%s'identifier': '%s'," % (self.indent,
|
|
self.mod.MAP["identifier"]))
|
|
text.extend(self.do_fro())
|
|
text.extend(self.do_to())
|
|
|
|
text.append("}")
|
|
text.append("")
|
|
return "\n".join(text)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
_name = sys.argv[1]
|
|
if os.path.isfile(_name):
|
|
directory, fname = os.path.split(_name)
|
|
amap = AMap(directory, fname, 4 * " ")
|
|
f = open(_name, "w")
|
|
f.write("%s" % amap)
|
|
f.close()
|
|
elif os.path.isdir(_name):
|
|
for fname in os.listdir(_name):
|
|
if fname == "__init__.py":
|
|
continue
|
|
elif fname.endswith(".pyc"):
|
|
continue
|
|
print(10 * "=" + fname + 10 * "=")
|
|
amap = AMap(_name, fname, 4 * " ")
|
|
f = open(fname, "w")
|
|
f.write("%s" % amap)
|
|
f.close()
|