Skip to content
Snippets Groups Projects
Commit 262d0748 authored by Sebastian Lobinger's avatar Sebastian Lobinger
Browse files

started implementing Example App in old-stuff folder see issue #11

parent 97502a95
Branches
No related tags found
1 merge request!10Resolve "Example App schreiben"
from flask_microservices import MicroServicesApp, url from ..sams_classes import SAMSHub
from flask import render_template as flask_render_template, request import yaml
from . import views
from . import functions
from jinja2 import StrictUndefined
app = MicroServicesApp(__name__) with open('config/config.yaml', 'r') as f:
app.secret_key = 'berry' hubConf = yaml.load(f.read())
app.enabled_modules = functions.get_enabled_modules() hub = SAMSHub(config=hubConf.get(
app.config['default_language'] = 'de'; 'ExampleApp',
functions.apply_config(app) { 'default_language': 'en', 'main_app': 'Main'}
if app.config['jinja2_strict_undefined']: ))
app.jinja_env.undefined = StrictUndefined hub.flaskApp.config.update(hubConf.get('flask', {}))
for appName in hubConf.get('apps', []):
# By default, this will assume your modules directory is "./modules" with open('../' + appName + '/manifest.yaml') as f:
# if a second argument is not provided. manifest = yaml.load(f.read())
app.register_urls(app.enabled_modules) # it is possible for the exampleApp to manipulate the manifest if needed
app.blueprints['hallo_module'].register_urls( # manifest.update({}) <-- or whatever
[url( """ TODO: loadDictFromYAMLFiles """
'/test', view_func=views.home hub.addApp(SAMSApp(name = appName, manifest = manifest, langDict = langDict))
, name='hallo_module_subview2')]) \ No newline at end of file
app.add_url_rule('/', 'home', views.home)
app.add_url_rule('/login', 'login', views.login, methods=['GET'])
app.add_url_rule('/login', 'login_post', views.login_post, methods=['POST'])
print (app.url_map)
@app.context_processor
def context_processor():
return functions.before_template(app=app)
#app.config['EXPLAIN_TEMPLATE_LOADING'] = True
\ No newline at end of file
import yaml
import fnmatch
from flask import request, session
from .exceptions import NoDefaultLanguage
import os
from flask_microservices import url
def get_enabled_modules():
ymlFile = open('samsHUB/config/modules.yaml', 'r')
ymlObj = yaml.load(ymlFile)
ymlFile.close()
return ymlObj
def parse_manifest_urls(import_name):
yamlFile = open('samsHUB/modules/' + import_name + '/manifest.yaml')
manifest = yaml.load(yamlFile)
urlpatterns = []
for view in views:
urlpatterns.append(url(rule, view_func, name, methods))
pass
def apply_config(app):
yaml_file = open('samsHUB/config/config.yaml')
app.config.update(yaml.load(yaml_file))
app.config.get('samsHUB', {})
yaml_file.close()
def load_dict_from_yaml(filepath):
yaml_file = open(filepath)
yaml_dict = yaml.load(yaml_file)
yaml_file.close()
return yaml_dict
def get_lang_path(module='main'):
if module == 'main':
return 'samsHUB/languages/'
if module == None:
return None
return 'samsHUB/modules/' + module + '/languages/'
def get_mod_default_lang(module):
if module == None:
return None
manifest = load_dict_from_yaml(
filepath = 'samsHUB/modules/' + request.blueprint + '/manifest.yaml')
return manifest['default_language']
def generate_lang(lang_path, default_lang):
if lang_path == None:
return None
session.setdefault('lang', default_lang)
try:
default_lang_dict = load_dict_from_yaml(
filepath = lang_path + default_lang + '.yaml')
except FileNotFoundError as err:
raise NoDefaultLanguage(err)
if not os.path.exists(lang_path + session['lang'] + '.yaml'):
return default_lang_dict
default_lang_dict.update(load_dict_from_yaml(
filepath = lang_path + session['lang'] + '.yaml'))
return default_lang_dict
def generate_menu(modules, hub_lang, module_base_path = '/modules/'):
menu_list = [{'name': hub_lang['home_title'], 'url': '/', 'subentries': None}]
for module in modules:
manifest = load_dict_from_yaml(
filepath = 'samsHUB/modules/' + module + '/manifest.yaml')
mod_lang = generate_lang(
lang_path = get_lang_path(module = module)
, default_lang = manifest['default_language'])
menu = manifest.get('menu'
, [{'name_string': 'module_name', 'url': '/modules/' + module}])
menu_list.extend(convert_to_menentries(
menu = menu, mod_lang = mod_lang, module_base_path = module_base_path))
print(menu_list)
return menu_list
def convert_to_menentries(menu, mod_lang, module_base_path):
if menu == None:
return None
entries = []
for entry in menu:
parsed_entry = {'url': entry['url'], 'name': mod_lang[entry['name_string']]}
parsed_entry['subentries'] = convert_to_menentries(
menu = entry.get(
'subviews'), mod_lang = mod_lang, module_base_path = module_base_path)
entries.append(parsed_entry)
return entries
def before_template(app):
inject_dict = {}
inject_dict['mod_lang'] = generate_lang(
lang_path = get_lang_path(module = request.blueprint)
, default_lang = get_mod_default_lang(module = request.blueprint))
inject_dict['hub_lang'] = generate_lang(
lang_path = get_lang_path(module='main')
, default_lang = app.config['default_language'])
inject_dict['menu_list'] = generate_menu(
modules = app.enabled_modules, hub_lang = inject_dict['hub_lang'])
return inject_dict
\ No newline at end of file
from ExampleApp import app from ExampleApp import hub
app.run() hub.flaskApp.run()
...@@ -146,10 +146,6 @@ class CaseMinimalSAMSHub(unittest.TestCase): ...@@ -146,10 +146,6 @@ class CaseMinimalSAMSHub(unittest.TestCase):
def test_add_app_registers_blueprint(self): def test_add_app_registers_blueprint(self):
"""The blueprint of the addedApp is registered in flaskApp""" """The blueprint of the addedApp is registered in flaskApp"""
self.assertEqual(
self.hub.flaskApp.blueprints.get('test')
, None, 'Precondition, hub.flaskApp has not Blueprint "test"'
)
self.hub.addApp( self.hub.addApp(
SAMSApp( SAMSApp(
name = 'test', manifest = {'default_language': 'en'} name = 'test', manifest = {'default_language': 'en'}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment