Skip to content

Commit 5381766

Browse files
committed
chore: use PurePosixPath type in sqlalchemy
1 parent dedee10 commit 5381766

2 files changed

Lines changed: 25 additions & 5 deletions

File tree

components/renku_data_services/session/orm.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from renku_data_services.crc.orm import ResourceClassORM
1313
from renku_data_services.project.orm import ProjectORM
1414
from renku_data_services.session import models
15-
from renku_data_services.utils.sqlalchemy import ULIDType
15+
from renku_data_services.utils.sqlalchemy import PurePosixPathType, ULIDType
1616

1717
metadata_obj = MetaData(schema="sessions") # Has to match alembic ini section name
1818
JSONVariant = JSON().with_variant(JSONB(), "postgresql")
@@ -51,8 +51,8 @@ class EnvironmentORM(BaseORM):
5151
"""Default URL path to open in a session."""
5252

5353
port: Mapped[int] = mapped_column("port")
54-
working_directory: Mapped[str] = mapped_column("working_directory", String())
55-
mount_directory: Mapped[str] = mapped_column("mount_directory", String())
54+
working_directory: Mapped[PurePosixPath] = mapped_column("working_directory", PurePosixPathType)
55+
mount_directory: Mapped[PurePosixPath] = mapped_column("mount_directory", PurePosixPathType)
5656
uid: Mapped[int] = mapped_column("uid")
5757
gid: Mapped[int] = mapped_column("gid")
5858
environment_kind: Mapped[models.EnvironmentKind] = mapped_column("environment_kind")
@@ -72,8 +72,8 @@ def dump(self) -> models.Environment:
7272
gid=self.gid,
7373
uid=self.uid,
7474
environment_kind=self.environment_kind,
75-
mount_directory=PurePosixPath(self.mount_directory),
76-
working_directory=PurePosixPath(self.working_directory),
75+
mount_directory=self.mount_directory,
76+
working_directory=self.working_directory,
7777
port=self.port,
7878
args=self.args,
7979
command=self.command,

components/renku_data_services/utils/sqlalchemy.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""Utilities for SQLAlchemy."""
22

3+
from pathlib import PurePosixPath
34
from typing import cast
45

56
from sqlalchemy import Dialect, types
@@ -23,3 +24,22 @@ def process_result_value(self, value: str | None, dialect: Dialect) -> ULID | No
2324
if value is None:
2425
return None
2526
return cast(ULID, ULID.from_str(value)) # cast because mypy doesn't understand ULID type annotations
27+
28+
29+
class PurePosixPathType(types.TypeDecorator):
30+
"""Wrapper type for Path <--> str conversion."""
31+
32+
impl = types.String
33+
cache_ok = True
34+
35+
def process_bind_param(self, value: PurePosixPath | None, dialect: Dialect) -> str | None:
36+
"""Transform value for storing in the database."""
37+
if value is None:
38+
return None
39+
return value.as_posix()
40+
41+
def process_result_value(self, value: str | None, dialect: Dialect) -> PurePosixPath | None:
42+
"""Transform string from database into PosixPath."""
43+
if value is None:
44+
return None
45+
return PurePosixPath(value)

0 commit comments

Comments
 (0)