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

V1.2 #53

Merged
merged 125 commits into from
Mar 27, 2024
Merged

V1.2 #53

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
09bb072
feat: add MongoDB plugin
ZLI-afk Nov 10, 2023
2be826a
feat: add record data function for MongoDB.py
ZLI-afk Nov 13, 2023
3d943ca
feat: support auto archive results after workflow completed
ZLI-afk Nov 13, 2023
30c3c6f
fix: support depth for recursive update for sync database
ZLI-afk Nov 14, 2023
a3d2660
fix(IMPORTANT): duplicated files in property task path resulted from …
ZLI-afk Nov 14, 2023
9c59b6b
feat: add DynamoDB.py to support DynamoDB
ZLI-afk Nov 14, 2023
e73fdda
feat: add DynamoDB.py to support DynamoDB
ZLI-afk Nov 15, 2023
5ae7e5b
feat: add database client and archive.py for result archive
ZLI-afk Nov 22, 2023
c9b1c83
feat(unfinished): add DASH reporter function for local results visual…
ZLI-afk Nov 28, 2023
0652e9d
feat(unfinished): add DASH reporter function for local results visual…
ZLI-afk Nov 28, 2023
c5791bb
feat(unfinished): add DASH reporter function for local results visual…
ZLI-afk Nov 28, 2023
a4662ee
feat(unfinished): add DASH reporter function for local results visual…
ZLI-afk Nov 28, 2023
54aa2e1
feat(unfinished): add DASH reporter function for local results visual…
ZLI-afk Nov 28, 2023
35723c1
feat: add DASH reporter function for local results visualization
ZLI-afk Dec 5, 2023
eb74d46
feat: add DASH reporter function for local results visualization
ZLI-afk Dec 5, 2023
cac2e21
feat: add DASH reporter function for local results visualization
ZLI-afk Dec 6, 2023
d064257
fix: turn off reload mode of flask
ZLI-afk Dec 7, 2023
7ebf9dc
fix: fix refine bug for post_process of Gamma.py
ZLI-afk Dec 9, 2023
b070af4
Chore: Update README.md for v1.2.0
ZLI-afk Dec 10, 2023
00bda7f
Chore: Update README.md for v1.2.0
ZLI-afk Dec 10, 2023
b3bcb4d
Chore: Update README.md for v1.2.0
ZLI-afk Dec 10, 2023
d98147d
Chore: Update README.md for v1.2.0
ZLI-afk Dec 10, 2023
6f42e1d
feat: add update dropdown list callback in DashReportApp.py
ZLI-afk Dec 12, 2023
9df4857
feat: add update dropdown list callback in DashReportApp.py
ZLI-afk Dec 12, 2023
2f94869
fix: functional clipboards
ZLI-afk Dec 12, 2023
740dd71
chore: print NOTE for abnormal reload error of the dash app
ZLI-afk Dec 13, 2023
781af11
feat: support archive result json files directly in archive.py
ZLI-afk Dec 14, 2023
5cc315c
fix: inappropriate indentification of lattice structure for alloy
ZLI-afk Dec 18, 2023
f9ea6e5
fix: delete breakpoint
ZLI-afk Dec 18, 2023
58427cf
fix: delete breakpoint
ZLI-afk Dec 18, 2023
2ae352c
chore: revise label and table tile context in report app
ZLI-afk Dec 29, 2023
5a3d2ae
chore: adjust report APP UI frontsize
ZLI-afk Dec 30, 2023
7f25d09
feat: support eight SIA structure for HCP in Interstitial.py
ZLI-afk Jan 3, 2024
63d9918
feat: support eight SIA structure for HCP in Interstitial.py
ZLI-afk Jan 3, 2024
701fc53
feat: support MEAM-spline type interaction for LAMMPS
ZLI-afk Jan 4, 2024
b2e03e2
feat: support MEAM-spline type interaction for LAMMPS
ZLI-afk Jan 4, 2024
6942a48
feat: add structure info into relaxation results and final reporter; …
ZLI-afk Jan 4, 2024
1214ae6
feat: add structure info into relaxation results and final reporter; …
ZLI-afk Jan 4, 2024
429f3c5
fix: skip task.000000 POSCAR structure
ZLI-afk Jan 4, 2024
ce3006e
fix: skip task.000000 POSCAR structure
ZLI-afk Jan 4, 2024
710f211
feat: add slip length information to post of Gamma.py
ZLI-afk Jan 4, 2024
bbe0e29
feat: support seekpath for automatic band path seek for Phonon.py
ZLI-afk Jan 5, 2024
bea20ae
feat: support seekpath for automatic band path seek for Phonon.py
ZLI-afk Jan 7, 2024
0842083
feat: support seekpath for automatic band path seek for Phonon.py
ZLI-afk Jan 7, 2024
07fd538
feat: support seekpath for automatic band path seek for Phonon.py
ZLI-afk Jan 7, 2024
0bf9801
feat: support seekpath for automatic band path seek for Phonon.py and…
ZLI-afk Jan 7, 2024
99d1c54
feat: support seekpath for automatic band path seek for Phonon.py and…
ZLI-afk Jan 7, 2024
08d851f
fix: false reading of BAND_LABELS by input in Phonon.py
ZLI-afk Jan 8, 2024
2c834cb
fix: false reading of BAND_LABELS by input in Phonon.py
ZLI-afk Jan 8, 2024
d4a2c5e
fix: bug of missing link for the meam lib file in meam in Lammps.py
ZLI-afk Jan 8, 2024
f846e24
fix: bug of missing link for the meam lib file in meam in Lammps.py
ZLI-afk Jan 8, 2024
54ca345
feat: unify the color list for line plot of all properties in reporte…
ZLI-afk Jan 8, 2024
100ab0c
feat: unify the color list for line plot of all properties in reporte…
ZLI-afk Jan 8, 2024
969e048
feat: add atomic type map to pair_style in deepmd in.lammps template
ZLI-afk Jan 9, 2024
7a820e8
feat: support snap type of Ml interation for md calculation
ZLI-afk Jan 9, 2024
07321be
feat: support gap type of Ml interation for md calculation
ZLI-afk Jan 9, 2024
119b1d7
feat: support gap type of Ml interation for md calculation
ZLI-afk Jan 9, 2024
313f90b
feat: support rann type of Ml interation for md calculation
ZLI-afk Jan 9, 2024
1c1339e
feat: expose parameters of VoronoiInterstitialGenerator
ZLI-afk Jan 11, 2024
f7c30c1
fix: unstable pseudo interstitial structure that may be filtered by p…
ZLI-afk Jan 12, 2024
24bc85f
fix: remove all tmp potential model files
ZLI-afk Jan 13, 2024
be1522c
fix: remove all tmp potential model files
ZLI-afk Jan 15, 2024
3d09529
fix: remove all POTCAR in vasp tasks
ZLI-afk Jan 15, 2024
a865c0a
fix: remove all POTCAR in vasp tasks
ZLI-afk Jan 15, 2024
e7addbd
fix: set default incar value of ISMEAR=0, SIGMA=0.01 for finite displ…
ZLI-afk Jan 17, 2024
9c5b210
fix: set default incar value of ISMEAR=0, SIGMA=0.01 for finite displ…
ZLI-afk Jan 18, 2024
227bc62
fix: set default incar value of ISMEAR=0, SIGMA=0.01 for finite displ…
ZLI-afk Jan 19, 2024
1ee1dab
feat: 1. only upload necessary files and path onto dflow instead of a…
ZLI-afk Jan 21, 2024
4dbe5f7
feat: 1. only upload necessary files and path onto dflow instead of a…
ZLI-afk Jan 21, 2024
3101d10
fix: robust of temp upload function regards to one type of json file …
ZLI-afk Jan 22, 2024
1b4e10e
fix: bug of missing refine init directory in tmp upload path
ZLI-afk Jan 26, 2024
5e3eb36
feat(BREAK!): abandon PropertyFlow.py with parallelled SimpleProperty…
ZLI-afk Jan 26, 2024
60a8db1
chore: simplify process monitoring codes in flow.py
ZLI-afk Jan 27, 2024
cebabd0
fix: bug related to wrong parameter files transfer in submit.py
ZLI-afk Jan 27, 2024
d019c66
fix: bug related to wrong dead loop when sub-flow failed in flow.py
ZLI-afk Jan 27, 2024
94995cd
fix: reformat sub-props flows key string
ZLI-afk Jan 30, 2024
af2a1a5
feat: add download.py for results retrieving manually.
ZLI-afk Feb 1, 2024
e810c4f
Update README.md
ZLI-afk Feb 2, 2024
d8a5bba
feat: change plot style to white background in DashReportApp.py
ZLI-afk Feb 16, 2024
180b2cb
feat(fix): add MACE type of interation for Lammps.py; fix potential u…
ZLI-afk Feb 22, 2024
131618b
feat(fix): add MACE type of interation for Lammps.py; fix potential u…
ZLI-afk Feb 22, 2024
92b8275
chore: change download cmd string to retrieve
ZLI-afk Feb 23, 2024
ccd2798
chore: remove phonoLAMMPS from local dependency in setup.py
ZLI-afk Feb 25, 2024
a43a7ac
feat: remove all potential files in relaxation_ops.py
ZLI-afk Feb 25, 2024
ca2408b
fix: detour mismatch issue of lammps minimization output with deepmd-…
ZLI-afk Feb 26, 2024
74c4f28
feat: support customized tag for all_result.json in report.py
ZLI-afk Feb 26, 2024
334fa13
fix: fix bug of relaxation json provided only submission in submit.py
ZLI-afk Feb 26, 2024
f671534
chore: change webbrowser.open_new to webbrowser.open in DashReportApp.py
ZLI-afk Feb 26, 2024
2bd3a87
fix: clean potential files under configuration directories when do po…
ZLI-afk Feb 27, 2024
c739d4f
chore: revise phonon label position in property_report.py
ZLI-afk Feb 27, 2024
8c531df
chore: revise confusing codes
ZLI-afk Feb 29, 2024
533f890
Change!: change 'test' cmd to 'run'
ZLI-afk Mar 2, 2024
095c371
change: remove python3.8 from test list in main.yml
ZLI-afk Mar 2, 2024
d30dfe9
fix: fix unnecessary config file FileNotFoundError for run.py
ZLI-afk Mar 6, 2024
bbae84d
fix: fix bug of SameFileError of copy POSCAR-unit in run mode of post…
ZLI-afk Mar 6, 2024
eb81c3c
fix: fix bug of single step run not retrieve of vasprun.xml during ph…
ZLI-afk Mar 7, 2024
ed1c5a7
fix: fix bug of single step run not retrieve of vasprun.xml during ph…
ZLI-afk Mar 7, 2024
54c9b0e
fix: fix bug of single step run not retrieve of FORCE_CONSTANTS durin…
ZLI-afk Mar 7, 2024
c542eb6
chore: Update README.md
ZLI-afk Mar 7, 2024
a43a876
fix dependencies
ZLI-afk Mar 15, 2024
d6ce9a8
revise dependencies
ZLI-afk Mar 15, 2024
1964e09
revise dependencies
ZLI-afk Mar 15, 2024
5a0d08c
revise python dependencies to >=3.8
ZLI-afk Mar 15, 2024
dabc7c4
revise python dependencies to >=3.8
ZLI-afk Mar 15, 2024
fcee0b5
revise python dependencies to >=3.8
ZLI-afk Mar 15, 2024
083d6fe
revise python dependencies to >=3.8
ZLI-afk Mar 15, 2024
25decaf
revise python dependencies to >=3.8
ZLI-afk Mar 15, 2024
47a4014
revise python dependencies to >=3.8
ZLI-afk Mar 15, 2024
bd66b67
revise python dependencies to >=3.8
ZLI-afk Mar 15, 2024
e07721c
feats: support dflow operations of subcommands: list; get; getsteps; …
ZLI-afk Mar 20, 2024
194fbf0
update README.md
ZLI-afk Mar 20, 2024
9953703
fix: Kpoint.from_string to from_str
ZLI-afk Mar 21, 2024
6918f47
feat: add .workflow.log to record dflow operations and workflow ID
ZLI-afk Mar 21, 2024
9a14cfc
feat: add .workflow.log to record dflow operations and workflow ID
ZLI-afk Mar 21, 2024
ce1c39d
feat: add .workflow.log to record dflow operations and workflow ID
ZLI-afk Mar 21, 2024
9f0a928
update README.md
ZLI-afk Mar 21, 2024
6b22fc7
chore: integrate retrieve.py into main.py and delete retrieve.py
ZLI-afk Mar 21, 2024
c2c15aa
chore: revise print out help in DashReportApp.py
ZLI-afk Mar 22, 2024
c60068e
update README.md for v1.2.0
ZLI-afk Mar 22, 2024
04f321c
update README.md for v1.2.0
ZLI-afk Mar 22, 2024
0468cb8
update README.md for v1.2.0
ZLI-afk Mar 22, 2024
b0c4720
fix: detour lammps dump synchronizing problem when deepmd-kit version…
ZLI-afk Mar 22, 2024
bc4ea77
Merge branch 'devel-1.2.0' into v1.2
ZLI-afk Mar 27, 2024
12b5922
update README.md
ZLI-afk Mar 27, 2024
d9e17aa
Merge remote-tracking branch 'origin/v1.2' into v1.2
ZLI-afk Mar 27, 2024
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
154 changes: 122 additions & 32 deletions README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion apex/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import os
__version__ = '1.1.1'
__version__ = '1.2.0'
LOCAL_PATH = os.getcwd()


