diff --git a/homeworks/homework_06_web/request_dumps.txt b/homeworks/homework_06_web/request_dumps.txt new file mode 100644 index 00000000..7b58730d --- /dev/null +++ b/homeworks/homework_06_web/request_dumps.txt @@ -0,0 +1,4 @@ +0 Urls(method='post', url='http://localhost:5000/api/flights', headers=None, json={'Departure(GMT)': 2130, 'Arrival(GMT)': 600, 'Travel time': 830, 'Destination': 'VNU', 'Aircraft type': 'IL-56'}, data=None) 201 True +1 Urls(method='get', url='http://localhost:5000/api/flights', headers=None, json=None, data=None) 200 True +2 Urls(method='put', url='http://localhost:5000/api/flights/1', headers=None, json={'Departure(GMT)': 2031, 'Arrival(GMT)': 1000, 'Travel time': 1031, 'Destination': 'Bashni blizneci', 'Aircraft type': 'airbus'}, data=None) 200 True +3 Urls(method='delete', url='http://localhost:5000/api/flights/2', headers=None, json=None, data=None) 204 True diff --git a/homeworks/homework_06_web/rest_api.py b/homeworks/homework_06_web/rest_api.py new file mode 100644 index 00000000..72574460 --- /dev/null +++ b/homeworks/homework_06_web/rest_api.py @@ -0,0 +1,113 @@ +#!flask/bin/python +import os +import logging +from logging.handlers import RotatingFileHandler +from flask import jsonify, request, abort, Flask +from flask import make_response + +""""Это просто гениальная статейка https://habr.com/ru/post/246699/ работал по ней""" + +app = Flask(__name__) +fields = ['Departure(GMT)', 'Arrival(GMT)', 'Travel time', 'Destination', 'Aircraft type'] +flights = { + 'flights': [ + { + 'id': 1, + 'Departure(GMT)': 1424, + 'Arrival(GMT)': 612, + 'Travel time': 812, + 'Destination': u'SVO', + 'Aircraft type': u'AA' + }, + { + 'id': 2, + 'Departure(GMT)': 2000, + 'Arrival(GMT)': 1000, + 'Travel time': 1000, + 'Destination': u'SPV', + 'Aircraft type': u'Boing' + } + ] +} # хранилище полётов + + +@app.route('/api/flights', methods=['GET']) +def get_flights(): + return jsonify({'flights': flights}), 200 + + +@app.route('/api/flights/', methods=['GET']) +def get_flight(flight_id: int): + marker = False + for elem in flights['flights']: + if elem['id'] == flight_id: + marker = True + return jsonify({'flight': elem}) + if marker is False: + abort(404) + + +@app.route('/api/flights/', methods=['PUT']) +def change_flight(flight_id): + flight_tmp = list(filter(lambda f: f['id'] == flight_id, flights['flights']))[0] + if len(flight_tmp) == 0: + abort(404) + if not request.json: + abort(400) + + for field in flight_tmp: + if field in request.json: + flight_tmp[field] = request.json[field] + return jsonify({'task': flight_tmp}, {'flights': flights}) + + +@app.errorhandler(404) +def not_found(error): + return make_response(jsonify({'error': 'Not found'}), 404) + + +@app.route('/api/flights', methods=['POST']) +def create_flight(): + if not request.json: + abort(400) + print(request.data) + print(request.json) + flight_tmp = {'id': flights['flights'][-1]['id'] + 1} if flights['flights'] else {'id': 1} + + for field in fields: + if field in request.json: + flight_tmp[field] = request.json[field] + else: + abort(400) + flights['flights'].append(flight_tmp) + return jsonify(flights['flights']), 201 + + +@app.route('/api/flights/', methods=['DELETE']) +def del_flight(flight_id): + try: + for index, elem in enumerate(flights['flights']): + if elem['id'] == flight_id: + flights['flights'].pop(index) + return jsonify(flights['flights']), 204 + + except IndexError: + print("IndexError") + abort(404) + + +if __name__ == '__main__': + if not app.debug: + if not os.path.exists('logs'): + os.mkdir('logs') + file_handler = RotatingFileHandler('logs/logs.log', maxBytes=10240, + backupCount=10) + file_handler.setFormatter(logging.Formatter( + '%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]')) + file_handler.setLevel(logging.INFO) + app.logger.addHandler(file_handler) + + app.logger.setLevel(logging.INFO) + app.logger.info('START') + app.debug = True + app.run(host='0.0.0.0') diff --git a/homeworks/homework_06_web/tests.py b/homeworks/homework_06_web/tests.py new file mode 100644 index 00000000..843cffab --- /dev/null +++ b/homeworks/homework_06_web/tests.py @@ -0,0 +1,28 @@ +from collections import namedtuple +import requests +"""from requests_toolbelt.utils.dump import dump_all +тесты взял у кого-то!!!""" + +Urls = namedtuple('Urls', ['method', 'url', 'headers', 'json', 'data']) + +with open('request_dumps.txt', 'w') as f: + for index, url in enumerate([ + Urls('post', 'http://localhost:5000/api/flights', None, { + 'Departure(GMT)': 2130, + 'Arrival(GMT)': 600, + 'Travel time': 830, + 'Destination': u'VNU', + 'Aircraft type': u'IL-56' + }, None), + Urls('get', 'http://localhost:5000/api/flights', None, None, None), + Urls('put', 'http://localhost:5000/api/flights/1', None, { + 'Departure(GMT)': 2031, + 'Arrival(GMT)': 1000, + 'Travel time': 1031, + 'Destination': u'Bashni blizneci', + 'Aircraft type': u'airbus' + }, None), + Urls('delete', 'http://localhost:5000/api/flights/2', None, None, None) + ]): + resp = requests.request(method=url.method, url=url.url, json=url.json, data=url.data) + print(index, url, resp.status_code, resp.ok, file=f)