From 9864ed006f80bc0e8c9e8e8a8c3a1599f9353f0f Mon Sep 17 00:00:00 2001 From: Geson-anko <59220704+Geson-anko@users.noreply.github.com> Date: Wed, 18 May 2022 19:44:00 +0900 Subject: [PATCH 1/3] UPDATE base_app.py ADD property `process_shared_value` --- JarvisEngine/apps/base_app.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/JarvisEngine/apps/base_app.py b/JarvisEngine/apps/base_app.py index 13ca6eb..aa7e4cd 100644 --- a/JarvisEngine/apps/base_app.py +++ b/JarvisEngine/apps/base_app.py @@ -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 @@ -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!") \ No newline at end of file + 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 + + From 0ff971a7870aa462d5ba0b21792ef7a4c5ab2ab0 Mon Sep 17 00:00:00 2001 From: Geson-anko <59220704+Geson-anko@users.noreply.github.com> Date: Wed, 18 May 2022 19:44:14 +0900 Subject: [PATCH 2/3] ADD test_process_shared_values --- tests/apps/test_base_app.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/apps/test_base_app.py b/tests/apps/test_base_app.py index 5975206..4f1eb40 100644 --- a/tests/apps/test_base_app.py +++ b/tests/apps/test_base_app.py @@ -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)) @@ -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 == fdwl + assert MainApp._process_shared_values == fdwl + assert App0.process_shared_values == fdwl + assert App1.process_shared_values == fdwl + App1_1 = App1.child_apps["App1_1"] + App1_2 = App1.child_apps["App1_2"] + + assert App1_1.process_shared_values == fdwl + assert App1_2._process_shared_values == fdwl \ No newline at end of file From 723efba6d61e36a0c02ac78ef3f6324016ed5a1f Mon Sep 17 00:00:00 2001 From: Geson-anko <59220704+Geson-anko@users.noreply.github.com> Date: Wed, 18 May 2022 19:53:28 +0900 Subject: [PATCH 3/3] Update test_base_app.py Fixed `=` to `is` operation because we want them to refer the same `FolderDict` --- tests/apps/test_base_app.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/apps/test_base_app.py b/tests/apps/test_base_app.py index 4f1eb40..faa8d65 100644 --- a/tests/apps/test_base_app.py +++ b/tests/apps/test_base_app.py @@ -138,12 +138,12 @@ def test_process_shared_values(): fdwl= FolderDict_withLock(sep=".") MainApp.process_shared_values = fdwl - assert MainApp.process_shared_values == fdwl - assert MainApp._process_shared_values == fdwl - assert App0.process_shared_values == fdwl - assert App1.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 == fdwl - assert App1_2._process_shared_values == fdwl \ No newline at end of file + assert App1_1.process_shared_values is fdwl + assert App1_2._process_shared_values is fdwl \ No newline at end of file