1.1 --- a/moinformat/imports.py Mon Jul 30 23:19:51 2018 +0200
1.2 +++ b/moinformat/imports.py Tue Jul 31 00:00:49 2018 +0200
1.3 @@ -19,10 +19,12 @@
1.4 this program. If not, see <http://www.gnu.org/licenses/>.
1.5 """
1.6
1.7 -from os.path import isdir, join, splitext
1.8 +from os.path import isdir, join, split, splitext
1.9 from os import listdir
1.10 from importlib import import_module
1.11
1.12 +reserved = ["__init__", "common", "manifest"]
1.13 +
1.14 def get_extensions(dirname, modname, stores, reserved, prefix=None):
1.15
1.16 "Import extensions inside 'dirname'."
1.17 @@ -46,4 +48,37 @@
1.18 store_name = prefix and "%s.%s" % (prefix, leafname) or leafname
1.19 stores[store_name] = import_module("%s.%s" % (modname, leafname))
1.20
1.21 +def get_mapping(modules, get_key, get_value):
1.22 +
1.23 + """
1.24 + Using the 'modules' mapping, employ 'get_key' and 'get_value' to register
1.25 + objects provided by the modules in a mapping.
1.26 + """
1.27 +
1.28 + mapping = {}
1.29 +
1.30 + # Use the callables to obtain the keys and values from modules.
1.31 +
1.32 + for name, module in modules.items():
1.33 + mapping[get_key(name, module)] = get_value(module)
1.34 +
1.35 + return mapping
1.36 +
1.37 +def get_modules(module_file, module_name):
1.38 +
1.39 + """
1.40 + Obtain details of the indicated module's package using 'module_file',
1.41 + corresponding to a __file__ attribute, and 'module_name', corresponding to
1.42 + a __name__ attribute.
1.43 + """
1.44 +
1.45 + dirname = split(module_file)[0]
1.46 + package = module_name.rsplit(".", 1)[0]
1.47 +
1.48 + # Define an attribute mapping names to modules.
1.49 +
1.50 + modules = {}
1.51 + get_extensions(dirname, package, modules, reserved)
1.52 + return modules
1.53 +
1.54 # vim: tabstop=4 expandtab shiftwidth=4