Source code for toui.structure

"""
A module for containing classes that help in organizing the apps.
"""

import flask
from copy import copy


[docs]class ToUIBlueprint(flask.Blueprint): """ A class that inherits `flask.Blueprint`. The difference between this class and `flask.Blueprint` is that you can add `Page` objects to this class. To learn how to use blueprints, check `flask's` documentation https://flask.palletsprojects.com/. Examples -------- Creating a blueprint: >>> from toui import ToUIBlueprint >>> blueprint = ToUIBlueprint("Blueprint", __name__) Adding a `Page` to a blueprint: >>> from toui import Page >>> page = Page(html_str="<h1>This page is part of a blueprint</h1>", url="/") >>> blueprint.add_pages(page) Creating a `Website` and adding the blueprint to it: >>> from toui import Website >>> app = Website(__name__) >>> app.register_toui_blueprint(blueprint) See Also -------- flask.Blueprint """ def __init__(self, *args, **kwargs): """ Parameters ---------- args `flask.Blueprint` arguments. kwargs `flask.Blueprint` keyword arguments. """ super(ToUIBlueprint, self).__init__(*args, **kwargs) self.pages = []
[docs] def add_pages(self, *pages, do_copy=False): """Adds pages to the blueprint. Parameters ---------- pages: list(Page) List of 'Page' objects. """ for page in pages: if do_copy: page = copy(page) self.pages.append(page)
[docs] def register_toui_blueprint(self, blueprint, **options): """ Registers a `ToUIBlueprint` object. It is similar to `flask.Blueprint.register_blueprint`. Parameters ---------- blueprint: toui.structure.ToUIBlueprint options Same as `flask.Blueprint.register_blueprint` `options` parameter. See Also -------- toui.structure.ToUIBlueprint flask.Blueprint.register_blueprint """ self.add_pages(*blueprint.pages) self.register_blueprint(blueprint, **options)
if __name__ == "__main__": import doctest doctest.testmod()