~homeworkprod/byceps

ref: 342e5296ae417372e544ce931b442e98301c17a1 byceps/byceps/blueprints/common/style_guide/views.py -rw-r--r-- 972 bytes
342e5296 — Jochen Kupperschmidt Require body blocks in base templates 2 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
"""
byceps.blueprints.common.style_guide.views
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:Copyright: 2006-2021 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
"""

import xml.etree.ElementTree as ET

from flask import current_app

from ....util.framework.blueprint import create_blueprint
from ....util.framework.templating import templated


blueprint = create_blueprint('style_guide', __name__)


ICONS_FILENAME = 'static/style/icons.svg'


@blueprint.route('/')
@templated
def index():
    """Show style guide."""
    icon_names = list(sorted(_get_icon_names()))

    return {
        'icon_names': icon_names,
    }


def _get_icon_names():
    """Extract icon names from SVG file."""
    with current_app.open_resource(ICONS_FILENAME) as f:
        tree = ET.parse(f)

    svg_namespace = 'http://www.w3.org/2000/svg'
    symbol_elems = tree.iterfind('.//{%s}symbol' % svg_namespace)
    return {elem.get('id') for elem in symbol_elems}