Skip to content

Instantly share code, notes, and snippets.

@honnoretsu
Last active August 13, 2017 14:33
Show Gist options
  • Select an option

  • Save honnoretsu/7e1f0ff621b472e0c5cae0527dabb875 to your computer and use it in GitHub Desktop.

Select an option

Save honnoretsu/7e1f0ff621b472e0c5cae0527dabb875 to your computer and use it in GitHub Desktop.
Hybrid rest and static files server using Flask
#!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