Update pre-commit hook and reformat files

This commit is contained in:
Santiago Lo Coco 2023-11-01 12:06:52 -03:00
parent 98bacab6a9
commit 5084c38283
32 changed files with 123 additions and 99 deletions

View File

@ -1,11 +1,28 @@
files: ^flights-domain/
repos: repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: check-added-large-files
- id: check-case-conflict
- id: check-executables-have-shebangs
- id: check-merge-conflict
- id: check-symlinks
- id: check-yaml
exclude: observability/
- id: debug-statements
exclude: tests/
- id: destroyed-symlinks
- id: end-of-file-fixer
files: \.(py|sh|rst|yml|yaml)$
- id: mixed-line-ending
- id: trailing-whitespace
files: \.(py|sh|rst|yml|yaml)$
- repo: https://github.com/ambv/black - repo: https://github.com/ambv/black
rev: 23.10.0 rev: 23.10.0
hooks: hooks:
- id: black - id: black
- repo: https://github.com/pycqa/flake8 - repo: https://github.com/pycqa/flake8
rev: 6.1.0 rev: 6.0.0
hooks: hooks:
- id: flake8 - id: flake8
args: [--config, flights-domain/flights-information/setup.cfg] args: [--config, flights-domain/flights-information/setup.cfg]
@ -13,4 +30,4 @@ repos:
rev: 5.12.0 rev: 5.12.0
hooks: hooks:
- id: isort - id: isort
args: ['--src-path', 'flights-domain/flights-information/src', 'auth-domain/user-manager/src', 'gateway/src', 'subscription-domain/subscription-manager/src'] args: ['--profile', 'black', '--src-path', 'flights-domain/flights-information/src', 'auth-domain/user-manager/src', 'gateway/src', 'subscription-domain/subscription-manager/src']

View File

@ -16,9 +16,25 @@ def recreate_db():
@cli.command("seed_db") @cli.command("seed_db")
def seed_db(): def seed_db():
db.session.add(User(username="lufthansa", email="info@lufthansa.com", password="password1234", airline=True)) db.session.add(
db.session.add(User(username="ryanair", email="info@ryanair.com", password="password1234", airline=True)) User(
db.session.add(User(username="messi", email="messi@gmail.com", password="password1234")) username="lufthansa",
email="info@lufthansa.com",
password="password1234",
airline=True,
)
)
db.session.add(
User(
username="ryanair",
email="info@ryanair.com",
password="password1234",
airline=True,
)
)
db.session.add(
User(username="messi", email="messi@gmail.com", password="password1234")
)
db.session.commit() db.session.commit()

View File

@ -20,4 +20,3 @@ else
## Security ## Security
# bandit -c .bandit.yml -r . # bandit -c .bandit.yml -r .
fi fi

View File

@ -55,9 +55,11 @@ class Login(Resource):
access_token = user.encode_token(user.id, "access", user.airline) access_token = user.encode_token(user.id, "access", user.airline)
refresh_token = user.encode_token(user.id, "refresh") refresh_token = user.encode_token(user.id, "refresh")
response_object = {"access_token": access_token, response_object = {
"access_token": access_token,
"refresh_token": refresh_token, "refresh_token": refresh_token,
"user_id": user.id} "user_id": user.id,
}
return response_object, 200 return response_object, 200
@ -84,7 +86,7 @@ class Refresh(Resource):
response_object = { response_object = {
"access_token": access_token, "access_token": access_token,
"refresh_token": refresh_token, "refresh_token": refresh_token,
"user_id": user.id "user_id": user.id,
} }
return response_object, 200 return response_object, 200
except jwt.ExpiredSignatureError: except jwt.ExpiredSignatureError:

View File

@ -39,7 +39,7 @@ class User(db.Model):
"exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=seconds), "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=seconds),
"iat": datetime.datetime.utcnow(), "iat": datetime.datetime.utcnow(),
"sub": user_id, "sub": user_id,
"airline": airline "airline": airline,
} }
return jwt.encode( return jwt.encode(
payload, current_app.config.get("SECRET_KEY"), algorithm="HS256" payload, current_app.config.get("SECRET_KEY"), algorithm="HS256"
@ -61,7 +61,7 @@ class User(db.Model):
"username": fields.String(required=True), "username": fields.String(required=True),
"email": fields.String(required=True), "email": fields.String(required=True),
"created_date": fields.DateTime, "created_date": fields.DateTime,
"airline": fields.Boolean(readOnly=True) "airline": fields.Boolean(readOnly=True),
}, },
) )
@ -82,7 +82,7 @@ class User(db.Model):
{ {
"username": fields.String(required=True), "username": fields.String(required=True),
"email": fields.String(required=True), "email": fields.String(required=True),
"id": fields.Integer(required=True) "id": fields.Integer(required=True),
}, },
) )
@ -119,5 +119,5 @@ class User(db.Model):
"Access and Refresh Token", "Access and Refresh Token",
cls.get_api_auth_refresh_model(namespace), cls.get_api_auth_refresh_model(namespace),
{"access_token": fields.String(required=True)}, {"access_token": fields.String(required=True)},
{"user_id": fields.Integer(required=True)} {"user_id": fields.Integer(required=True)},
) )

View File

@ -1,5 +1,4 @@
from src.api.models.generic import (get_model_create_response, from src.api.models.generic import get_model_create_response, get_model_error_response
get_model_error_response)
def test_model_create_response(test_namespace): def test_model_create_response(test_namespace):

View File

@ -6,6 +6,7 @@ from src.api.routes import flights, health
Base.metadata.create_all(bind=engine) Base.metadata.create_all(bind=engine)
app = FastAPI(title="Flights Information API") app = FastAPI(title="Flights Information API")
app.include_router(flights.router, prefix="/flights") app.include_router(flights.router, prefix="/flights")
app.include_router(health.router, prefix="/health") app.include_router(health.router, prefix="/health")

View File

@ -1,7 +0,0 @@
#!/bin/sh
# while ! curl -f 'fids_logstash:9600/_node/pipelines'; do
# sleep 1
# done
nc -vz -w1 localhost 5004 # && curl -f fids_logstash:9600/_node/pipelines

View File

@ -3,10 +3,10 @@ import logging
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from src.api.routes import (auth, flights, health, notifications, from src.api.routes import auth, flights, health, notifications, subscriptions, users
subscriptions, users)
logging.config.fileConfig("logging.conf", disable_existing_loggers=False)
logging.config.fileConfig('logging.conf', disable_existing_loggers=False)
app = FastAPI(title="Flights Information API") app = FastAPI(title="Flights Information API")
app.include_router(flights.router, prefix="/flights") app.include_router(flights.router, prefix="/flights")

View File

@ -25,9 +25,7 @@ async def create_flight(
auth = await checkAuth(authorization) auth = await checkAuth(authorization)
flight_data = flight.model_dump() flight_data = flight.model_dump()
flight_data["user_id"] = auth["id"] flight_data["user_id"] = auth["id"]
(response, status, _) = await request( (response, status, _) = await request(f"{API_FLIGHTS}", "POST", json=flight_data)
f"{API_FLIGHTS}", "POST", json=flight_data
)
if status < 200 or status > 204: if status < 200 or status > 204:
raise HTTPException(status_code=status, detail=response) raise HTTPException(status_code=status, detail=response)
return response return response
@ -42,16 +40,18 @@ async def update_flight(
auth = await checkAuth(authorization) auth = await checkAuth(authorization)
status = status_update.model_dump() status = status_update.model_dump()
status["user_id"] = auth["id"] status["user_id"] = auth["id"]
(response, status, _) = await request( (response, status, _) = await request(f"{API_FLIGHTS}/{id}", "PATCH", json=status)
f"{API_FLIGHTS}/{id}", "PATCH", json=status
)
if status < 200 or status > 204: if status < 200 or status > 204:
raise HTTPException(status_code=status, detail=response) raise HTTPException(status_code=status, detail=response)
return response return response
@router.get("", response_model=list[Flight]) @router.get("", response_model=list[Flight])
async def get_flights(origin: Optional[str] = None, destination: Optional[str] = None, lastUpdated: Optional[str] = None): async def get_flights(
origin: Optional[str] = None,
destination: Optional[str] = None,
lastUpdated: Optional[str] = None,
):
query = {} query = {}
if origin: if origin:
query["origin"] = origin query["origin"] = origin

View File

@ -1,21 +1,13 @@
# from src.api.main import my_logger
import logging import logging
from fastapi import APIRouter from fastapi import APIRouter
# from sys import stdout
my_logger = logging.getLogger(__name__) my_logger = logging.getLogger(__name__)
# my_logger.setLevel(logging.INFO)
# consoleHandler = logging.StreamHandler(stdout)
# my_logger.addHandler(consoleHandler)
# handler = graypy.GELFUDPHandler("fids_logstash", 12201)
# my_logger.addHandler(handler)
router = APIRouter() router = APIRouter()
@router.get("", status_code=200) @router.get("", status_code=200)
async def get_health(): async def get_health():
my_logger.info("{\"health\":\"OK\"}") my_logger.info('{"health":"OK"}')
return {"status": "OK"} return {"status": "OK"}

View File

@ -12,8 +12,7 @@ router = APIRouter()
@router.post("") @router.post("")
async def create_subscription( async def create_subscription(
subscription: Subscription, subscription: Subscription, authorization: Annotated[str | None, Header()] = None
authorization: Annotated[str | None, Header()] = None
): ):
await checkAuth(authorization) await checkAuth(authorization)
(response, status, _) = await request( (response, status, _) = await request(

View File

@ -21,8 +21,9 @@ def create_subscription(db: Session, subscription: SubscriptionPydantic):
def remove_subscription(db: Session, user_id: int, flight_id: int): def remove_subscription(db: Session, user_id: int, flight_id: int):
db.query(Subscription).filter(Subscription.user_id == user_id db.query(Subscription).filter(
and Subscription.flight_id == flight_id).delete() Subscription.user_id == user_id and Subscription.flight_id == flight_id
).delete()
db.commit() db.commit()

View File

@ -6,6 +6,7 @@ from src.api.routes import health, messages, notifications, subscriptions
Base.metadata.create_all(bind=engine) Base.metadata.create_all(bind=engine)
app = FastAPI(title="Subscription Information API") app = FastAPI(title="Subscription Information API")
app.include_router(subscriptions.router, prefix="/subscriptions") app.include_router(subscriptions.router, prefix="/subscriptions")
app.include_router(notifications.router, prefix="/notifications") app.include_router(notifications.router, prefix="/notifications")

View File

@ -12,7 +12,9 @@ router = APIRouter()
@router.post("") @router.post("")
async def send_notification(flight: FlightData, background_tasks: BackgroundTasks, db: Session = Depends(get_db)): async def send_notification(
flight: FlightData, background_tasks: BackgroundTasks, db: Session = Depends(get_db)
):
db_subscriptions = sub_crud.send_subscriptions(db=db, flight=flight) db_subscriptions = sub_crud.send_subscriptions(db=db, flight=flight)
for subscription in db_subscriptions: for subscription in db_subscriptions:
db_chat = notif_crud.get_chat_id(db=db, user_id=subscription.user_id) db_chat = notif_crud.get_chat_id(db=db, user_id=subscription.user_id)

View File

@ -14,14 +14,12 @@ from src.api.utils.messages import get_flight_message, get_invalid_message
router = APIRouter() router = APIRouter()
msg_options = re.compile(r'^/(flight \d+|stop|start)$') msg_options = re.compile(r"^/(flight \d+|stop|start)$")
@router.post("") @router.post("")
async def create_chat( async def create_chat(
chat: Update, chat: Update, background_tasks: BackgroundTasks, db: Session = Depends(get_db)
background_tasks: BackgroundTasks,
db: Session = Depends(get_db)
): ):
print(chat.model_dump()) print(chat.model_dump())
message = chat.message message = chat.message
@ -32,19 +30,19 @@ async def create_chat(
background_tasks.add_task(telegram.send_message, chat_id, msg) background_tasks.add_task(telegram.send_message, chat_id, msg)
return Response(status_code=204) return Response(status_code=204)
action = text.partition(' ')[0] action = text.partition(" ")[0]
if action == '/start': if action == "/start":
user_id = int(message["text"].partition(' ')[2]) user_id = int(message["text"].partition(" ")[2])
new_chat = Chat(chat_id=str(message["chat"]["id"]), user_id=user_id) new_chat = Chat(chat_id=str(message["chat"]["id"]), user_id=user_id)
notif_crud.create_chat(db=db, chat=new_chat) notif_crud.create_chat(db=db, chat=new_chat)
elif action == '/stop': elif action == "/stop":
chat_id = str(message["chat"]["id"]) chat_id = str(message["chat"]["id"])
user_id = notif_crud.get_user_from_chat(db=db, chat_id=chat_id).user_id user_id = notif_crud.get_user_from_chat(db=db, chat_id=chat_id).user_id
subs_crud.remove_subscriptions(user_id) subs_crud.remove_subscriptions(user_id)
notif_crud.remove_chat(db=db, chat_id=chat_id) notif_crud.remove_chat(db=db, chat_id=chat_id)
elif action == '/flight': elif action == "/flight":
chat_id = str(message["chat"]["id"]) chat_id = str(message["chat"]["id"])
flight_id = int(message["text"].partition(' ')[2]) flight_id = int(message["text"].partition(" ")[2])
(response, status, _) = await request(f"{API_FLIGHTS}/{flight_id}", "GET") (response, status, _) = await request(f"{API_FLIGHTS}/{flight_id}", "GET")
if status < 200 or status > 204: if status < 200 or status > 204:
msg = f"Could not get flight '{flight_id}'. Sorry!" msg = f"Could not get flight '{flight_id}'. Sorry!"

View File

@ -22,6 +22,10 @@ def get_subscriptions(user_id: int, db: Session = Depends(get_db)):
@router.delete("/{user_id}") @router.delete("/{user_id}")
def delete_subscription(user_id: int, subscription: SubscriptionRemove, db: Session = Depends(get_db)): def delete_subscription(
sub_crud.remove_subscription(db=db, user_id=user_id, flight_id=subscription.flight_id) user_id: int, subscription: SubscriptionRemove, db: Session = Depends(get_db)
):
sub_crud.remove_subscription(
db=db, user_id=user_id, flight_id=subscription.flight_id
)
return Response(status_code=204) return Response(status_code=204)