mirror of https://github.com/yupix/mipac
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.
80 lines
2.5 KiB
80 lines
2.5 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):
|
|
return f'{self.base_path}/{module_type}{self.path}{self.split_name[-1]}'
|
|
|
|
def get_import_path(self, module_type: ModuleTypes):
|
|
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')
|
|
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')
|
|
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()
|