Last active
August 13, 2017 14:33
-
-
Save honnoretsu/7e1f0ff621b472e0c5cae0527dabb875 to your computer and use it in GitHub Desktop.
Hybrid rest and static files server using Flask
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!flask/bin/python | |
| from flask import Flask, json, jsonify, make_response, request, abort, send_from_directory | |
| from flask_cors import CORS, cross_origin | |
| from flask_compress import * | |
| from pprint import pprint | |
| app = Flask(__name__, static_url_path='', static_folder='public') | |
| cors = CORS(app, resources={r"/api/*": {"origins": "*"}}) | |
| servers = [ | |
| { | |
| "id": 1, | |
| "hostname": "dem.testing", | |
| "ip": "192.168.1.1", | |
| "services": [] | |
| }, | |
| { | |
| "id": 2, | |
| "hostname": "google.com", | |
| "ip": "8.8.8.8", | |
| "services": [] | |
| }, | |
| { | |
| "id": 3, | |
| "hostname": "haha.com", | |
| "ip": "192.1.0.1", | |
| "services": [] | |
| } | |
| ] | |
| @app.route('/') | |
| def root(): | |
| return app.send_static_file('index.html') | |
| @app.route('/<path:path>') | |
| @gzipped | |
| def send_static(path): | |
| return send_from_directory('public', path) | |
| @app.route('/api/v1.0/servers', methods=['GET']) | |
| @gzipped | |
| def get_servers(): | |
| return jsonify({'servers': servers}) | |
| @app.route('/api/v1.0/servers', methods=['POST']) | |
| def add_servers(): | |
| content = request.get_json(silent=True) | |
| pprint(content) | |
| if not request.json or not 'hostname' in request.json: | |
| return jsonify({'error': 'Invalid request'}), 400 | |
| server = { | |
| 'id': servers[-1]['id'] + 1, | |
| 'hostname': request.json['hostname'], | |
| 'ip': request.json['ip'], | |
| 'services': [] | |
| } | |
| servers.append(server) | |
| return jsonify({'server': server}), 201 | |
| @app.route('/api/v1.0/servers/<int:server_id>', methods=['PUT']) | |
| def modify_servers(server_id): | |
| content = request.get_json(silent=True) | |
| pprint(content) | |
| if not request.json or not 'hostname' in request.json: | |
| return jsonify({'error': 'Invalid request'}), 400 | |
| server = { | |
| 'id': request.json['id'], | |
| 'hostname': request.json['hostname'], | |
| 'ip': request.json['ip'], | |
| 'services': [] | |
| } | |
| servers.append(server) | |
| return jsonify({'server': server}), 200 | |
| @app.route('/api/v1.0/servers/<int:server_id>', methods=['GET']) | |
| def get_server(server_id): | |
| server = [server for server in servers if server['id'] == server_id] | |
| if len(server) == 0: | |
| return jsonify({'error': 'Not found'}), 404 | |
| return jsonify({'server': server[0]}) | |
| @app.route('/api/v1.0/servers/<int:server_id>', methods=['DELETE']) | |
| def del_server(server_id): | |
| server = [server for server in servers if server['id'] == server_id] | |
| if len(server) == 0: | |
| return jsonify({'error': 'Not found'}), 404 | |
| servers.remove(server[0]) | |
| return jsonify({'server': server[0]}), 200 | |
| @app.errorhandler(404) | |
| def not_found(error): | |
| return jsonify({'error': 'Not found'}), 404 | |
| if __name__ == '__main__': | |
| app.run(debug=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment