view libervia/web/server/pages_tools.py @ 1526:fc2bc024600d

build: do not set explicitely `libervia` package: `twisted` needs to be installed, and if we don't specify anything, Hatch looks automatically for all directories containing .py files, so it includes `libervia` and `twisted`.
author Goffi <goffi@goffi.org>
date Thu, 08 Jun 2023 21:07:55 +0200
parents eb00d593801d
children
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 libervia.backend.core.i18n import _
from libervia.backend.core.log import getLogger
from libervia.backend.tools.common import data_format
from libervia.web.server.constants import Const as C


log = getLogger(__name__)


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


def retrieve_comments(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.bridge_call(
            "mb_get", 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