From 4b2b5c89525c29787d31ac9d9666a3eb3182e922 Mon Sep 17 00:00:00 2001 From: Evgenii Fomin Date: Thu, 9 Oct 2025 10:57:47 +0300 Subject: [PATCH 1/9] hw1 --- hw1/app.py | 67 ++++++++++++++++++++++++++++++++++++++++---- hw1/requirements.txt | 2 ++ 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/hw1/app.py b/hw1/app.py index 6107b870..1af5838b 100644 --- a/hw1/app.py +++ b/hw1/app.py @@ -1,4 +1,9 @@ +import math +import statistics +import json from typing import Any, Awaitable, Callable +from urllib.parse import parse_qs +from http import HTTPStatus async def application( @@ -7,13 +12,65 @@ async def application( send: Callable[[dict[str, Any]], Awaitable[None]], ): """ - Args: - scope: Словарь с информацией о запросе - receive: Корутина для получения сообщений от клиента - send: Корутина для отправки сообщений клиенту + Простейшее ASGI-приложение. + Поддерживает три эндпоинта: + - /factorial?n=5 + - /fibonacci?n=10 + - /mean?numbers=1&numbers=2&numbers=3 """ - # TODO: Ваша реализация здесь + + if scope["type"] != "http": + return + + path = scope.get("path", "/") + query_string = scope.get("query_string", b"").decode() + params = parse_qs(query_string) + + # Хелпер для ответа + async def send_response(status: int, data: dict): + body = json.dumps(data).encode("utf-8") + headers = [(b"content-type", b"application/json")] + await send( + {"type": "http.response.start", "status": status, "headers": headers} + ) + await send({"type": "http.response.body", "body": body}) + + try: + if path == "/factorial": + n = int(params.get("n", [None])[0]) + if n is None or n < 0 or n > 100: + raise ValueError("n must be between 0 and 100") + result = math.factorial(n) + await send_response(HTTPStatus.OK, {"result": result}) + + elif path == "/fibonacci": + n = int(params.get("n", [None])[0]) + if n is None or n < 0 or n > 100: + raise ValueError("n must be between 0 and 100") + # классическая реализация + a, b = 0, 1 + seq = [] + for _ in range(n): + seq.append(a) + a, b = b, a + b + await send_response(HTTPStatus.OK, {"result": seq}) + + elif path == "/mean": + nums = params.get("numbers", None) + if not nums: + raise ValueError("numbers must be provided") + numbers = [float(x) for x in nums] + result = statistics.mean(numbers) + await send_response(HTTPStatus.OK, {"result": result}) + + else: + await send_response(HTTPStatus.NOT_FOUND, {"detail": "Not Found"}) + + except Exception as e: + await send_response(HTTPStatus.BAD_REQUEST, {"detail": str(e)}) + if __name__ == "__main__": import uvicorn + uvicorn.run("app:application", host="0.0.0.0", port=8000, reload=True) diff --git a/hw1/requirements.txt b/hw1/requirements.txt index 588df51c..30f59619 100644 --- a/hw1/requirements.txt +++ b/hw1/requirements.txt @@ -3,8 +3,10 @@ uvicorn>=0.24.0 # Зависимости для тестирования pytest>=7.4.0 +python=3.12 pytest-asyncio>=0.21.0 httpx>=0.27.2 async-asgi-testclient>=1.4.11 + From 1bb1ddf24d4f2721ad023b3e042caa329d5fc8ba Mon Sep 17 00:00:00 2001 From: Evgenii Fomin Date: Thu, 9 Oct 2025 11:47:19 +0300 Subject: [PATCH 2/9] hw1 test passed --- hw1/app.py | 156 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 104 insertions(+), 52 deletions(-) diff --git a/hw1/app.py b/hw1/app.py index 1af5838b..ab83ed5f 100644 --- a/hw1/app.py +++ b/hw1/app.py @@ -11,66 +11,118 @@ async def application( receive: Callable[[], Awaitable[dict[str, Any]]], send: Callable[[dict[str, Any]], Awaitable[None]], ): - """ - Простейшее ASGI-приложение. - Поддерживает три эндпоинта: - - /factorial?n=5 - - /fibonacci?n=10 - - /mean?numbers=1&numbers=2&numbers=3 - """ - - if scope["type"] != "http": + # --- lifespan поддержка для тест-клиента --- + if scope['type'] == 'lifespan': + while True: + message = await receive() + if message['type'] == 'lifespan.startup': + await send({'type': 'lifespan.startup.complete'}) + elif message['type'] == 'lifespan.shutdown': + await send({'type': 'lifespan.shutdown.complete'}) + return return - path = scope.get("path", "/") - query_string = scope.get("query_string", b"").decode() + if scope['type'] != 'http': + return + + path = scope.get('path', '/') + method = scope.get('method', 'GET').upper() + query_string = scope.get('query_string', b'').decode() params = parse_qs(query_string) - # Хелпер для ответа async def send_response(status: int, data: dict): - body = json.dumps(data).encode("utf-8") - headers = [(b"content-type", b"application/json")] - await send( - {"type": "http.response.start", "status": status, "headers": headers} - ) - await send({"type": "http.response.body", "body": body}) - - try: - if path == "/factorial": - n = int(params.get("n", [None])[0]) - if n is None or n < 0 or n > 100: - raise ValueError("n must be between 0 and 100") - result = math.factorial(n) - await send_response(HTTPStatus.OK, {"result": result}) - - elif path == "/fibonacci": - n = int(params.get("n", [None])[0]) - if n is None or n < 0 or n > 100: - raise ValueError("n must be between 0 and 100") - # классическая реализация - a, b = 0, 1 - seq = [] - for _ in range(n): - seq.append(a) - a, b = b, a + b - await send_response(HTTPStatus.OK, {"result": seq}) - - elif path == "/mean": - nums = params.get("numbers", None) - if not nums: - raise ValueError("numbers must be provided") - numbers = [float(x) for x in nums] - result = statistics.mean(numbers) - await send_response(HTTPStatus.OK, {"result": result}) + body = json.dumps(data).encode('utf-8') + headers = [(b'content-type', b'application/json')] + await send({'type': 'http.response.start', 'status': status, 'headers': headers}) + await send({'type': 'http.response.body', 'body': body}) + + # --- поддерживаем только GET --- + if method != 'GET': + await send_response(HTTPStatus.NOT_FOUND, {'detail': 'Not Found'}) + return + + # --- factorial --- + if path == '/factorial': + if 'n' not in params or params['n'][0] == '': + await send_response(HTTPStatus.UNPROCESSABLE_ENTITY, {'detail': 'Missing n'}) + return + try: + n = int(params['n'][0]) + except Exception: + await send_response(HTTPStatus.UNPROCESSABLE_ENTITY, {'detail': 'n must be int'}) + return + + if n < 0 or n > 100: + await send_response(HTTPStatus.BAD_REQUEST, {'detail': 'n must be between 0 and 100'}) + return + + result = math.factorial(n) + await send_response(HTTPStatus.OK, {'result': result}) + return + + # --- fibonacci --- + elif path.startswith('/fibonacci'): + parts = path.split('/') + if len(parts) != 3 or parts[2] == '': + await send_response(HTTPStatus.UNPROCESSABLE_ENTITY, {'detail': 'Invalid path'}) + return + try: + n = int(parts[2]) + except Exception: + await send_response(HTTPStatus.UNPROCESSABLE_ENTITY, {'detail': 'n must be int'}) + return - else: - await send_response(HTTPStatus.NOT_FOUND, {"detail": "Not Found"}) + if n < 0 or n > 100: + await send_response(HTTPStatus.BAD_REQUEST, {'detail': 'n must be between 0 and 100'}) + return + + a, b = 0, 1 + seq = [] + for _ in range(n): + seq.append(a) + a, b = b, a + b + await send_response(HTTPStatus.OK, {'result': seq}) + return + + # --- mean --- + elif path == '/mean': + event = await receive() + body = b'' + if event.get('type') == 'http.request': + body = event.get('body', b'') or b'' + + if not body: + await send_response(HTTPStatus.UNPROCESSABLE_ENTITY, {'detail': 'Missing JSON body'}) + return + + try: + data = json.loads(body) + except Exception: + await send_response(HTTPStatus.UNPROCESSABLE_ENTITY, {'detail': 'Invalid JSON'}) + return + + if not isinstance(data, list): + await send_response(HTTPStatus.UNPROCESSABLE_ENTITY, {'detail': 'Body must be a list'}) + return + + if len(data) == 0: + await send_response(HTTPStatus.BAD_REQUEST, {'detail': 'Empty list'}) + return + + try: + numbers = [float(x) for x in data] + result = statistics.mean(numbers) + await send_response(HTTPStatus.OK, {'result': result}) + return + except Exception: + await send_response(HTTPStatus.UNPROCESSABLE_ENTITY, {'detail': 'Invalid numbers'}) + return - except Exception as e: - await send_response(HTTPStatus.BAD_REQUEST, {"detail": str(e)}) + # --- not found --- + await send_response(HTTPStatus.NOT_FOUND, {'detail': 'Not Found'}) -if __name__ == "__main__": +if __name__ == '__main__': import uvicorn - uvicorn.run("app:application", host="0.0.0.0", port=8000, reload=True) + uvicorn.run('app:application', host='0.0.0.0', port=8000, reload=True) From ecb99ede10daf03ac3c1da2c67ef799c375d08dd Mon Sep 17 00:00:00 2001 From: Evgenii Fomin Date: Thu, 9 Oct 2025 11:53:23 +0300 Subject: [PATCH 3/9] hw1 test passed+ requirements --- hw1/requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/hw1/requirements.txt b/hw1/requirements.txt index 30f59619..7a48e10d 100644 --- a/hw1/requirements.txt +++ b/hw1/requirements.txt @@ -3,7 +3,6 @@ uvicorn>=0.24.0 # Зависимости для тестирования pytest>=7.4.0 -python=3.12 pytest-asyncio>=0.21.0 httpx>=0.27.2 async-asgi-testclient>=1.4.11 From 6253193af5c6370e0f353b01f89012e49d87fe67 Mon Sep 17 00:00:00 2001 From: Evgenii Fomin Date: Sat, 11 Oct 2025 18:02:52 +0300 Subject: [PATCH 4/9] hw2 --- hw2/hw/shop_api/main.py | 229 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 228 insertions(+), 1 deletion(-) diff --git a/hw2/hw/shop_api/main.py b/hw2/hw/shop_api/main.py index f60a8c60..4b912e28 100644 --- a/hw2/hw/shop_api/main.py +++ b/hw2/hw/shop_api/main.py @@ -1,3 +1,230 @@ -from fastapi import FastAPI +from typing import Dict, List, Optional +from fastapi import FastAPI, HTTPException, Path, Query, status +from pydantic import BaseModel, Field, PositiveInt, conint, confloat +from fastapi.responses import JSONResponse app = FastAPI(title="Shop API") + +# ---------------------------- +# Pydantic models +# ---------------------------- +class ItemCreate(BaseModel): + name: str + price: confloat(ge=0.0) + + +class Item(ItemCreate): + id: int + deleted: bool = False + + +class ItemPatch(BaseModel): + name: Optional[str] = None + price: Optional[confloat(ge=0.0)] = None + + +class CartItemOut(BaseModel): + id: int + name: str + quantity: int + available: bool + + +class CartOut(BaseModel): + id: int + items: List[CartItemOut] + price: float + + +# ---------------------------- +# In-memory storage +# ---------------------------- +_next_item_id = 1 +_items: Dict[int, Item] = {} + +_next_cart_id = 1 +# carts stored as dict cart_id -> dict[item_id -> quantity] +_carts: Dict[int, Dict[int, int]] = {} + + +# ---------------------------- +# Helpers +# ---------------------------- +def _get_item_or_404(item_id: int) -> Item: + item = _items.get(item_id) + if item is None: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + return item + + +def _cart_to_response(cart_id: int) -> CartOut: + item_map = _carts.get(cart_id, {}) + items_out: List[CartItemOut] = [] + total_price = 0.0 + for iid, qty in item_map.items(): + item = _items.get(iid) + available = item is not None and not item.deleted + name = item.name if item is not None else "" + items_out.append( + CartItemOut(id=iid, name=name, quantity=qty, available=available) + ) + if available: + total_price += (item.price * qty) # type: ignore + return CartOut(id=cart_id, items=items_out, price=total_price) + + +# ---------------------------- +# Cart endpoints +# ---------------------------- +@app.post("/cart", status_code=status.HTTP_201_CREATED) +def create_cart(): + global _next_cart_id + cid = _next_cart_id + _next_cart_id += 1 + _carts[cid] = {} + location = f"/cart/{cid}" + resp = JSONResponse(status_code=status.HTTP_201_CREATED, content={"id": cid}) + resp.headers["location"] = location + return resp + + +@app.get("/cart/{id}", response_model=CartOut) +def get_cart(id: int = Path(..., ge=1)): + if id not in _carts: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + return _cart_to_response(id) + + +@app.get("/cart", response_model=List[CartOut]) +def list_carts( + offset: conint(ge=0) = Query(0), + limit: PositiveInt = Query(10), + min_price: Optional[confloat(ge=0.0)] = Query(None), + max_price: Optional[confloat(ge=0.0)] = Query(None), + min_quantity: Optional[conint(ge=0)] = Query(None), + max_quantity: Optional[conint(ge=0)] = Query(None), +): + # gather all carts in ascending id order + cart_ids = sorted(_carts.keys()) + selected = [] + for cid in cart_ids: + cart_resp = _cart_to_response(cid) + # per-cart total quantity + total_quantity = sum(i.quantity for i in cart_resp.items) + # price already computed in cart_resp.price + price = cart_resp.price + # apply filters + if min_price is not None and price < min_price: + continue + if max_price is not None and price > max_price: + continue + if min_quantity is not None and total_quantity < min_quantity: + continue + if max_quantity is not None and total_quantity > max_quantity: + continue + selected.append(cart_resp) + # apply offset+limit + return selected[offset : offset + limit] + + +@app.post("/cart/{cart_id}/add/{item_id}", status_code=status.HTTP_200_OK) +def add_item_to_cart( + cart_id: int = Path(..., ge=1), item_id: int = Path(..., ge=1) +): + if cart_id not in _carts: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + if item_id not in _items: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + item_map = _carts[cart_id] + item_map[item_id] = item_map.get(item_id, 0) + 1 + return {"ok": True} + + +# ---------------------------- +# Item endpoints +# ---------------------------- +@app.post("/item", status_code=status.HTTP_201_CREATED) +def create_item(item_in: ItemCreate): + global _next_item_id + iid = _next_item_id + _next_item_id += 1 + item = Item(id=iid, name=item_in.name, price=item_in.price, deleted=False) + _items[iid] = item + return item + + +@app.get("/item/{id}", response_model=Item) +def get_item(id: int = Path(..., ge=1)): + item = _items.get(id) + if item is None or item.deleted: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + return item + + +@app.get("/item", response_model=List[Item]) +def list_items( + offset: conint(ge=0) = Query(0), + limit: PositiveInt = Query(10), + min_price: Optional[confloat(ge=0.0)] = Query(None), + max_price: Optional[confloat(ge=0.0)] = Query(None), + show_deleted: bool = Query(False), +): + items_list = [it for it in _items.values() if (show_deleted or not it.deleted)] + # apply price filters + if min_price is not None: + items_list = [it for it in items_list if it.price >= min_price] + if max_price is not None: + items_list = [it for it in items_list if it.price <= max_price] + # sort by id + items_list = sorted(items_list, key=lambda x: x.id) + return items_list[offset : offset + limit] + + +@app.put("/item/{id}", response_model=Item) +def replace_item(id: int = Path(..., ge=1), item_in: ItemCreate = ...): + # PUT replaces only existing item (creation forbidden) + item = _items.get(id) + if item is None: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + # replace fields but keep id and deleted flag + new_item = Item(id=id, name=item_in.name, price=item_in.price, deleted=item.deleted) + _items[id] = new_item + return new_item + + +@app.patch("/item/{id}") +def patch_item(id: int = Path(..., ge=1), patch: ItemPatch = ...): + item = _items.get(id) + if item is None: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + if item.deleted: + # tests expect NOT_MODIFIED for attempts to patch deleted item + return JSONResponse(status_code=status.HTTP_304_NOT_MODIFIED, content={"ok": False}) + # validate that no unexpected fields are present and 'deleted' can't be changed + # FastAPI/Pydantic already enforces schema on known fields; but we must guard 'deleted' + # If user attempts to pass 'deleted' in body, Pydantic will raise 422 because ItemPatch has no 'deleted'. + # Apply patch + data = patch.dict(exclude_unset=True) + if not data: + # nothing changed - still OK, return current item body + return item + # allowed keys only name and price, already enforced by model + if "name" in data: + item.name = data["name"] # type: ignore + if "price" in data: + item.price = data["price"] # type: ignore + _items[id] = item + return item + + +@app.delete("/item/{id}") +def delete_item(id: int = Path(..., ge=1)): + item = _items.get(id) + if item is None: + # deletion is idempotent according to tests: return OK if not exists as well + # But tests expect second delete after initial delete to return OK; first delete must mark deleted. + # If item never existed, returning 404 might be acceptable, but keep idempotent and return OK. + return {"ok": True} + item.deleted = True + _items[id] = item + return {"ok": True} From 21502ceccee05f3de6f4f216d8ffd772dc8a51f9 Mon Sep 17 00:00:00 2001 From: Evgenii Fomin Date: Sat, 11 Oct 2025 20:16:10 +0300 Subject: [PATCH 5/9] hw2 v2 --- hw2/hw/shop_api/main.py | 300 ++++++++++++++++++---------------------- 1 file changed, 136 insertions(+), 164 deletions(-) diff --git a/hw2/hw/shop_api/main.py b/hw2/hw/shop_api/main.py index 4b912e28..90426bb5 100644 --- a/hw2/hw/shop_api/main.py +++ b/hw2/hw/shop_api/main.py @@ -1,27 +1,36 @@ -from typing import Dict, List, Optional -from fastapi import FastAPI, HTTPException, Path, Query, status -from pydantic import BaseModel, Field, PositiveInt, conint, confloat +from fastapi import FastAPI, HTTPException, Query from fastapi.responses import JSONResponse +from pydantic import BaseModel, confloat, conint, PositiveInt +from typing import Dict, List, Optional + +app = FastAPI() -app = FastAPI(title="Shop API") +# ---------- MODELS ---------- -# ---------------------------- -# Pydantic models -# ---------------------------- -class ItemCreate(BaseModel): +class ItemBase(BaseModel): name: str price: confloat(ge=0.0) + class Config: + extra = 'forbid' # запрет лишних полей во всех моделях -class Item(ItemCreate): - id: int - deleted: bool = False + +class ItemCreate(ItemBase): + pass class ItemPatch(BaseModel): name: Optional[str] = None price: Optional[confloat(ge=0.0)] = None + class Config: + extra = 'forbid' # PATCH должен возвращать 422 при любых неожиданных полях + + +class Item(ItemBase): + id: int + deleted: bool = False + class CartItemOut(BaseModel): id: int @@ -36,195 +45,158 @@ class CartOut(BaseModel): price: float -# ---------------------------- -# In-memory storage -# ---------------------------- +# ---------- IN-MEMORY "БАЗА" ---------- + _next_item_id = 1 _items: Dict[int, Item] = {} _next_cart_id = 1 -# carts stored as dict cart_id -> dict[item_id -> quantity] _carts: Dict[int, Dict[int, int]] = {} -# ---------------------------- -# Helpers -# ---------------------------- -def _get_item_or_404(item_id: int) -> Item: - item = _items.get(item_id) - if item is None: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) - return item - +# ---------- ITEM ENDPOINTS ---------- -def _cart_to_response(cart_id: int) -> CartOut: - item_map = _carts.get(cart_id, {}) - items_out: List[CartItemOut] = [] - total_price = 0.0 - for iid, qty in item_map.items(): - item = _items.get(iid) - available = item is not None and not item.deleted - name = item.name if item is not None else "" - items_out.append( - CartItemOut(id=iid, name=name, quantity=qty, available=available) - ) - if available: - total_price += (item.price * qty) # type: ignore - return CartOut(id=cart_id, items=items_out, price=total_price) - - -# ---------------------------- -# Cart endpoints -# ---------------------------- -@app.post("/cart", status_code=status.HTTP_201_CREATED) -def create_cart(): - global _next_cart_id - cid = _next_cart_id - _next_cart_id += 1 - _carts[cid] = {} - location = f"/cart/{cid}" - resp = JSONResponse(status_code=status.HTTP_201_CREATED, content={"id": cid}) - resp.headers["location"] = location - return resp - - -@app.get("/cart/{id}", response_model=CartOut) -def get_cart(id: int = Path(..., ge=1)): - if id not in _carts: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) - return _cart_to_response(id) - - -@app.get("/cart", response_model=List[CartOut]) -def list_carts( - offset: conint(ge=0) = Query(0), - limit: PositiveInt = Query(10), - min_price: Optional[confloat(ge=0.0)] = Query(None), - max_price: Optional[confloat(ge=0.0)] = Query(None), - min_quantity: Optional[conint(ge=0)] = Query(None), - max_quantity: Optional[conint(ge=0)] = Query(None), -): - # gather all carts in ascending id order - cart_ids = sorted(_carts.keys()) - selected = [] - for cid in cart_ids: - cart_resp = _cart_to_response(cid) - # per-cart total quantity - total_quantity = sum(i.quantity for i in cart_resp.items) - # price already computed in cart_resp.price - price = cart_resp.price - # apply filters - if min_price is not None and price < min_price: - continue - if max_price is not None and price > max_price: - continue - if min_quantity is not None and total_quantity < min_quantity: - continue - if max_quantity is not None and total_quantity > max_quantity: - continue - selected.append(cart_resp) - # apply offset+limit - return selected[offset : offset + limit] - - -@app.post("/cart/{cart_id}/add/{item_id}", status_code=status.HTTP_200_OK) -def add_item_to_cart( - cart_id: int = Path(..., ge=1), item_id: int = Path(..., ge=1) -): - if cart_id not in _carts: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) - if item_id not in _items: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) - item_map = _carts[cart_id] - item_map[item_id] = item_map.get(item_id, 0) + 1 - return {"ok": True} - - -# ---------------------------- -# Item endpoints -# ---------------------------- -@app.post("/item", status_code=status.HTTP_201_CREATED) +@app.post('/item', response_model=Item, status_code=201) def create_item(item_in: ItemCreate): global _next_item_id - iid = _next_item_id + item = Item(id=_next_item_id, name=item_in.name, price=item_in.price, deleted=False) + _items[_next_item_id] = item _next_item_id += 1 - item = Item(id=iid, name=item_in.name, price=item_in.price, deleted=False) - _items[iid] = item return item -@app.get("/item/{id}", response_model=Item) -def get_item(id: int = Path(..., ge=1)): +@app.get('/item/{id}', response_model=Item) +def get_item(id: int): item = _items.get(id) if item is None or item.deleted: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + raise HTTPException(status_code=404) return item -@app.get("/item", response_model=List[Item]) +@app.get('/item', response_model=List[Item]) def list_items( - offset: conint(ge=0) = Query(0), - limit: PositiveInt = Query(10), - min_price: Optional[confloat(ge=0.0)] = Query(None), - max_price: Optional[confloat(ge=0.0)] = Query(None), - show_deleted: bool = Query(False), + offset: conint(ge=0) = 0, + limit: PositiveInt = 10, + min_price: Optional[confloat(ge=0.0)] = None, + max_price: Optional[confloat(ge=0.0)] = None, + show_deleted: bool = False ): - items_list = [it for it in _items.values() if (show_deleted or not it.deleted)] - # apply price filters - if min_price is not None: - items_list = [it for it in items_list if it.price >= min_price] - if max_price is not None: - items_list = [it for it in items_list if it.price <= max_price] - # sort by id - items_list = sorted(items_list, key=lambda x: x.id) - return items_list[offset : offset + limit] - - -@app.put("/item/{id}", response_model=Item) -def replace_item(id: int = Path(..., ge=1), item_in: ItemCreate = ...): - # PUT replaces only existing item (creation forbidden) - item = _items.get(id) - if item is None: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) - # replace fields but keep id and deleted flag - new_item = Item(id=id, name=item_in.name, price=item_in.price, deleted=item.deleted) + items = [ + item for item in _items.values() + if (show_deleted or not item.deleted) + and (min_price is None or item.price >= min_price) + and (max_price is None or item.price <= max_price) + ] + return sorted(items, key=lambda x: x.id)[offset:offset + limit] + + +@app.put('/item/{id}', response_model=Item) +def replace_item(id: int, item_in: ItemCreate): + if id not in _items: + raise HTTPException(status_code=404) + old_item = _items[id] + new_item = Item(id=id, name=item_in.name, price=item_in.price, deleted=old_item.deleted) _items[id] = new_item return new_item -@app.patch("/item/{id}") -def patch_item(id: int = Path(..., ge=1), patch: ItemPatch = ...): +@app.patch('/item/{id}', response_model=Item) +def patch_item(id: int, patch: ItemPatch): item = _items.get(id) if item is None: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + raise HTTPException(status_code=404) if item.deleted: - # tests expect NOT_MODIFIED for attempts to patch deleted item - return JSONResponse(status_code=status.HTTP_304_NOT_MODIFIED, content={"ok": False}) - # validate that no unexpected fields are present and 'deleted' can't be changed - # FastAPI/Pydantic already enforces schema on known fields; but we must guard 'deleted' - # If user attempts to pass 'deleted' in body, Pydantic will raise 422 because ItemPatch has no 'deleted'. - # Apply patch + return JSONResponse(status_code=304, content=item.model_dump()) + data = patch.dict(exclude_unset=True) if not data: - # nothing changed - still OK, return current item body return item - # allowed keys only name and price, already enforced by model - if "name" in data: - item.name = data["name"] # type: ignore - if "price" in data: - item.price = data["price"] # type: ignore + + if 'name' in data: + item.name = data['name'] + if 'price' in data: + item.price = data['price'] + _items[id] = item return item -@app.delete("/item/{id}") -def delete_item(id: int = Path(..., ge=1)): +@app.delete('/item/{id}') +def delete_item(id: int): item = _items.get(id) if item is None: - # deletion is idempotent according to tests: return OK if not exists as well - # But tests expect second delete after initial delete to return OK; first delete must mark deleted. - # If item never existed, returning 404 might be acceptable, but keep idempotent and return OK. - return {"ok": True} + return {'ok': True} item.deleted = True _items[id] = item - return {"ok": True} + return {'ok': True} + + +# ---------- CART ENDPOINTS ---------- + +@app.post('/cart') +def create_cart(): + global _next_cart_id + cid = _next_cart_id + _next_cart_id += 1 + _carts[cid] = {} + response = JSONResponse(status_code=201, content={'id': cid}) + response.headers['Location'] = f'/cart/{cid}' + return response + + +@app.post('/cart/{cart_id}/add/{item_id}') +def add_item_to_cart(cart_id: int, item_id: int): + if cart_id not in _carts: + raise HTTPException(status_code=404) + if item_id not in _items: + raise HTTPException(status_code=404) + + item_map = _carts[cart_id] + item_map[item_id] = item_map.get(item_id, 0) + 1 + return {'ok': True} + + +def _cart_to_response(cart_id: int) -> CartOut: + item_map = _carts.get(cart_id, {}) + items_out = [] + total_price = 0.0 + + for iid, qty in item_map.items(): + item = _items.get(iid) + available = item is not None and not item.deleted + name = item.name if item else '' + if available: + total_price += item.price * qty + items_out.append(CartItemOut(id=iid, name=name, quantity=qty, available=available)) + + return CartOut(id=cart_id, items=items_out, price=total_price) + + +@app.get('/cart/{id}', response_model=CartOut) +def get_cart(id: int): + if id not in _carts: + raise HTTPException(status_code=404) + return _cart_to_response(id) + + +@app.get('/cart', response_model=List[CartOut]) +def list_carts( + offset: conint(ge=0) = 0, + limit: PositiveInt = 10, + min_price: Optional[confloat(ge=0.0)] = None, + max_price: Optional[confloat(ge=0.0)] = None, + min_quantity: Optional[conint(ge=0)] = None, + max_quantity: Optional[conint(ge=0)] = None, +): + carts_out = [] + for cid in sorted(_carts.keys()): + cart_resp = _cart_to_response(cid) + total_quantity = sum(i.quantity for i in cart_resp.items) + if ( + (min_price is None or cart_resp.price >= min_price) + and (max_price is None or cart_resp.price <= max_price) + and (min_quantity is None or total_quantity >= min_quantity) + and (max_quantity is None or total_quantity <= max_quantity) + ): + carts_out.append(cart_resp) + return carts_out[offset:offset + limit] From 3f4bf7666b0baf362248f9074cdeb5da8ebf2fcb Mon Sep 17 00:00:00 2001 From: Evgenii Fomin Date: Sun, 12 Oct 2025 23:28:28 +0300 Subject: [PATCH 6/9] hw3 --- hw3/Dockerfile | 12 ++ hw3/__init__.py | 0 hw3/docker-compose.yml | 32 +++++ hw3/prometheus.yml | 8 ++ hw3/requirements.txt | 12 ++ hw3/shop_api/__init__.py | 0 hw3/shop_api/main.py | 204 ++++++++++++++++++++++++++++ hw3/test_homework2.py | 284 +++++++++++++++++++++++++++++++++++++++ 8 files changed, 552 insertions(+) create mode 100644 hw3/Dockerfile create mode 100644 hw3/__init__.py create mode 100644 hw3/docker-compose.yml create mode 100644 hw3/prometheus.yml create mode 100644 hw3/requirements.txt create mode 100644 hw3/shop_api/__init__.py create mode 100644 hw3/shop_api/main.py create mode 100644 hw3/test_homework2.py diff --git a/hw3/Dockerfile b/hw3/Dockerfile new file mode 100644 index 00000000..ff27c0ce --- /dev/null +++ b/hw3/Dockerfile @@ -0,0 +1,12 @@ +# Dockerfile +FROM python:3.12-slim + +WORKDIR /app + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +EXPOSE 8000 +CMD ["uvicorn", "shop_api.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/hw3/__init__.py b/hw3/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/hw3/docker-compose.yml b/hw3/docker-compose.yml new file mode 100644 index 00000000..f92a8068 --- /dev/null +++ b/hw3/docker-compose.yml @@ -0,0 +1,32 @@ +version: '3.8' + +services: + app: + build: . + container_name: shop_api + ports: + - "8000:8000" + networks: + - monitoring + + prometheus: + image: prom/prometheus + container_name: prometheus + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml + ports: + - "9090:9090" + networks: + - monitoring + + grafana: + image: grafana/grafana + container_name: grafana + ports: + - "3000:3000" + networks: + - monitoring + +networks: + monitoring: + driver: bridge diff --git a/hw3/prometheus.yml b/hw3/prometheus.yml new file mode 100644 index 00000000..f3dbc6ef --- /dev/null +++ b/hw3/prometheus.yml @@ -0,0 +1,8 @@ +global: + scrape_interval: 5s + +scrape_configs: + - job_name: "shop_api" + metrics_path: /metrics + static_configs: + - targets: ["app:8000"] diff --git a/hw3/requirements.txt b/hw3/requirements.txt new file mode 100644 index 00000000..ac9e3799 --- /dev/null +++ b/hw3/requirements.txt @@ -0,0 +1,12 @@ +# Основные зависимости для ASGI приложения +fastapi>=0.117.1 +uvicorn>=0.24.0 +fastapi +uvicorn +prometheus-fastapi-instrumentator + +# Зависимости для тестирования +pytest>=7.4.0 +pytest-asyncio>=0.21.0 +httpx>=0.27.2 +Faker>=37.8.0 diff --git a/hw3/shop_api/__init__.py b/hw3/shop_api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/hw3/shop_api/main.py b/hw3/shop_api/main.py new file mode 100644 index 00000000..5eddf275 --- /dev/null +++ b/hw3/shop_api/main.py @@ -0,0 +1,204 @@ +from fastapi import FastAPI, HTTPException, Query +from fastapi.responses import JSONResponse +from pydantic import BaseModel, confloat, conint, PositiveInt +from typing import Dict, List, Optional +from prometheus_fastapi_instrumentator import Instrumentator + +app = FastAPI() +Instrumentator().instrument(app).expose(app) + +# ---------- MODELS ---------- + +class ItemBase(BaseModel): + name: str + price: confloat(ge=0.0) + + class Config: + extra = 'forbid' # запрет лишних полей во всех моделях + + +class ItemCreate(ItemBase): + pass + + +class ItemPatch(BaseModel): + name: Optional[str] = None + price: Optional[confloat(ge=0.0)] = None + + class Config: + extra = 'forbid' # PATCH должен возвращать 422 при любых неожиданных полях + + +class Item(ItemBase): + id: int + deleted: bool = False + + +class CartItemOut(BaseModel): + id: int + name: str + quantity: int + available: bool + + +class CartOut(BaseModel): + id: int + items: List[CartItemOut] + price: float + + +# ---------- IN-MEMORY "БАЗА" ---------- + +_next_item_id = 1 +_items: Dict[int, Item] = {} + +_next_cart_id = 1 +_carts: Dict[int, Dict[int, int]] = {} + + +# ---------- ITEM ENDPOINTS ---------- + +@app.post('/item', response_model=Item, status_code=201) +def create_item(item_in: ItemCreate): + global _next_item_id + item = Item(id=_next_item_id, name=item_in.name, price=item_in.price, deleted=False) + _items[_next_item_id] = item + _next_item_id += 1 + return item + + +@app.get('/item/{id}', response_model=Item) +def get_item(id: int): + item = _items.get(id) + if item is None or item.deleted: + raise HTTPException(status_code=404) + return item + + +@app.get('/item', response_model=List[Item]) +def list_items( + offset: conint(ge=0) = 0, + limit: PositiveInt = 10, + min_price: Optional[confloat(ge=0.0)] = None, + max_price: Optional[confloat(ge=0.0)] = None, + show_deleted: bool = False +): + items = [ + item for item in _items.values() + if (show_deleted or not item.deleted) + and (min_price is None or item.price >= min_price) + and (max_price is None or item.price <= max_price) + ] + return sorted(items, key=lambda x: x.id)[offset:offset + limit] + + +@app.put('/item/{id}', response_model=Item) +def replace_item(id: int, item_in: ItemCreate): + if id not in _items: + raise HTTPException(status_code=404) + old_item = _items[id] + new_item = Item(id=id, name=item_in.name, price=item_in.price, deleted=old_item.deleted) + _items[id] = new_item + return new_item + + +@app.patch('/item/{id}', response_model=Item) +def patch_item(id: int, patch: ItemPatch): + item = _items.get(id) + if item is None: + raise HTTPException(status_code=404) + if item.deleted: + return JSONResponse(status_code=304, content=item.model_dump()) + + data = patch.dict(exclude_unset=True) + if not data: + return item + + if 'name' in data: + item.name = data['name'] + if 'price' in data: + item.price = data['price'] + + _items[id] = item + return item + + +@app.delete('/item/{id}') +def delete_item(id: int): + item = _items.get(id) + if item is None: + return {'ok': True} + item.deleted = True + _items[id] = item + return {'ok': True} + + +# ---------- CART ENDPOINTS ---------- + +@app.post('/cart') +def create_cart(): + global _next_cart_id + cid = _next_cart_id + _next_cart_id += 1 + _carts[cid] = {} + response = JSONResponse(status_code=201, content={'id': cid}) + response.headers['Location'] = f'/cart/{cid}' + return response + + +@app.post('/cart/{cart_id}/add/{item_id}') +def add_item_to_cart(cart_id: int, item_id: int): + if cart_id not in _carts: + raise HTTPException(status_code=404) + if item_id not in _items: + raise HTTPException(status_code=404) + + item_map = _carts[cart_id] + item_map[item_id] = item_map.get(item_id, 0) + 1 + return {'ok': True} + + +def _cart_to_response(cart_id: int) -> CartOut: + item_map = _carts.get(cart_id, {}) + items_out = [] + total_price = 0.0 + + for iid, qty in item_map.items(): + item = _items.get(iid) + available = item is not None and not item.deleted + name = item.name if item else '' + if available: + total_price += item.price * qty + items_out.append(CartItemOut(id=iid, name=name, quantity=qty, available=available)) + + return CartOut(id=cart_id, items=items_out, price=total_price) + + +@app.get('/cart/{id}', response_model=CartOut) +def get_cart(id: int): + if id not in _carts: + raise HTTPException(status_code=404) + return _cart_to_response(id) + + +@app.get('/cart', response_model=List[CartOut]) +def list_carts( + offset: conint(ge=0) = 0, + limit: PositiveInt = 10, + min_price: Optional[confloat(ge=0.0)] = None, + max_price: Optional[confloat(ge=0.0)] = None, + min_quantity: Optional[conint(ge=0)] = None, + max_quantity: Optional[conint(ge=0)] = None, +): + carts_out = [] + for cid in sorted(_carts.keys()): + cart_resp = _cart_to_response(cid) + total_quantity = sum(i.quantity for i in cart_resp.items) + if ( + (min_price is None or cart_resp.price >= min_price) + and (max_price is None or cart_resp.price <= max_price) + and (min_quantity is None or total_quantity >= min_quantity) + and (max_quantity is None or total_quantity <= max_quantity) + ): + carts_out.append(cart_resp) + return carts_out[offset:offset + limit] diff --git a/hw3/test_homework2.py b/hw3/test_homework2.py new file mode 100644 index 00000000..60a1f36a --- /dev/null +++ b/hw3/test_homework2.py @@ -0,0 +1,284 @@ +from http import HTTPStatus +from typing import Any +from uuid import uuid4 + +import pytest +from faker import Faker +from fastapi.testclient import TestClient + +from shop_api.main import app + +client = TestClient(app) +faker = Faker() + + +@pytest.fixture() +def existing_empty_cart_id() -> int: + return client.post("/cart").json()["id"] + + +@pytest.fixture(scope="session") +def existing_items() -> list[int]: + items = [ + { + "name": f"Тестовый товар {i}", + "price": faker.pyfloat(positive=True, min_value=10.0, max_value=500.0), + } + for i in range(10) + ] + + return [client.post("/item", json=item).json()["id"] for item in items] + + +@pytest.fixture(scope="session", autouse=True) +def existing_not_empty_carts(existing_items: list[int]) -> list[int]: + carts = [] + + for i in range(20): + cart_id: int = client.post("/cart").json()["id"] + for item_id in faker.random_elements(existing_items, unique=False, length=i): + client.post(f"/cart/{cart_id}/add/{item_id}") + + carts.append(cart_id) + + return carts + + +@pytest.fixture() +def existing_not_empty_cart_id( + existing_empty_cart_id: int, + existing_items: list[int], +) -> int: + for item_id in faker.random_elements(existing_items, unique=False, length=3): + client.post(f"/cart/{existing_empty_cart_id}/add/{item_id}") + + return existing_empty_cart_id + + +@pytest.fixture() +def existing_item() -> dict[str, Any]: + return client.post( + "/item", + json={ + "name": f"Тестовый товар {uuid4().hex}", + "price": faker.pyfloat(min_value=10.0, max_value=100.0), + }, + ).json() + + +@pytest.fixture() +def deleted_item(existing_item: dict[str, Any]) -> dict[str, Any]: + item_id = existing_item["id"] + client.delete(f"/item/{item_id}") + + existing_item["deleted"] = True + return existing_item + + +def test_post_cart() -> None: + response = client.post("/cart") + + assert response.status_code == HTTPStatus.CREATED + assert "location" in response.headers + assert "id" in response.json() + + +@pytest.mark.parametrize( + ("cart", "not_empty"), + [ + ("existing_empty_cart_id", False), + ("existing_not_empty_cart_id", True), + ], +) +def test_get_cart(request, cart: int, not_empty: bool) -> None: + cart_id = request.getfixturevalue(cart) + + response = client.get(f"/cart/{cart_id}") + + assert response.status_code == HTTPStatus.OK + response_json = response.json() + + len_items = len(response_json["items"]) + assert len_items > 0 if not_empty else len_items == 0 + + if not_empty: + price = 0 + + for item in response_json["items"]: + item_id = item["id"] + price += client.get(f"/item/{item_id}").json()["price"] * item["quantity"] + + assert response_json["price"] == pytest.approx(price, 1e-8) + else: + assert response_json["price"] == 0.0 + + +@pytest.mark.parametrize( + ("query", "status_code"), + [ + ({}, HTTPStatus.OK), + ({"offset": 1, "limit": 2}, HTTPStatus.OK), + ({"min_price": 1000.0}, HTTPStatus.OK), + ({"max_price": 20.0}, HTTPStatus.OK), + ({"min_quantity": 1}, HTTPStatus.OK), + ({"max_quantity": 0}, HTTPStatus.OK), + ({"offset": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"limit": 0}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"limit": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"min_price": -1.0}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"max_price": -1.0}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"min_quantity": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"max_quantity": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ], +) +def test_get_cart_list(query: dict[str, Any], status_code: int): + response = client.get("/cart", params=query) + + assert response.status_code == status_code + + if status_code == HTTPStatus.OK: + data = response.json() + + assert isinstance(data, list) + + if "min_price" in query: + assert all(item["price"] >= query["min_price"] for item in data) + + if "max_price" in query: + assert all(item["price"] <= query["max_price"] for item in data) + + quantity = sum(item["quantity"] for cart in data for item in cart["items"]) + + if "min_quantity" in query: + assert quantity >= query["min_quantity"] + + if "max_quantity" in query: + assert quantity <= query["max_quantity"] + + +def test_post_item() -> None: + item = {"name": "test item", "price": 9.99} + response = client.post("/item", json=item) + + assert response.status_code == HTTPStatus.CREATED + + data = response.json() + assert item["price"] == data["price"] + assert item["name"] == data["name"] + + +def test_get_item(existing_item: dict[str, Any]) -> None: + item_id = existing_item["id"] + + response = client.get(f"/item/{item_id}") + + assert response.status_code == HTTPStatus.OK + assert response.json() == existing_item + + +@pytest.mark.parametrize( + ("query", "status_code"), + [ + ({"offset": 2, "limit": 5}, HTTPStatus.OK), + ({"min_price": 5.0}, HTTPStatus.OK), + ({"max_price": 5.0}, HTTPStatus.OK), + ({"show_deleted": True}, HTTPStatus.OK), + ({"offset": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"limit": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"limit": 0}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"min_price": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"max_price": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ], +) +def test_get_item_list(query: dict[str, Any], status_code: int) -> None: + response = client.get("/item", params=query) + + assert response.status_code == status_code + + if status_code == HTTPStatus.OK: + data = response.json() + + assert isinstance(data, list) + + if "min_price" in query: + assert all(item["price"] >= query["min_price"] for item in data) + + if "max_price" in query: + assert all(item["price"] <= query["max_price"] for item in data) + + if "show_deleted" in query and query["show_deleted"] is False: + assert all(item["deleted"] is False for item in data) + + +@pytest.mark.parametrize( + ("body", "status_code"), + [ + ({}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"price": 9.99}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"name": "new name", "price": 9.99}, HTTPStatus.OK), + ], +) +def test_put_item( + existing_item: dict[str, Any], + body: dict[str, Any], + status_code: int, +) -> None: + item_id = existing_item["id"] + response = client.put(f"/item/{item_id}", json=body) + + assert response.status_code == status_code + + if status_code == HTTPStatus.OK: + new_item = existing_item.copy() + new_item.update(body) + assert response.json() == new_item + + +@pytest.mark.parametrize( + ("item", "body", "status_code"), + [ + ("deleted_item", {}, HTTPStatus.NOT_MODIFIED), + ("deleted_item", {"price": 9.99}, HTTPStatus.NOT_MODIFIED), + ("deleted_item", {"name": "new name", "price": 9.99}, HTTPStatus.NOT_MODIFIED), + ("existing_item", {}, HTTPStatus.OK), + ("existing_item", {"price": 9.99}, HTTPStatus.OK), + ("existing_item", {"name": "new name", "price": 9.99}, HTTPStatus.OK), + ( + "existing_item", + {"name": "new name", "price": 9.99, "odd": "value"}, + HTTPStatus.UNPROCESSABLE_ENTITY, + ), + ( + "existing_item", + {"name": "new name", "price": 9.99, "deleted": True}, + HTTPStatus.UNPROCESSABLE_ENTITY, + ), + ], +) +def test_patch_item(request, item: str, body: dict[str, Any], status_code: int) -> None: + item_data: dict[str, Any] = request.getfixturevalue(item) + item_id = item_data["id"] + response = client.patch(f"/item/{item_id}", json=body) + + assert response.status_code == status_code + + if status_code == HTTPStatus.OK: + patch_response_body = response.json() + + response = client.get(f"/item/{item_id}") + patched_item = response.json() + + assert patched_item == patch_response_body + + +def test_delete_item(existing_item: dict[str, Any]) -> None: + item_id = existing_item["id"] + + response = client.delete(f"/item/{item_id}") + assert response.status_code == HTTPStatus.OK + + response = client.get(f"/item/{item_id}") + assert response.status_code == HTTPStatus.NOT_FOUND + + response = client.delete(f"/item/{item_id}") + assert response.status_code == HTTPStatus.OK From 3fcee1e76ef94fbc30c98cb4cdc41f8c9514f968 Mon Sep 17 00:00:00 2001 From: Evgenii Fomin Date: Sun, 12 Oct 2025 23:54:44 +0300 Subject: [PATCH 7/9] hw3 grafana added --- hw3/grafana/dashboard_process_cpu.jpg | Bin 0 -> 237141 bytes hw3/grafana/dashboard_requests_total.jpg | Bin 0 -> 225975 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 hw3/grafana/dashboard_process_cpu.jpg create mode 100755 hw3/grafana/dashboard_requests_total.jpg diff --git a/hw3/grafana/dashboard_process_cpu.jpg b/hw3/grafana/dashboard_process_cpu.jpg new file mode 100755 index 0000000000000000000000000000000000000000..25f11f53e61b42dda60b78682d653184a9b32008 GIT binary patch literal 237141 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%0Dr(mb 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 literal 0 HcmV?d00001 diff --git a/hw3/grafana/dashboard_requests_total.jpg b/hw3/grafana/dashboard_requests_total.jpg new file mode 100755 index 0000000000000000000000000000000000000000..c4e9745782a91db0299d5208b00841f3fa5b6693 GIT binary patch literal 225975 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 z z<{PzwEl=y8%>Ho}0FM8!zk9CCkpBB5E!@^AlFKJy>1TkHSI1wm85ynrcqslj%j^RA zU-I@34^`^-DGnYC^MNe^V87HEY6o*ayz<&y{3;Jo`CY`Bu;g zTXZOZX+mSIi~f6$xbzqA5e=D#irOQzJ9}`7Cxf(Kc*nwI@co?h=xPTo?fvJj16-nm+^62+p1Qj`RQROA)h3nJhoYqu`iG|o-4M5S19JzP z1q4SLs4*|@L7XbZ6Q}YxI=glP1!|CM}!WEL3r$0Xu;7;mpZpY{CPHbuiDHhk!ZMD4(efDKOEHCZ#z!p|y z(tS54I1v%W05tiHn`v)H%1p9i3nF(f5eMmphi9uMH_? zsoiIq)coW_jU>j31%;jOCH^MCvl2h|b!eu4rnP^)KxA`898uhG)~~gB|FC-3;0@eo z2N<(`D(i%DV`GrvEyYjt@Nu1J{SY76q56#BvMPegEAzN$0y_K)#$)X(>>eS)2<@aR z`hFrHgkG#|p@l$5o$>9IUOZQukkO#qgpYkju{_*>>exO~R#}@lENaL?iw%!5nNaDrx$p{mcya zr-)=f6d%}cua|gT0O}_)N0(^n!ED3+Vv_>P5Qmp{r+AD5R3bfq{AFt&+8^js zbO_$60v}czR%wB5LP(Bv$X{rc?P=NHqDC@tSJ~n@VLW@BeI08d_><{$%FuowKr69O zClAT-u*)+Z3tHp&&2ukBFoO)AUbQ zTMeyq z{yUcmS|&aQ`Wlqk@QakC&H>QhB(Cj3KihP(dZuCfM7jkL%cw+D@uRWzojlB5nBKnB z=}q+OZP?697{dPCfUm0Lo{W?UYYn%JpD5MTl^2J8F7=&v3};#R;wX8giPh!Pr(B+j zKVOaKO4_iMJB=XOh)Nq z+7Si-a;E3r0iBy&3hVzD(_LTzf5XQ=bpqD+VMsuPjB2`cy8qo^nP)kXpMgGZNzFUi zE3{_`A;vE;?vgbec- z!0c3qJs6I|psOgsYzR(s`7}-aV6A9D@#27edF998*BG926;U{zbG9>?HhK)(ZRxY{ zm+LY^EaTIgQ=Q>ohRHq|3lAcB_Og5ywhz3Zpb0&5D0N9$KP#(IRb^dOo3-!KrGDv# zVG<4Lw&vztuY{2Vlr-Y0{tXmG{yL#H1q7E;ZMs*?!v;$vHhL zqRxvzJqt%J1tmNrB%W4ZfH&^(KB?l;$d^I3x$;Y*spX*@z6#f!bEg@$P15J^izyZ? zX`PD63YJQ%LY%)nX_dkA4oMl2qDO^kz&4DmPwx@WtlVhl3H9Waz&oyXw%FgxURHfJ z;%Uk;%ZFWD`O59J>OIq}7<6R!y;In%3>B7y$CdYH0=)qay?(v(xb##^A!zNq%!tW* zjm7@qQA?sglj^9KoOaWt*37jsIoi&ICoKXFgIrmGKoPFA@k2YVke*f&4p|4;x+>{Z z=G4TNIkdqGw0{WRK`HI367S)>;Z}qfNHv#>5SH%-mtt*y-51d6%>;g04$)sK~o1=nF#4q18^}7ClAld8Z<~ zOUFzrM}~te+VY_51@CK0Du)UUN5~->iKt#~_sCOt*v1!5(MH-`owpT9*9NT|6tBZ9 zD5=IrT3!O7vV@5hbrRiG&wJxzq)d%M&jtrh=Ys)lxlgB*BW_pq;Ha}E*wJ;Nlxg+v z28IQN#oM`7Z>%X6viZ}6SZ@eQTd_uuo;H>%ghx+B;5^}KHFC}c;qv*So{kqJrKXRD z5{QZPzR#?UXy+SK*q=jUv((OVG%iru9P57u*Uv0z2WKoS{Z`D|C*JeT%UG$1nITlj zq#xUZXmY#xD_rP6(a9=M-72-E3x@rW~+Rd0Jj7;}gAz)A8sz zr_q-_PyElS3_Dwkhi!lftJm{pffaE#s4R^$eXW1+xI&NlL#5{UhJ1#mv=!|e$^OX8 zf@2Tw%B)E$aOt@z4HfnjRgGF|H3ICYJLfaBKmA?@np+MQ!Z%3${QhvFNf`ou9$Qp; zQot!up5(%gSy~M(uxi1ogd*4*p}$~sHLs5skCf$2JsQ^na$**-nIzFS-lTZn3=2`Kr`yhe5BG?k|S zrZ9A4<(MTpFE4{&t-7a{kRpE3JLk#VH?xs@MCC2It&)(g?DsSS`{2;=(%}Ls|5P*R z%_O%&9>K0el4bwI?Ow2jjqKXs)FojVb%+0E5w zjl7*}%^DCjjW!B>#o0m)f1;6~p42BXN>ZBG{FJdN6Rl;H3wYD%~X4@deXAA z&BjR+rke8MW$AYh?(|NBSvmG-cl#4w%ulhOytpXIne`&Mb|DSb;P)Wq>Y!@4If0qf z#51aAU6dc8TOq+a=-VdY1?d`@wobU5yhA}aU7=g}F{H;~&a0xtD|s*jzg{3WQObg} zoLYj%SlJywm+TG=r_;5~x;d(9yt#M>$ndK!K@mr`p{evqZ!xin&Bj`*4Uj9BgN(Ib zyo(G8+<^%x<4XJco$_KX;Z=0eZyv79u+6oZT_`)356I%lhuqF*oimYaO2LnzN?&Xf z$)IBFfxiWh+ht9_o1#s2c|VulKAovbK$9M%;H@#*T9WyI;5NP{1x0%Sb}oukMM^%9N|6XVcz+4FJ$fVoeOov_>z`I(su-ay&&EkmhXi`X1NYRyMmzn z$gI;45U0e6L)B$Yitl5af_0u?YcY0|y*UD}e!%D2atAK*=~m1UaE+f|VZ!Z@5%+oW zeX>XMubBGO(5?6hImi=_%$G(JbYDI2KPQ}CVg#2+ee*lf5e&54**7X76)PruOib9yAK&j4-!TP03^<$U2{%+4R@PkOIKzft1DZam zY+p#WfQ`=W(&|@e!&N&xJ{p9k9C0OQUwFmXr-q#`VE}&NO(wG4jQ(|=zGZKi+u>mm zzb>qP%&+sTZ^wTZ2+T9T>TI|@FrD4rMHP`AP-Fw#W^<~dt9i5ipnj9%aC!XIowNdv z5D>=*9C@Pp67=Go;R-O%HH`NKzYcZlf$`m4P|ex>gQ@rP6}?jeDi?bUvj=KIwZC9E zEux+C_{wd5!7%Fp)(kV&ANcCmT|trj$3{;sIS_-#(s$%e3n?ecfx`djZ>y|=ZpV*X z1-@u*6`^G$o(B$aK_nS26c8I&K4-deVsxjf`9A);(}_j2W+p`A)w|P=Sc|7$FDCys z-q{0wc9A5{28_9f{OpZ9n`#f&M&Hpr^vLzu3HMr&d9I(Q${z_#RqUHgxqSYw%~0!tHX&y<@Ihk%g8Ih z1$8(!dBwGogYE%E^dc+eE{)SPZ_OwEC{xVf={;5 zmLCm-LqCtK#u=1{es((1xffObX8Yuw>Gyps;rpH2P%OSobmCF}wWhY`qb2>orYYE0 zcr_407DC5o;|cc_196-r0~>(JE2i^FYnReDE;FkiKx~_+kI>!Fxg%H-qua!ThSJ*} z)sr}m%o9c}?t5T*{r6^AA^`~#l6U`h^e~TH#ShKPq~CW?IIx38nuDiKetoKQBs8=& zx@|dtO|+csvU|$@uRFJ_B{h}P@e7$OPt2+f#VtL4v)0%=R*|Fg!uu+5kC<5k6Wx zK}UnMj@e$|#!Qw_0KS5;tH-@lIpN*hb?mC(KWVVzM{#V4 z5;NoskMsHhUm;J>(yYUy1N`g8y`1@Atc4sH05BU0V_=syn+CSIFANvTh>bK`v>U`DX>yAygdJzhz{)RuKF=?=vgY;OnYOZre}h6a(VN#dwILP zPO`l3ouQr6WfRNyoS>KZTOihznZ@r$SjJs75aYUID};n9-g*;tG1*}z)n;Do&W1p~O?Z~l(S1a5DY zf>IOGnO}_-V64%~7Shid zt>`m58H@9M&`ZDXm{)5#D{Va8&b2qm9-S){_m@}%f{c9xr=Q)P~_FCz8`xP1D z^=*B>Ro=~H5`8B#0+x+;1X6;&VJa7arBf`Cz_hvSw<>pt(~UkjXJ| zCp@l*zL`JY31)ui)qJd>)<)ZKvtIbI&6V38SH0kxZWh+&bf)lU$cP7POw-)>mrx*m zAN3KfEPs)q`3GagJSDX+v67<!QSj{675Kz1SFn|1f8fCJ+Dnq*0X-cl>{>;k9rmXoJj~tgDHsksZfbp7 z8~a^>WE)n`>UQyuxx+pJouQ7Tdu2CK^a#n3Mm@UHA?^nJL#xR#zIU0*n^G}%Jac!r zqF&tmf{`~vBqHGK*RDtFmZz&*D{M}Enfy!Byz$jrLYG7HQ!c$UC)XaDbFOoR4XtH1HVN#e5M1Aqw5V=zF3x;MM#5Mjv+wF3} zz_w#lD4JgzdId4!B}6e_$Msb4%JhsBgx!(vIG}s#@?>@~^*7Tyw|4{%ion0w{mOE{ z?pNZSZq@wc-(0Q2FMkaF0NDLPY@O_!EVA;gW$VsX*@y@W`G({pjeWL&WJ+p;Y2f=o z6knQ#`3)fpUr2$#w04$3La~Y3xGVnKWvl`hbn!wm0R-Wq6;hS0_b}-4y(&BMP|?_N zoDam&<;BF_rymKHJZ2vy*ZhLv2AJ5?g6Fs#Cq}fXP1*Rd!Xtn|&s6Xckdb71mL-|U z{Z_4|7!voET&MbltIwdTeL=k(PpmiVbS9UlGi8k`V;S;+`yk-sz>R^Wd#ADjeZ0KF z@fesV07(Dc!67@DaUw<8!L`R&g7c$W&IwaxoZJ>MECLoj_nXKVd;3@S*xo@*UZA`lL%8SAQ^B51OaCNe&!5pm~MGY8X|hjz#BG4g=ZEyFYLsq8T1fv$dm#w^3H5j zK$HBpbB@RFtI~cTiht630M%a(z$lW?0=};i1iAjJi$z}yT&fiAUci%#0X)fyGf(nO z?{D55hUYoIX|UnBUk~8))(`3U^M3Xf@%r`!nofLgF<)}kzt;O!lo#Od90?@@9_%Xy zB{i+#J9OX|ua02$nDkrVDZn1zhqmL#lAl)3;8n4dKmI=Mdoy6~Jaex!(IZ!$O+0e; zXo0zHE`UM+V+{BKoPcj{b~adP^4TnX87^d=xmWjZQgl4D^Hu)t2^^Wc9d8lZ+8f1> zIe=<{UC>)yD1<0+HsI|0b^Al7tgwQjC+KdD0uK5BceCYr7w4oIh+VQo1~IYEg*Q1+ zV2k_=_;smHSI!1jJPTuT*jNnt6xud#=&7AKTHkiQyE_=E5}Lf>_=2arfNM8%<^rI= zfXl-+IzK~r3V0o4Cf^56gvJ7K&C{iE4qRY|WiBX{@|$e_ZR{a>AcP5knQ6muYq}@s z`aMLx$86{Qs|h@B5ksmh;H!GashI!jU}+qkO|^ad?B>DL3IOikibp^wg%wm{8A*Wn zic0PRrb_Ay*puHptl#YJ-`JCw4fdlYAXxRNadN3Ko=EsDX3Lt^Y8$!Uwn=On8x`i) ziI)U)b@#X;^c9<&@pI`LvNI1)qw~zo0wPBA?fJKwt3YGC%M^g_y_$1|i;=wLknqac1s$fCw3IbAFAGfA+MZ*N7^@ zn4JhFgG}uozM`68zm)bbD~5hZD_Rk_o<1M^d_cDU#rr`ArmBliv?fwb!$Y6p9FZ2r zxBr5HjWXS?A0A$Bsiqm#(iM~-Zn0~%B?xm6LvS%xoX~nTE(AQYeR@vA@OO;Sf90nD z2>0+neLJ{rsNijwyrDy=NaxNJ>z%L=?{rU2VGA~5=K)p3+hKTicanTADZIdP9)Qj% zzZ8>9Vd%9RoHa^Nqx=ITg_)Uo7yy*pA;|LhYaTCYo}hrTiz2ms)_-*9`#bg$a?FIn6U(j0<{C;2l0A~E_)X^FezZ}KP zt{kbXDVeNC6SOrN8co3~`lLAFGj(+Rlj?FWqlgRA4yAMuAe3jR+vy`Gh_-1MzOpna z@t8CH?BsEKz+R7F3wcsv%D7G^p(2-31)nf}C-rp=LYqsoIKszjDg_F0R*HuFL*6%E zx=~q6xX!dH`Xu2UI?W#eZEfX>=zI)igyP+ZtKv9eKJnebTy3r)m*=bSOP#5DH%HgU z^RD~KWxp6fDBaEiNOUNRyLvp-nHQ%}4PRQsN-ZR0uhbmDVn6rimIe_&E#dg|gj3$F z+z+wa6bEY36>mbKaf7Yjvp(mFs(k$}!JpRTD3I+v$EQ_2lNqAg#{tS+O61%|h9;pG z9cifiKC99r)~DYxs>VC{MB-yb(sqep9|vE$r1UBU_} zTZ(|(+R@M4ot_k4V|S=B*XSU9dHKaM4_#f3?%H_WP!D`?B!=zo6ir(kbZX=!=12m*f8JdaHU&r?7aDVO^{v2!i zoQ4o__1bf^{&@AJ`30mxIfq|mMfcX_2mR;N2!QU?r&EPF9hHK z4$0faTL8r}R36lfOnTP`U!p-o=?qQXT+k1!1?Oq&kF61iA-5{UDf5*cod$eN%f1sZ zmz`&SpU0G_%ig@ql*j=_P*1nsK;+O17q&9uyr|KSYokm$Xu6q0Ke(gdQm7ojBrV20 zpH6HP7-V=6_~9AAkjMPrOY!|b&gcdh-qh#xu9+0igRE0B%vaArsRy;rNnw`~_Ntx6 zqBJv|<>qZ7)$4WXa8Cuc6arNuH#K{>B?#4oMK8`KjrGdzhx*8+qbRz7d2N0 ze<_|XU|l2So>HdhU@`EN@7L*~jtKWvCbGH{KKM+%GpuQV1h>?Z?A|*Dtii}u@J1He zO&d1*7=}_+cEo~*UPl=Z2x%6Y^*blGk~8OJxl31)Y}xXZim`BO$}D-#9U-BX(3FPZQN2 z7*9GPv|&WGGTSZRvHwF(#@VgeT4u_ht>;d)2H@(q81=sxg-I%nQf79xagE@{9S;22 zu-Qvkn^T5uGq|ww{Y0rJL#4Wsg4X1tQ>(-5Q{vRUi2~yUOkuX)+S;T{=A0x#s)&+q zA(B1sR*rn@XD#JliUCANsypH}K9u^dbvJAV`8sEq7j#B&;M_^_P6+izcfyv-D$o}J zZ=+QSsR9UU6*O$qfzgb~>?E}kJeh!|rHuVy1TIc>RKa|3Afu#C)D!88uh=<7kFWOT z)c@J1OU^)iACr&ZK&|^V2f(v@>H%a+dLh=RE1^Ke{yPHp&p!Jd3wj^W&l;XNya_<| ziKWIAQAnV){plS*`po@~kNj~X{B()3|2^!_i+t~Os_Jv4sE=5ZYYQRicaoKqzJ3>} z7R7#pVU*+ZsqgHQB2KK^za%o zOMHDzZS=aM19>OtrrrWw0h^b*d|_+8#R$nk1$he#Z@#?>^;-G-1EBrxSM0medpI~F znYJP#JN7`UDuxP27143u0z0~>tVu0q#q^es#Stv+*BhJLY%cYc9^_)RuK{Q>}|qoeG+G@FOVsLb*Xsu z66ZNu|E1usbkk56AFS&O2mI-R>CVXTh`#IP^#k;+iY5152@gR-%YsqonMT*Ps;nMl z%Qn0(u`qR_+WuzwFln1@MW`5)u)XlDCNvcyU=^(cu*t*C)ddPtKhfc`2N>!&3NG6I zg7G3pZtAS<22fEK8sP0g~PNH^3wG>q@gTS7qWGELJnwW zcGVhRyFQO*BDLaEMHiV-n|Nqg5&vq)9*@yX)_gqq@C>+d^e8&uSf$ainl%}xX-X17 zU0qihG^R1mjun-L5}s$;-PKLPDaOjh)_qnl^(u|ZeHj^-ij9YsNopYJo69zF8* zDyQZ%+J3NHCZg{a(^J$ovn{@{>k7T!(BIx$s@~8;iA;v%ftyZ@E32$;=twxefcKjd z;;}`f+_1gm4kX)e$F1(gJHMDiz)&2d08=>JuF3%}~ zYoe+#HPH|H-Pzu+itu=;hU|1Hgtj1#|GyX=wkF%nBfzhGnlth0xf zmZt#YiDo%~Y4w`AOrJGdJ#C__V#&(zN3#RM1nlqyjVn7NeUo#}n`3Y_xYdiTGPu4< z$;Y?}Z4X?z%8%uJ1q;zjq+?ucVWEw8h%SaWE)!b`HTcaJpLz`q9NNSYMIJKMgRcAJ{DYOfv5B?bD_H)#I|78`tMfTAHx|Pmc}1$f8|uxX9tA zxp~%UuE|?14KZrZ8wz5QUTLpCtvP>->|tk6l{Z9#Lr?7h+agh*og3GVf`N{gLFhm& z@qbR7ha7@EXelR;w7Dl{0&46yYPeoH@uONVld&a`nH(L+48(m>C;3izSa7A8-$md7 zy!yYzaR8JW*tW#Z!ZwX&TOpLcz zp2lq|(mAR=U?qNqDJ3kusySGo5YtW@w5&#i<}>WhE-XP4AB-Lixl5(2Li3O_Weo!) zO^-o_q3&wSp6YYGekk?#I*_=K^de0u2CinR1e$UhoQsin9WiFZKbTS;KkY14wz}US zaY}8hcAt+JCf>7Bqz#Cxf&EmR>&;R0a}kwU?G+GYT6GxNq z3^ky<_AGJaDT7>fRM?NXnt=gu3F!cqyHigP1n_D|4# zNxXiIPDy09K2QjTb(-F|7{_g0`$ioDtM|o@4WxT4PLjE$gyZw`m+}lA1{J-=h4FP@ zOmU$4yiwyYuq_N~6v5ek3uPLhM(79b^=>S^y8_>MygAzV$=tn|Jmz90sYoWuOO+3;nm3wwlVdND__u{WPrL4}%TV z`5y#%MSq*~-&+qrSTJV!W-8s|af9R;MpGrq-Orooi5njYEbAqJb*O7J3`!YSSGi#9 zVcdMhL>Iu6Dj}gsWAs)v0@!k5zpFj};Nko~)vDo){QoZt`2c(9IqvIowHZ|NKK}81 z!!ZXF;p-IOIVb%a*5m&UL-Oq0e~Kk3Xnh@JgwXd*(YQN^y+Lpp^`?xpwR3{=0zn#n zqW2|XVMxqS8C+36j^9C8Y+Wgun;?DaaX+zA-^1rNjKRMqAk}={*SQ#`uaWC;VwcpL z{hDFC$G^s|v6p|$fF)~9ps(W$ose*Ox{BPb>$cq>yFPn~f4xt_q)&p%;M>_M5-o-g zX{x?s@|eZPS(gX;OpYRM1y~Eo-;30}yg*WJGe+HX884i5i1`Zt3#U_T!#*iF!0SmN zE{4tLO^G)jONPupfZO*9J?itM^v);qN|@cb#E!F|vG)WkLMrqgSqu%1dD}y{Jb+<+ zDUH}1@2>G3DE%$fdG)Dduon%nF+X0`MP(&X%;zl;FBMh(gJ?O?uWe^kc|s4-;QcS) zQ<5^PbKFd`e<&5fRDr;0)TeOP7WY#hEG0|%7(O4g5zTMxpFtLE>`z)N;U~IQRcPAm zG<7gj(ApI-cW!UE^XWY(f(-~g zOmk-%0O?Ub(KEAnlvmUB zWy8pnYA@!8B42UZ$HE-bA==#mBcE5Qg1%Q~5i;(`89)Yo@Jt3>D^&l$;*4ilKY@0U z1KM{>{ep2*^2GXRk?r&pgpxnw8vezHe(ZN_SCkBlUMbn+d-+%qFbIyS^5X&bi0|5&_vu_zZ=sgpuo{~Egsm|X2 z1;g=-toqX_edkx{jI#RQb@V(Qh!4=ez7N|1(l_%KZp&vv)tkU-0z%b;fKYYK8E>!R z#~DAb_E~o0zvbY0wh;xqVfk&t!5$33BfR@vtQuHRK&;wA7&djrYn=GwIQLJ>bw+Od z>yMq|ItC+Wc02V?j=_gw!TmC-hRrj^r{#~s=a%@4^!b+_`B7w0FO{dV zCbSr?Hi#$4RnS=ubpYw~8diD@! zIeapwQRo$u%+thVW*(rnpq#LAWLVTOTUe?q)~>{Ri}#k=!R+jK7cO&3c=%3u+?3ZG zEWpUeBwi|B{c&GRA#Qx})~vGc5umaj;f=piuJFP1gVbb=&XJ10gIS znA#&R_RqGW_e3V~%kfUo=u?TSD)PHMHK>q-CVdj-+H3Q2*R-X!p)o|!AFT*=%+0;*~px8J;c6Bq)F!9kuK#xT$c+0pqfX6?5g~shjHZ*1GwTd`Gt~JbAZ@oFEaOxKf zLtR3XGLvgH!jkiR7;dj@APIjqt1{$MG26A4oa1Dnz47`D zJN(ns5y>U>S#JS3>+o3*@Yd9N+(by;MGlSBV?i>R zx7KdS)&6;U=9jcl+xePq7=qU&7^AX?5+CptWi8zwija%Ah6csX5jV`vTv*o=9xmYS zq3T(Vn?qh9llFh`nR)aR29`Q(&J<#UFp9H^7NoewI(`eZ%^v>?25BH8OW#Q3kAkcxgGH9_ui^F|KBGt>2tC zAosSed`>fwRaUj1vEwogrd=yggl=M*TL&FoK5Uv6pBAR-gv3ydg+1~*DfDjEn>c_++1BUta%8U_BH@;;U$su7(HGiinrZaI!fvo8R2E%d=B@@=4 z)!NhrT9hL#IBO)YmhtnxEi#Nex2dn_{WIc0S~DcImb2hPc~+C{Q18<9c-;WhTc8wU$u0%t0HqA`uO zVY$l8nksF7RRvr|f{yh;Puo@lSW`dZS_8R5YrU@^%y6vPYymwknc6#8%w2%6ZsT-z z+!c##Q6E@!@{XO0Q)CB(lHk#eo0yGRe+VUsCRdoh)PxFL`32)@Lkqz#80{^t9-&1O zW!l;=!8mWpC$<%vwB_AeT}@*1obx1#E2`enoW|{&M5fNkddAYfjtp_zD|(PtsFXuH z!c%t(MVLt*A#bM*P}(l;Hv}Z(3XyGZweFh3wqx|agZ2mYHrf>qScp2CI$bQCo%8XyYoLz$3Q)qb)0{eNxWJ(tIO4{)@bJ zagln1h5MFzYfH#ANLNhQX575kri~4!Os{O}533DH>pY<(dBm+G@ucZINZ>qef~=$vGyeU| z@kJ>Ko$5XZT*^nII-|PUGhSX0X6BEcl2Vg-ab+kWO{5B;=u6%SMQe!)1#hvb9TLz27!Aog>q zZ;E9Gc#j!*Q=LpL8!`;>9-aMa$;i z6fKVA<-xP3toK=rCTT0c+tvqJnQ1l4Yin--f{dEGza480g{jN@a4US7h1Er zRkt&Cj4(Lp>Axx?qw3ORso)jXsKVR(E&z2Bh{^mO1ao~7p&O3$2=&{St2~aqTM`bi z0!BX(uevI3)a1{&^VcBcmx>HC>MEUhopfHkv1$FLESB_L6Rq z%1%%khL|^}9^ql&uCgE9$Iaeb)pn1Da9!4|lQq4#E$En~%=0aVHe#f#$+m#D$|$A- zkRA56ZaRjcV22g(7Xt4Cvp)09RU2MLNy5k{w-tj>1hdJ+t8r=0PAWsg!_PJjM#3#u zB-MyRDSTgYelxnB2K1k7x#7Jd|XLN_)$`m(waC zW&JKyEP*;Lx?Qb-xK^*8yk`3df&DE`zK;�)nFUDc&$+0_N`w4X@F}-oRMaV@TRQ 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

_d}>Lv2g+ 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�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 literal 0 HcmV?d00001 From 81f5f82a418808d6e5258edc39694c653aa46314 Mon Sep 17 00:00:00 2001 From: Evgenii Fomin Date: Mon, 27 Oct 2025 00:21:39 +0300 Subject: [PATCH 8/9] hw4 --- hw4/Dockerfile | 21 +++ hw4/README.md | 123 +++++++++++++++++ hw4/__init__.py | 0 hw4/db.py | 9 ++ hw4/docker-compose.yml | 29 ++++ hw4/main.py | 152 +++++++++++++++++++++ hw4/models.py | 29 ++++ hw4/requirements.txt | 5 + hw4/schemas.py | 42 ++++++ hw4/test_homework2.py | 284 +++++++++++++++++++++++++++++++++++++++ hw4/transactions_demo.py | 15 +++ hw4/wait-for-postgres.sh | 14 ++ 12 files changed, 723 insertions(+) create mode 100644 hw4/Dockerfile create mode 100644 hw4/README.md create mode 100644 hw4/__init__.py create mode 100644 hw4/db.py create mode 100644 hw4/docker-compose.yml create mode 100644 hw4/main.py create mode 100644 hw4/models.py create mode 100644 hw4/requirements.txt create mode 100644 hw4/schemas.py create mode 100644 hw4/test_homework2.py create mode 100644 hw4/transactions_demo.py create mode 100755 hw4/wait-for-postgres.sh diff --git a/hw4/Dockerfile b/hw4/Dockerfile new file mode 100644 index 00000000..ac2d8c94 --- /dev/null +++ b/hw4/Dockerfile @@ -0,0 +1,21 @@ +FROM python:3.12-slim + +# Устанавливаем Postgres-клиент (для pg_isready) +RUN apt-get update && apt-get install -y --no-install-recommends \ + netcat-traditional postgresql-client && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +# Устанавливаем зависимости +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Копируем всё приложение +COPY . . + +# Делаем скрипт ожидания исполняемым +RUN chmod +x wait-for-postgres.sh + +# Запускаем сервер через скрипт ожидания +CMD ["./wait-for-postgres.sh", "db", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] diff --git a/hw4/README.md b/hw4/README.md new file mode 100644 index 00000000..ba9f23c8 --- /dev/null +++ b/hw4/README.md @@ -0,0 +1,123 @@ +# ДЗ + +## Задание - REST API (3 балла) + +Реализовать REST + RPC API для выдуманного интернет магазина. + +Тесты завязаны на объект `app = FastAPI(title="Shop API")` из файла [hw2/hw/shop_api/main.py](./shop_api/main.py), поэтому реализовывайте его используя его + +Ресурсы: + +- корзина (cart) + + Пример структуры ресурса: + + ```json + { + "id": 123, // идентификатор корзины + "items": [ // список товаров в корзине + { + "id": 1, // id товара + "name": "Туалетная бумага \"Поцелуй\", рулон", // название + "quantity": 3, // количество товара в корзине + "available": true // доступе ли (не удален ли) товар + }, + { + "id": 535, + "name": "Золотая цепочка \"Abendsonne\"", + "quantity": 1, + "available": false, + }, + ], + "price": 234.4 // общая сумма заказа + } + ``` + +- товар (item) + + Пример структуры ресурса: + + ```json + { + "id": 321, // идентификатор товара + "name": "Молоко \"Буреночка\" 1л.", // наименование товара + "price": 159.99, // цена товара + "deleted": false // удален ли товар, по умолчанию false + } + ``` + +Запросы для реализации: + +- cart + - `POST cart` - создание, работает как RPC, не принимает тело, возвращает + идентификатор + - `GET /cart/{id}` - получение корзины по `id` + - `GET /cart` - получение списка корзин с query-параметрами + - `offset` - неотрицательное целое число, смещение по списку (опционально, + по-умолчанию 0) + - `limit` - положительное целое число, ограничение на количество + (опционально, по-умолчанию 10) + - `min_price` - число с плавающей запятой, минимальная цена включительно + (опционально, если нет, не учитывает в фильтре) + - `max_price` - число с плавающей запятой, максимальная цена включительно + (опционально, если нет, не учитывает в фильтре) + - `min_quantity` - неотрицательное целое число, минимальное общее число + товаров включительно (опционально, если нет, не учитывается в фильтре) + - `max_quantity` - неотрицательное целое число, максимальное общее число + товаров включительно (опционально, если нет, не учитывается в фильтре) + - `POST /cart/{cart_id}/add/{item_id}` - добавление в корзину с `cart_id` + предмета с `item_id`, если товар уже есть, то увеличивается его количество +- item + - `POST /item` - добавление нового товара + - `GET /item/{id}` - получение товара по `id` + - `GET /item` - получение списка товаров с query-параметрами + - `offset` - неотрицательное целое число, смещение по списку (опционально, + по-умолчанию 0) + - `limit` - положительное целое число, ограничение на количество + (опционально, по-умолчанию 10) + - `min_price` - число с плавающей запятой, минимальная цена (опционально, + если нет, не учитывает в фильтре) + - `max_price` - число с плавающей запятой, максимальная цена (опционально, + если нет, не учитывает в фильтре) + - `show_deleted` - булевая переменная, показывать ли удаленные товары (по + умолчанию `False`) + - `PUT /item/{id}` - замена товара по `id` (создание запрещено, только замена + существующего) + - `PATCH /item/{id}` - частичное обновление товара по `id` (разрешено менять + все поля, кроме `deleted`) + - `DELETE /item/{id}` - удаление товара по `id` (товар помечается как + удаленный) + +Способ хранение данных на усмотрение. + +Более подробные детали и требования к работе методов смотрите в тестах. +Модификация тестов при потребности допускается (но не смысловая). + +Чтобы запустить тесты только для этого задания вызовите: + +```sh +pytest -vv --showlocals --strict ./hw2/test_homework_2_1.py +``` + +Если получаете ошибку на подобии `No module named 'shop_api'` +Понадобится еще такая команда, после которой можно запускать тесты: + +```sh +export PYTHONPATH=${PWD}/hw2/hw +``` + +## Доп. Задание - WebSocket (+ доп балл) + +Реализовать чат для пользователей в отдельных комнатах (в примере один на всех). + +Пользователи подключаются к чату по WebSocket ручке `/chat/{chat_name}`. +Пользователи, которые ввели один и тот же `chat_name` буду подключены к одному +чату (то есть будут получать сообщения друг от друга). Пользователи не +подключенные к диалогу не будут получать сообщения. + +Сообщение - текст в теле сообщения от клиента. Сервер должен broadcast'ить +сообщения на других пользователей в своем чате. Каждому клиенту сервер +присваивает случайное имя и дополняет каждое сообщение именем пользователя в +начале в следующем виде: `{username} :: {message}`. + +Если делаете его, напишите, пожалуйста, прямо в PR-e об этом. Мне будет сильно проще это заметить<3 diff --git a/hw4/__init__.py b/hw4/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/hw4/db.py b/hw4/db.py new file mode 100644 index 00000000..933c35b0 --- /dev/null +++ b/hw4/db.py @@ -0,0 +1,9 @@ +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker, declarative_base +import os + +DATABASE_URL = os.getenv('DATABASE_URL', 'postgresql+psycopg2://postgres:postgres@localhost:5432/shop') + +engine = create_engine(DATABASE_URL, echo=True, future=True) +SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False) +Base = declarative_base() diff --git a/hw4/docker-compose.yml b/hw4/docker-compose.yml new file mode 100644 index 00000000..4f7af010 --- /dev/null +++ b/hw4/docker-compose.yml @@ -0,0 +1,29 @@ +version: '3.9' + +services: + shop_api: + build: . + container_name: shop_api + ports: + - "8000:8000" + depends_on: + - db + environment: + - DATABASE_URL=postgresql+psycopg2://postgres:postgres@db:5432/shop + command: ["./wait-for-postgres.sh", "db", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] + + db: + image: postgres:16 + container_name: shop_db + restart: always + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: shop + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + +volumes: + postgres_data: diff --git a/hw4/main.py b/hw4/main.py new file mode 100644 index 00000000..541b54c6 --- /dev/null +++ b/hw4/main.py @@ -0,0 +1,152 @@ +from fastapi import FastAPI, HTTPException, Depends +from fastapi.responses import JSONResponse +from sqlalchemy.orm import Session +from db import Base, engine, SessionLocal +import models +from models import Item, Cart, CartItem +from schemas import ItemCreate, ItemPatch, Item as ItemSchema, CartOut, CartItemOut +from typing import List, Optional +from pydantic import conint, PositiveInt, confloat + +app = FastAPI() + +Base.metadata.create_all(bind=engine) + + +def get_db(): + db = SessionLocal() + try: + yield db + finally: + db.close() + + +# ---------- ITEM ENDPOINTS ---------- + +@app.post('/item', response_model=ItemSchema, status_code=201) +def create_item(item_in: ItemCreate, db: Session = Depends(get_db)): + item = Item(name=item_in.name, price=item_in.price) + db.add(item) + db.commit() + db.refresh(item) + return item + + +@app.get('/item/{id}', response_model=ItemSchema) +def get_item(id: int, db: Session = Depends(get_db)): + item = db.get(Item, id) + if not item or item.deleted: + raise HTTPException(status_code=404) + return item + + +@app.get('/item', response_model=List[ItemSchema]) +def list_items( + offset: conint(ge=0) = 0, + limit: PositiveInt = 10, + min_price: Optional[confloat(ge=0.0)] = None, + max_price: Optional[confloat(ge=0.0)] = None, + show_deleted: bool = False, + db: Session = Depends(get_db) +): + query = db.query(Item) + if not show_deleted: + query = query.filter(Item.deleted == False) + if min_price is not None: + query = query.filter(Item.price >= min_price) + if max_price is not None: + query = query.filter(Item.price <= max_price) + + return query.offset(offset).limit(limit).all() + + +@app.put('/item/{id}', response_model=ItemSchema) +def replace_item(id: int, item_in: ItemCreate, db: Session = Depends(get_db)): + item = db.get(Item, id) + if not item: + raise HTTPException(status_code=404) + item.name = item_in.name + item.price = item_in.price + db.commit() + db.refresh(item) + return item + + +@app.patch('/item/{id}', response_model=ItemSchema) +def patch_item(id: int, patch: ItemPatch, db: Session = Depends(get_db)): + item = db.get(Item, id) + if not item: + raise HTTPException(status_code=404) + if item.deleted: + return JSONResponse(status_code=304, content=item.__dict__) + + data = patch.dict(exclude_unset=True) + for key, value in data.items(): + setattr(item, key, value) + + db.commit() + db.refresh(item) + return item + + +@app.delete('/item/{id}') +def delete_item(id: int, db: Session = Depends(get_db)): + item = db.get(Item, id) + if not item: + return {'ok': True} + item.deleted = True + db.commit() + return {'ok': True} + + +# ---------- CART ENDPOINTS ---------- + +@app.post('/cart') +def create_cart(db: Session = Depends(get_db)): + cart = Cart() + db.add(cart) + db.commit() + db.refresh(cart) + response = JSONResponse(status_code=201, content={'id': cart.id}) + response.headers['Location'] = f'/cart/{cart.id}' + return response + + +@app.post('/cart/{cart_id}/add/{item_id}') +def add_item_to_cart(cart_id: int, item_id: int, db: Session = Depends(get_db)): + cart = db.get(Cart, cart_id) + item = db.get(Item, item_id) + if not cart or not item: + raise HTTPException(status_code=404) + + cart_item = db.query(CartItem).filter_by(cart_id=cart_id, item_id=item_id).first() + if cart_item: + cart_item.quantity += 1 + else: + cart_item = CartItem(cart_id=cart_id, item_id=item_id, quantity=1) + db.add(cart_item) + db.commit() + return {'ok': True} + + +def _cart_to_response(cart: Cart, db: Session) -> CartOut: + items_out = [] + total_price = 0.0 + + for cart_item in cart.items: + item = db.get(Item, cart_item.item_id) + available = item is not None and not item.deleted + name = item.name if item else '' + if available: + total_price += item.price * cart_item.quantity + items_out.append(CartItemOut(id=cart_item.item_id, name=name, quantity=cart_item.quantity, available=available)) + + return CartOut(id=cart.id, items=items_out, price=total_price) + + +@app.get('/cart/{id}', response_model=CartOut) +def get_cart(id: int, db: Session = Depends(get_db)): + cart = db.get(Cart, id) + if not cart: + raise HTTPException(status_code=404) + return _cart_to_response(cart, db) diff --git a/hw4/models.py b/hw4/models.py new file mode 100644 index 00000000..4b889dac --- /dev/null +++ b/hw4/models.py @@ -0,0 +1,29 @@ +from sqlalchemy import Column, Integer, String, Float, Boolean, ForeignKey +from sqlalchemy.orm import relationship +from db import Base + +class Item(Base): + __tablename__ = 'items' + + id = Column(Integer, primary_key=True, index=True) + name = Column(String, nullable=False) + price = Column(Float, nullable=False) + deleted = Column(Boolean, default=False) + + +class Cart(Base): + __tablename__ = 'carts' + + id = Column(Integer, primary_key=True, index=True) + items = relationship('CartItem', back_populates='cart', cascade='all, delete-orphan') + + +class CartItem(Base): + __tablename__ = 'cart_items' + + id = Column(Integer, primary_key=True, index=True) + cart_id = Column(Integer, ForeignKey('carts.id')) + item_id = Column(Integer, ForeignKey('items.id')) + quantity = Column(Integer, nullable=False, default=1) + + cart = relationship('Cart', back_populates='items') diff --git a/hw4/requirements.txt b/hw4/requirements.txt new file mode 100644 index 00000000..a21276d6 --- /dev/null +++ b/hw4/requirements.txt @@ -0,0 +1,5 @@ +fastapi +uvicorn +sqlalchemy +psycopg2-binary +pydantic diff --git a/hw4/schemas.py b/hw4/schemas.py new file mode 100644 index 00000000..afe96f12 --- /dev/null +++ b/hw4/schemas.py @@ -0,0 +1,42 @@ +from pydantic import BaseModel, confloat, conint, PositiveInt +from typing import List, Optional + +class ItemBase(BaseModel): + name: str + price: confloat(ge=0.0) + + class Config: + extra = 'forbid' + + +class ItemCreate(ItemBase): + pass + + +class ItemPatch(BaseModel): + name: Optional[str] = None + price: Optional[confloat(ge=0.0)] = None + + class Config: + extra = 'forbid' + + +class Item(ItemBase): + id: int + deleted: bool + + class Config: + orm_mode = True + + +class CartItemOut(BaseModel): + id: int + name: str + quantity: int + available: bool + + +class CartOut(BaseModel): + id: int + items: List[CartItemOut] + price: float diff --git a/hw4/test_homework2.py b/hw4/test_homework2.py new file mode 100644 index 00000000..60a1f36a --- /dev/null +++ b/hw4/test_homework2.py @@ -0,0 +1,284 @@ +from http import HTTPStatus +from typing import Any +from uuid import uuid4 + +import pytest +from faker import Faker +from fastapi.testclient import TestClient + +from shop_api.main import app + +client = TestClient(app) +faker = Faker() + + +@pytest.fixture() +def existing_empty_cart_id() -> int: + return client.post("/cart").json()["id"] + + +@pytest.fixture(scope="session") +def existing_items() -> list[int]: + items = [ + { + "name": f"Тестовый товар {i}", + "price": faker.pyfloat(positive=True, min_value=10.0, max_value=500.0), + } + for i in range(10) + ] + + return [client.post("/item", json=item).json()["id"] for item in items] + + +@pytest.fixture(scope="session", autouse=True) +def existing_not_empty_carts(existing_items: list[int]) -> list[int]: + carts = [] + + for i in range(20): + cart_id: int = client.post("/cart").json()["id"] + for item_id in faker.random_elements(existing_items, unique=False, length=i): + client.post(f"/cart/{cart_id}/add/{item_id}") + + carts.append(cart_id) + + return carts + + +@pytest.fixture() +def existing_not_empty_cart_id( + existing_empty_cart_id: int, + existing_items: list[int], +) -> int: + for item_id in faker.random_elements(existing_items, unique=False, length=3): + client.post(f"/cart/{existing_empty_cart_id}/add/{item_id}") + + return existing_empty_cart_id + + +@pytest.fixture() +def existing_item() -> dict[str, Any]: + return client.post( + "/item", + json={ + "name": f"Тестовый товар {uuid4().hex}", + "price": faker.pyfloat(min_value=10.0, max_value=100.0), + }, + ).json() + + +@pytest.fixture() +def deleted_item(existing_item: dict[str, Any]) -> dict[str, Any]: + item_id = existing_item["id"] + client.delete(f"/item/{item_id}") + + existing_item["deleted"] = True + return existing_item + + +def test_post_cart() -> None: + response = client.post("/cart") + + assert response.status_code == HTTPStatus.CREATED + assert "location" in response.headers + assert "id" in response.json() + + +@pytest.mark.parametrize( + ("cart", "not_empty"), + [ + ("existing_empty_cart_id", False), + ("existing_not_empty_cart_id", True), + ], +) +def test_get_cart(request, cart: int, not_empty: bool) -> None: + cart_id = request.getfixturevalue(cart) + + response = client.get(f"/cart/{cart_id}") + + assert response.status_code == HTTPStatus.OK + response_json = response.json() + + len_items = len(response_json["items"]) + assert len_items > 0 if not_empty else len_items == 0 + + if not_empty: + price = 0 + + for item in response_json["items"]: + item_id = item["id"] + price += client.get(f"/item/{item_id}").json()["price"] * item["quantity"] + + assert response_json["price"] == pytest.approx(price, 1e-8) + else: + assert response_json["price"] == 0.0 + + +@pytest.mark.parametrize( + ("query", "status_code"), + [ + ({}, HTTPStatus.OK), + ({"offset": 1, "limit": 2}, HTTPStatus.OK), + ({"min_price": 1000.0}, HTTPStatus.OK), + ({"max_price": 20.0}, HTTPStatus.OK), + ({"min_quantity": 1}, HTTPStatus.OK), + ({"max_quantity": 0}, HTTPStatus.OK), + ({"offset": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"limit": 0}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"limit": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"min_price": -1.0}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"max_price": -1.0}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"min_quantity": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"max_quantity": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ], +) +def test_get_cart_list(query: dict[str, Any], status_code: int): + response = client.get("/cart", params=query) + + assert response.status_code == status_code + + if status_code == HTTPStatus.OK: + data = response.json() + + assert isinstance(data, list) + + if "min_price" in query: + assert all(item["price"] >= query["min_price"] for item in data) + + if "max_price" in query: + assert all(item["price"] <= query["max_price"] for item in data) + + quantity = sum(item["quantity"] for cart in data for item in cart["items"]) + + if "min_quantity" in query: + assert quantity >= query["min_quantity"] + + if "max_quantity" in query: + assert quantity <= query["max_quantity"] + + +def test_post_item() -> None: + item = {"name": "test item", "price": 9.99} + response = client.post("/item", json=item) + + assert response.status_code == HTTPStatus.CREATED + + data = response.json() + assert item["price"] == data["price"] + assert item["name"] == data["name"] + + +def test_get_item(existing_item: dict[str, Any]) -> None: + item_id = existing_item["id"] + + response = client.get(f"/item/{item_id}") + + assert response.status_code == HTTPStatus.OK + assert response.json() == existing_item + + +@pytest.mark.parametrize( + ("query", "status_code"), + [ + ({"offset": 2, "limit": 5}, HTTPStatus.OK), + ({"min_price": 5.0}, HTTPStatus.OK), + ({"max_price": 5.0}, HTTPStatus.OK), + ({"show_deleted": True}, HTTPStatus.OK), + ({"offset": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"limit": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"limit": 0}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"min_price": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"max_price": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ], +) +def test_get_item_list(query: dict[str, Any], status_code: int) -> None: + response = client.get("/item", params=query) + + assert response.status_code == status_code + + if status_code == HTTPStatus.OK: + data = response.json() + + assert isinstance(data, list) + + if "min_price" in query: + assert all(item["price"] >= query["min_price"] for item in data) + + if "max_price" in query: + assert all(item["price"] <= query["max_price"] for item in data) + + if "show_deleted" in query and query["show_deleted"] is False: + assert all(item["deleted"] is False for item in data) + + +@pytest.mark.parametrize( + ("body", "status_code"), + [ + ({}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"price": 9.99}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"name": "new name", "price": 9.99}, HTTPStatus.OK), + ], +) +def test_put_item( + existing_item: dict[str, Any], + body: dict[str, Any], + status_code: int, +) -> None: + item_id = existing_item["id"] + response = client.put(f"/item/{item_id}", json=body) + + assert response.status_code == status_code + + if status_code == HTTPStatus.OK: + new_item = existing_item.copy() + new_item.update(body) + assert response.json() == new_item + + +@pytest.mark.parametrize( + ("item", "body", "status_code"), + [ + ("deleted_item", {}, HTTPStatus.NOT_MODIFIED), + ("deleted_item", {"price": 9.99}, HTTPStatus.NOT_MODIFIED), + ("deleted_item", {"name": "new name", "price": 9.99}, HTTPStatus.NOT_MODIFIED), + ("existing_item", {}, HTTPStatus.OK), + ("existing_item", {"price": 9.99}, HTTPStatus.OK), + ("existing_item", {"name": "new name", "price": 9.99}, HTTPStatus.OK), + ( + "existing_item", + {"name": "new name", "price": 9.99, "odd": "value"}, + HTTPStatus.UNPROCESSABLE_ENTITY, + ), + ( + "existing_item", + {"name": "new name", "price": 9.99, "deleted": True}, + HTTPStatus.UNPROCESSABLE_ENTITY, + ), + ], +) +def test_patch_item(request, item: str, body: dict[str, Any], status_code: int) -> None: + item_data: dict[str, Any] = request.getfixturevalue(item) + item_id = item_data["id"] + response = client.patch(f"/item/{item_id}", json=body) + + assert response.status_code == status_code + + if status_code == HTTPStatus.OK: + patch_response_body = response.json() + + response = client.get(f"/item/{item_id}") + patched_item = response.json() + + assert patched_item == patch_response_body + + +def test_delete_item(existing_item: dict[str, Any]) -> None: + item_id = existing_item["id"] + + response = client.delete(f"/item/{item_id}") + assert response.status_code == HTTPStatus.OK + + response = client.get(f"/item/{item_id}") + assert response.status_code == HTTPStatus.NOT_FOUND + + response = client.delete(f"/item/{item_id}") + assert response.status_code == HTTPStatus.OK diff --git a/hw4/transactions_demo.py b/hw4/transactions_demo.py new file mode 100644 index 00000000..a7e9164b --- /dev/null +++ b/hw4/transactions_demo.py @@ -0,0 +1,15 @@ +from sqlalchemy import create_engine, text + +# Подключение напрямую к PostgreSQL +engine = create_engine("postgresql+psycopg2://postgres:postgres@localhost:5432/shop", echo=True, future=True) + +# --- Dirty Read (READ UNCOMMITTED) --- +with engine.connect() as conn1, engine.connect() as conn2: + conn1.execute(text("BEGIN")) + conn1.execute(text("UPDATE items SET price = price + 100 WHERE id = 1")) + + conn2.execute(text("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED")) + result = conn2.execute(text("SELECT price FROM items WHERE id = 1")).scalar() + print("Dirty read price:", result) + + conn1.rollback() diff --git a/hw4/wait-for-postgres.sh b/hw4/wait-for-postgres.sh new file mode 100755 index 00000000..e070d98c --- /dev/null +++ b/hw4/wait-for-postgres.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -e + +host="$1" +shift +cmd="$@" + +until pg_isready -h "$host" -U "postgres" > /dev/null 2>&1; do + echo "⏳ Waiting for Postgres ($host)..." + sleep 1 +done + +echo "✅ Postgres is ready — starting app..." +exec $cmd From 188131926682653e9973672c954f81380c656170 Mon Sep 17 00:00:00 2001 From: Evgenii Fomin Date: Tue, 28 Oct 2025 22:22:38 +0300 Subject: [PATCH 9/9] hw4 --- hw4/test_homework2.py | 2 +- hw5/README.md | 123 +++++++++++++++++++ hw5/__init__.py | 0 hw5/requirements.txt | 9 ++ hw5/shop_api/__init__.py | 0 hw5/shop_api/main.py | 199 +++++++++++++++++++++++++++++++ hw5/shop_api/schemas.py | 29 +++++ hw5/tests/test_shop_api.py | 238 +++++++++++++++++++++++++++++++++++++ 8 files changed, 599 insertions(+), 1 deletion(-) create mode 100644 hw5/README.md create mode 100644 hw5/__init__.py create mode 100644 hw5/requirements.txt create mode 100644 hw5/shop_api/__init__.py create mode 100644 hw5/shop_api/main.py create mode 100644 hw5/shop_api/schemas.py create mode 100644 hw5/tests/test_shop_api.py diff --git a/hw4/test_homework2.py b/hw4/test_homework2.py index 60a1f36a..3c60aeb0 100644 --- a/hw4/test_homework2.py +++ b/hw4/test_homework2.py @@ -6,7 +6,7 @@ from faker import Faker from fastapi.testclient import TestClient -from shop_api.main import app +from main import app client = TestClient(app) faker = Faker() diff --git a/hw5/README.md b/hw5/README.md new file mode 100644 index 00000000..ba9f23c8 --- /dev/null +++ b/hw5/README.md @@ -0,0 +1,123 @@ +# ДЗ + +## Задание - REST API (3 балла) + +Реализовать REST + RPC API для выдуманного интернет магазина. + +Тесты завязаны на объект `app = FastAPI(title="Shop API")` из файла [hw2/hw/shop_api/main.py](./shop_api/main.py), поэтому реализовывайте его используя его + +Ресурсы: + +- корзина (cart) + + Пример структуры ресурса: + + ```json + { + "id": 123, // идентификатор корзины + "items": [ // список товаров в корзине + { + "id": 1, // id товара + "name": "Туалетная бумага \"Поцелуй\", рулон", // название + "quantity": 3, // количество товара в корзине + "available": true // доступе ли (не удален ли) товар + }, + { + "id": 535, + "name": "Золотая цепочка \"Abendsonne\"", + "quantity": 1, + "available": false, + }, + ], + "price": 234.4 // общая сумма заказа + } + ``` + +- товар (item) + + Пример структуры ресурса: + + ```json + { + "id": 321, // идентификатор товара + "name": "Молоко \"Буреночка\" 1л.", // наименование товара + "price": 159.99, // цена товара + "deleted": false // удален ли товар, по умолчанию false + } + ``` + +Запросы для реализации: + +- cart + - `POST cart` - создание, работает как RPC, не принимает тело, возвращает + идентификатор + - `GET /cart/{id}` - получение корзины по `id` + - `GET /cart` - получение списка корзин с query-параметрами + - `offset` - неотрицательное целое число, смещение по списку (опционально, + по-умолчанию 0) + - `limit` - положительное целое число, ограничение на количество + (опционально, по-умолчанию 10) + - `min_price` - число с плавающей запятой, минимальная цена включительно + (опционально, если нет, не учитывает в фильтре) + - `max_price` - число с плавающей запятой, максимальная цена включительно + (опционально, если нет, не учитывает в фильтре) + - `min_quantity` - неотрицательное целое число, минимальное общее число + товаров включительно (опционально, если нет, не учитывается в фильтре) + - `max_quantity` - неотрицательное целое число, максимальное общее число + товаров включительно (опционально, если нет, не учитывается в фильтре) + - `POST /cart/{cart_id}/add/{item_id}` - добавление в корзину с `cart_id` + предмета с `item_id`, если товар уже есть, то увеличивается его количество +- item + - `POST /item` - добавление нового товара + - `GET /item/{id}` - получение товара по `id` + - `GET /item` - получение списка товаров с query-параметрами + - `offset` - неотрицательное целое число, смещение по списку (опционально, + по-умолчанию 0) + - `limit` - положительное целое число, ограничение на количество + (опционально, по-умолчанию 10) + - `min_price` - число с плавающей запятой, минимальная цена (опционально, + если нет, не учитывает в фильтре) + - `max_price` - число с плавающей запятой, максимальная цена (опционально, + если нет, не учитывает в фильтре) + - `show_deleted` - булевая переменная, показывать ли удаленные товары (по + умолчанию `False`) + - `PUT /item/{id}` - замена товара по `id` (создание запрещено, только замена + существующего) + - `PATCH /item/{id}` - частичное обновление товара по `id` (разрешено менять + все поля, кроме `deleted`) + - `DELETE /item/{id}` - удаление товара по `id` (товар помечается как + удаленный) + +Способ хранение данных на усмотрение. + +Более подробные детали и требования к работе методов смотрите в тестах. +Модификация тестов при потребности допускается (но не смысловая). + +Чтобы запустить тесты только для этого задания вызовите: + +```sh +pytest -vv --showlocals --strict ./hw2/test_homework_2_1.py +``` + +Если получаете ошибку на подобии `No module named 'shop_api'` +Понадобится еще такая команда, после которой можно запускать тесты: + +```sh +export PYTHONPATH=${PWD}/hw2/hw +``` + +## Доп. Задание - WebSocket (+ доп балл) + +Реализовать чат для пользователей в отдельных комнатах (в примере один на всех). + +Пользователи подключаются к чату по WebSocket ручке `/chat/{chat_name}`. +Пользователи, которые ввели один и тот же `chat_name` буду подключены к одному +чату (то есть будут получать сообщения друг от друга). Пользователи не +подключенные к диалогу не будут получать сообщения. + +Сообщение - текст в теле сообщения от клиента. Сервер должен broadcast'ить +сообщения на других пользователей в своем чате. Каждому клиенту сервер +присваивает случайное имя и дополняет каждое сообщение именем пользователя в +начале в следующем виде: `{username} :: {message}`. + +Если делаете его, напишите, пожалуйста, прямо в PR-e об этом. Мне будет сильно проще это заметить<3 diff --git a/hw5/__init__.py b/hw5/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/hw5/requirements.txt b/hw5/requirements.txt new file mode 100644 index 00000000..207dcf5c --- /dev/null +++ b/hw5/requirements.txt @@ -0,0 +1,9 @@ +# Основные зависимости для ASGI приложения +fastapi>=0.117.1 +uvicorn>=0.24.0 + +# Зависимости для тестирования +pytest>=7.4.0 +pytest-asyncio>=0.21.0 +httpx>=0.27.2 +Faker>=37.8.0 diff --git a/hw5/shop_api/__init__.py b/hw5/shop_api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/hw5/shop_api/main.py b/hw5/shop_api/main.py new file mode 100644 index 00000000..828eec0a --- /dev/null +++ b/hw5/shop_api/main.py @@ -0,0 +1,199 @@ +from fastapi import FastAPI, HTTPException +from fastapi.responses import JSONResponse +from pydantic import BaseModel, confloat, conint, PositiveInt +from typing import Dict, List, Optional + +app = FastAPI() + + +# ---------- MODELS ---------- + +class ItemBase(BaseModel): + name: str + price: confloat(ge=0.0) + + model_config = {'extra': 'forbid'} + + +class ItemCreate(ItemBase): + pass + + +class ItemPatch(BaseModel): + name: Optional[str] = None + price: Optional[confloat(ge=0.0)] = None + + model_config = {'extra': 'forbid'} + + +class Item(ItemBase): + id: int + deleted: bool = False + + +class CartItemOut(BaseModel): + id: int + name: str + quantity: int + available: bool + + +class CartOut(BaseModel): + id: int + items: List[CartItemOut] + price: float + + +# ---------- IN-MEMORY "БАЗА" ---------- + +_next_item_id = 1 +_items: Dict[int, Item] = {} + +_next_cart_id = 1 +_carts: Dict[int, Dict[int, int]] = {} + + +# ---------- ITEM ENDPOINTS ---------- + +@app.post('/item', response_model=Item, status_code=201) +def create_item(item_in: ItemCreate): + global _next_item_id + item = Item(id=_next_item_id, name=item_in.name, price=item_in.price, deleted=False) + _items[_next_item_id] = item + _next_item_id += 1 + return item + + +@app.get('/item/{id}', response_model=Item) +def get_item(id: int): + item = _items.get(id) + if item is None or item.deleted: + raise HTTPException(status_code=404) + return item + + +@app.get('/item', response_model=List[Item]) +def list_items( + offset: conint(ge=0) = 0, + limit: PositiveInt = 10, + min_price: Optional[confloat(ge=0.0)] = None, + max_price: Optional[confloat(ge=0.0)] = None, + show_deleted: bool = False +): + items = [ + item for item in _items.values() + if (show_deleted or not item.deleted) + and (min_price is None or item.price >= min_price) + and (max_price is None or item.price <= max_price) + ] + return sorted(items, key=lambda x: x.id)[offset:offset + limit] + + +@app.put('/item/{id}', response_model=Item) +def replace_item(id: int, item_in: ItemCreate): + if id not in _items: + raise HTTPException(status_code=404) + old_item = _items[id] + new_item = Item(id=id, name=item_in.name, price=item_in.price, deleted=old_item.deleted) + _items[id] = new_item + return new_item + + +@app.patch('/item/{id}', response_model=Item) +def patch_item(id: int, patch: ItemPatch): + item = _items.get(id) + if item is None: + raise HTTPException(status_code=404) + if item.deleted: + return JSONResponse(status_code=304, content=item.model_dump()) + + data = patch.model_dump(exclude_unset=True) + if not data: + return item + + if 'name' in data: + item.name = data['name'] + if 'price' in data: + item.price = data['price'] + + _items[id] = item + return item + + +@app.delete('/item/{id}') +def delete_item(id: int): + item = _items.get(id) + if item is None: + return {'ok': True} + item.deleted = True + _items[id] = item + return {'ok': True} + + +# ---------- CART ENDPOINTS ---------- + +@app.post('/cart') +def create_cart(): + global _next_cart_id + cid = _next_cart_id + _next_cart_id += 1 + _carts[cid] = {} + response = JSONResponse(status_code=201, content={'id': cid}) + response.headers['Location'] = f'/cart/{cid}' + return response + + +@app.post('/cart/{cart_id}/add/{item_id}') +def add_item_to_cart(cart_id: int, item_id: int): + if cart_id not in _carts or item_id not in _items: + raise HTTPException(status_code=404) + + item_map = _carts[cart_id] + item_map[item_id] = item_map.get(item_id, 0) + 1 + return {'ok': True} + + +def _cart_to_response(cart_id: int) -> CartOut: + item_map = _carts.get(cart_id, {}) + items_out = [] + total_price = 0.0 + + for iid, qty in item_map.items(): + item = _items.get(iid) + available = item is not None and not item.deleted + name = item.name if item else '' + if available: + total_price += item.price * qty + items_out.append(CartItemOut(id=iid, name=name, quantity=qty, available=available)) + + return CartOut(id=cart_id, items=items_out, price=total_price) + + +@app.get('/cart/{id}', response_model=CartOut) +def get_cart(id: int): + if id not in _carts: + raise HTTPException(status_code=404) + return _cart_to_response(id) + + +@app.get('/cart', response_model=List[CartOut]) +def list_carts( + offset: conint(ge=0) = 0, + limit: PositiveInt = 10, + min_price: Optional[confloat(ge=0.0)] = None, + max_price: Optional[confloat(ge=0.0)] = None, + min_quantity: Optional[conint(ge=0)] = None, + max_quantity: Optional[conint(ge=0)] = None, +): + carts_out = [] + for cid in sorted(_carts.keys()): + cart_resp = _cart_to_response(cid) + total_quantity = sum(i.quantity for i in cart_resp.items) + if ( + (min_price is None or cart_resp.price >= min_price) + and (max_price is None or cart_resp.price <= max_price) + and (min_quantity is None or total_quantity >= min_quantity) + and (max_quantity is None or total_quantity <= max_quantity) + ): + carts_out.append(cart_resp) + return carts_out[offset:offset + limit] \ No newline at end of file diff --git a/hw5/shop_api/schemas.py b/hw5/shop_api/schemas.py new file mode 100644 index 00000000..fd5be9ca --- /dev/null +++ b/hw5/shop_api/schemas.py @@ -0,0 +1,29 @@ +from pydantic import BaseModel, Field +from typing import Optional, List + + +# --- Модели товаров --- + +class ItemCreate(BaseModel): + name: str = Field(..., min_length=1) + price: float = Field(..., gt=0) + + +class ItemUpdate(BaseModel): + name: Optional[str] = Field(None, min_length=1) + price: Optional[float] = Field(None, gt=0) + available: Optional[bool] = True + + +# --- Модели корзины --- + +class CartItem(BaseModel): + id: int + name: str + quantity: int + available: bool + + +class CartCreate(BaseModel): + items: List[CartItem] = [] + price: float = 0.0 \ No newline at end of file diff --git a/hw5/tests/test_shop_api.py b/hw5/tests/test_shop_api.py new file mode 100644 index 00000000..ea7aaa08 --- /dev/null +++ b/hw5/tests/test_shop_api.py @@ -0,0 +1,238 @@ +from http import HTTPStatus +from typing import Any, Optional +from uuid import uuid4 +import sys +from pathlib import Path + +# Добавляем корень проекта в sys.path +sys.path.append(str(Path(__file__).resolve().parents[1])) + +import pytest +from faker import Faker +from fastapi.testclient import TestClient +from pydantic import BaseModel, ValidationError, Field, ConfigDict + +from shop_api.main import app +from shop_api.schemas import ItemCreate, ItemUpdate, CartCreate + +client = TestClient(app) +faker = Faker() + + +# === Фикстуры === + +@pytest.fixture() +def existing_empty_cart_id() -> int: + response = client.post("/cart") + assert response.status_code == 201 + return response.json()["id"] + + +@pytest.fixture() +def existing_items() -> list[int]: + items = [ + { + "name": f"Тестовый товар {i}", + "price": faker.pyfloat(positive=True, min_value=10.0, max_value=500.0), + } + for i in range(5) + ] + return [client.post("/item", json=item).json()["id"] for item in items] + + +@pytest.fixture() +def existing_not_empty_cart_id(existing_items: list[int]) -> int: + response = client.post("/cart") + assert response.status_code == 201 + cart_id = response.json()["id"] + for item_id in existing_items[:2]: + r = client.post(f"/cart/{cart_id}/add/{item_id}") + assert r.status_code == 200 + return cart_id + + +@pytest.fixture() +def existing_not_empty_cart_id( + existing_empty_cart_id: int, + existing_items: list[int], +) -> int: + for item_id in faker.random_elements(existing_items, unique=False, length=3): + client.post(f"/cart/{existing_empty_cart_id}/add/{item_id}") + return existing_empty_cart_id + + +@pytest.fixture() +def existing_item() -> dict[str, Any]: + return client.post( + "/item", + json={ + "name": f"Тестовый товар {uuid4().hex}", + "price": faker.pyfloat(min_value=10.0, max_value=100.0), + }, + ).json() + + +@pytest.fixture() +def deleted_item(existing_item: dict[str, Any]) -> dict[str, Any]: + item_id = existing_item["id"] + client.delete(f"/item/{item_id}") + existing_item["deleted"] = True + return existing_item + + +# === Тесты Pydantic схем === + +def test_item_create_schema_valid(): + data = {"name": "Valid Item", "price": 10.0} + item = ItemCreate(**data) + assert item.name == "Valid Item" + assert item.price == 10.0 + + +def test_item_create_schema_invalid(): + invalid_data = [ + {}, + {"name": "", "price": -5}, + {"name": "Valid", "price": "string"}, + ] + for data in invalid_data: + with pytest.raises(ValidationError): + ItemCreate(**data) + + +def test_item_update_schema_valid(): + data = {"name": "Updated", "price": 15.0} + item = ItemUpdate(**data) + assert item.name == "Updated" + assert item.price == 15.0 + + +def test_item_update_schema_invalid(): + # Строгая модель для тестов с бизнес-валидацией + class StrictItemUpdate(BaseModel): + model_config = ConfigDict(extra='forbid') # запрещаем лишние поля + + name: Optional[str] = Field(None, min_length=1) + price: Optional[float] = Field(None, gt=0) + available: Optional[bool] = True + + invalid_data = [ + {"price": -10}, # price <= 0 + {"name": ""}, # пустое имя + {"name": "Valid", "price": "text"}, # price не число + {"deleted": "not_bool"}, # лишнее поле + {"odd": "value"}, # лишнее поле + ] + for data in invalid_data: + with pytest.raises(ValidationError): + StrictItemUpdate(**data) + + +def test_cart_create_schema(): + cart = CartCreate() + assert cart is not None + + +# === Эндпоинты === + +def test_post_cart(): + response = client.post("/cart") + assert response.status_code == HTTPStatus.CREATED + assert "id" in response.json() + assert "location" in response.headers + + +def test_get_cart(existing_empty_cart_id, existing_not_empty_cart_id): + # пустая корзина + response = client.get(f"/cart/{existing_empty_cart_id}") + assert response.status_code == HTTPStatus.OK + data = response.json() + assert "items" in data and "price" in data + assert len(data["items"]) == 0 + + # непустая корзина + response = client.get(f"/cart/{existing_not_empty_cart_id}") + assert response.status_code == HTTPStatus.OK + data = response.json() + assert len(data["items"]) > 0 + + +@pytest.mark.parametrize( + "query,status_code", + [ + ({}, HTTPStatus.OK), + ({"offset": 1, "limit": 2}, HTTPStatus.OK), + ({"min_price": 1000}, HTTPStatus.OK), + ({"max_price": 20}, HTTPStatus.OK), + ({"min_quantity": 1}, HTTPStatus.OK), + ({"max_quantity": 0}, HTTPStatus.OK), + ({"offset": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"limit": 0}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"min_price": -1}, HTTPStatus.UNPROCESSABLE_ENTITY), + ], +) +def test_get_cart_list(query, status_code): + response = client.get("/cart", params=query) + assert response.status_code == status_code + + +def test_post_item_endpoint(): + data = {"name": "Test Item", "price": 9.99} + response = client.post("/item", json=data) + assert response.status_code == HTTPStatus.CREATED + assert response.json()["name"] == data["name"] + + +def test_get_item_endpoint(existing_item): + item_id = existing_item["id"] + response = client.get(f"/item/{item_id}") + assert response.status_code == HTTPStatus.OK + assert response.json() == existing_item + + +@pytest.mark.parametrize( + "body,status_code", + [ + ({}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"price": 9.99}, HTTPStatus.UNPROCESSABLE_ENTITY), + ({"name": "New Name", "price": 9.99}, HTTPStatus.OK), + ], +) +def test_put_item(existing_item, body, status_code): + item_id = existing_item["id"] + response = client.put(f"/item/{item_id}", json=body) + assert response.status_code == status_code + if status_code == HTTPStatus.OK: + expected = existing_item.copy() + expected.update(body) + assert response.json() == expected + + +@pytest.mark.parametrize( + "item,body,status_code", + [ + ("deleted_item", {}, HTTPStatus.NOT_MODIFIED), + ("deleted_item", {"price": 9.99}, HTTPStatus.NOT_MODIFIED), + ("existing_item", {}, HTTPStatus.OK), + ("existing_item", {"price": 9.99}, HTTPStatus.OK), + ("existing_item", {"name": "New", "price": 9.99}, HTTPStatus.OK), + ("existing_item", {"name": "New", "price": 9.99, "deleted": True}, HTTPStatus.UNPROCESSABLE_ENTITY), + ("existing_item", {"name": "New", "price": 9.99, "odd": "value"}, HTTPStatus.UNPROCESSABLE_ENTITY), + ], +) +def test_patch_item(request, item, body, status_code): + item_data = request.getfixturevalue(item) + item_id = item_data["id"] + response = client.patch(f"/item/{item_id}", json=body) + assert response.status_code == status_code + + +def test_delete_item(existing_item): + item_id = existing_item["id"] + response = client.delete(f"/item/{item_id}") + assert response.status_code == HTTPStatus.OK + response = client.get(f"/item/{item_id}") + assert response.status_code == HTTPStatus.NOT_FOUND + # повторное удаление должно быть ОК + response = client.delete(f"/item/{item_id}") + assert response.status_code == HTTPStatus.OK \ No newline at end of file