You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mipac/utils/mipactl.py

84 lines
2.8 KiB

import argparse
import os
from typing import Literal
from templates import (
ACTIONS_CLASS_NAME_TEMPLATE,
ACTIONS_TEMPLATE,
MANAGER_CLASS_NAME_TEMPLATE,
MANAGER_TEMPLATE,
)
ModuleTypes = Literal["manager", "actions"]
parser = argparse.ArgumentParser()
parser.add_argument("--name", "-n")
parser.add_argument("--generate", "-g", action=argparse.BooleanOptionalAction)
args = parser.parse_args()
class Generator:
def __init__(self) -> None:
self.split_name = args.name.split("/")
self.path = "/".join(self.split_name[:-1]) + "/"
self.base_path = "../mipac"
def makedirs(self, module_type: ModuleTypes, path: str):
if os.path.exists(f"../mipac/{module_type}/{path[:-1]}") is False:
os.makedirs(f"../mipac/{module_type}/{path[:-1]}")
with open(
f"../mipac/{module_type}/{path}__init__.py", mode="w", encoding="utf-8"
) as f:
f.close()
def get_path(self, module_type: ModuleTypes):
path = self.path[1:] if self.path[0] == "/" else self.path
return f"{self.base_path}/{module_type}/{path}{self.split_name[-1]}"
def get_import_path(self, module_type: ModuleTypes):
print(module_type, self.get_path(module_type))
return self.get_path(module_type).replace("../", "").replace("/", ".")
def get_class_name(self, module_type: ModuleTypes):
return (
MANAGER_CLASS_NAME_TEMPLATE
if module_type == "manager"
else ACTIONS_CLASS_NAME_TEMPLATE
).format(self.split_name[-1].capitalize())
def create_actions(self):
import_path = self.get_import_path("actions")
class_name = self.get_class_name("actions")
os.makedirs(f"{self.base_path}/actions/{self.path}", exist_ok=True)
with open(
f"{self.base_path}/actions/{self.path}{self.split_name[-1]}.py",
mode="w",
encoding="utf-8",
) as f:
f.write(ACTIONS_TEMPLATE.format(class_name))
f.close()
return {"import_path": import_path, "class_name": class_name}
def create_manager(self):
created_actions = self.create_actions()
class_name = self.get_class_name("manager")
os.makedirs(f"{self.base_path}/manager/{self.path}", exist_ok=True)
with open(
f"{self.base_path}/manager/{self.path}{self.split_name[-1]}.py",
mode="w",
encoding="utf-8",
) as f:
f.write(
MANAGER_TEMPLATE.format(
class_name, created_actions["import_path"], created_actions["class_name"]
)
)
f.close()
if args.generate:
module_types = ["manager", "actions"]
generator = Generator()
generator.create_manager()