Source code for paws.core.workflows
from __future__ import print_function
import os
import pkgutil
import importlib
[docs]def load_workflows(path_,pkg,cat_root=''):
cat_list = []
cat_wf_list = []
wf_modules = {}
mods = pkgutil.iter_modules(path_)
mods = [mod for mod in mods if mod[1] not in ['__init__','Workflow','WfManager','wftools']]
for modloader, modname, ispkg in mods:
if ispkg:
pkg_path = [os.path.join(path_[0],modname)]
subcat_root = modname
if cat_root:
subcat_root = cat_root+'.'+modname
pkg_cats, pkg_wfs, pkg_wf_modules = load_workflows(pkg_path,pkg+'.'+modname,subcat_root)
pkg_wfs = [wf for wf in pkg_wfs if not wf in cat_wf_list]
pkg_cats = [cat for cat in pkg_cats if not cat in cat_list]
cat_wf_list = cat_wf_list + pkg_wfs
cat_list = cat_list + pkg_cats
wf_modules.update(pkg_wf_modules)
else:
# assume the module defines workflows and generates a .wfl
if not cat_root in cat_list:
cat_list.append(cat_root)
cat_wf_list.append( (cat_root,modname) )
wf_modules[cat_root+'.'+modname] = os.path.join(path_[0],modname)
# don't import these modules: it will cause and import loop
#for wf_uri,wf_path in wf_modules.items():
# wf_mod = importlib.import_module('.'+wf_uri,__name__)
return cat_list, cat_wf_list, wf_modules
cat_list, cat_wf_list, wf_modules = load_workflows(__path__,__name__)
#print(cat_list)
#print(cat_wfl_list)
#print(wfl_modules)