diff options
Diffstat (limited to 'kyrias_website/__init__.py')
-rw-r--r-- | kyrias_website/__init__.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/kyrias_website/__init__.py b/kyrias_website/__init__.py new file mode 100644 index 0000000..474663d --- /dev/null +++ b/kyrias_website/__init__.py @@ -0,0 +1,66 @@ +import os + +import flask_assets +from flask import Flask +from flask_flatpages import FlatPages +from werkzeug.utils import cached_property + + +class CustomFlatPages(FlatPages): + def __init__(self, app=None, name=None): + super(CustomFlatPages, self).__init__(app=app, name=name) + self.app = app + + @cached_property + def _pages(self): + """Forget all pages and nuke our own cache""" + try: + del app.__dict__['journal_entries'] + del app.__dict__['journal_tags'] + except KeyError: + pass + return super(CustomFlatPages, self)._pages + + +class CustomFlask(Flask): + def __init__(self, *args, **kwargs): + super(CustomFlask, self).__init__(*args, **kwargs) + + config = { + 'default': 'kyrias_website.config.BaseConfig', + 'development': 'kyrias_website.config.DevelopmentConfig', + } + + config_name = os.getenv('WEBSITE_CONFIGURATION', 'default') + self.config.from_object(config[config_name]) + + assets = flask_assets.Environment(self) + css = flask_assets.Bundle('base.css', filters='cssmin', output='screen.css') + assets.register('css_all', css) + + self.pages = CustomFlatPages(self, 'pages') + self.journal = CustomFlatPages(self, 'journal') + + @cached_property + def journal_entries(self): + return sorted(self.journal, key=lambda x: x.meta.get('date')) + + @cached_property + def journal_tags(self): + tags = {} + for entry in self.journal_entries: + if 'tags' not in entry.meta: + tags.setdefault('untagged', set()).add(entry) + else: + for tag in entry.meta.get('tags'): + tags.setdefault(tag, set()).add(entry) + + return tags + + +app = CustomFlask(__name__) + +import kyrias_website.views + +if __name__ == '__main__': + app.run(port=5000) |