Skip to content

Commit 5fc1131

Browse files
committed
refactor: unify user and user_preferences modules
1 parent 0a77cce commit 5fc1131

File tree

28 files changed

+448
-554
lines changed

28 files changed

+448
-554
lines changed

.devcontainer/docker-compose.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ services:
1212
DB_USER: renku
1313
DB_NAME: renku
1414
DB_PASSWORD: renku
15-
DB_HOST: 127.0.0.1
15+
DB_HOST: 127.0.0.1
1616
CORS_ALLOW_ALL_ORIGINS: "true"
1717
ALEMBIC_CONFIG: /workspace/components/renku_data_services/migrations/alembic.ini
18-
AUTHZ_DB_HOST: 127.0.0.1
19-
AUTHZ_DB_GRPC_PORT: "50051"
20-
AUTHZ_DB_KEY: renku
18+
AUTHZ_DB_HOST: 127.0.0.1
19+
AUTHZ_DB_GRPC_PORT: "50051"
20+
AUTHZ_DB_KEY: renku
2121
AUTHZ_DB_NO_TLS_CONNECTION: "true"
2222
ZED_ENDPOINT: 127.0.0.1:50051
2323
ZED_TOKEN: renku
@@ -50,7 +50,7 @@ services:
5050
SWAGGER_JSON_URL: http://localhost:8000/api/data/spec.json
5151
PORT: "8080"
5252
network_mode: service:db
53-
53+
5454
authz:
5555
image: authzed/spicedb:latest-debug
5656
restart: unless-stopped

Makefile

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ components/renku_data_services/project/apispec.py: components/renku_data_service
2626
poetry run datamodel-codegen --input components/renku_data_services/project/api.spec.yaml --output components/renku_data_services/project/apispec.py --base-class renku_data_services.project.apispec_base.BaseAPISpec $(codegen_params)
2727
components/renku_data_services/session/apispec.py: components/renku_data_services/session/api.spec.yaml
2828
poetry run datamodel-codegen --input components/renku_data_services/session/api.spec.yaml --output components/renku_data_services/session/apispec.py --base-class renku_data_services.session.apispec_base.BaseAPISpec $(codegen_params)
29-
components/renku_data_services/user_preferences/apispec.py: components/renku_data_services/user_preferences/api.spec.yaml
30-
poetry run datamodel-codegen --input components/renku_data_services/user_preferences/api.spec.yaml --output components/renku_data_services/user_preferences/apispec.py --base-class renku_data_services.user_preferences.apispec_base.BaseAPISpec $(codegen_params)
3129
components/renku_data_services/namespace/apispec.py: components/renku_data_services/namespace/api.spec.yaml
3230
poetry run datamodel-codegen --input components/renku_data_services/namespace/api.spec.yaml --output components/renku_data_services/namespace/apispec.py --base-class renku_data_services.namespace.apispec_base.BaseAPISpec $(codegen_params)
3331
components/renku_data_services/secrets/apispec.py: components/renku_data_services/secrets/api.spec.yaml
@@ -43,7 +41,7 @@ components/renku_data_services/platform/apispec.py: components/renku_data_servic
4341

4442
##@ Apispec
4543

46-
schemas: components/renku_data_services/crc/apispec.py components/renku_data_services/storage/apispec.py components/renku_data_services/users/apispec.py components/renku_data_services/project/apispec.py components/renku_data_services/user_preferences/apispec.py components/renku_data_services/namespace/apispec.py components/renku_data_services/secrets/apispec.py components/renku_data_services/connected_services/apispec.py components/renku_data_services/repositories/apispec.py components/renku_data_services/notebooks/apispec.py components/renku_data_services/platform/apispec.py ## Generate pydantic classes from apispec yaml files
44+
schemas: components/renku_data_services/crc/apispec.py components/renku_data_services/storage/apispec.py components/renku_data_services/users/apispec.py components/renku_data_services/project/apispec.py components/renku_data_services/namespace/apispec.py components/renku_data_services/secrets/apispec.py components/renku_data_services/connected_services/apispec.py components/renku_data_services/repositories/apispec.py components/renku_data_services/notebooks/apispec.py components/renku_data_services/platform/apispec.py ## Generate pydantic classes from apispec yaml files
4745
@echo "generated classes based on ApiSpec"
4846

4947
##@ Avro schemas
@@ -72,8 +70,6 @@ style_checks: ## Run linting and style checks
7270
@$(call test_apispec_up_to_date,"crc")
7371
@echo "checking storage apispec is up to date"
7472
@$(call test_apispec_up_to_date,"storage")
75-
@echo "checking user preferences apispec is up to date"
76-
@$(call test_apispec_up_to_date,"user_preferences")
7773
@echo "checking users apispec is up to date"
7874
@$(call test_apispec_up_to_date,"users")
7975
@echo "checking project apispec is up to date"

bases/renku_data_services/data_api/app.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
from renku_data_services.repositories.blueprints import RepositoriesBP
2222
from renku_data_services.session.blueprints import EnvironmentsBP, SessionLaunchersBP
2323
from renku_data_services.storage.blueprints import StorageBP, StorageSchemaBP, StoragesV2BP
24-
from renku_data_services.user_preferences.blueprints import UserPreferencesBP
25-
from renku_data_services.users.blueprints import KCUsersBP, UserSecretsBP
24+
from renku_data_services.users.blueprints import KCUsersBP, UserPreferencesBP, UserSecretsBP
2625

2726

2827
def register_all_handlers(app: Sanic, config: Config) -> Sanic:

components/renku_data_services/app_config/config.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import renku_data_services.platform
2929
import renku_data_services.repositories
3030
import renku_data_services.storage
31-
import renku_data_services.user_preferences
3231
import renku_data_services.users
3332
from renku_data_services import errors
3433
from renku_data_services.authn.dummy import DummyAuthenticator, DummyUserStore
@@ -59,8 +58,8 @@
5958
from renku_data_services.secrets.db import UserSecretsRepo
6059
from renku_data_services.session.db import SessionRepository
6160
from renku_data_services.storage.db import StorageRepository, StorageV2Repository
62-
from renku_data_services.user_preferences.config import UserPreferencesConfig
63-
from renku_data_services.user_preferences.db import UserPreferencesRepository
61+
from renku_data_services.users.config import UserPreferencesConfig
62+
from renku_data_services.users.db import UserPreferencesRepository
6463
from renku_data_services.users.db import UserRepo as KcUserRepo
6564
from renku_data_services.users.dummy_kc_api import DummyKeycloakAPI
6665
from renku_data_services.users.kc_api import IKeycloakAPI, KeycloakAPI
@@ -185,10 +184,6 @@ def __post_init__(self) -> None:
185184
with open(spec_file) as f:
186185
storage_spec = safe_load(f)
187186

