📦 feat(api_key): add ApiKey model and related classes for database operations

📦 feat(component): add Component model and related classes for database operations

📦 feat(flow): add Flow model and related classes for database operations

📦 feat(token): add Token model for authentication

📦 feat(user): add User model and related classes for database operations

📦 feat(user): add utility functions for user operations
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-08-24 17:32:26 -03:00
commit 1a51cc0848
11 changed files with 67 additions and 51 deletions

View file

@ -0,0 +1,3 @@
from .api_key import ApiKey, ApiKeyCreate, ApiKeyRead
__all__ = ["ApiKey", "ApiKeyCreate", "ApiKeyRead"]

View file

@ -0,0 +1,3 @@
from .component import Component, ComponentModel
__all__ = ["Component", "ComponentModel"]

View file

@ -0,0 +1,3 @@
from .flow import Flow, FlowCreate, FlowRead, FlowUpdate
__all__ = ["Flow", "FlowCreate", "FlowRead", "FlowUpdate"]

View file

@ -6,8 +6,6 @@ from sqlmodel import Field, JSON, Column
from uuid import UUID, uuid4
from typing import Dict, Optional
# if TYPE_CHECKING:
class FlowBase(SQLModelSerializable):
name: str = Field(index=True)
@ -16,7 +14,6 @@ class FlowBase(SQLModelSerializable):
@validator("data")
def validate_json(v):
# dict_keys(['description', 'name', 'id', 'data'])
if not v:
return v
if not isinstance(v, dict):

View file

@ -0,0 +1,5 @@
from .token import Token
__all__ = [
"Token",
]

View file

@ -0,0 +1,8 @@
from .user import User, UserCreate, UserRead, UserUpdate
__all__ = [
"User",
"UserCreate",
"UserRead",
"UserUpdate",
]

View file

@ -0,0 +1,40 @@
from langflow.services.database.models.base import SQLModel, SQLModelSerializable
from sqlmodel import Field
from datetime import datetime
from typing import Optional
from uuid import UUID, uuid4
class User(SQLModelSerializable, table=True):
id: UUID = Field(default_factory=uuid4, primary_key=True, unique=True)
username: str = Field(index=True, unique=True)
password: str = Field()
is_active: bool = Field(default=False)
is_superuser: bool = Field(default=False)
create_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
last_login_at: Optional[datetime] = Field()
class UserCreate(SQLModel):
username: str = Field()
password: str = Field()
class UserRead(SQLModel):
id: UUID = Field(default_factory=uuid4)
username: str = Field()
is_active: bool = Field()
is_superuser: bool = Field()
create_at: datetime = Field()
updated_at: datetime = Field()
last_login_at: Optional[datetime] = Field()
class UserUpdate(SQLModel):
username: Optional[str] = Field()
is_active: Optional[bool] = Field()
is_superuser: Optional[bool] = Field()
last_login_at: Optional[datetime] = Field()

View file

@ -1,53 +1,10 @@
from datetime import datetime, timezone
from uuid import UUID
from fastapi import Depends, HTTPException
from langflow.services.database.models.base import SQLModel, SQLModelSerializable
from langflow.services.database.models.user.user import User, UserUpdate
from langflow.services.utils import get_session
from pydantic import BaseModel
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import Session
from sqlmodel import Field
from datetime import datetime, timezone
from typing import List, Optional
from uuid import UUID, uuid4
class User(SQLModelSerializable, table=True):
id: UUID = Field(default_factory=uuid4, primary_key=True, unique=True)
username: str = Field(index=True, unique=True)
password: str = Field()
is_active: bool = Field(default=False)
is_superuser: bool = Field(default=False)
create_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
last_login_at: Optional[datetime] = Field()
class UserAddModel(SQLModel):
username: str = Field()
password: str = Field()
class UserListModel(SQLModel):
id: UUID = Field(default_factory=uuid4)
username: str = Field()
is_active: bool = Field()
is_superuser: bool = Field()
create_at: datetime = Field()
updated_at: datetime = Field()
last_login_at: Optional[datetime] = Field()
class UserPatchModel(SQLModel):
username: Optional[str] = Field()
is_active: Optional[bool] = Field()
is_superuser: Optional[bool] = Field()
last_login_at: Optional[datetime] = Field()
class UsersResponse(BaseModel):
total_count: int
users: List[UserListModel]
def get_user_by_username(db: Session, username: str) -> User:
@ -61,7 +18,7 @@ def get_user_by_id(db: Session, id: UUID) -> User:
def update_user(
user_id: UUID, user: UserPatchModel, db: Session = Depends(get_session)
user_id: UUID, user: UserUpdate, db: Session = Depends(get_session)
) -> User:
user_db = get_user_by_username(db, user.username) # type: ignore
if user_db and user_db.id != user_id:
@ -90,6 +47,6 @@ def update_user(
def update_user_last_login_at(user_id: UUID, db: Session = Depends(get_session)):
user_data = UserPatchModel(last_login_at=datetime.now(timezone.utc)) # type: ignore
user_data = UserUpdate(last_login_at=datetime.now(timezone.utc)) # type: ignore
return update_user(user_id, user_data, db)