summaryrefslogtreecommitdiffstats
path: root/kyrias_website/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'kyrias_website/__init__.py')
-rw-r--r--kyrias_website/__init__.py66
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)