Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Base app/process shared values #118 #119

Merged
merged 3 commits into from
May 18, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions JarvisEngine/apps/base_app.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from __future__ import annotations
from attr_dict import AttrDict
from folder_dict import FolderDict
from typing import *
from types import *
from ..core import logging_tool, name as name_tools
from ..core.value_sharing import FolderDict_withLock
import importlib
import os
from collections import OrderedDict
Expand Down Expand Up @@ -190,4 +190,22 @@ def import_app(path:str) -> Tuple[BaseApp, ModuleType]:
if issubclass(app_cls, BaseApp):
return app_cls, mod
else:
raise ImportError(f"{path} is not a subclass of BaseApp!")
raise ImportError(f"{path} is not a subclass of BaseApp!")

_process_shared_values: FolderDict_withLock = None

@property
def process_shared_values(self) -> FolderDict_withLock | None:
return self._process_shared_values

@process_shared_values.setter
def process_shared_values(self, p_sv:FolderDict_withLock) -> None:
"""
Set process shared value to `self` and `child_apps`
Do not call if application process was started.
"""
self._process_shared_values = p_sv
for app in self.child_apps.values():
app.process_shared_values = p_sv


29 changes: 29 additions & 0 deletions tests/apps/test_base_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from JarvisEngine.apps.launcher import to_project_config
import os
import sys
from JarvisEngine.core.value_sharing import FolderDict_withLock

PROJECT_DIR = "TestEngineProject"
sys.path.insert(0,os.path.join(os.getcwd(),PROJECT_DIR))
Expand Down Expand Up @@ -118,3 +119,31 @@ def test__init__():
assert App1_2.config == apps.App1_2
assert App1_1.app_dir == os.path.join(app_dir, "App1_1")
assert App1_2.app_dir == os.path.join(app_dir, "App1_2")

@_cd_project_dir
def test_process_shared_values():
name = "MAIN"
config = project_config.MAIN
app_dir = PROJECT_DIR
MainApp = base_app.BaseApp(name, config, engine_config,project_config,app_dir)

# Initial value is None
assert MainApp.process_shared_values == None
assert MainApp._process_shared_values == None
App0 = MainApp.child_apps["App0"]
App1 = MainApp.child_apps["App1"]
assert App0.process_shared_values == None
assert App1.process_shared_values == None

fdwl= FolderDict_withLock(sep=".")

MainApp.process_shared_values = fdwl
assert MainApp.process_shared_values is fdwl
assert MainApp._process_shared_values is fdwl
assert App0.process_shared_values is fdwl
assert App1.process_shared_values is fdwl
App1_1 = App1.child_apps["App1_1"]
App1_2 = App1.child_apps["App1_2"]

assert App1_1.process_shared_values is fdwl
assert App1_2._process_shared_values is fdwl