|
@@ -0,0 +1,75 @@
|
|
|
|
+import os
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def walk_directory(root, dirs, files):
|
|
|
|
+ for file_path in files:
|
|
|
|
+ if 'project_template' not in root and file_path.lower().endswith('.py'):
|
|
|
|
+ clean_file(os.path.join(root, file_path))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def clean_file(file_path):
|
|
|
|
+ py_source = file(file_path).read()
|
|
|
|
+ if 'misago.' in py_source:
|
|
|
|
+ package = file_path.rstrip('.py').split('/')[:-1]
|
|
|
|
+
|
|
|
|
+ parse_file = True
|
|
|
|
+ save_file = False
|
|
|
|
+ cursor = 0
|
|
|
|
+
|
|
|
|
+ while parse_file:
|
|
|
|
+ try:
|
|
|
|
+ import_start = py_source.index('from ', cursor)
|
|
|
|
+ import_end = py_source.index(' import', import_start)
|
|
|
|
+ cursor = import_end
|
|
|
|
+
|
|
|
|
+ import_len = import_end - import_start
|
|
|
|
+ import_path = py_source[import_start:import_end].lstrip('from').strip()
|
|
|
|
+
|
|
|
|
+ if import_path.startswith('misago.'):
|
|
|
|
+ cleaned_import = clean_import(package, import_path.split('.'))
|
|
|
|
+ if cleaned_import:
|
|
|
|
+ save_file = True
|
|
|
|
+
|
|
|
|
+ cleaned_import_string = 'from {}'.format('.'.join(cleaned_import))
|
|
|
|
+ py_source = ''.join((py_source[:import_start], cleaned_import_string, py_source[import_end:]))
|
|
|
|
+ cursor -= import_end - import_start - len(cleaned_import_string)
|
|
|
|
+ except ValueError:
|
|
|
|
+ parse_file = False
|
|
|
|
+
|
|
|
|
+ if save_file:
|
|
|
|
+ with open(file_path, 'w') as package:
|
|
|
|
+ print py_source
|
|
|
|
+ package.write(py_source)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def clean_import(package, import_path):
|
|
|
|
+ if len(package) < 2 or len(import_path) < 2:
|
|
|
|
+ return
|
|
|
|
+
|
|
|
|
+ if package[:2] != import_path[:2]:
|
|
|
|
+ return
|
|
|
|
+
|
|
|
|
+ if package == import_path:
|
|
|
|
+ # import from sibling module
|
|
|
|
+ return ['', '']
|
|
|
|
+
|
|
|
|
+ if len(package) < len(import_path) and package == import_path[:len(package)]:
|
|
|
|
+ # import from child module
|
|
|
|
+ return [''] + import_path[len(package):]
|
|
|
|
+
|
|
|
|
+ # find upwards path
|
|
|
|
+ overlap_len = 2
|
|
|
|
+ while True:
|
|
|
|
+ if package[:overlap_len + 1] != import_path[:overlap_len + 1]:
|
|
|
|
+ break
|
|
|
|
+ overlap_len += 1
|
|
|
|
+
|
|
|
|
+ upward_path = (['', ''] * (len(package) - overlap_len))[:-1]
|
|
|
|
+
|
|
|
|
+ # append eventual downwards path
|
|
|
|
+ return upward_path + import_path[overlap_len:]
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+if __name__ == '__main__':
|
|
|
|
+ for args in os.walk('misago'):
|
|
|
|
+ walk_directory(*args)
|