|
2 | 2 | # -*- coding:utf-8 -*- |
3 | 3 | # __author__ = '__Jack__' |
4 | 4 |
|
5 | | -from fastapi import Request, Depends, BackgroundTasks, APIRouter |
6 | | -from pydantic import BaseModel |
7 | | -from sqlalchemy.orm import Session |
8 | | - |
9 | | - |
10 | | -# from coronavirus.database import engine, SessionLocal, Base |
11 | | - |
| 5 | +from typing import List |
12 | 6 |
|
| 7 | +from fastapi import APIRouter, Depends, HTTPException |
13 | 8 | from fastapi.staticfiles import StaticFiles |
14 | 9 | from fastapi.templating import Jinja2Templates |
| 10 | +from sqlalchemy.orm import Session |
15 | 11 |
|
| 12 | +from coronavirus import crud, schemas |
| 13 | +from coronavirus.database import engine, Base, SessionLocal |
16 | 14 |
|
17 | 15 | application = APIRouter() |
18 | 16 |
|
19 | | - |
| 17 | +# mount表示将某个目录下一个完全独立的应用挂载过来,这个不会在API交互文档中显示 |
20 | 18 | application.mount('/static', StaticFiles(directory='./coronavirus/static'), name='static') |
21 | 19 | templates = Jinja2Templates(directory='./coronavirus/templates') |
22 | 20 |
|
| 21 | +Base.metadata.create_all(bind=engine) |
| 22 | + |
| 23 | + |
| 24 | +def get_db(): |
| 25 | + db = SessionLocal() |
| 26 | + try: |
| 27 | + yield db |
| 28 | + finally: |
| 29 | + db.close() |
| 30 | + |
| 31 | + |
| 32 | +@application.post("/create_city", response_model=schemas.ReadCity) |
| 33 | +def create_city(city: schemas.CreateCity, db: Session = Depends(get_db)): |
| 34 | + db_city = crud.get_city_by_name(db, name=city.province) |
| 35 | + if db_city: |
| 36 | + raise HTTPException(status_code=400, detail="City already registered") |
| 37 | + return crud.create_city(db=db, city=city) |
| 38 | + |
| 39 | + |
| 40 | +@application.get("/get_city/{city}", response_model=schemas.ReadCity) |
| 41 | +def get_city(city: str, db: Session = Depends(get_db)): |
| 42 | + db_city = crud.get_city_by_name(db, name=city) |
| 43 | + if db_city is None: |
| 44 | + raise HTTPException(status_code=404, detail="City not found") |
| 45 | + return db_city |
| 46 | + |
| 47 | + |
| 48 | +@application.get("/get_cities", response_model=List[schemas.ReadCity]) |
| 49 | +def get_cities(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
| 50 | + cities = crud.get_cities(db, skip=skip, limit=limit) |
| 51 | + return cities |
| 52 | + |
| 53 | + |
| 54 | +@application.post("/create_data", response_model=schemas.ReadData) |
| 55 | +def create_data_for_city(city: str, data: schemas.CreateData, db: Session = Depends(get_db)): |
| 56 | + db_city = crud.get_city_by_name(db, name=city) |
| 57 | + data = crud.create_city_data(db=db, data=data, city_id=db_city.id) |
| 58 | + return data |
| 59 | + |
23 | 60 |
|
24 | | -# Base.metadata.create_all(bind=engine) |
25 | | - |
26 | | - |
27 | | -@application.get("/") |
28 | | -async def index(request: Request): |
29 | | - return templates.TemplateResponse("index.html", {"request": request, "title": "This is title"}) # {"request": request}是必须的 |
30 | | - |
31 | | - |
32 | | -@application.get("/coronavirus") |
33 | | -async def coronavirus(): |
34 | | - """This is a simple tutorial""" |
35 | | - return {"message": {"This is another route"}} |
36 | | - |
37 | | - |
38 | | -# class StockRequest(BaseModel): |
39 | | -# symbol: str |
40 | | -# |
41 | | -# |
42 | | -# def get_db(): |
43 | | -# try: |
44 | | -# db = SessionLocal() |
45 | | -# yield db |
46 | | -# finally: |
47 | | -# db.close() |
48 | | -# |
49 | | -# |
50 | | -# @application.get("/") |
51 | | -# def home(request: Request, forward_pe=None, dividend_yield=None, ma50=None, ma200=None, db: Session = Depends(get_db)): |
52 | | -# """ |
53 | | -# displays the stock screener dashboard / homepage |
54 | | -# :return: |
55 | | -# """ |
56 | | -# stocks = db.query(Stock) |
57 | | -# |
58 | | -# if forward_pe: |
59 | | -# stocks = stocks.filter(Stock.forward_pe < forward_pe) |
60 | | -# |
61 | | -# if dividend_yield: |
62 | | -# stocks = stocks.filter(Stock.dividend_yield > dividend_yield) |
63 | | -# |
64 | | -# if ma50: |
65 | | -# stocks = stocks.filter(Stock.price > Stock.ma50) |
66 | | -# |
67 | | -# if ma200: |
68 | | -# stocks = stocks.filter(Stock.price > Stock.ma200) |
69 | | -# |
70 | | -# return templates.TemplateResponse("home.html", { |
71 | | -# "request": request, |
72 | | -# "stocks": stocks |
73 | | -# }) |
74 | | -# |
75 | | -# |
76 | | -# def fetch_stock_data(id_: int): |
77 | | -# """ |
78 | | -# fetch data from yahoo finance |
79 | | -# :param id_: |
80 | | -# :return: |
81 | | -# """ |
82 | | -# db = SessionLocal() |
83 | | -# stock = db.query(Stock).filter(Stock.id == id_).first() |
84 | | -# |
85 | | -# yahoo_data = yf.Ticker(stock.symbol) |
86 | | -# |
87 | | -# stock.ma50 = yahoo_data.info["fiftyDayAverage"] |
88 | | -# stock.ma200 = yahoo_data.info["twoHundredDayAverage"] |
89 | | -# stock.price = yahoo_data.info["previousClose"] |
90 | | -# stock.forward_pe = yahoo_data.info["forwardPE"] |
91 | | -# stock.forward_eps = yahoo_data.info["forwardEps"] |
92 | | -# if yahoo_data.info["dividendYield"]: |
93 | | -# stock.dividend_yield = yahoo_data.info["dividendYield"] * 100 |
94 | | -# |
95 | | -# db.add(stock) |
96 | | -# db.commit() |
97 | | -# |
98 | | -# |
99 | | -# @application.post("/stock") |
100 | | -# async def create_stock(stock_request: StockRequest, background_tasks: BackgroundTasks, db: Session = Depends(get_db)): |
101 | | -# """ |
102 | | -# created a stock and stores it in the database |
103 | | -# :return: |
104 | | -# """ |
105 | | -# stock = Stock() |
106 | | -# stock.symbol = stock_request.symbol |
107 | | -# |
108 | | -# db.add(stock) |
109 | | -# db.commit() |
110 | | -# |
111 | | -# background_tasks.add_task(fetch_stock_data, stock.id) |
112 | | -# |
113 | | -# return { |
114 | | -# "code": "success", |
115 | | -# "message": "stock created" |
116 | | -# } |
| 61 | +@application.get("/get_data", response_model=List[schemas.ReadData]) |
| 62 | +def get_data(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): |
| 63 | + data = crud.get_data(db, skip=skip, limit=limit) |
| 64 | + return data |
0 commit comments