from typing import Dict from ...controller import Controller from ...register import register from ...context import Context from ...utils import _ class Risotto(Controller): @register('v1.server.list') async def server_list(self, risotto_context: Context) -> Dict: sql = ''' SELECT ServerId as server_id, ServerName as server_name, ServerDescription as server_description, ServerServermodelId as server_servermodel_id FROM Server ''' servers = await risotto_context.connection.fetch(sql) return [dict(r) for r in servers] @register('v1.server.create', 'v1.server.created') async def server_create(self, risotto_context: Context, server_name: str, server_description: str, servermodel_name: str, source_name: str, release_distribution: str) -> Dict: servermodel = await self.call('v1.servermodel.describe', risotto_context, servermodel_name=servermodel_name, source_name=source_name, release_distribution=release_distribution) server_insert = """INSERT INTO Server(ServerName, ServerDescription, ServerServermodelId) VALUES ($1,$2,$3) RETURNING ServerId """ server_id = await risotto_context.connection.fetchval(server_insert, server_name, server_description, servermodel['servermodel_id']) await self.call('v1.user.role.create', risotto_context, user_login=risotto_context.username, role_name='server_rw', role_attribute='Server.ServerName', role_attribute_value=server_name) return {'server_id': server_id, 'server_name': server_name, 'server_description': server_description, 'server_servermodel_id': servermodel['servermodel_id']} @register('v1.server.describe') async def server_describe(self, risotto_context: Context, server_name: str) -> Dict: sql = ''' SELECT ServerId as server_id, ServerName as server_name, ServerDescription as server_description, ServerServermodelId as server_servermodel_id FROM Server WHERE ServerName = $1 ''' server = await risotto_context.connection.fetchrow(sql, server_name) if not server: raise Exception(_(f'unable to find server with name {server_name}')) return dict(server)