From a491cca2542d3c3bf5762a11a601576c01ea3f3f Mon Sep 17 00:00:00 2001 From: Romain Dorgueil Date: Fri, 16 Mar 2018 15:56:11 +0100 Subject: [PATCH] Starts to enable building packages that does not require python. Yay. --- medikit/_require.py | 0 medikit/commands/update.py | 2 +- medikit/commands/utils.py | 4 +++- medikit/config/__init__.py | 6 +++--- medikit/config/registry.py | 27 ++++++++++++++++++++++++++- medikit/feature/make.py | 5 +++-- medikit/feature/python.py | 2 +- 7 files changed, 37 insertions(+), 9 deletions(-) delete mode 100644 medikit/_require.py diff --git a/medikit/_require.py b/medikit/_require.py deleted file mode 100644 index e69de29..0000000 diff --git a/medikit/commands/update.py b/medikit/commands/update.py index 519ba9c..98afe0f 100644 --- a/medikit/commands/update.py +++ b/medikit/commands/update.py @@ -19,7 +19,7 @@ def handle(config_filename, **kwargs): feature_instances = {} logger.info( 'Updating {} with {} features'.format( - term.bold(config['python'].get('name')), + term.bold(config.package_name), ', '.join(term.bold(term.green(feature_name)) for feature_name in sorted(features)) ) ) diff --git a/medikit/commands/utils.py b/medikit/commands/utils.py index 32027dc..86c83b7 100644 --- a/medikit/commands/utils.py +++ b/medikit/commands/utils.py @@ -15,7 +15,9 @@ def _read_configuration(dispatcher, config_filename): if not os.path.exists(config_filename): raise IOError('Could not find project description file (looked in {})'.format(config_filename)) - variables = OrderedDict() + variables = dict( + PACKAGE=None + ) files = {filename: '' for filename in DEFAULT_FILES} features = set(DEFAULT_FEATURES) diff --git a/medikit/config/__init__.py b/medikit/config/__init__.py index dd6ffed..e7cd19d 100644 --- a/medikit/config/__init__.py +++ b/medikit/config/__init__.py @@ -22,9 +22,9 @@ def read_configuration(dispatcher, filename, variables, features, files): # restore old values medikit.listen, medikit.pipeline, medikit.require = _listen, _pipeline, _require - for k in variables.keys(): - if k in context: - variables[k] = context[k] + # Deprecated, but can be used for non-python projects (PACKAGE=...) + variables = {k: context.get(k, v) for k, v in variables.items()} + config.set_vars(**variables) for feature in DEFAULT_FEATURES: config.require(feature) diff --git a/medikit/config/registry.py b/medikit/config/registry.py index ccb5359..fe5e304 100644 --- a/medikit/config/registry.py +++ b/medikit/config/registry.py @@ -1,3 +1,4 @@ +from collections import OrderedDict from contextlib import contextmanager from stevedore import ExtensionManager @@ -10,6 +11,7 @@ def __init__(self): self._configs = {} self._features = {} self._pipelines = {} + self._variables = OrderedDict() def register_feature(ext): self._features[ext.name] = ext.plugin @@ -20,6 +22,29 @@ def register_feature(ext): def __getitem__(self, item): return self._configs[item] + def __contains__(self, item): + return item in self._configs + + def set_vars(self, **variables): + self._variables.update(variables) + + def get_var(self, name, default=None): + return self._variables.get(name, default) + + @property + def variables(self): + return self._variables + + @property + def package_name(self): + if 'python' in self: + return self['python'].get('name') + else: + name = self.get_var('PACKAGE') + if not name: + raise RuntimeError('You must define a package name, using either python.setup() or PACKAGE = ...') + return name + def keys(self): return self._configs.keys() @@ -47,4 +72,4 @@ def _require(self, name): if name not in self._configs: self._configs[name] = self._features[name].Config() - return self._configs[name] \ No newline at end of file + return self._configs[name] diff --git a/medikit/feature/make.py b/medikit/feature/make.py index b68d052..2b7429f 100644 --- a/medikit/feature/make.py +++ b/medikit/feature/make.py @@ -339,6 +339,7 @@ def on_start(self, event): """ :param ProjectEvent event: """ + for k in event.variables: self.makefile[k.upper()] = event.variables[k] @@ -363,7 +364,7 @@ def on_start(self, event): 'update', ''' python -c 'import medikit; print(medikit.__version__)' || pip install medikit; - $(PYTHON) -m medikit update + python -m medikit update ''', phony=True, doc='''Update project artifacts using medikit, after installing it eventually.''' @@ -381,7 +382,7 @@ def on_start(self, event): ) self.dispatcher.dispatch( - MakeConfig.on_generate, MakefileEvent(event.config['python'].get('name'), self.makefile, event.config) + MakeConfig.on_generate, MakefileEvent(event.config.package_name, self.makefile, event.config) ) # Recipe courtesy of https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html self.makefile.add_target( diff --git a/medikit/feature/python.py b/medikit/feature/python.py index 8cb5793..90fb8a2 100644 --- a/medikit/feature/python.py +++ b/medikit/feature/python.py @@ -334,7 +334,7 @@ def on_make_generate(self, event): event.makefile.updateleft( ( 'PACKAGE', - event.package_name, + event.config.package_name, ), ( 'PYTHON',