62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
from os import mkdir
|
|
from os.path import isdir, join
|
|
from shutil import rmtree
|
|
from typing import Dict
|
|
from rougail.template import generate
|
|
from tiramisu import Storage
|
|
from ...config import CONFIGURATION_DIR, TMP_DIR, get_config
|
|
from ...controller import Controller
|
|
from ...register import register
|
|
from ...dispatcher import dispatcher
|
|
from ...utils import _
|
|
|
|
|
|
class Risotto(Controller):
|
|
def __init__(self,
|
|
test: bool) -> None:
|
|
self.storage = Storage(engine='dictionary')
|
|
self.cache_root_path = join(get_config().get('cache').get('root_path'), 'servermodel')
|
|
|
|
@register('v1.template.generate')
|
|
async def template_get(self,
|
|
risotto_context,
|
|
server_name: str) -> Dict:
|
|
server = await self.call('v1.server.describe',
|
|
risotto_context,
|
|
server_name=server_name)
|
|
server_id = server['server_id']
|
|
servermodel_id = server['server_servermodel_id']
|
|
config_module = dispatcher.get_service('config')
|
|
server = config_module.server[server_id]
|
|
export = await server['server'].value.exportation()
|
|
if not export[0]:
|
|
raise Exception(_(f'configuration for server "{server_name}" is empty, you should deploy it first'))
|
|
config = meta = await server['server'].config.deepcopy(storage=self.storage)
|
|
while True:
|
|
try:
|
|
children = list(await config.config.list())
|
|
except:
|
|
break
|
|
if children:
|
|
config = children[0]
|
|
else:
|
|
break
|
|
configurations_dir = join(CONFIGURATION_DIR,
|
|
str(server_id))
|
|
if isdir(configurations_dir):
|
|
rmtree(configurations_dir)
|
|
mkdir(configurations_dir)
|
|
tmp_dir = join(TMP_DIR, str(server_id))
|
|
if isdir(tmp_dir):
|
|
rmtree(tmp_dir)
|
|
mkdir(tmp_dir)
|
|
templates_dir = join(self.cache_root_path, str(servermodel_id), 'templates')
|
|
await generate(config,
|
|
server['funcs_file'],
|
|
templates_dir,
|
|
tmp_dir,
|
|
configurations_dir)
|
|
|
|
return {'server_name': server_name,
|
|
'template_dir': configurations_dir}
|