diff libervia/web/pages/lists/create_from_tpl/page_meta.py @ 1518:eb00d593801d

refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
author Goffi <goffi@goffi.org>
date Fri, 02 Jun 2023 16:49:28 +0200
parents libervia/pages/lists/create_from_tpl/page_meta.py@106bae41f5c8
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libervia/web/pages/lists/create_from_tpl/page_meta.py	Fri Jun 02 16:49:28 2023 +0200
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+
+from libervia.backend.tools.common import data_format
+from libervia.backend.core.log import getLogger
+from libervia.backend.core.i18n import D_
+from libervia.backend.core import exceptions
+from libervia.web.server.constants import Const as C
+from libervia.frontends.bridge.bridge_frontend import BridgeException
+
+log = getLogger(__name__)
+
+name = "list_create_from_tpl"
+access = C.PAGES_ACCESS_PROFILE
+template = "list/create_from_template.html"
+
+
+def parse_url(self, request):
+    self.get_path_args(request, ["template_id"])
+
+async def prepare_render(self, request):
+    data = self.get_r_data(request)
+    template_id = data["template_id"]
+    if not template_id:
+        self.page_error(request, C.HTTP_BAD_REQUEST)
+
+    template_data = request.template_data
+    profile = self.get_profile(request)
+    tpl_raw = await self.host.bridge_call(
+        "list_template_get",
+        template_id,
+        "",
+        profile,
+    )
+    template = data_format.deserialise(tpl_raw)
+    template['id'] = template_id
+    template_data["list_template"] = template
+
+async def on_data_post(self, request):
+    data = self.get_r_data(request)
+    template_id = data['template_id']
+    name, access = self.get_posted_data(request, ('name', 'access'))
+    if access == 'private':
+        access_model = 'whitelist'
+    elif access == 'public':
+        access_model = 'open'
+    else:
+        log.warning(f"Unknown access for template creation: {access}")
+        self.page_error(request, C.HTTP_BAD_REQUEST)
+    profile = self.get_profile(request)
+    try:
+        service, node = await self.host.bridge_call(
+            "list_template_create", template_id, name, access_model, profile
+        )
+    except BridgeException as e:
+        if e.condition == "conflict":
+            raise exceptions.DataError(D_("A list with this name already exists"))
+        else:
+            log.error(f"Can't create list from template: {e}")
+            raise e
+    data["post_redirect_page"] = (
+        self.get_page_by_name("lists"),
+        service,
+        node or "@",
+    )