Expand Down
271 changes: 271 additions & 0 deletions apex/archive.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,271 @@
import glob
import logging
import json
import os
from typing import List
from pathlib import Path
from monty.json import MontyEncoder
from monty.serialization import loadfn, dumpfn
from apex.utils import (
judge_flow,
json2dict,
update_dict,
return_prop_list,
load_config_file
)
from apex.database.DatabaseFactory import DatabaseFactory
from apex.config import Config


class ResultStorage:
def __init__(self, work_dir):
self.work_dir = Path(work_dir).absolute()
self.result_dict = {'work_path': str(self.work_dir)}

@property
def result_data(self):
return self.result_dict

@property
def work_dir_path(self):
return str(self.work_dir)

@json2dict
def sync_relax(self, relax_param: dict):
# sync results from relaxation task
confs = relax_param["structures"]
interaction = relax_param["interaction"]
conf_dirs = []
for conf in confs:
conf_dirs.extend(glob.glob(str(self.work_dir / conf)))
conf_dirs.sort()
for ii in conf_dirs:
relax_task = os.path.join(ii, 'relaxation/relax_task')
inter = os.path.join(relax_task, 'inter.json')
task = os.path.join(relax_task, 'task.json')
structure = os.path.join(relax_task, 'structure.json')
result = os.path.join(relax_task, 'result.json')
if not (
os.path.isfile(inter)
and os.path.isfile(task)
and os.path.isfile(result)
):
logging.warning(
f"relaxation result path is not complete, will skip result extraction from {relax_task}"
)
continue
logging.info(msg=f"extract results from {relax_task}")
conf_key = os.path.relpath(ii, self.work_dir)
conf_dict = {"interaction": loadfn(inter),
"parameter": loadfn(task),
"structure_info": loadfn(structure),
"result": loadfn(result)}
new_dict = {conf_key: {"relaxation": conf_dict}}
update_dict(self.result_dict, new_dict)

@json2dict
def sync_props(self, props_param: dict, archive_tasks: bool = False):
# sync results from property test
confs = props_param["structures"]
interaction = props_param["interaction"]
properties = props_param["properties"]
prop_list = return_prop_list(properties)
conf_dirs = []
for conf in confs:
conf_dirs.extend(glob.glob(str(self.work_dir / conf)))
conf_dirs.sort()
for ii in conf_dirs:
for jj in prop_list:
prop_dir = os.path.join(ii, jj)
result = os.path.join(prop_dir, 'result.json')
param = os.path.join(prop_dir, 'param.json')
task_list_path = os.path.join(prop_dir, 'task_list.json')
if not os.path.isfile(result):
logging.warning(
f"Property post-process is not complete, will skip result extraction from {prop_dir}"
)
continue
logging.info(msg=f"extract results from {prop_dir}")
conf_key = os.path.relpath(ii, self.work_dir)
result_dict = loadfn(result)
try:
param_dict = loadfn(param)
except FileNotFoundError:
logging.warning(f'{param} file not found')
param_dict = None
prop_dict = {"parameter": param_dict, "result": result_dict}
# extract running details of each task
if archive_tasks:
logging.debug(msg='Archive running details of tasks...')
logging.warning(
msg='You are trying to archive detailed running log of each task into database,'
'which may exceed the limitation of database allowance.'
'Please consider split the data or only archive details of the most important property.'
)
try:
task_list = loadfn(task_list_path)
result_task_path = [os.path.join(prop_dir, task, 'result_task.json') for task in task_list]
except FileNotFoundError:
logging.warning(f'{task_list_path} file not found, will track all tasks listed {prop_dir}')
result_task_path = glob.glob(os.path.join(prop_dir, 'task.*', 'result_task.json'))
result_task_path.sort()
task_result_list = [loadfn(kk) for kk in result_task_path]
prop_dict["tasks"] = task_result_list

