aboutsummaryrefslogtreecommitdiffstats
path: root/qface/builtin/schema/schema.py
diff options
context:
space:
mode:
Diffstat (limited to 'qface/builtin/schema/schema.py')
-rwxr-xr-xqface/builtin/schema/schema.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/qface/builtin/schema/schema.py b/qface/builtin/schema/schema.py
new file mode 100755
index 0000000..5735844
--- /dev/null
+++ b/qface/builtin/schema/schema.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+# Copyright (c) Pelagicore AB 2016
+
+import click
+import logging
+import logging.config
+import yaml
+from path import Path
+
+from qface.generator import FileSystem, Generator
+from qface.watch import monitor
+from qface.filters import jsonify
+
+
+here = Path(__file__).dirname()
+
+logging.config.dictConfig(yaml.load(open(here / 'log.yaml')))
+
+log = logging.getLogger(__file__)
+
+
+def run(src, dst):
+ log.debug('run {0} {1}'.format(src, dst))
+ system = FileSystem.parse(src)
+ search_path = [
+ Path('_templates').abspath(),
+ Path(here / 'templates').abspath()
+ ]
+ generator = Generator(search_path=search_path)
+ generator.register_filter('jsonify', jsonify)
+ ctx = {'dst': dst}
+ for module in system.modules:
+ ctx.update({
+ 'module': module,
+ })
+ generator.destination = generator.apply("{{dst}}", ctx)
+ generator.write('{{module}}.json', 'module.json', ctx)
+
+
+@click.command()
+@click.option('--reload/--no-reload', default=False)
+@click.argument('src', nargs=-1, type=click.Path(exists=True))
+@click.argument('dst', nargs=1, type=click.Path(exists=True))
+def app(src, dst, reload):
+ """Takes several files or directories as src and generates the code
+ in the given dst directory."""
+ if reload:
+ script = Path(__file__).abspath()
+ monitor(script, src, dst)
+ else:
+ run(src, dst)
+
+
+if __name__ == '__main__':
+ app()