96 lines
2.9 KiB
Python
Raw Normal View History

2025-04-11 08:54:28 +08:00
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @version : 1.0
# @Create Time : 2022/12/9 15:27
# @File : main.py
# @IDE : PyCharm
# @desc : 简要说明
import datetime
import os.path
from application.settings import BASE_DIR
class CreateApp:
APPS_ROOT = os.path.join(BASE_DIR, "apps")
SCRIPT_DIR = os.path.join(BASE_DIR, 'scripts', 'create_app')
def __init__(self, path: str):
"""
:param path: app 路径根目录为apps填写apps后面路径即可例子vadmin/auth
"""
self.app_path = os.path.join(self.APPS_ROOT, path)
self.path = path
def run(self):
"""
自动创建初始化 APP 结构如何该路径已经存在则不执行
"""
if self.exist(self.app_path):
print(f"{self.app_path} 已经存在,无法自动创建,请删除后,重新执行。")
return False
print("开始生成 App 目录:", self.path)
path = []
for item in self.path.split("/"):
path.append(item)
self.create_pag(os.path.join(self.APPS_ROOT, *path))
self.create_pag(os.path.join(self.app_path, "models"))
self.create_pag(os.path.join(self.app_path, "params"))
self.create_pag(os.path.join(self.app_path, "schemas"))
self.generate_file("views.py")
self.generate_file("crud.py")
print("App 目录生成结束", self.app_path)
def create_pag(self, path: str) -> None:
"""
创建 python
:param path: 绝对路径
"""
if self.exist(path):
return
os.makedirs(path)
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
params = {
"create_datetime": now,
"filename": "__init__.py",
"desc": "初始化文件"
}
self.create_file(os.path.join(path, "__init__.py"), "init.py", **params)
def generate_file(self, name: str) -> None:
"""
创建文件
"""
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
params = {
"create_datetime": now,
}
self.create_file(os.path.join(self.app_path, name), name, **params)
def create_file(self, filepath: str, name: str, **kwargs):
"""
创建文件
"""
with open(filepath, "w", encoding="utf-8") as f:
content = self.__get_template(name)
f.write(content.format(**kwargs))
@classmethod
def exist(cls, path) -> bool:
"""
判断路径是否已经存在
"""
return os.path.exists(path)
def __get_template(self, name: str) -> str:
"""
获取模板内容
"""
template = open(os.path.join(self.SCRIPT_DIR, "template", name), 'r')
content = template.read()
template.close()
return content