Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/api/v1/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
from datastores.sql.crud.folder import get_folder_from_db
from datastores.sql.crud.workflow import get_file_workflows_from_db, get_task_from_db
from datastores.sql.database import get_db_connection
from datastores.sql.models.roles import Role
from datastores.sql.models.role import Role
from datastores.sql.models.workflow import Task
from lib.constants import cloud_provider_data_type_mapping
from lib.file_hashes import generate_hashes
Expand Down
2 changes: 1 addition & 1 deletion src/api/v1/folders.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
update_folder_in_db,
)
from datastores.sql.database import get_db_connection
from datastores.sql.models.roles import Role
from datastores.sql.models.role import Role

from . import schemas

Expand Down
2 changes: 1 addition & 1 deletion src/api/v1/workflows.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
)
from datastores.sql.database import get_db_connection
from datastores.sql.models.workflow import Task
from datastores.sql.models.roles import Role
from datastores.sql.models.role import Role

from . import schemas

Expand Down
5 changes: 2 additions & 3 deletions src/datastores/sql/alembic/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@
FileSummaryFeedback,
)
from datastores.sql.models.folder import Folder, FolderAttribute, FolderSummary
from datastores.sql.models.group import Group
from datastores.sql.models.roles import GroupRole, UserRole
from datastores.sql.models.user import User, UserApiKey
from datastores.sql.models.group import Group, GroupRole
from datastores.sql.models.user import User, UserRole, UserApiKey
from datastores.sql.models.workflow import Task, Workflow, WorkflowTemplate

# this is the Alembic Config object, which provides
Expand Down
4 changes: 2 additions & 2 deletions src/datastores/sql/crud/authz.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@

from datastores.sql.models.file import File
from datastores.sql.models.folder import Folder
from datastores.sql.models.roles import Role, UserRole
from datastores.sql.models.user import User
from datastores.sql.models.role import Role
from datastores.sql.models.user import User, UserRole


class AuthorizationError(Exception):
Expand Down
3 changes: 1 addition & 2 deletions src/datastores/sql/crud/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,9 @@

from api.v1 import schemas
from datastores.sql.models.file import File, FileReport, FileSummary
from datastores.sql.models.roles import Role
from datastores.sql.models.role import Role

from .folder import get_folder_from_db
from .user import get_user_from_db


def get_files_from_db(db: Session, folder_id: int):
Expand Down
4 changes: 2 additions & 2 deletions src/datastores/sql/crud/folder.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@

from api.v1 import schemas
from datastores.sql.models.folder import Folder
from datastores.sql.models.roles import Role, UserRole
from datastores.sql.models.user import User
from datastores.sql.models.role import Role
from datastores.sql.models.user import User, UserRole


def get_root_folders_from_db(db: Session, current_user: User):
Expand Down
4 changes: 2 additions & 2 deletions src/datastores/sql/models/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@

if TYPE_CHECKING:
from .folder import Folder
from .user import User
from .user import User, UserRole
from .group import GroupRole
from .workflow import Task, Workflow
from .roles import UserRole, GroupRole


file_workflow_association_table = Table(
Expand Down
4 changes: 2 additions & 2 deletions src/datastores/sql/models/folder.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@

if TYPE_CHECKING:
from datastores.sql.models.file import File
from datastores.sql.models.roles import GroupRole, UserRole
from datastores.sql.models.user import User
from datastores.sql.models.user import User, UserRole
from datastores.sql.models.group import GroupRole


class Folder(BaseModel):
Expand Down
32 changes: 29 additions & 3 deletions src/datastores/sql/models/group.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,22 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import uuid as uuid_module
from typing import TYPE_CHECKING, List

from sqlalchemy import UUID, Column, ForeignKey, Table, UnicodeText

from typing import TYPE_CHECKING, List, Optional

from sqlalchemy import UUID, Column, ForeignKey, Table, UnicodeText, Enum
from sqlalchemy.orm import Mapped, mapped_column, relationship

from ..database import BaseModel

from .role import Role


if TYPE_CHECKING:
from .roles import GroupRole
from .user import User
from .folder import Folder
from .file import File


group_user_association_table = Table(
Expand Down Expand Up @@ -52,3 +58,23 @@ class Group(BaseModel):
back_populates="groups",
)
group_roles: Mapped[List["GroupRole"]] = relationship(back_populates="group")


class GroupRole(BaseModel):
"""Represents a group role in the database.

Attributes:
role (Role): The role of the group.
"""

role: Mapped[Role] = mapped_column(Enum(Role), nullable=False)

# Relationships
group_id: Mapped[int] = mapped_column(ForeignKey("group.id"))
group: Mapped["Group"] = relationship(back_populates="group_roles")
folder_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("folder.id"), nullable=True
)
folder: Mapped[Optional["Folder"]] = relationship(back_populates="group_roles")
file_id: Mapped[Optional[int]] = mapped_column(ForeignKey("file.id"), nullable=True)
file: Mapped[Optional["File"]] = relationship(back_populates="group_roles")
68 changes: 0 additions & 68 deletions src/datastores/sql/models/roles.py

This file was deleted.

29 changes: 25 additions & 4 deletions src/datastores/sql/models/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,17 @@
import uuid as uuid_module
from typing import TYPE_CHECKING, List, Optional

from sqlalchemy import UUID, Boolean, DateTime, ForeignKey, Unicode, UnicodeText
from sqlalchemy import UUID, Boolean, DateTime, Enum, ForeignKey, Unicode, UnicodeText
from sqlalchemy.orm import Mapped, mapped_column, relationship

from ..database import BaseModel
from .role import Role
from .group import group_user_association_table

if TYPE_CHECKING:
from .file import File
from .folder import Folder
from .group import Group, group_user_association_table
from .roles import UserRole
from .group import Group
from .workflow import Task, Workflow, WorkflowTemplate


Expand Down Expand Up @@ -84,10 +85,30 @@ class User(BaseModel):
api_keys: Mapped[List["UserApiKey"]] = relationship(back_populates="user")
user_roles: Mapped[List["UserRole"]] = relationship(back_populates="user")
groups: Mapped[List["Group"]] = relationship(
secondary="group_user_association_table", back_populates="users"
secondary=group_user_association_table, back_populates="users"
)


class UserRole(BaseModel):
"""Represents a user role in the database.

Attributes:
role (Role): The role of the user.
"""

role: Mapped[Role] = mapped_column(Enum(Role), nullable=False)

# Relationships
user_id: Mapped[int] = mapped_column(ForeignKey("user.id"))
user: Mapped["User"] = relationship(back_populates="user_roles")
folder_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("folder.id"), nullable=True
)
folder: Mapped[Optional["Folder"]] = relationship(back_populates="user_roles")
file_id: Mapped[Optional[int]] = mapped_column(ForeignKey("file.id"), nullable=True)
file: Mapped[Optional["File"]] = relationship(back_populates="user_roles")


class UserApiKey(BaseModel):
"""Represents an API key associated with a user.

Expand Down