new_dict = {conf_key: {jj: prop_dict}}
update_dict(self.result_dict, new_dict)


def connect_database(config):
# connect to database
if config.database_type == 'mongodb':
logging.info(msg='Use database type: MongoDB')
database = DatabaseFactory.create_database(
'mongodb',
'mongodb',
config.mongodb_database,
config.mongodb_collection,
**config.mongodb_config_dict
)
elif config.database_type == 'dynamodb':
logging.info(msg='Use database type: DynamoDB')
database = DatabaseFactory.create_database(
'dynamodb',
'dynamodb',
config.dynamodb_table_name,
**config.dynamodb_config_dict
)
else:
raise RuntimeError(f'unsupported database type: {config.database_type}')
return database


def archive2db(config, data: dict, data_id: str):
database = connect_database(config)
# archive results database
if config.archive_method == 'sync':
logging.debug(msg='Archive method: sync')
database.sync(data, data_id, depth=2)
elif config.archive_method == 'record':
logging.debug(msg='Archive method: record')
database.record(data, data_id)
else:
raise TypeError(
f'Unrecognized archive method: {config.archive_method}. '
f"Should select from 'sync' and 'record'."
)


def archive_workdir(relax_param, props_param, config, work_dir, flow_type):
print(f'=> Begin archiving {work_dir}')
# extract results json
store = ResultStorage(work_dir)
if relax_param and flow_type != 'props':
store.sync_relax(relax_param)
if props_param and flow_type != 'relax':
store.sync_props(props_param, config.archive_tasks)

