diff options
Diffstat (limited to 'pyenc/__init__.py')
-rw-r--r-- | pyenc/__init__.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/pyenc/__init__.py b/pyenc/__init__.py new file mode 100644 index 0000000..6323fbe --- /dev/null +++ b/pyenc/__init__.py @@ -0,0 +1,80 @@ +""" +app object setup for application +""" + +import flask +from flask import ( + Flask, + request, + Response, + flash, + redirect, + url_for + ) + +import random +import json + +from . import model + +import yaml + +def create_app(): + app = Flask(__name__, instance_relative_config=True) + + app.config.from_pyfile('settings.py') + + from . import db + db.init_app(app) + + from . import enc + enc.init_app(app) + + # not API + @app.route('/') + def root_page(): + return flask.render_template('start_page.html', + hosts=model.Host.query.order_by(model.Host.fqdn), + random=random, + str=str, + ) + + # API? + @app.route('/remove', methods=['POST']) + def remove_classes(): + print(request.form['fqdn']) + print(request.form.getlist('cls')) + flash('Classes removed') + return redirect(url_for('root_page')) + + # API + @app.route('/list-classes') + def list_classes(): + q = request.args.get('q', '') + qq = '%{}%'.format('%'.join(q.split(' '))) + + results = model.PuppetClass.query.where(model.PuppetClass.class_name.like(qq)).all() + print(qq) + return Response(json.dumps([x.class_name for x in results]), + mimetype='application/json') + + @app.route('/enc') + def enc(): + fqdn = request.args.get('fqdn', 'default') + host = model.Host.query.where(model.Host.fqdn==fqdn).first() + if not host: + return Response(f"No host with name {fqdn}", + status=404, + ) + + out = { + 'environment': host.environment, + 'classes': [cls.class_name for cls in host.classes], + } + return Response(yaml.dump(out), + mimetype='application/x-yaml') + + + + + return app |