0.3.0 base, now with autoconvert
This commit is contained in:
82
autoconvert.py
Normal file
82
autoconvert.py
Normal file
@@ -0,0 +1,82 @@
|
||||
"""
|
||||
Converts files to be jail-compatible
|
||||
"""
|
||||
|
||||
import importlib
|
||||
|
||||
|
||||
class FileConverter:
|
||||
def __init__(self):
|
||||
self.jail_mgr = importlib.import_module(".jail_mgr", "vfs.sys")
|
||||
self.jailmgr = self.jail_mgr.PyJail()
|
||||
self._file_openers = ["os.path", "open", "shutil.copy", "shutil.rm"]
|
||||
self._unsupported_file_openers = ["QFile"]
|
||||
|
||||
def convert_file(self, fn):
|
||||
unsupported_openers_found = 0
|
||||
lines = []
|
||||
with open(self.jailmgr.fs(fn), "a") as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
lines.append(line)
|
||||
blank_line_found = False
|
||||
init_found = False
|
||||
i_total = 0
|
||||
for i, line in enumerate(lines):
|
||||
if line == "" and blank_line_found is False:
|
||||
line = "import importlib\n"
|
||||
lines[i] = line
|
||||
blank_line_found = True
|
||||
if "def __init__" in line and init_found is False:
|
||||
line_to_export = (
|
||||
"\nself.jail_mgr = importlib.import_module('.jail_mgr', 'vfs.sys')\n"
|
||||
"self.jailmgr = self.jail_mgr.PyJail()"
|
||||
)
|
||||
lines[i + 1] = line_to_export
|
||||
init_found = True
|
||||
if self._file_openers in line:
|
||||
idx = line.index("(")
|
||||
idx2 = line.index(")")
|
||||
# if idx2 - idx != 1:
|
||||
# self.jailmgr.msg(f"{self}", "Unsupported type!", False, "WARN")
|
||||
# unsupported_openers_found += 1
|
||||
# else:
|
||||
expression = line[idx : idx2 + 1]
|
||||
line_to_edit = f"self.jailmgr.fs({expression})"
|
||||
idx -= 1
|
||||
idx2 += 2
|
||||
full_line = f"{line[:idx]}{line_to_edit}{line[idx2:]}"
|
||||
lines[i] = full_line
|
||||
elif self._unsupported_file_openers in line:
|
||||
self.jailmgr.msg(f"{self}", "Unsupported opener!", False, "WARN")
|
||||
unsupported_openers_found += 1
|
||||
else:
|
||||
pass
|
||||
i_total = i
|
||||
if unsupported_openers_found > 0:
|
||||
self.jailmgr.msg(
|
||||
f"{self}",
|
||||
f"Some/all of the openers in this file aren't compatible with the converter, amount: {unsupported_openers_found} of the {i_total}",
|
||||
True,
|
||||
"WARN",
|
||||
)
|
||||
return lines
|
||||
|
||||
def file_writer(self, fn, content):
|
||||
for i, line in enumerate(content):
|
||||
line.rstrip("\n")
|
||||
with open(self.jailmgr.fs(fn), "a+") as f:
|
||||
f.write(f"{line}\n")
|
||||
f.close()
|
||||
self.jailmgr.msg(f"{self}", "Conversion OK! Please check results.", True)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
fc = FileConverter()
|
||||
fn = input("Enter filepath to convert (fullpath): ")
|
||||
try:
|
||||
lines = fc.convert_file(fn)
|
||||
fc.file_writer(lines)
|
||||
except Exception:
|
||||
print("Failure to convert!")
|
Reference in New Issue
Block a user