diff --git a/src/backend/langflow/services/database/models/api_key/__init__.py b/src/backend/langflow/services/database/models/api_key/__init__.py new file mode 100644 index 000000000..c97425ee8 --- /dev/null +++ b/src/backend/langflow/services/database/models/api_key/__init__.py @@ -0,0 +1,3 @@ +from .api_key import ApiKey, ApiKeyCreate, ApiKeyRead + +__all__ = ["ApiKey", "ApiKeyCreate", "ApiKeyRead"] diff --git a/src/backend/langflow/services/database/models/api_key.py b/src/backend/langflow/services/database/models/api_key/api_key.py similarity index 100% rename from src/backend/langflow/services/database/models/api_key.py rename to src/backend/langflow/services/database/models/api_key/api_key.py diff --git a/src/backend/langflow/services/database/models/component/__init__.py b/src/backend/langflow/services/database/models/component/__init__.py new file mode 100644 index 000000000..c787c3e04 --- /dev/null +++ b/src/backend/langflow/services/database/models/component/__init__.py @@ -0,0 +1,3 @@ +from .component import Component, ComponentModel + +__all__ = ["Component", "ComponentModel"] diff --git a/src/backend/langflow/services/database/models/component.py b/src/backend/langflow/services/database/models/component/component.py similarity index 100% rename from src/backend/langflow/services/database/models/component.py rename to src/backend/langflow/services/database/models/component/component.py diff --git a/src/backend/langflow/services/database/models/flow/__init__.py b/src/backend/langflow/services/database/models/flow/__init__.py new file mode 100644 index 000000000..7c7cc0172 --- /dev/null +++ b/src/backend/langflow/services/database/models/flow/__init__.py @@ -0,0 +1,3 @@ +from .flow import Flow, FlowCreate, FlowRead, FlowUpdate + +__all__ = ["Flow", "FlowCreate", "FlowRead", "FlowUpdate"] diff --git a/src/backend/langflow/services/database/models/flow.py b/src/backend/langflow/services/database/models/flow/flow.py similarity index 94% rename from src/backend/langflow/services/database/models/flow.py rename to src/backend/langflow/services/database/models/flow/flow.py index 2bc83f9dc..a05de5791 100644 --- a/src/backend/langflow/services/database/models/flow.py +++ b/src/backend/langflow/services/database/models/flow/flow.py @@ -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): diff --git a/src/backend/langflow/services/database/models/token/__init__.py b/src/backend/langflow/services/database/models/token/__init__.py new file mode 100644 index 000000000..9b9fa397d --- /dev/null +++ b/src/backend/langflow/services/database/models/token/__init__.py @@ -0,0 +1,5 @@ +from .token import Token + +__all__ = [ + "Token", +] diff --git a/src/backend/langflow/services/database/models/token.py b/src/backend/langflow/services/database/models/token/token.py similarity index 100% rename from src/backend/langflow/services/database/models/token.py rename to src/backend/langflow/services/database/models/token/token.py diff --git a/src/backend/langflow/services/database/models/user/__init__.py b/src/backend/langflow/services/database/models/user/__init__.py new file mode 100644 index 000000000..da9170eb7 --- /dev/null +++ b/src/backend/langflow/services/database/models/user/__init__.py @@ -0,0 +1,8 @@ +from .user import User, UserCreate, UserRead, UserUpdate + +__all__ = [ + "User", + "UserCreate", + "UserRead", + "UserUpdate", +] diff --git a/src/backend/langflow/services/database/models/user/user.py b/src/backend/langflow/services/database/models/user/user.py new file mode 100644 index 000000000..3a4308b42 --- /dev/null +++ b/src/backend/langflow/services/database/models/user/user.py @@ -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() diff --git a/src/backend/langflow/services/database/models/user.py b/src/backend/langflow/services/database/models/user/utils.py similarity index 51% rename from src/backend/langflow/services/database/models/user.py rename to src/backend/langflow/services/database/models/user/utils.py index f9a3c80f8..3b600bd9a 100644 --- a/src/backend/langflow/services/database/models/user.py +++ b/src/backend/langflow/services/database/models/user/utils.py @@ -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)