• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

SwissDataScienceCenter / renku-data-services / 11288123511

11 Oct 2024 07:23AM UTC coverage: 90.667% (+0.2%) from 90.477%
11288123511

Pull #407

github

web-flow
Merge 20c6c8af6 into 5b095d795
Pull Request #407: feat!: add data connectors

1226 of 1325 new or added lines in 28 files covered. (92.53%)

3 existing lines in 3 files now uncovered.

10589 of 11679 relevant lines covered (90.67%)

1.6 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.56
/components/renku_data_services/project/orm.py
1
"""SQLAlchemy's schemas for the projects database."""
2✔
2

3
from datetime import datetime
2✔
4
from typing import TYPE_CHECKING, Optional
2✔
5

6
from sqlalchemy import DateTime, Integer, MetaData, String, func
2✔
7
from sqlalchemy.dialects.postgresql import ARRAY
2✔
8
from sqlalchemy.orm import DeclarativeBase, Mapped, MappedAsDataclass, mapped_column, relationship
2✔
9
from sqlalchemy.schema import ForeignKey
2✔
10
from ulid import ULID
2✔
11

12
from renku_data_services.authz import models as authz_models
2✔
13
from renku_data_services.base_orm.registry import COMMON_ORM_REGISTRY
2✔
14
from renku_data_services.project import models
2✔
15
from renku_data_services.project.apispec import Visibility
2✔
16
from renku_data_services.utils.sqlalchemy import ULIDType
2✔
17

18
if TYPE_CHECKING:
2✔
NEW
19
    from renku_data_services.namespace.orm import EntitySlugORM
×
20

21

22
class BaseORM(MappedAsDataclass, DeclarativeBase):
2✔
23
    """Base class for all ORM classes."""
2✔
24

25
    metadata = MetaData(schema="projects")
2✔
26
    registry = COMMON_ORM_REGISTRY
2✔
27

28

29
class ProjectORM(BaseORM):
2✔
30
    """A Renku native project."""
2✔
31

32
    __tablename__ = "projects"
2✔
33
    id: Mapped[ULID] = mapped_column("id", ULIDType, primary_key=True, default_factory=lambda: str(ULID()), init=False)
2✔
34
    name: Mapped[str] = mapped_column("name", String(99))
2✔
35
    visibility: Mapped[Visibility]
2✔
36
    created_by_id: Mapped[str] = mapped_column("created_by_id", String())
2✔
37
    description: Mapped[str | None] = mapped_column("description", String(500))
2✔
38
    keywords: Mapped[Optional[list[str]]] = mapped_column("keywords", ARRAY(String(99)), nullable=True)
2✔
39
    # NOTE: The project slugs table has a foreign key from the projects table, but there is a stored procedure
40
    # triggered by the deletion of slugs to remove the project used by the slug. See migration 89aa4573cfa9.
41
    slug: Mapped["EntitySlugORM"] = relationship(
2✔
42
        lazy="joined", init=False, repr=False, viewonly=True, back_populates="project"
43
    )
44
    repositories: Mapped[list["ProjectRepositoryORM"]] = relationship(
2✔
45
        back_populates="project",
46
        default_factory=list,
47
        cascade="save-update, merge, delete",
48
        lazy="selectin",
49
        repr=False,
50
    )
51
    creation_date: Mapped[datetime] = mapped_column(
2✔
52
        "creation_date", DateTime(timezone=True), default=func.now(), nullable=False
53
    )
54
    updated_at: Mapped[datetime | None] = mapped_column(
2✔
55
        "updated_at", DateTime(timezone=True), default=None, server_default=func.now(), onupdate=func.now()
56
    )
57

58
    def dump(self) -> models.Project:
2✔
59
        """Create a project model from the ProjectORM."""
60
        return models.Project(
1✔
61
            id=self.id,
62
            name=self.name,
63
            slug=self.slug.slug,
64
            namespace=self.slug.namespace.dump(),
65
            visibility=authz_models.Visibility.PUBLIC
66
            if self.visibility == Visibility.public
67
            else authz_models.Visibility.PRIVATE,
68
            created_by=self.created_by_id,
69
            creation_date=self.creation_date,
70
            updated_at=self.updated_at,
71
            repositories=[models.Repository(r.url) for r in self.repositories],
72
            description=self.description,
73
            keywords=self.keywords,
74
        )
75

76

77
class ProjectRepositoryORM(BaseORM):
2✔
78
    """Renku project repositories."""
2✔
79

80
    __tablename__ = "projects_repositories"
2✔
81

82
    id: Mapped[int] = mapped_column("id", Integer, primary_key=True, default=None, init=False)
2✔
83
    url: Mapped[str] = mapped_column("url", String(2000))
2✔
84
    project_id: Mapped[Optional[str]] = mapped_column(
2✔
85
        ForeignKey("projects.id", ondelete="CASCADE"), default=None, index=True
86
    )
87
    project: Mapped[Optional[ProjectORM]] = relationship(back_populates="repositories", default=None, repr=False)
2✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc