from flask import Flask, jsonify, request from uuid import uuid4 import uuid import requests class Genre: def __init__(self, name, uuid_: uuid): if uuid_ is None: self.uuid_: uuid = uuid4() else: self.uuid_: uuid = uuid.UUID(uuid_) self.name: str = name def to_dict(self): return { "uuid": self.uuid_, "name": self.name, } def to_dict_with_films(self, films: list): return { "uuid": self.uuid_, "name": self.name, "films": films } app = Flask(__name__) genres: list[Genre] = [ Genre(name='Комедия', uuid_='450a9c7c-fb6f-4a42-a354-acef65af4c9b'), Genre(name='Драма', uuid_='6f26879d-bdf2-4ccd-bd6f-23275c86a9ac'), Genre(name='Экшен', uuid_='139a4578-5922-4688-92e2-22e749ff8c47'), ] films_url = 'http://film_service:8002/' def list_jsonify(): return jsonify([genre.to_dict() for genre in genres]) # получение всех жанров @app.route('/', methods=['GET']) def get_all(): return list_jsonify(), 200 # получение жанра по uuid @app.route('/', methods=['GET']) def get_one(uuid_): for genre in genres: if genre.uuid_ == uuid_: return genre.to_dict(), 200 return 'Факультет с указанным uuid не обнаружен', 404 # получение жанра со списком фильмов в этом жанре @app.route('/with-films/', methods=['GET']) def get_one_with_films(uuid_): for genre in genres: if genre.uuid_ == uuid_: response = requests.get(films_url + f'by-genre/{uuid_}') print(response.json()) return genre.to_dict_with_films(response.json()), 200 return 'Факультет с указанным uuid не обнаружен', 404 # проверка наличия жанра по uuid @app.route('/check/', methods=['GET']) def check_exist(uuid_): for genre in genres: if genre.uuid_ == uuid_: return '', 200 return '', 404 # создание жанра @app.route('/', methods=['POST']) def create(): data = request.json name = data.get('name', None) description = data.get('description', None) if name is None or description is None: return 'Не хватает данных для создания нового факультета', 404 new_genre = Genre(name, description, None) genres.append(new_genre) return get_one(new_genre.uuid_) # изменения жанра по uuid @app.route('/', methods=['PUT']) def update_by_id(uuid_): data = request.json new_name = data.get('name', None) new_description = data.get('description', None) for genre in genres: if genre.uuid_ == uuid_: if new_name is not None: genre.name = new_name if new_description is not None: genre.description = new_description return get_one(genre.uuid_) return 'Факультет с указанным uuid не обнаружен', 404 # удаление жанра по uuid @app.route('/', methods=['DELETE']) def delete(uuid_): for genre in genres: if genre.uuid_ == uuid_: genres.remove(genre) return 'Факультет был удален', 200 return 'Факультет с указанным uuid не обнаружен', 404 if __name__ == '__main__': app.run(host='0.0.0.0', port=8001, debug=True)