diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewColumnDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewColumnDto.java index 9d094636871762ec8c75f25b3f937e40cd11f3f5..e6d242c28658c7f11badb41cc3debea25b46e114 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewColumnDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/ViewColumnDto.java @@ -2,9 +2,7 @@ package at.tuwien.api.database; import at.tuwien.api.database.table.columns.ColumnTypeDto; import at.tuwien.api.database.table.columns.concepts.ConceptBriefDto; -import at.tuwien.api.database.table.columns.concepts.ConceptDto; import at.tuwien.api.database.table.columns.concepts.UnitBriefDto; -import at.tuwien.api.database.table.columns.concepts.UnitDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -31,7 +29,7 @@ public class ViewColumnDto { @NotNull @Schema(example = "0") - @JsonProperty("ordinal_position") + @JsonProperty("ordinal_position") private Integer ordinalPosition; @NotBlank diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java index 8ce71a5a6eef0fb17831eafb16a5aa80dbc6c594..2f31d17ed28000a86c0c86cee7092e4e1bac4123 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java @@ -2,12 +2,10 @@ package at.tuwien.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; - import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import lombok.*; import lombok.extern.jackson.Jacksonized; -import org.springframework.data.annotation.Id; @Data diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java index de2500c9add65aad281102e92afdbd5da5cd24e7..f3ef2a96bcf8aead49fca2b5ade722eb936cb72d 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java @@ -40,18 +40,15 @@ import java.util.List; public class DatabaseEndpoint { private final UserService userService; - private final AccessService accessService; private final MetadataMapper databaseMapper; private final StorageService storageService; private final DatabaseService databaseService; private final ContainerService containerService; @Autowired - public DatabaseEndpoint(UserService userService, AccessService accessService, MetadataMapper databaseMapper, - StorageService storageService, DatabaseService databaseService, - ContainerService containerService) { + public DatabaseEndpoint(UserService userService, MetadataMapper databaseMapper, StorageService storageService, + DatabaseService databaseService, ContainerService containerService) { this.userService = userService; - this.accessService = accessService; this.databaseMapper = databaseMapper; this.storageService = storageService; this.databaseService = databaseService; @@ -440,6 +437,29 @@ public class DatabaseEndpoint { .body(dto); } + @GetMapping("/{databaseId}/image") + @Transactional + @Observed(name = "dbrepo_database_image") + @Operation(summary = "Get database preview image", + description = "Get the database preview image", + security = {@SecurityRequirement(name = "bearerAuth"), @SecurityRequirement(name = "basicAuth")}) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", + description = "Get the image was successful"), + @ApiResponse(responseCode = "404", + description = "Database could not be found", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), + }) + public ResponseEntity<byte[]> getImage(@NotNull @PathVariable("databaseId") Long databaseId) + throws DatabaseNotFoundException { + log.debug("endpoint get database image, databaseId={}", databaseId); + final Database database = databaseService.findById(databaseId); + return ResponseEntity.ok() + .body(database.getImage()); + } + @GetMapping("/{databaseId}") @Transactional(readOnly = true) @Observed(name = "dbrepo_database_find") diff --git a/lib/python/dbrepo/api/dto.py b/lib/python/dbrepo/api/dto.py index 4de986e87080d207dbd68f8293f31be4004753d6..2369141958150322857ffab6d0be1f42602fb1fe 100644 --- a/lib/python/dbrepo/api/dto.py +++ b/lib/python/dbrepo/api/dto.py @@ -4,7 +4,7 @@ from dataclasses import field from enum import Enum import datetime from typing import List, Optional, Any, Annotated -from pydantic import BaseModel, ConfigDict, PlainSerializer, Field +from pydantic import BaseModel, PlainSerializer, Field Timestamp = Annotated[ datetime.datetime, PlainSerializer(lambda v: v.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z', return_type=str) @@ -392,7 +392,7 @@ class Language(str, Enum): class DatabaseAccess(BaseModel): type: AccessType - user: User + user: UserBrief created: Timestamp @@ -519,7 +519,7 @@ class CreateTableConstraints(BaseModel): foreign_keys: List[CreateForeignKey] = field(default_factory=list) -class IdentifierCreator(BaseModel): +class Creator(BaseModel): id: int creator_name: str firstname: Optional[str] = None @@ -593,12 +593,11 @@ class Identifier(BaseModel): creator: UserBrief status: IdentifierStatusType created: Timestamp - last_modified: Timestamp publication_year: int publisher: str - creators: List[IdentifierCreator] - titles: List[IdentifierTitle] - descriptions: List[IdentifierDescription] + creators: List[Creator] + titles: List[IdentifierTitle] = field(default_factory=list) + descriptions: List[IdentifierDescription] = field(default_factory=list) funders: Optional[List[IdentifierFunder]] = field(default_factory=list) doi: Optional[str] = None language: Optional[str] = None @@ -616,6 +615,20 @@ class Identifier(BaseModel): publication_month: Optional[int] = None +class IdentifierBrief(BaseModel): + id: int + database_id: int + type: IdentifierType + status: IdentifierStatusType + publication_year: int + publisher: str + titles: List[IdentifierTitle] + doi: Optional[str] = None + query_id: Optional[int] = None + table_id: Optional[int] = None + view_id: Optional[int] = None + + class View(BaseModel): id: int database_id: int @@ -624,12 +637,13 @@ class View(BaseModel): query_hash: str created: Timestamp creator: User + database: DatabaseBrief internal_name: str is_public: bool initial_view: bool last_modified: Timestamp columns: List[ViewColumn] - identifiers: List[Identifier] = field(default_factory=list) + identifiers: List[IdentifierBrief] = field(default_factory=list) class CreateView(BaseModel): @@ -648,15 +662,13 @@ class ViewBrief(BaseModel): id: int database_id: int name: str - identifier: List[Identifier] query: str query_hash: str created: Timestamp - creator: User internal_name: str is_public: bool - initial_view: bool - last_modified: Timestamp + initial_view: Optional[bool] = None + identifiers: List[IdentifierBrief] = field(default_factory=list) class Concept(BaseModel): @@ -667,6 +679,13 @@ class Concept(BaseModel): description: Optional[str] = None +class ConceptBrief(BaseModel): + id: int + uri: str + name: Optional[str] = None + description: Optional[str] = None + + class DatatypeAnalysis(BaseModel): separator: str columns: dict[str, ColumnType] @@ -703,6 +722,13 @@ class Unit(BaseModel): description: Optional[str] = None +class UnitBrief(BaseModel): + id: int + uri: str + name: Optional[str] = None + description: Optional[str] = None + + class ExecuteQuery(BaseModel): statement: str @@ -874,8 +900,8 @@ class DataType(BaseModel): display_name: str value: str documentation: str - is_quoted: bool - is_buildable: bool + is_quoted: bool + is_buildable: bool size_min: Optional[int] = None size_max: Optional[int] = None size_default: Optional[int] = None @@ -884,8 +910,8 @@ class DataType(BaseModel): d_max: Optional[int] = None d_default: Optional[int] = None d_required: Optional[bool] = None - data_hint: Optional[str] = None - type_hint: Optional[str] = None + data_hint: Optional[str] = None + type_hint: Optional[str] = None class Column(BaseModel): @@ -919,20 +945,25 @@ class Column(BaseModel): class ViewColumn(BaseModel): id: int - name: str database_id: int + ordinal_position: int + name: str internal_name: str + auto_generated: bool column_type: ColumnType is_public: bool is_null_allowed: bool + size: int + d: int alias: Optional[str] = None size: Optional[int] = None d: Optional[int] = None mean: Optional[float] = None median: Optional[float] = None - concept: Optional[Concept] = None - unit: Optional[Unit] = None + concept: Optional[ConceptBrief] = None + unit: Optional[UnitBrief] = None index_length: Optional[int] = None + description: Optional[str] = None length: Optional[int] = None @@ -940,18 +971,16 @@ class Table(BaseModel): id: int database_id: int name: str - creator: User - owner: User + creator: UserBrief created: Timestamp columns: List[Column] constraints: Constraints internal_name: str is_versioned: bool - created_by: str queue_name: str routing_key: str is_public: bool - identifiers: Optional[List[Identifier]] = field(default_factory=list) + identifiers: Optional[List[IdentifierBrief]] = field(default_factory=list) description: Optional[str] = None queue_type: Optional[str] = None num_rows: Optional[int] = None @@ -974,19 +1003,20 @@ class ColumnMinimal(BaseModel): class Database(BaseModel): id: int name: str - creator: User - owner: User - contact: User + creator: UserBrief + owner: UserBrief + contact: UserBrief created: Timestamp exchange_name: str internal_name: str is_public: bool container: Container - identifiers: Optional[List[Identifier]] = field(default_factory=list) - subsets: Optional[List[Identifier]] = field(default_factory=list) + identifiers: Optional[List[IdentifierBrief]] = field(default_factory=list) + subsets: Optional[List[IdentifierBrief]] = field(default_factory=list) description: Optional[str] = None - tables: Optional[List[Table]] = field(default_factory=list) - views: Optional[List[View]] = field(default_factory=list) + tables: Optional[List[TableBrief]] = field(default_factory=list) + views: Optional[List[ViewBrief]] = field(default_factory=list) + container: Optional[ContainerBrief] = None image: Optional[str] = None accesses: Optional[List[DatabaseAccess]] = field(default_factory=list) exchange_type: Optional[str] = None @@ -998,7 +1028,7 @@ class DatabaseBrief(BaseModel): internal_name: str description: Optional[str] = None is_public: bool - identifiers: Optional[List[Identifier]] = field(default_factory=list) + identifiers: Optional[List[IdentifierBrief]] = field(default_factory=list) contact: UserBrief owner: UserBrief created: Timestamp diff --git a/lib/python/tests/test_unit_analyse.py b/lib/python/tests/test_unit_analyse.py index a26d7aa8441fd716640ca1d71c65a26f45f154ff..645a86fc14db9d0208783308ff1ee8ef3a570c22 100644 --- a/lib/python/tests/test_unit_analyse.py +++ b/lib/python/tests/test_unit_analyse.py @@ -1,9 +1,8 @@ import unittest + import requests_mock -import dataclasses from dbrepo.RestClient import RestClient - from dbrepo.api.dto import KeyAnalysis diff --git a/lib/python/tests/test_unit_container.py b/lib/python/tests/test_unit_container.py index 0e1d93faa0e9b1c598afcede5ad71c7e08ef9767..0813180f382619c1daa7ba0866bbf35e1b4bb9de 100644 --- a/lib/python/tests/test_unit_container.py +++ b/lib/python/tests/test_unit_container.py @@ -1,7 +1,7 @@ +import datetime import unittest import requests_mock -import datetime from dbrepo.RestClient import RestClient from dbrepo.api.dto import Container, Image, ContainerBrief, ImageBrief, DataType diff --git a/lib/python/tests/test_unit_database.py b/lib/python/tests/test_unit_database.py index f72c80c93c0497eb0d2d6f68e2ab8029cccb2aec..e8d54e2692530e60c2277a2f73326e4a000d4432 100644 --- a/lib/python/tests/test_unit_database.py +++ b/lib/python/tests/test_unit_database.py @@ -1,13 +1,12 @@ +import datetime import unittest import requests_mock -import datetime - from pydantic_core import ValidationError from dbrepo.RestClient import RestClient from dbrepo.api.dto import Database, User, Container, Image, UserAttributes, DatabaseAccess, AccessType, DatabaseBrief, \ - UserBrief, DataType + UserBrief, DataType, ContainerBrief, ImageBrief from dbrepo.api.exceptions import ResponseCodeError, NotExistsError, ForbiddenError, MalformedError, AuthenticationError @@ -43,17 +42,14 @@ class DatabaseUnitTest(unittest.TestCase): exp = Database( id=1, name='test', - creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), - owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), - contact=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), + creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + contact=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), exchange_name='dbrepo', internal_name='test_abcd', is_public=True, - container=Container( + container=ContainerBrief( id=1, name='MariaDB Galera 11.1.3', internal_name='mariadb', @@ -62,7 +58,7 @@ class DatabaseUnitTest(unittest.TestCase): sidecar_host='data-db-sidecar', sidecar_port=3305, created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), - image=Image( + image=ImageBrief( id=1, registry='docker.io', name='mariadb', @@ -115,17 +111,14 @@ class DatabaseUnitTest(unittest.TestCase): exp = Database( id=1, name='test', - creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), - owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), - contact=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), + creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + contact=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), exchange_name='dbrepo', internal_name='test_abcd', is_public=True, - container=Container( + container=ContainerBrief( id=1, name='MariaDB Galera 11.1.3', internal_name='mariadb', @@ -134,7 +127,7 @@ class DatabaseUnitTest(unittest.TestCase): sidecar_host='data-db-sidecar', sidecar_port=3305, created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), - image=Image( + image=ImageBrief( id=1, registry='docker.io', name='mariadb', @@ -190,17 +183,14 @@ class DatabaseUnitTest(unittest.TestCase): exp = Database( id=1, name='test', - creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), - owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), - contact=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), + creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + contact=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), exchange_name='dbrepo', internal_name='test_abcd', is_public=True, - container=Container( + container=ContainerBrief( id=1, name='MariaDB Galera 11.1.3', internal_name='mariadb', @@ -209,7 +199,7 @@ class DatabaseUnitTest(unittest.TestCase): sidecar_host='data-db-sidecar', sidecar_port=3305, created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), - image=Image( + image=ImageBrief( id=1, registry='docker.io', name='mariadb', @@ -265,17 +255,14 @@ class DatabaseUnitTest(unittest.TestCase): exp = Database( id=1, name='test', - creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), - owner=User(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other', - attributes=UserAttributes(theme='light')), - contact=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), + creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + owner=UserBrief(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other'), + contact=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), exchange_name='dbrepo', internal_name='test_abcd', is_public=True, - container=Container( + container=ContainerBrief( id=1, name='MariaDB Galera 11.1.3', internal_name='mariadb', @@ -284,7 +271,7 @@ class DatabaseUnitTest(unittest.TestCase): sidecar_host='data-db-sidecar', sidecar_port=3305, created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), - image=Image( + image=ImageBrief( id=1, registry='docker.io', name='mariadb', @@ -342,8 +329,7 @@ class DatabaseUnitTest(unittest.TestCase): def test_get_database_access_succeeds(self): exp = DatabaseAccess(type=AccessType.READ, created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), - user=User(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other', - attributes=UserAttributes(theme='light'))) + user=UserBrief(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other')) with requests_mock.Mocker() as mock: # mock mock.get('/api/database/1/access', json=exp.model_dump()) @@ -374,8 +360,7 @@ class DatabaseUnitTest(unittest.TestCase): def test_create_database_access_succeeds(self): exp = DatabaseAccess(type=AccessType.READ, created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), - user=User(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other', - attributes=UserAttributes(theme='light'))) + user=UserBrief(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other')) with requests_mock.Mocker() as mock: # mock mock.post('/api/database/1/access/abdbf897-e599-4e5a-a3f0-7529884ea011', json=exp.model_dump(), @@ -436,8 +421,7 @@ class DatabaseUnitTest(unittest.TestCase): def test_update_database_access_succeeds(self): exp = DatabaseAccess(type=AccessType.READ, created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), - user=User(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other', - attributes=UserAttributes(theme='light'))) + user=UserBrief(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other')) with requests_mock.Mocker() as mock: # mock mock.put('/api/database/1/access/abdbf897-e599-4e5a-a3f0-7529884ea011', json=exp.model_dump(), diff --git a/lib/python/tests/test_unit_identifier.py b/lib/python/tests/test_unit_identifier.py index 2832f0e799afa66558f7aaf83f38252b81f484e3..ae8b3fd58f24501b120feee6a0425ca99d9f56ed 100644 --- a/lib/python/tests/test_unit_identifier.py +++ b/lib/python/tests/test_unit_identifier.py @@ -1,12 +1,11 @@ +import datetime import unittest import requests_mock -import datetime from dbrepo.RestClient import RestClient - from dbrepo.api.dto import Identifier, IdentifierType, CreateIdentifierTitle, CreateIdentifierCreator, \ - IdentifierCreator, IdentifierTitle, IdentifierDescription, CreateIdentifierDescription, Language, \ + Creator, IdentifierTitle, IdentifierDescription, CreateIdentifierDescription, Language, \ CreateIdentifierFunder, CreateRelatedIdentifier, RelatedIdentifierRelation, RelatedIdentifierType, IdentifierFunder, \ RelatedIdentifier, UserBrief, IdentifierStatusType from dbrepo.api.exceptions import MalformedError, ForbiddenError, NotExistsError, AuthenticationError @@ -31,7 +30,7 @@ class IdentifierUnitTest(unittest.TestCase): related_identifiers=[ RelatedIdentifier(id=7, value='10.12345/abc', relation=RelatedIdentifierRelation.CITES, type=RelatedIdentifierType.DOI)], - creators=[IdentifierCreator(id=5, creator_name='Carberry, Josiah')], + creators=[Creator(id=5, creator_name='Carberry, Josiah')], status=IdentifierStatusType.PUBLISHED, creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise')) # mock @@ -131,7 +130,7 @@ class IdentifierUnitTest(unittest.TestCase): related_identifiers=[RelatedIdentifier(id=7, value='10.12345/abc', relation=RelatedIdentifierRelation.CITES, type=RelatedIdentifierType.DOI)], - creators=[IdentifierCreator(id=5, creator_name='Carberry, Josiah')], + creators=[Creator(id=5, creator_name='Carberry, Josiah')], status=IdentifierStatusType.PUBLISHED, creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'))] # mock diff --git a/lib/python/tests/test_unit_license.py b/lib/python/tests/test_unit_license.py index 2efb613c42f66dbac6908cfbc75e1054a16c1268..0eadc2a7d2547ebcc46e9a3af4a3ac5fb07df7f2 100644 --- a/lib/python/tests/test_unit_license.py +++ b/lib/python/tests/test_unit_license.py @@ -3,7 +3,6 @@ import unittest import requests_mock from dbrepo.RestClient import RestClient - from dbrepo.api.dto import License diff --git a/lib/python/tests/test_unit_query.py b/lib/python/tests/test_unit_query.py index e1b326fa576b86519e6c059abd73f66dacbda2e5..286f2cd7855fe7826a78ee1c8829e0fe9bac8176 100644 --- a/lib/python/tests/test_unit_query.py +++ b/lib/python/tests/test_unit_query.py @@ -1,14 +1,12 @@ +import datetime import unittest import requests_mock -import datetime - -from dbrepo.RestClient import RestClient from pandas import DataFrame +from dbrepo.RestClient import RestClient from dbrepo.api.dto import Result, Query, User, UserAttributes, QueryType -from dbrepo.api.exceptions import MalformedError, NotExistsError, ForbiddenError, QueryStoreError, \ - MetadataConsistencyError, AuthenticationError +from dbrepo.api.exceptions import MalformedError, NotExistsError, ForbiddenError class QueryUnitTest(unittest.TestCase): diff --git a/lib/python/tests/test_unit_table.py b/lib/python/tests/test_unit_table.py index 0be3a4a9fbaa47c129e7a937230d348e37a8eb17..ef2f9ce1633bc05942a70faf23c772f20df93bce 100644 --- a/lib/python/tests/test_unit_table.py +++ b/lib/python/tests/test_unit_table.py @@ -1,5 +1,4 @@ import unittest -from json import dumps import requests_mock import datetime @@ -21,10 +20,8 @@ class TableUnitTest(unittest.TestCase): description="Test Table", database_id=1, internal_name="test", - creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), - owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), + creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), is_versioned=True, created_by='8638c043-5145-4be8-a3e4-4b79991b0a16', @@ -147,10 +144,8 @@ class TableUnitTest(unittest.TestCase): description="Test Table", database_id=1, internal_name="test", - creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), - owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', - attributes=UserAttributes(theme='light')), + creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), + owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), is_versioned=True, created_by='8638c043-5145-4be8-a3e4-4b79991b0a16', diff --git a/lib/python/tests/test_unit_view.py b/lib/python/tests/test_unit_view.py index 19a88be85a10dceef0eb8129dd65be733e3025e3..7c5e1c03056c33cf6f82d2e1058b748efbc0f2d1 100644 --- a/lib/python/tests/test_unit_view.py +++ b/lib/python/tests/test_unit_view.py @@ -1,13 +1,11 @@ +import datetime import unittest -from json import dumps import requests_mock -import datetime - -from dbrepo.RestClient import RestClient from pandas import DataFrame -from dbrepo.api.dto import UserAttributes, User, View, Result, ViewColumn, ColumnType +from dbrepo.RestClient import RestClient +from dbrepo.api.dto import UserAttributes, User, View, Result, ViewColumn, ColumnType, DatabaseBrief, UserBrief from dbrepo.api.exceptions import ForbiddenError, NotExistsError, MalformedError, AuthenticationError @@ -27,6 +25,16 @@ class ViewUnitTest(unittest.TestCase): name="Data", internal_name="data", database_id=1, + database=DatabaseBrief(id=1, name='test', + internal_name='test', + is_public=True, + created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), + creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', + username='mweise'), + owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', + username='mweise'), + contact=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', + username='mweise')), initial_view=False, query="SELECT id FROM mytable WHERE deg > 0", query_hash="94c74728b11a690e51d64719868824735f0817b7", @@ -34,7 +42,8 @@ class ViewUnitTest(unittest.TestCase): attributes=UserAttributes(theme='light')), is_public=True, columns=[ViewColumn(id=1, name="id", internal_name="id", database_id=1, auto_generated=False, - column_type=ColumnType.BIGINT, is_public=True, is_null_allowed=False)], + ordinal_position=0, column_type=ColumnType.BIGINT, is_public=True, + is_null_allowed=False)], created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), last_modified=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), identifiers=[])] @@ -60,6 +69,16 @@ class ViewUnitTest(unittest.TestCase): name="Data", internal_name="data", database_id=1, + database=DatabaseBrief(id=1, name='test', + internal_name='test', + is_public=True, + created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), + creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', + username='mweise'), + owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', + username='mweise'), + contact=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', + username='mweise')), initial_view=False, query="SELECT id FROM mytable WHERE deg > 0", query_hash="94c74728b11a690e51d64719868824735f0817b7", @@ -67,7 +86,8 @@ class ViewUnitTest(unittest.TestCase): attributes=UserAttributes(theme='light')), is_public=True, columns=[ViewColumn(id=1, name="id", internal_name="id", database_id=1, auto_generated=False, - column_type=ColumnType.BIGINT, is_public=True, is_null_allowed=False)], + ordinal_position=0, column_type=ColumnType.BIGINT, is_public=True, + is_null_allowed=False)], created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), last_modified=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), identifiers=[]) @@ -103,6 +123,16 @@ class ViewUnitTest(unittest.TestCase): name="Data", internal_name="data", database_id=1, + database=DatabaseBrief(id=1, name='test', + internal_name='test', + is_public=True, + created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), + creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', + username='mweise'), + owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', + username='mweise'), + contact=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', + username='mweise')), initial_view=False, query="SELECT id FROM mytable WHERE deg > 0", query_hash="94c74728b11a690e51d64719868824735f0817b7", @@ -110,7 +140,8 @@ class ViewUnitTest(unittest.TestCase): attributes=UserAttributes(theme='light')), is_public=True, columns=[ViewColumn(id=1, name="id", internal_name="id", database_id=1, auto_generated=False, - column_type=ColumnType.BIGINT, is_public=True, is_null_allowed=False)], + ordinal_position=0, column_type=ColumnType.BIGINT, is_public=True, + is_null_allowed=False)], created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), last_modified=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), identifiers=[])