Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions homeworks/homework_06_web/request_dumps.txt
Original file line number Diff line number Diff line change
@@ -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
113 changes: 113 additions & 0 deletions homeworks/homework_06_web/rest_api.py
Original file line number Diff line number Diff line change
@@ -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/<int:flight_id>', 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/<int:flight_id>', 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/<int:flight_id>', 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')
28 changes: 28 additions & 0 deletions homeworks/homework_06_web/tests.py
Original file line number Diff line number Diff line change
@@ -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)