Aktualizace zavislosti, pridani debrief poznamek

This commit is contained in:
Michal Kváček
2024-01-20 22:09:05 +01:00
parent 0e890dc201
commit dfb96e768e
8 changed files with 77 additions and 16 deletions
@@ -0,0 +1,28 @@
"""add flight.debriefind_notes field
Revision ID: 39ebf5a1ab7e
Revises: 6648fb80dd0e
Create Date: 2024-01-20 16:22:00.487226
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '39ebf5a1ab7e'
down_revision = '6648fb80dd0e'
branch_labels = None
depends_on = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('flight', sa.Column('debriefing_notes', sa.Text(), server_default='', nullable=False))
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('flight', 'debriefing_notes')
# ### end Alembic commands ###
+12 -12
View File
@@ -1,15 +1,15 @@
fastapi==0.100.0
fastapi-jwt==0.1.12
strawberry-graphql[fastapi]==0.194.4
uvicorn==0.22.0
sqlalchemy[asyncio] >= 2.0.9
fastapi==0.109.0
fastapi-jwt==0.2.0
strawberry-graphql[fastapi]==0.217.1
uvicorn==0.26.0
sqlalchemy[asyncio] == 2.0.25
aiomysql==0.2.0
alembic==1.11.1
alembic==1.13.1
passlib==1.7.4
pydantic==1.10.11 # vysla uz 2.0, ale nejak mi to nefunguje
pydantic==2.5.3
sentry-sdk[fastapi]
pillow
exif
aiocache
aiohttp
lxml
pillow==10.2.0
exif==1.6.0
aiocache==0.12.2
aiohttp==3.9.1
lxml==5.1.0
+1
View File
@@ -276,6 +276,7 @@ class Flight(BaseModel):
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(128), nullable=False, server_default="")
description: Mapped[str] = mapped_column(Text, nullable=False, server_default="")
debriefing_notes: Mapped[str] = mapped_column(Text, nullable=False, server_default="")
url_slug: Mapped[str] = mapped_column(String(128), nullable=False, server_default="")
event_id: Mapped[int] = mapped_column(Integer, ForeignKey("event.id"), nullable=True)
title_photo_id: Mapped[int] = mapped_column(Integer, ForeignKey('photo.id'), nullable=True)
+4
View File
@@ -0,0 +1,4 @@
class ForgottenPasswordEndpoint():
async def on_get(self):
pass
+2 -2
View File
@@ -2,7 +2,7 @@ import re
from fastapi import HTTPException
from sqlalchemy import select
from typing import Optional
from pydantic import BaseModel, root_validator, Field
from pydantic import BaseModel, Field, model_validator
from database.models import User
from database.transaction import get_session
from passlib.hash import bcrypt
@@ -13,7 +13,7 @@ class RegistrationInput(BaseModel):
name: Optional[str]
password: str
@root_validator()
@model_validator(mode="before")
def validate_email(cls, values):
email = values.get("email") or ""
-1
View File
@@ -1,6 +1,5 @@
from datetime import datetime
from typing import List, Dict
from aiocache import cached
from lxml import etree
from lxml.etree import _ElementTree
+25 -1
View File
@@ -1,7 +1,11 @@
from __future__ import annotations
from datetime import datetime
from typing import Optional, List
from typing import Optional, List, Any
import strawberry
from graphql import GraphQLError
from strawberry.permission import PermissionExtension, BasePermission
from strawberry.types import Info
from database import models
from decorators.endpoints import authenticated_user_only
from external.gpx_parser import GPXParser
@@ -92,8 +96,23 @@ class Photo:
)
class IsAuthenticated(BasePermission):
message = "User is not authenticated"
error_class = GraphQLError
error_extensions = {"code": "UNAUTHORIZED"}
def has_permission(self, source: Any, info: Info, **kwargs) -> bool:
return bool(info.context.user_id)
@strawberry_sqlalchemy_type(models.Flight)
class Flight:
def __init__(self, **kwargs):
super().__init__()
for key, value in kwargs.items():
setattr(self, key, value)
async def load_gpx_track(root):
if not root.gpx_track_filename:
return None
@@ -148,6 +167,11 @@ class Flight:
resolver=lambda root: flight_duration_dataloader.load(root.id)
)
debriefing_notes: Optional[str] = strawberry.field(
permission_classes=[IsAuthenticated],
resolver=lambda root: root.debriefing_notes
)
@strawberry_sqlalchemy_type(models.Copilot)
class Copilot:
+5
View File
@@ -12,6 +12,7 @@ from starlette.staticfiles import StaticFiles
from strawberry.fastapi import GraphQLRouter
from config import APP_SECRET_KEY, GRAPHIQL, APP_DEBUG, ALLOW_CORS_ORIGINS, SENTRY_DSN, REFRESH_TOKEN_VALIDITY_DAYS
from database import models, async_session
from endpoints.forgotten_password import ForgottenPasswordEndpoint
from endpoints.login import LoginEndpoint, LoginInput, RefreshEndpoint, LogoutEndpoint
from endpoints.photo_editor_preview import PhotoEditorEndpoint
from endpoints.registration import RegistrationInput, RegistrationEndpoint
@@ -131,6 +132,10 @@ class App:
refresh_token=self.refresh_security
).on_post(resp)
# @self.api_router.get("/forgotten-password")
# async def logout(resp: Response):
# return await ForgottenPasswordEndpoint().on_get(resp)
@self.api_router.get("/photo/editor-preview/{photo_id}")
async def photo_editor_preview(
photo_id: int,