# define archive key
if config.archive_key:
data_id = config.archive_key
else:
data_id = str(store.work_dir_path)

dump_file = os.path.join(store.work_dir_path, 'all_result.json')
if os.path.isfile(dump_file):
logging.info(msg='all_result.json exists, and will be updated.')
orig_data = loadfn(dump_file)
update_dict(orig_data, store.result_data, depth=2)
dumpfn(orig_data, dump_file, indent=4)
else:
dumpfn(store.result_data, dump_file, indent=4)

if config.database_type != 'local':
data_json_str = json.dumps(store.result_data, cls=MontyEncoder, indent=4)
data_dict = json.loads(data_json_str)
data_dict['_id'] = data_id

archive2db(config, data_dict, data_id)


def archive2db_from_json(config, json_file):
logging.info(msg=f'Archive from local json file: {json_file}')
data_dict = loadfn(json_file)
data_json_str = json.dumps(data_dict, cls=MontyEncoder, indent=4)
data_dict = json.loads(data_json_str)
# define archive key
if config.archive_key:
data_id = config.archive_key
else:
data_id = str(data_dict["work_path"])
data_dict['_id'] = data_id

archive2db(config, data_dict, data_id)


def archive_result(
parameters: List[os.PathLike],
config_dict: dict,
work_dir: List[os.PathLike],
indicated_flow_type: str,
database_type,
method,
archive_tasks,
is_result
):
global_config = Config(**config_dict)
# re-specify args
if database_type:
global_config.database_type = database_type
if method:
global_config.archive_method = method
if archive_tasks:
global_config.archive_tasks = archive_tasks

if is_result:
# archive local results json file
json_file_list = []
# Parameter here stands for json files that store test results and be archived directly
for ii in parameters:
glob_list = glob.glob(os.path.abspath(ii))
json_file_list.extend(glob_list)
json_file_list.sort()
for ii in json_file_list:
archive2db_from_json(global_config, ii)
else:
_, _, flow_type, relax_param, props_param = judge_flow(
[loadfn(jj) for jj in parameters],
indicated_flow_type
)
# archive work directories
work_dir_list = []
for ii in work_dir:
glob_list = glob.glob(os.path.abspath(ii))
work_dir_list.extend(glob_list)
work_dir_list.sort()
for ii in work_dir_list:
archive_workdir(relax_param, props_param, global_config, ii, flow_type)


