Unverified Commit 8d13d706 authored by Marius van den Beek's avatar Marius van den Beek Committed by GitHub
Browse files

Merge pull request #18685 from mvdbeek/file_source_and_object_store_instance_api_fixes

[24.1] File source and object store instance api fixes
parents 97e7825a d23186b6
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -12848,7 +12848,10 @@ export interface components {
             * @enum {string}
             */
            type: "aws_s3" | "azure_blob" | "boto3" | "disk" | "generic_s3";
            /** Uuid */
            /**
             * Uuid
             * Format: uuid4
             */
            uuid: string;
            /** Variables */
            variables: {
@@ -12922,7 +12925,10 @@ export interface components {
            type: "ftp" | "posix" | "s3fs" | "azure";
            /** Uri Root */
            uri_root: string;
            /** Uuid */
            /**
             * Uuid
             * Format: uuid4
             */
            uuid: string;
            /** Variables */
            variables: {
+5 −0
Original line number Diff line number Diff line
@@ -209,6 +209,11 @@ class UserCannotRunAsException(MessageException):
    err_code = error_codes_by_name["USER_CANNOT_RUN_AS"]


class UserRequiredException(MessageException):
    status_code = 403
    err_code = error_codes_by_name["USER_REQUIRED"]


class AdminRequiredException(MessageException):
    status_code = 403
    err_code = error_codes_by_name["ADMIN_REQUIRED"]
+5 −0
Original line number Diff line number Diff line
@@ -144,6 +144,11 @@
        "code": 403007,
        "message": "Action requires account activation."
    },
    {
        "name": "USER_REQUIRED",
        "code": 403008,
        "message": "Action requires user authentication."
    },
    {
        "name": "USER_OBJECT_NOT_FOUND",
        "code": 404001,
+10 −9
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ from uuid import uuid4

from pydantic import (
    BaseModel,
    UUID4,
    ValidationError,
)

@@ -87,7 +88,7 @@ USER_FILE_SOURCES_SCHEME = "gxuserfiles"


class UserFileSourceModel(BaseModel):
    uuid: str
    uuid: UUID4
    uri_root: str
    name: str
    description: Optional[str]
@@ -142,16 +143,16 @@ class FileSourceInstancesManager:
        stores = self._sa_session.query(UserFileSource).filter(UserFileSource.user_id == trans.user.id).all()
        return [self._to_model(trans, s) for s in stores]

    def show(self, trans: ProvidesUserContext, uuid: str) -> UserFileSourceModel:
    def show(self, trans: ProvidesUserContext, uuid: UUID4) -> UserFileSourceModel:
        user_file_source = self._get(trans, uuid)
        return self._to_model(trans, user_file_source)

    def purge_instance(self, trans: ProvidesUserContext, uuid: str) -> None:
    def purge_instance(self, trans: ProvidesUserContext, uuid: UUID4) -> None:
        persisted_file_source = self._get(trans, uuid)
        purge_template_instance(trans, persisted_file_source, self._app_config)

    def modify_instance(
        self, trans: ProvidesUserContext, id: str, payload: ModifyInstancePayload
        self, trans: ProvidesUserContext, id: UUID4, payload: ModifyInstancePayload
    ) -> UserFileSourceModel:
        if isinstance(payload, UpgradeInstancePayload):
            return self._upgrade_instance(trans, id, payload)
@@ -162,7 +163,7 @@ class FileSourceInstancesManager:
            return self._update_instance(trans, id, payload)

    def _upgrade_instance(
        self, trans: ProvidesUserContext, id: str, payload: UpgradeInstancePayload
        self, trans: ProvidesUserContext, id: UUID4, payload: UpgradeInstancePayload
    ) -> UserFileSourceModel:
        persisted_file_source = self._get(trans, id)
        template = self._get_template(persisted_file_source, payload.template_version)
@@ -181,7 +182,7 @@ class FileSourceInstancesManager:
        return self._to_model(trans, persisted_file_source)

    def _update_instance(
        self, trans: ProvidesUserContext, id: str, payload: UpdateInstancePayload
        self, trans: ProvidesUserContext, id: UUID4, payload: UpdateInstancePayload
    ) -> UserFileSourceModel:
        persisted_file_source = self._get(trans, id)
        template = self._get_template(persisted_file_source)
@@ -189,7 +190,7 @@ class FileSourceInstancesManager:
        return self._to_model(trans, persisted_file_source)

    def _update_instance_secret(
        self, trans: ProvidesUserContext, id: str, payload: UpdateInstanceSecretPayload
        self, trans: ProvidesUserContext, id: UUID4, payload: UpdateInstanceSecretPayload
    ) -> UserFileSourceModel:
        persisted_file_source = self._get(trans, id)
        template = self._get_template(persisted_file_source)
@@ -300,10 +301,10 @@ class FileSourceInstancesManager:
            exception = e
        return file_source, connection_exception_to_status("file source", exception)

    def _index_filter(self, uuid: str):
    def _index_filter(self, uuid: UUID4):
        return UserFileSource.__table__.c.uuid == uuid

    def _get(self, trans: ProvidesUserContext, uuid: str) -> UserFileSource:
    def _get(self, trans: ProvidesUserContext, uuid: UUID4) -> UserFileSource:
        filter = self._index_filter(uuid)
        user_file_source = self._sa_session.query(UserFileSource).filter(filter).one_or_none()
        if user_file_source is None:
+11 −9
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@ from typing import (
)
from uuid import uuid4

from pydantic import UUID4

from galaxy.exceptions import (
    ItemOwnershipException,
    RequestParameterInvalidException,
@@ -73,7 +75,7 @@ log = logging.getLogger(__name__)


class UserConcreteObjectStoreModel(ConcreteObjectStoreModel):
    uuid: str
    uuid: UUID4
    type: ObjectStoreTemplateType
    template_id: str
    template_version: int
@@ -106,7 +108,7 @@ class ObjectStoreInstancesManager:
        return self._catalog.summaries

    def modify_instance(
        self, trans: ProvidesUserContext, id: str, payload: ModifyInstancePayload
        self, trans: ProvidesUserContext, id: UUID4, payload: ModifyInstancePayload
    ) -> UserConcreteObjectStoreModel:
        if isinstance(payload, UpgradeInstancePayload):
            return self._upgrade_instance(trans, id, payload)
@@ -116,12 +118,12 @@ class ObjectStoreInstancesManager:
            assert isinstance(payload, UpdateInstancePayload)
            return self._update_instance(trans, id, payload)

    def purge_instance(self, trans: ProvidesUserContext, id: str) -> None:
    def purge_instance(self, trans: ProvidesUserContext, id: UUID4) -> None:
        persisted_object_store = self._get(trans, id)
        purge_template_instance(trans, persisted_object_store, self._app_config)

    def _upgrade_instance(
        self, trans: ProvidesUserContext, id: str, payload: UpgradeInstancePayload
        self, trans: ProvidesUserContext, id: UUID4, payload: UpgradeInstancePayload
    ) -> UserConcreteObjectStoreModel:
        persisted_object_store = self._get(trans, id)
        template = self._get_template(persisted_object_store, payload.template_version)
@@ -140,7 +142,7 @@ class ObjectStoreInstancesManager:
        return self._to_model(trans, persisted_object_store)

    def _update_instance(
        self, trans: ProvidesUserContext, id: str, payload: UpdateInstancePayload
        self, trans: ProvidesUserContext, id: UUID4, payload: UpdateInstancePayload
    ) -> UserConcreteObjectStoreModel:
        persisted_object_store = self._get(trans, id)
        template = self._get_template(persisted_object_store)
@@ -148,7 +150,7 @@ class ObjectStoreInstancesManager:
        return self._to_model(trans, persisted_object_store)

    def _update_instance_secret(
        self, trans: ProvidesUserContext, id: str, payload: UpdateInstanceSecretPayload
        self, trans: ProvidesUserContext, id: UUID4, payload: UpdateInstanceSecretPayload
    ) -> UserConcreteObjectStoreModel:
        persisted_object_store = self._get(trans, id)
        template = self._get_template(persisted_object_store)
@@ -200,14 +202,14 @@ class ObjectStoreInstancesManager:
        stores = self._sa_session.query(UserObjectStore).filter(UserObjectStore.user_id == trans.user.id).all()
        return [self._to_model(trans, s) for s in stores]

    def show(self, trans: ProvidesUserContext, id: str) -> UserConcreteObjectStoreModel:
    def show(self, trans: ProvidesUserContext, id: UUID4) -> UserConcreteObjectStoreModel:
        user_object_store = self._get(trans, id)
        return self._to_model(trans, user_object_store)

    def _save(self, persisted_object_store: UserObjectStore) -> None:
        save_template_instance(self._sa_session, persisted_object_store)

    def _get(self, trans: ProvidesUserContext, id: str) -> UserObjectStore:
    def _get(self, trans: ProvidesUserContext, id: UUID4) -> UserObjectStore:
        filter = self._index_filter(id)
        user_object_store = self._sa_session.query(UserObjectStore).filter(filter).one_or_none()
        if user_object_store is None:
@@ -274,7 +276,7 @@ class ObjectStoreInstancesManager:
            exception = e
        return object_store, connection_exception_to_status("storage location", exception)

    def _index_filter(self, uuid: str):
    def _index_filter(self, uuid: UUID4):
        return UserObjectStore.__table__.c.uuid == uuid

    def _get_template(
Loading