Source code for camcops_server.cc_modules.cc_mako_helperfunc

#!/usr/bin/env python

"""
camcops_server/cc_modules/cc_mako_helperfunc.py

===============================================================================

    Copyright (C) 2012, University of Cambridge, Department of Psychiatry.
    Created by Rudolf Cardinal (rnc1001@cam.ac.uk).

    This file is part of CamCOPS.

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

    CamCOPS 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 General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with CamCOPS. If not, see <https://www.gnu.org/licenses/>.

===============================================================================

**Helper functions used by Mako templates.**

"""

from typing import Any, Iterable, List, TYPE_CHECKING

from camcops_server.cc_modules.cc_pyramid import ViewParam

if TYPE_CHECKING:
    from camcops_server.cc_modules.cc_request import CamcopsRequest


# =============================================================================
# Helper functions
# =============================================================================


[docs]def listview( req: "CamcopsRequest", objects: Iterable[Any], route_name: str, description: str, icon: str, sep: str = "<br>", ) -> str: """ Provides an autolinked catalogue of objects, in HTML, via those objects' ``id`` fields and a standard URL format Args: req: A :class:`camcops_server.cc_modules.cc_request.CamcopsRequest`. objects: Objects to catalogue. route_name: Pyramid route name. description: Object type description. icon: Icon name for each object. sep: Separator string for HTML. Returns: str: HTML """ parts = [] # type: List[str] for obj in objects: obj_id = obj.id url = req.route_url(route_name, _query={ViewParam.ID: obj_id}) text = f"{description} {obj_id}" parts.append(req.icon_text(icon=icon, url=url, text=text)) return sep.join(parts)