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
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
|
|
|