view libervia/web/pages/lists/create_from_tpl/page_meta.py @ 1545:be20e6ac9f22

browser (bridge): add methods/properties to wait for Websocket/BroadcastChannel to be ready
author Goffi <goffi@goffi.org>
date Thu, 06 Jul 2023 12:10:25 +0200
parents eb00d593801d
children
line wrap: on
line source

#!/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 "@",
    )