DAS_2024_1/karamushko_maxim_lab_3/film/service.py
2024-12-23 18:08:28 +04:00

157 lines
5.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from flask import Flask, jsonify, request
import requests
from uuid import uuid4
import uuid
class Film:
def __init__(self, name, description, uuid_: uuid, genre_id: uuid):
if uuid_ is None:
self.uuid_: uuid = uuid4()
else:
self.uuid_: uuid = uuid.UUID(uuid_)
self.name: str = name
self.description: str = description
self.genre_id: uuid = uuid.UUID(genre_id)
def to_dict(self):
return {
'name': self.name,
'description': self.description,
'genre_id': self.genre_id,
'uuid': self.uuid_
}
def to_dict_for_genres(self):
return {
'name': self.name,
'description': self.description,
'uuid': self.uuid_
}
def to_dict_with_info(self, genre: dict):
return {
'name': self.name,
'description': self.description,
'genre_id': self.genre_id,
'genre_info': genre,
'uuid': self.uuid_
}
app = Flask(__name__)
specialities: list[Film] = [
Film(name='Пираты карибского моря', description='фильм про пиратов', uuid_='51e5c5c1-1e6e-4455-b4e1-aec5774a2961',
genre_id='450a9c7c-fb6f-4a42-a354-acef65af4c9b'),
Film(name='1+1', description='=2', uuid_='660e4da0-abe9-4d33-9070-f3e8f67484f4',
genre_id='6f26879d-bdf2-4ccd-bd6f-23275c86a9ac'),
Film(name='Во все тяжкие', description='познавательный сериал про химию', uuid_='801d599b-ce70-4755-a2ef-00e1c092811d',
genre_id='139a4578-5922-4688-92e2-22e749ff8c47'),
]
genres_url = 'http://genre_service:8001/'
def list_jsonify():
return jsonify([speciality.to_dict() for speciality in specialities])
# получение всех фильмов
@app.route('/', methods=['GET'])
def get_all():
return list_jsonify(), 200
# получение всех фильмов с информацие о жанре
@app.route('/full', methods=['GET'])
def get_all_full():
genres: list[dict] = requests.get(genres_url).json()
response = []
for speciality in specialities:
for genre in genres:
if speciality.genre_id == uuid.UUID(genre.get('uuid')):
response.append(speciality.to_dict_with_info(genre))
return response, 200
# получение фильмов по uuid жанра
@app.route('/by-genre/<uuid:genre_uuid>', methods=['GET'])
def get_by_genre_id(genre_uuid):
return [speciality.to_dict_for_genres() for speciality in specialities if speciality.genre_id == genre_uuid], 200
# получение фильма по uuid
@app.route('/<uuid:uuid_>', methods=['GET'])
def get_one(uuid_):
for speciality in specialities:
if speciality.uuid_ == uuid_:
return speciality.to_dict(), 200
return 'Специальность с указанным uuid не обнаружена', 404
# получение фильма по uuid с информацие о жанре
@app.route('/full/<uuid:uuid_>', methods=['GET'])
def get_one_full(uuid_):
for speciality in specialities:
if speciality.uuid_ == uuid_:
response = requests.get(genres_url + str(speciality.genre_id))
return speciality.to_dict_with_info(response.json()), 200
return 'Специальность с указанным uuid не обнаружена', 404
# создание фильма
@app.route('/', methods=['POST'])
def create():
data = request.json
name = data.get('name', None)
description = data.get('description', None)
genre_id = data.get('genre_id', None)
checking = requests.get(genres_url + f'/check/{genre_id}')
print(checking)
if checking.status_code == 200:
new_speciality = Film(name, description, None, genre_id)
specialities.append(new_speciality)
return get_one(new_speciality.uuid_)
if checking.status_code == 404:
return 'Факультета с таким uuid не существует', 404
return 'Неизвестная ошибка', 500
# изменение фильма по uuid
@app.route('/<uuid:uuid_>', methods=['PUT'])
def update_by_id(uuid_):
data = request.json
new_name = data.get('name', None)
new_description = data.get('description', None)
for speciality in specialities:
print(speciality.uuid_)
if speciality.uuid_ == uuid_:
if new_name is not None:
speciality.name = new_name
if new_description is not None:
speciality.description = new_description
return get_one(speciality.uuid_)
return 'Специальность с указанным uuid не обнаружена', 404
# удаление фильма по uuid
@app.route('/<uuid:uuid_>', methods=['DELETE'])
def delete(uuid_):
for speciality in specialities:
if speciality.uuid_ == uuid_:
specialities.remove(speciality)
return 'Специальность была удалена', 200
return 'Специальность с указанным uuid не обнаружена', 404
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8002, debug=True)