def archive_from_args(
parameters: List[os.PathLike],
config_file: os.PathLike,
work_dirs: List[os.PathLike],
indicated_flow_type: str,
database_type,
method,
archive_tasks,
is_result
):
print('-------Archive result Mode-------')
archive_result(
parameters=parameters,
config_dict=load_config_file(config_file),
work_dir=work_dirs,
indicated_flow_type=indicated_flow_type,
database_type=database_type,
method=method,
archive_tasks=archive_tasks,
is_result=is_result
)
print('Complete!')
47 changes: 38 additions & 9 deletions apex/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Config:
mode: str = 'default'
debug_copy_method: str = "copy"
debug_pool_workers: int = 1
debug_workdir: str = '.'
debug_workdir: str = None

# dflow s3 config
dflow_s3_config: dict = None
Expand Down Expand Up @@ -57,18 +57,30 @@ class Config:
group_size: int = None
pool_size: int = None
upload_python_packages: list = field(default_factory=list)
# lammps
lammps_image_name: str = None
lammps_run_command: str = None
# vasp
vasp_image_name: str = None
vasp_run_command: str = None
# abacus
abacus_image_name: str = None
abacus_run_command: str = None

is_bohrium_dflow: bool = False

database_type: str = 'local'
archive_method: str = 'sync'
archive_key: str = None
archive_tasks: bool = False

# MongoDB config
mongodb_config: dict = None
mongodb_host: str = "localhost"
mongodb_port: int = 27017
mongodb_database: str = "apex_results"
mongodb_collection: str = "default_collection"

# DynamoDB config
dynamodb_config: dict = None
dynamodb_table_name: str = "apex_results"

def __post_init__(self):
# judge if running dflow on the Bohrium
try:
Expand All @@ -83,7 +95,7 @@ def __post_init__(self):
if not (self.context_type or self.machine):
self.machine_dict = None
elif self.context_type in ["Bohrium", "bohrium",
"BohriumContext", "boriumcontext"]:
"BohriumContext", "boriumcontext"]:
self.machine_dict = {
"batch_type": self.batch_type,
"context_type": self.context_type,
Expand All @@ -101,7 +113,7 @@ def __post_init__(self):
if self.machine:
update_dict(self.machine_dict, self.machine)
elif self.context_type in ["SSHContext", "sshcontext",
"SSH", "ssh"]:
"SSH", "ssh"]:
self.machine_dict = {
"batch_type": self.batch_type,
"context_type": self.context_type,
Expand All @@ -119,7 +131,7 @@ def __post_init__(self):
if self.machine:
update_dict(self.machine_dict, self.machine)
elif self.context_type in ["LocalContext", "localcontext"
"Local", "local"]:
"Local", "local"]:
self.machine_dict = {
"batch_type": self.batch_type,
"context_type": self.context_type,
Expand All @@ -130,7 +142,7 @@ def __post_init__(self):
if self.machine:
update_dict(self.machine_dict, self.machine)
elif self.context_type in ["LazyLocalContext", "lazylocalcontext"
"LazyLocal", "lazylocal"]:
"LazyLocal", "lazylocal"]:
self.machine_dict = {
"batch_type": self.batch_type,
"context_type": self.context_type,
Expand Down Expand Up @@ -204,6 +216,23 @@ def dispatcher_config_dict(self):
update_dict(dispatcher_config, self.dispatcher_config)
return dispatcher_config

@property
def mongodb_config_dict(self):
mongodb_config = {
"host": self.mongodb_host,
"port": self.mongodb_port
}
if self.mongodb_config:
update_dict(mongodb_config, self.mongodb_config)
return mongodb_config

@property
def dynamodb_config_dict(self):
dynamodb_config = {}
if self.mongodb_config:
update_dict(dynamodb_config, self.dynamodb_config)
return dynamodb_config

@property
def basic_config_dict(self):
basic_config = {
Expand Down
Loading
Loading