FastOrganizer/setup_project.py
2025-05-18 03:22:51 +03:00

136 lines
3.8 KiB
Python

import os
import sys
from pathlib import Path
import shutil
from apps import SubApp
### fastorg setup basic app multiverse include docker
class CreateInit:
def __init__(self, docker_file="docker-compose.yml"):
self.docker_file : str = docker_file
self.current_path : str = Path.cwd()
self.target_path : str = self.current_path / '__init__.py'
def create(self) -> bool:
if self.target_path.exists():
return True
self.target_path.touch()
print(f"File {self.target_path} created successfully.")
return True
def create_docker(self) -> bool:
docker_path = self.current_path / self.docker_file
if docker_path.exists():
return True
##fill the docker
docker_path.touch()
print(f"File {docker_path} created successfully.")
return True
class ConfigSetup:
def __init__(self, config_file : dict) -> bool:
self.config_file = config_file
self.current_path = Path.cwd()
self.target_path = self.current_path / self.config_file['mainfile']
def create(self) -> bool:
if self.target_path.exists():
return True
source = Path(__file__).parent / 'config.py'
target = self.target_path / 'config.py'
target.parent.mkdir(parents=True, exist_ok=True)
shutil.copy(source, target)
print(f"File {target} created successfully.")
return True
#apps dependency
class MainCreate:
def __init__(self, mainfile, subapps : list[SubApp] = []):
self.mainfile = mainfile
self.current_path = Path.cwd()
self.target_path = self.current_path / self.mainfile
self.subapps = subapps
self.memory = ''
def create_releation_pattern(self, subappname):
self.memory += f'''from .{subappname}.router import router as {subappname}_router\n'''
def create_main_pattern(self, subappname):
self.memory += f'''app.include_router({subappname}_router)\n'''
def create_subapps(self):
self.memory += f'''from .config import app\n'''
for subapp in self.subapps:
self.create_releation_pattern(subapp.name)
self.create_main_pattern(subapp.name)
def create(self):
if self.target_path.exists():
return True
print("target path -----------------------------> ", self.target_path)
self.create_subapps()
with open(self.target_path, 'a') as f:
f.write(self.memory.strip())
print(f"File {self.target_path} created successfully.")
return True
### -init -docker -config
class BasicSetup:
def __init__(self, mainfile, docker_file, db_type, db_name):
self.subapps = []
self.mainfile = mainfile
self.docker_file = docker_file
self.config_file_setuping = {
'mainfile': "config.py",
'db_type': db_type,
'db_name': db_name,
'db_user' : 'user',
'db_password' : 'password',
'db_host' : 'localhost',
'db_port' : 5432
}
self.hasInit = False
self.hasDocker = False
self.hasConfig = False
def proceed(self):
self.create_init = CreateInit(self.docker_file)
self.config_setup = ConfigSetup(self.config_file_setuping)
self.main_create = MainCreate(self.mainfile, self.subapps)
def create(self):
self.proceed()
try:
pass
self.hasInit = self.create_init.create()
self.hasDocker = self.create_init.create_docker()
self.hasConfig = self.config_setup.create()
self.main_create.create()
except Exception as e:
print(f"Error creating setup: {e}")
return