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.
 
 
 

58 lines
2.0 KiB

"""Модуль с объектами для работы с конфигами nginx"""
import os
import aiofiles
class ConfigObject:
"""Объект для хранения настроек для хоста."""
def __init__(self, host: str, conf_body: str, path: str):
self.host = host
self.conf_body = conf_body.replace(
"server_name _;", f"server_name {host}.server.com;"
)
self.path = os.path.abspath(path)
if not os.path.isdir(self.path):
os.mkdir(self.path)
self.full_path_to_file: str = os.path.join(self.path, f"{host}.conf")
@property
def existst(self) -> bool:
"""Возвращает True, если файл конфига уже существует."""
return os.path.isfile(self.full_path_to_file)
async def write(self) -> bool:
"""Записывает конфиг файл."""
if not self.existst:
async with aiofiles.open(self.full_path_to_file, mode="w") as file:
await file.write(self.conf_body)
return True
def __repr__(self):
return f"Hi, config for {self.host}"
class ConfigFactory:
"""Фабрика, чтобы проще было строить однотипные объекты."""
def __init__(self, path_to_template: str, path_to_configs_dir: str):
self.templ = self.__read_config_template_file(path_to_template)
self.path = path_to_configs_dir
def create(self, host: str) -> ConfigObject:
"""Конструирует `ConfigObject` используя только хост."""
return ConfigObject(host, self.templ, self.path)
def __read_config_template_file(self, path_to_file: str) -> str:
"""Прочесть шаблон конфига для сервера из файла."""
template: str = ""
_full_path = os.path.abspath(path_to_file)
with open(_full_path, mode="r", encoding="utf8") as file:
template = file.read()
return template