188-
spec_file = Path(renku_data_services.user_preferences.__file__).resolve().parent / "api.spec.yaml"
189-
with open(spec_file) as f:
190-
user_preferences_spec = safe_load(f)
191-
192187
spec_file = Path(renku_data_services.users.__file__).resolve().parent / "api.spec.yaml"
193188
with open(spec_file) as f:
194189
users = safe_load(f)
@@ -220,7 +215,6 @@ def __post_init__(self) -> None:
220215
self.spec = merge_api_specs(
221216
crc_spec,
222217
storage_spec,
223-
user_preferences_spec,
224218
users,
225219
projects,
226220
groups,

components/renku_data_services/migrations/env.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
from renku_data_services.secrets.orm import BaseORM as secrets
1414
from renku_data_services.session.orm import BaseORM as sessions
1515
from renku_data_services.storage.orm import BaseORM as storage
16-
from renku_data_services.user_preferences.orm import BaseORM as user_preferences
1716
from renku_data_services.users.orm import BaseORM as users
1817

1918
# Interpret the config file for Python logging.
@@ -31,7 +30,6 @@
3130
secrets.metadata,
3231
sessions.metadata,
3332
storage.metadata,
34-
user_preferences.metadata,
3533
users.metadata,
3634
]
3735

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
"""move user preferences to user schema
2+
3+
Revision ID: 17eea03f938e
4+
Revises: dcc1c1ee662f
5+
Create Date: 2024-07-26 14:37:29.556827
6+
7+
"""
8+
9+
import sqlalchemy as sa
10+
from alembic import op
11+
from sqlalchemy.dialects import postgresql
12+
13+
# revision identifiers, used by Alembic.
14+
revision = "17eea03f938e"
15+
down_revision = "dcc1c1ee662f"
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade() -> None:
21+
# ### commands auto generated by Alembic - please adjust! ###
22+
op.create_table(
23+
"user_preferences",
24+
sa.Column("id", sa.Integer(), nullable=False),
25+
sa.Column("user_id", sa.String(), nullable=False),
26+
sa.Column(
27+
"pinned_projects",
28+
sa.JSON().with_variant(postgresql.JSONB(astext_type=sa.Text()), "postgresql"),
29+
nullable=False,
30+
),
31+
sa.PrimaryKeyConstraint("id"),
32+
sa.UniqueConstraint("user_id"),
33+
schema="users",
34+
)
35+
# ### end Alembic commands ###
36+
conn = op.get_bind()
37+
inspector = sa.inspect(conn)
38+
if "user_preferences" in inspector.get_schema_names() and "user_preferences" in inspector.get_table_names(
39+
schema="user_preferences"
40+
):
41+
# migrate old user preferences
42+
statement = sa.sql.text(
43+
"""
44+
INSERT INTO users.user_preferences
45+
SELECT *
46+
FROM user_preferences.user_preferences
47+
"""
48+
)
49+
conn.execute(statement)
50+
51+
op.drop_table("user_preferences", schema="user_preferences")
52+
op.execute("DROP SCHEMA user_preferences")
53+
54+
55+
def downgrade() -> None:
56+
op.execute("CREATE SCHEMA user_preferences")
57+
op.create_table(
58+
"user_preferences",
59+
sa.Column("id", sa.Integer(), nullable=False),
60+
sa.Column("user_id", sa.String(), nullable=False),
61+
sa.Column(
62+
"pinned_projects",
63+
sa.JSON().with_variant(postgresql.JSONB(astext_type=sa.Text()), "postgresql"),
64+
nullable=False,
65+
),
66+
sa.PrimaryKeyConstraint("id"),
67+
sa.UniqueConstraint("user_id"),
68+
schema="user_preferences",
69+
)
70+
conn = op.get_bind()
71+
statement = sa.sql.text(
72+
"""
73+
INSERT INTO user_preferences.user_preferences
74+
SELECT *
75+
FROM users.user_preferences
76+
"""
77+
)
78+
conn.execute(statement)
79+
80+
# ### commands auto generated by Alembic - please adjust! ###
81+
op.drop_table("user_preferences", schema="users")
82+
# ### end Alembic commands ###

components/renku_data_services/migrations/versions/6eccd7d4e3ed_add_user_preferences.py

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88

99
from collections.abc import Sequence
1010

11-
import sqlalchemy as sa
1211
from alembic import op
13-
from sqlalchemy.dialects import postgresql
1412

1513
# revision identifiers, used by Alembic.
1614
revision = "6eccd7d4e3ed"
@@ -20,21 +18,10 @@
2018

2119

2220
def upgrade() -> None:
23-
# ### commands auto generated by Alembic - please adjust! ###
24-
op.create_table(
25-
"user_preferences",
26-
sa.Column("id", sa.Integer(), nullable=False),
27-
sa.Column("user_id", sa.String(), nullable=False),
28-
sa.Column(
29-
"pinned_projects",
30-
sa.JSON().with_variant(postgresql.JSONB(astext_type=sa.Text()), "postgresql"),
31-
nullable=False,
32-
),
33-
sa.PrimaryKeyConstraint("id"),
34-
sa.UniqueConstraint("user_id"),
35-
schema="user_preferences",
36-
)
37-
# ### end Alembic commands ###
21+
# this migration in the past created a user_preferences table in the user_preferences schema
22+
# this table is now in the `users` schema, so we don't want to create it here (it's done in a new migration)
23+
# If this migration already ran in the past, it doesn't matter
24+
pass
3825

3926

4027
def downgrade() -> None:

components/renku_data_services/user_preferences/__init__.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

components/renku_data_services/user_preferences/api.spec.yaml

Lines changed: 0 additions & 153 deletions
This file was deleted.

0 commit comments

Comments
 (0)