From f251c96e989d67af886f849b35209c1a3744cedf Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Thu, 15 Oct 2020 17:35:10 +0200
Subject: [PATCH] Add content structure, Update to version 1.2.3

---
 .../TheCodeLabs_FlaskUtils/FlaskBaseApp.py     |  5 ++++-
 .../content/AbstractContentService.py          | 18 ++++++++++++++++++
 .../content/ContentPage.py                     | 17 +++++++++++++++++
 TheCodeLabs_FlaskUtils/setup.py                |  3 ++-
 4 files changed, 41 insertions(+), 2 deletions(-)
 create mode 100644 TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/content/AbstractContentService.py
 create mode 100644 TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/content/ContentPage.py

diff --git a/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/FlaskBaseApp.py b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/FlaskBaseApp.py
index d93ae3d..eeccd9c 100644
--- a/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/FlaskBaseApp.py
+++ b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/FlaskBaseApp.py
@@ -9,6 +9,7 @@ from flask import Flask, send_from_directory
 from flask import jsonify
 from gevent.pywsgi import WSGIServer
 
+from TheCodeLabs_FlaskUtils.content.AbstractContentService import AbstractContentService
 from TheCodeLabs_FlaskUtils.menu.AbstractMenuService import AbstractMenuService
 
 
@@ -20,13 +21,15 @@ class FlaskBaseApp(ABC):
                  settingsPath='../settings.json',
                  serveFavicon=True,
                  serveRobotsTxt=False,
-                 menuService: AbstractMenuService = None):
+                 menuService: AbstractMenuService = None,
+                 contentService: AbstractContentService = None):
         self._appName = appName
         self._rootDir = rootDir
         self._logger = logger
         self._serveFavicon = serveFavicon
         self._serveRobotsTxt = serveRobotsTxt
         self._menuService = menuService
+        self._contentService = contentService
 
         self._version = self.__parse_version(versionPath)
         self._settings = self.__parse_settings(settingsPath)
diff --git a/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/content/AbstractContentService.py b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/content/AbstractContentService.py
new file mode 100644
index 0000000..2eb1976
--- /dev/null
+++ b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/content/AbstractContentService.py
@@ -0,0 +1,18 @@
+import abc
+from abc import ABC
+from typing import List
+
+from TheCodeLabs_FlaskUtils.content.ContentPage import ContentPage
+
+
+class AbstractContentService(ABC):
+
+    @abc.abstractmethod
+    def get_content_pages(self) -> List[ContentPage]:
+        pass
+
+    def get_content_page(self, content_id: str) -> ContentPage or None:
+        content_pages = [page for page in self.get_content_pages() if page.id == content_id]
+        if not content_pages:
+            return None
+        return content_pages[0]
diff --git a/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/content/ContentPage.py b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/content/ContentPage.py
new file mode 100644
index 0000000..5d0afe0
--- /dev/null
+++ b/TheCodeLabs_FlaskUtils/TheCodeLabs_FlaskUtils/content/ContentPage.py
@@ -0,0 +1,17 @@
+from dataclasses import dataclass
+from typing import Dict
+
+
+@dataclass
+class ContentPage:
+    id: str
+    url: str
+    title: str
+
+    content_path: str
+    template_path: str
+
+
+@dataclass
+class ContextContentPageExtension:
+    context: Dict[str, any] = None
diff --git a/TheCodeLabs_FlaskUtils/setup.py b/TheCodeLabs_FlaskUtils/setup.py
index 552a5d0..7105ab0 100644
--- a/TheCodeLabs_FlaskUtils/setup.py
+++ b/TheCodeLabs_FlaskUtils/setup.py
@@ -5,9 +5,10 @@ setup(
     packages=[
         'TheCodeLabs_FlaskUtils',
         'TheCodeLabs_FlaskUtils.auth',
+        'TheCodeLabs_FlaskUtils.content',
         'TheCodeLabs_FlaskUtils.menu'
     ],
-    version='1.2.2',
+    version='1.2.3',
     license='MIT',
     description='Useful python classes',
     author='TheCodeLabs',
-- 
GitLab