view libervia/server/pages_tools.py @ 1505:a169cbc315f0

server: don't wait anymore for libervia app to be fully started: following change in backend, libervia app are started and the loading workflow continue immediately, the proxy is created only when the app is known to be actually started (through the `application_started` signal or a flag received when starting the application). This avoid stopping the loading of website for a long time, or breaking when a timeout is reached.
author Goffi <goffi@goffi.org>
date Sat, 04 Mar 2023 18:37:17 +0100
parents 907f519faaf0
children 106bae41f5c8
line wrap: on
line source

#!/usr/bin/env python3

# Libervia Web frontend
# Copyright (C) 2011-2021 Jérôme Poisson <goffi@goffi.org>

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.

# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

"""Helper methods for common operations on pages"""

from twisted.internet import defer
from sat.core.i18n import _
from sat.core.log import getLogger
from sat.tools.common import data_format
from libervia.server.constants import Const as C


log = getLogger(__name__)


def deserialise(comments_data_s):
    return data_format.deserialise(comments_data_s)


def retrieveComments(self, service, node, profile, pass_exceptions=True):
    """Retrieve comments from server and convert them to data objects

    @param service(unicode): service holding the comments
    @param node(unicode): node to retrieve
    @param profile(unicode): profile of the user willing to find comments
    @param pass_exceptions(bool): if True bridge exceptions will be ignored but logged
        else exception will be raised
    """
    try:
        d = self.host.bridgeCall(
            "mbGet", service, node, C.NO_LIMIT, [], data_format.serialise({}), profile
        )
    except Exception as e:
        if not pass_exceptions:
            raise e
        else:
            log.warning(
                _("Can't get comments at {node} (service: {service}): {msg}").format(
                    service=service, node=node, msg=e
                )
            )
            return defer.succeed([])

    d.addCallback(deserialise)
    return d