Advertisement
mikhailemv

Untitled

Jul 29th, 2023
875
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.93 KB | None | 0 0
  1. # main.py
  2.  
  3. from typing import List
  4.  
  5. from fastapi import Depends, FastAPI, HTTPException
  6. from sqlalchemy.orm import Session
  7.  
  8. from . import crud, models, schemas
  9. from .database import SessionLocal, engine
  10.  
  11. from rocketry import Rocketry
  12.  
  13. import asyncio
  14. import requests
  15.  
  16. from .price_parser import start_parser
  17.  
  18.  
  19. app_rocketry = Rocketry(execution="async")
  20.  
  21.  
  22. @app_rocketry.task('every 15 seconds')
  23. async def do_things():
  24.     print('Parser is started')
  25.  
  26.     name, price = start_parser()
  27.  
  28.     def blocking_task():
  29.         print('Test')
  30.  
  31.         print(name, price)
  32.  
  33.         headers = {
  34.             'accept': 'application/json',
  35.             'Content-Type': 'application/json',
  36.         }
  37.  
  38.         json_data = {
  39.             'name': name,
  40.             'price': price,
  41.         }
  42.  
  43.         response = requests.post(
  44.             'http://127.0.0.1:8000/prices/create/', headers=headers, json=json_data
  45.         )
  46.  
  47.         print(response, json_data)
  48.  
  49.     loop = asyncio.get_running_loop()
  50.     loop.run_in_executor(None, blocking_task)
  51.  
  52.  
  53. models.Base.metadata.create_all(bind=engine)
  54.  
  55. app = FastAPI()
  56.  
  57.  
  58. def get_db():
  59.     db = SessionLocal()
  60.     try:
  61.         yield db
  62.     finally:
  63.         db.close()
  64.  
  65.  
  66. @app.on_event("startup")
  67. async def startup_event():
  68.     asyncio.create_task(app_rocketry.serve())
  69.  
  70.  
  71. @app.get("/prices/", response_model=List[schemas.Price])
  72. def read_prices(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
  73.     prices = crud.get_prices(db, skip=skip, limit=limit)
  74.     return prices
  75.  
  76.  
  77. @app.get("/prices/{price_id}", response_model=schemas.Price)
  78. def read_price(price_id: int, db: Session = Depends(get_db)):
  79.     db_price = crud.get_price(db, price_id=price_id)
  80.     if db_price is None:
  81.         raise HTTPException(status_code=404, detail="This record is missing")
  82.     return db_price
  83.  
  84.  
  85. @app.post("/prices/create/", response_model=schemas.Price)
  86. def create_price(item: schemas.PriceCreate, db: Session = Depends(get_db)):
  87.     db_price = crud.get_price_by_name(db, name=item.name)
  88.     if db_price and db_price.price == item.price:
  89.         raise HTTPException(status_code=400, detail="The table contains this name")
  90.     return crud.create_price(db=db, item=item)
  91.  
  92.  
  93. @app.put("/prices/{price_id}", response_model=schemas.Price)
  94. def update_price(price_id: int, item: schemas.PriceCreate, db: Session = Depends(get_db)):
  95.     db_price = crud.get_price(db, price_id=price_id)
  96.     if not db_price:
  97.         raise HTTPException(status_code=404, detail="This record is missing")
  98.     return crud.update_price(db=db, item=item, price_id=price_id)
  99.  
  100.  
  101. @app.delete("/prices/{price_id}", response_model=dict)
  102. def delete_price(price_id: int, db: Session = Depends(get_db)):
  103.     db_price = crud.get_price(db, price_id=price_id)
  104.     if not db_price:
  105.         raise HTTPException(status_code=404, detail="This record is missing")
  106.     crud.delete_price(db=db, price_id=price_id)
  107.     return {"status": "ok"}
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement