Skip to content
Snippets Groups Projects
Verified Commit edf34b4f authored by Martin Weise's avatar Martin Weise
Browse files

Bump

parent 76b90686
No related tags found
1 merge request!349Draft: Resolve "Reduce metadata for database API"
Showing
with 165 additions and 114 deletions
...@@ -2,9 +2,7 @@ package at.tuwien.api.database; ...@@ -2,9 +2,7 @@ package at.tuwien.api.database;
import at.tuwien.api.database.table.columns.ColumnTypeDto; 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.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.UnitBriefDto;
import at.tuwien.api.database.table.columns.concepts.UnitDto;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
......
...@@ -2,12 +2,10 @@ package at.tuwien.api.identifier; ...@@ -2,12 +2,10 @@ package at.tuwien.api.identifier;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.*;
import lombok.extern.jackson.Jacksonized; import lombok.extern.jackson.Jacksonized;
import org.springframework.data.annotation.Id;
@Data @Data
......
...@@ -40,18 +40,15 @@ import java.util.List; ...@@ -40,18 +40,15 @@ import java.util.List;
public class DatabaseEndpoint { public class DatabaseEndpoint {
private final UserService userService; private final UserService userService;
private final AccessService accessService;
private final MetadataMapper databaseMapper; private final MetadataMapper databaseMapper;
private final StorageService storageService; private final StorageService storageService;
private final DatabaseService databaseService; private final DatabaseService databaseService;
private final ContainerService containerService; private final ContainerService containerService;
@Autowired @Autowired
public DatabaseEndpoint(UserService userService, AccessService accessService, MetadataMapper databaseMapper, public DatabaseEndpoint(UserService userService, MetadataMapper databaseMapper, StorageService storageService,
StorageService storageService, DatabaseService databaseService, DatabaseService databaseService, ContainerService containerService) {
ContainerService containerService) {
this.userService = userService; this.userService = userService;
this.accessService = accessService;
this.databaseMapper = databaseMapper; this.databaseMapper = databaseMapper;
this.storageService = storageService; this.storageService = storageService;
this.databaseService = databaseService; this.databaseService = databaseService;
...@@ -440,6 +437,29 @@ public class DatabaseEndpoint { ...@@ -440,6 +437,29 @@ public class DatabaseEndpoint {
.body(dto); .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}") @GetMapping("/{databaseId}")
@Transactional(readOnly = true) @Transactional(readOnly = true)
@Observed(name = "dbrepo_database_find") @Observed(name = "dbrepo_database_find")
......
...@@ -4,7 +4,7 @@ from dataclasses import field ...@@ -4,7 +4,7 @@ from dataclasses import field
from enum import Enum from enum import Enum
import datetime import datetime
from typing import List, Optional, Any, Annotated from typing import List, Optional, Any, Annotated
from pydantic import BaseModel, ConfigDict, PlainSerializer, Field from pydantic import BaseModel, PlainSerializer, Field
Timestamp = Annotated[ Timestamp = Annotated[
datetime.datetime, PlainSerializer(lambda v: v.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z', return_type=str) 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): ...@@ -392,7 +392,7 @@ class Language(str, Enum):
class DatabaseAccess(BaseModel): class DatabaseAccess(BaseModel):
type: AccessType type: AccessType
user: User user: UserBrief
created: Timestamp created: Timestamp
...@@ -519,7 +519,7 @@ class CreateTableConstraints(BaseModel): ...@@ -519,7 +519,7 @@ class CreateTableConstraints(BaseModel):
foreign_keys: List[CreateForeignKey] = field(default_factory=list) foreign_keys: List[CreateForeignKey] = field(default_factory=list)
class IdentifierCreator(BaseModel): class Creator(BaseModel):
id: int id: int
creator_name: str creator_name: str
firstname: Optional[str] = None firstname: Optional[str] = None
...@@ -593,12 +593,11 @@ class Identifier(BaseModel): ...@@ -593,12 +593,11 @@ class Identifier(BaseModel):
creator: UserBrief creator: UserBrief
status: IdentifierStatusType status: IdentifierStatusType
created: Timestamp created: Timestamp
last_modified: Timestamp
publication_year: int publication_year: int
publisher: str publisher: str
creators: List[IdentifierCreator] creators: List[Creator]
titles: List[IdentifierTitle] titles: List[IdentifierTitle] = field(default_factory=list)
descriptions: List[IdentifierDescription] descriptions: List[IdentifierDescription] = field(default_factory=list)
funders: Optional[List[IdentifierFunder]] = field(default_factory=list) funders: Optional[List[IdentifierFunder]] = field(default_factory=list)
doi: Optional[str] = None doi: Optional[str] = None
language: Optional[str] = None language: Optional[str] = None
...@@ -616,6 +615,20 @@ class Identifier(BaseModel): ...@@ -616,6 +615,20 @@ class Identifier(BaseModel):
publication_month: Optional[int] = None 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): class View(BaseModel):
id: int id: int
database_id: int database_id: int
...@@ -624,12 +637,13 @@ class View(BaseModel): ...@@ -624,12 +637,13 @@ class View(BaseModel):
query_hash: str query_hash: str
created: Timestamp created: Timestamp
creator: User creator: User
database: DatabaseBrief
internal_name: str internal_name: str
is_public: bool is_public: bool
initial_view: bool initial_view: bool
last_modified: Timestamp last_modified: Timestamp
columns: List[ViewColumn] columns: List[ViewColumn]
identifiers: List[Identifier] = field(default_factory=list) identifiers: List[IdentifierBrief] = field(default_factory=list)
class CreateView(BaseModel): class CreateView(BaseModel):
...@@ -648,15 +662,13 @@ class ViewBrief(BaseModel): ...@@ -648,15 +662,13 @@ class ViewBrief(BaseModel):
id: int id: int
database_id: int database_id: int
name: str name: str
identifier: List[Identifier]
query: str query: str
query_hash: str query_hash: str
created: Timestamp created: Timestamp
creator: User
internal_name: str internal_name: str
is_public: bool is_public: bool
initial_view: bool initial_view: Optional[bool] = None
last_modified: Timestamp identifiers: List[IdentifierBrief] = field(default_factory=list)
class Concept(BaseModel): class Concept(BaseModel):
...@@ -667,6 +679,13 @@ class Concept(BaseModel): ...@@ -667,6 +679,13 @@ class Concept(BaseModel):
description: Optional[str] = None description: Optional[str] = None
class ConceptBrief(BaseModel):
id: int
uri: str
name: Optional[str] = None
description: Optional[str] = None
class DatatypeAnalysis(BaseModel): class DatatypeAnalysis(BaseModel):
separator: str separator: str
columns: dict[str, ColumnType] columns: dict[str, ColumnType]
...@@ -703,6 +722,13 @@ class Unit(BaseModel): ...@@ -703,6 +722,13 @@ class Unit(BaseModel):
description: Optional[str] = None description: Optional[str] = None
class UnitBrief(BaseModel):
id: int
uri: str
name: Optional[str] = None
description: Optional[str] = None
class ExecuteQuery(BaseModel): class ExecuteQuery(BaseModel):
statement: str statement: str
...@@ -919,20 +945,25 @@ class Column(BaseModel): ...@@ -919,20 +945,25 @@ class Column(BaseModel):
class ViewColumn(BaseModel): class ViewColumn(BaseModel):
id: int id: int
name: str
database_id: int database_id: int
ordinal_position: int
name: str
internal_name: str internal_name: str
auto_generated: bool
column_type: ColumnType column_type: ColumnType
is_public: bool is_public: bool
is_null_allowed: bool is_null_allowed: bool
size: int
d: int
alias: Optional[str] = None alias: Optional[str] = None
size: Optional[int] = None size: Optional[int] = None
d: Optional[int] = None d: Optional[int] = None
mean: Optional[float] = None mean: Optional[float] = None
median: Optional[float] = None median: Optional[float] = None
concept: Optional[Concept] = None concept: Optional[ConceptBrief] = None
unit: Optional[Unit] = None unit: Optional[UnitBrief] = None
index_length: Optional[int] = None index_length: Optional[int] = None
description: Optional[str] = None
length: Optional[int] = None length: Optional[int] = None
...@@ -940,18 +971,16 @@ class Table(BaseModel): ...@@ -940,18 +971,16 @@ class Table(BaseModel):
id: int id: int
database_id: int database_id: int
name: str name: str
creator: User creator: UserBrief
owner: User
created: Timestamp created: Timestamp
columns: List[Column] columns: List[Column]
constraints: Constraints constraints: Constraints
internal_name: str internal_name: str
is_versioned: bool is_versioned: bool
created_by: str
queue_name: str queue_name: str
routing_key: str routing_key: str
is_public: bool is_public: bool
identifiers: Optional[List[Identifier]] = field(default_factory=list) identifiers: Optional[List[IdentifierBrief]] = field(default_factory=list)
description: Optional[str] = None description: Optional[str] = None
queue_type: Optional[str] = None queue_type: Optional[str] = None
num_rows: Optional[int] = None num_rows: Optional[int] = None
...@@ -974,19 +1003,20 @@ class ColumnMinimal(BaseModel): ...@@ -974,19 +1003,20 @@ class ColumnMinimal(BaseModel):
class Database(BaseModel): class Database(BaseModel):
id: int id: int
name: str name: str
creator: User creator: UserBrief
owner: User owner: UserBrief
contact: User contact: UserBrief
created: Timestamp created: Timestamp
exchange_name: str exchange_name: str
internal_name: str internal_name: str
is_public: bool is_public: bool
container: Container container: Container
identifiers: Optional[List[Identifier]] = field(default_factory=list) identifiers: Optional[List[IdentifierBrief]] = field(default_factory=list)
subsets: Optional[List[Identifier]] = field(default_factory=list) subsets: Optional[List[IdentifierBrief]] = field(default_factory=list)
description: Optional[str] = None description: Optional[str] = None
tables: Optional[List[Table]] = field(default_factory=list) tables: Optional[List[TableBrief]] = field(default_factory=list)
views: Optional[List[View]] = field(default_factory=list) views: Optional[List[ViewBrief]] = field(default_factory=list)
container: Optional[ContainerBrief] = None
image: Optional[str] = None image: Optional[str] = None
accesses: Optional[List[DatabaseAccess]] = field(default_factory=list) accesses: Optional[List[DatabaseAccess]] = field(default_factory=list)
exchange_type: Optional[str] = None exchange_type: Optional[str] = None
...@@ -998,7 +1028,7 @@ class DatabaseBrief(BaseModel): ...@@ -998,7 +1028,7 @@ class DatabaseBrief(BaseModel):
internal_name: str internal_name: str
description: Optional[str] = None description: Optional[str] = None
is_public: bool is_public: bool
identifiers: Optional[List[Identifier]] = field(default_factory=list) identifiers: Optional[List[IdentifierBrief]] = field(default_factory=list)
contact: UserBrief contact: UserBrief
owner: UserBrief owner: UserBrief
created: Timestamp created: Timestamp
......
import unittest import unittest
import requests_mock import requests_mock
import dataclasses
from dbrepo.RestClient import RestClient from dbrepo.RestClient import RestClient
from dbrepo.api.dto import KeyAnalysis from dbrepo.api.dto import KeyAnalysis
......
import datetime
import unittest import unittest
import requests_mock import requests_mock
import datetime
from dbrepo.RestClient import RestClient from dbrepo.RestClient import RestClient
from dbrepo.api.dto import Container, Image, ContainerBrief, ImageBrief, DataType from dbrepo.api.dto import Container, Image, ContainerBrief, ImageBrief, DataType
......
import datetime
import unittest import unittest
import requests_mock import requests_mock
import datetime
from pydantic_core import ValidationError from pydantic_core import ValidationError
from dbrepo.RestClient import RestClient from dbrepo.RestClient import RestClient
from dbrepo.api.dto import Database, User, Container, Image, UserAttributes, DatabaseAccess, AccessType, DatabaseBrief, \ 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 from dbrepo.api.exceptions import ResponseCodeError, NotExistsError, ForbiddenError, MalformedError, AuthenticationError
...@@ -43,17 +42,14 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -43,17 +42,14 @@ class DatabaseUnitTest(unittest.TestCase):
exp = Database( exp = Database(
id=1, id=1,
name='test', name='test',
creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
attributes=UserAttributes(theme='light')), owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', contact=UserBrief(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')),
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
exchange_name='dbrepo', exchange_name='dbrepo',
internal_name='test_abcd', internal_name='test_abcd',
is_public=True, is_public=True,
container=Container( container=ContainerBrief(
id=1, id=1,
name='MariaDB Galera 11.1.3', name='MariaDB Galera 11.1.3',
internal_name='mariadb', internal_name='mariadb',
...@@ -62,7 +58,7 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -62,7 +58,7 @@ class DatabaseUnitTest(unittest.TestCase):
sidecar_host='data-db-sidecar', sidecar_host='data-db-sidecar',
sidecar_port=3305, sidecar_port=3305,
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
image=Image( image=ImageBrief(
id=1, id=1,
registry='docker.io', registry='docker.io',
name='mariadb', name='mariadb',
...@@ -115,17 +111,14 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -115,17 +111,14 @@ class DatabaseUnitTest(unittest.TestCase):
exp = Database( exp = Database(
id=1, id=1,
name='test', name='test',
creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
attributes=UserAttributes(theme='light')), owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', contact=UserBrief(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')),
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
exchange_name='dbrepo', exchange_name='dbrepo',
internal_name='test_abcd', internal_name='test_abcd',
is_public=True, is_public=True,
container=Container( container=ContainerBrief(
id=1, id=1,
name='MariaDB Galera 11.1.3', name='MariaDB Galera 11.1.3',
internal_name='mariadb', internal_name='mariadb',
...@@ -134,7 +127,7 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -134,7 +127,7 @@ class DatabaseUnitTest(unittest.TestCase):
sidecar_host='data-db-sidecar', sidecar_host='data-db-sidecar',
sidecar_port=3305, sidecar_port=3305,
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
image=Image( image=ImageBrief(
id=1, id=1,
registry='docker.io', registry='docker.io',
name='mariadb', name='mariadb',
...@@ -190,17 +183,14 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -190,17 +183,14 @@ class DatabaseUnitTest(unittest.TestCase):
exp = Database( exp = Database(
id=1, id=1,
name='test', name='test',
creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
attributes=UserAttributes(theme='light')), owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', contact=UserBrief(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')),
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
exchange_name='dbrepo', exchange_name='dbrepo',
internal_name='test_abcd', internal_name='test_abcd',
is_public=True, is_public=True,
container=Container( container=ContainerBrief(
id=1, id=1,
name='MariaDB Galera 11.1.3', name='MariaDB Galera 11.1.3',
internal_name='mariadb', internal_name='mariadb',
...@@ -209,7 +199,7 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -209,7 +199,7 @@ class DatabaseUnitTest(unittest.TestCase):
sidecar_host='data-db-sidecar', sidecar_host='data-db-sidecar',
sidecar_port=3305, sidecar_port=3305,
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
image=Image( image=ImageBrief(
id=1, id=1,
registry='docker.io', registry='docker.io',
name='mariadb', name='mariadb',
...@@ -265,17 +255,14 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -265,17 +255,14 @@ class DatabaseUnitTest(unittest.TestCase):
exp = Database( exp = Database(
id=1, id=1,
name='test', name='test',
creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
attributes=UserAttributes(theme='light')), owner=UserBrief(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other'),
owner=User(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other', contact=UserBrief(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')),
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
exchange_name='dbrepo', exchange_name='dbrepo',
internal_name='test_abcd', internal_name='test_abcd',
is_public=True, is_public=True,
container=Container( container=ContainerBrief(
id=1, id=1,
name='MariaDB Galera 11.1.3', name='MariaDB Galera 11.1.3',
internal_name='mariadb', internal_name='mariadb',
...@@ -284,7 +271,7 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -284,7 +271,7 @@ class DatabaseUnitTest(unittest.TestCase):
sidecar_host='data-db-sidecar', sidecar_host='data-db-sidecar',
sidecar_port=3305, sidecar_port=3305,
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
image=Image( image=ImageBrief(
id=1, id=1,
registry='docker.io', registry='docker.io',
name='mariadb', name='mariadb',
...@@ -342,8 +329,7 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -342,8 +329,7 @@ class DatabaseUnitTest(unittest.TestCase):
def test_get_database_access_succeeds(self): def test_get_database_access_succeeds(self):
exp = DatabaseAccess(type=AccessType.READ, exp = DatabaseAccess(type=AccessType.READ,
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
user=User(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other', user=UserBrief(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other'))
attributes=UserAttributes(theme='light')))
with requests_mock.Mocker() as mock: with requests_mock.Mocker() as mock:
# mock # mock
mock.get('/api/database/1/access', json=exp.model_dump()) mock.get('/api/database/1/access', json=exp.model_dump())
...@@ -374,8 +360,7 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -374,8 +360,7 @@ class DatabaseUnitTest(unittest.TestCase):
def test_create_database_access_succeeds(self): def test_create_database_access_succeeds(self):
exp = DatabaseAccess(type=AccessType.READ, exp = DatabaseAccess(type=AccessType.READ,
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
user=User(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other', user=UserBrief(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other'))
attributes=UserAttributes(theme='light')))
with requests_mock.Mocker() as mock: with requests_mock.Mocker() as mock:
# mock # mock
mock.post('/api/database/1/access/abdbf897-e599-4e5a-a3f0-7529884ea011', json=exp.model_dump(), mock.post('/api/database/1/access/abdbf897-e599-4e5a-a3f0-7529884ea011', json=exp.model_dump(),
...@@ -436,8 +421,7 @@ class DatabaseUnitTest(unittest.TestCase): ...@@ -436,8 +421,7 @@ class DatabaseUnitTest(unittest.TestCase):
def test_update_database_access_succeeds(self): def test_update_database_access_succeeds(self):
exp = DatabaseAccess(type=AccessType.READ, exp = DatabaseAccess(type=AccessType.READ,
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
user=User(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other', user=UserBrief(id='abdbf897-e599-4e5a-a3f0-7529884ea011', username='other'))
attributes=UserAttributes(theme='light')))
with requests_mock.Mocker() as mock: with requests_mock.Mocker() as mock:
# mock # mock
mock.put('/api/database/1/access/abdbf897-e599-4e5a-a3f0-7529884ea011', json=exp.model_dump(), mock.put('/api/database/1/access/abdbf897-e599-4e5a-a3f0-7529884ea011', json=exp.model_dump(),
......
import datetime
import unittest import unittest
import requests_mock import requests_mock
import datetime
from dbrepo.RestClient import RestClient from dbrepo.RestClient import RestClient
from dbrepo.api.dto import Identifier, IdentifierType, CreateIdentifierTitle, CreateIdentifierCreator, \ from dbrepo.api.dto import Identifier, IdentifierType, CreateIdentifierTitle, CreateIdentifierCreator, \
IdentifierCreator, IdentifierTitle, IdentifierDescription, CreateIdentifierDescription, Language, \ Creator, IdentifierTitle, IdentifierDescription, CreateIdentifierDescription, Language, \
CreateIdentifierFunder, CreateRelatedIdentifier, RelatedIdentifierRelation, RelatedIdentifierType, IdentifierFunder, \ CreateIdentifierFunder, CreateRelatedIdentifier, RelatedIdentifierRelation, RelatedIdentifierType, IdentifierFunder, \
RelatedIdentifier, UserBrief, IdentifierStatusType RelatedIdentifier, UserBrief, IdentifierStatusType
from dbrepo.api.exceptions import MalformedError, ForbiddenError, NotExistsError, AuthenticationError from dbrepo.api.exceptions import MalformedError, ForbiddenError, NotExistsError, AuthenticationError
...@@ -31,7 +30,7 @@ class IdentifierUnitTest(unittest.TestCase): ...@@ -31,7 +30,7 @@ class IdentifierUnitTest(unittest.TestCase):
related_identifiers=[ related_identifiers=[
RelatedIdentifier(id=7, value='10.12345/abc', relation=RelatedIdentifierRelation.CITES, RelatedIdentifier(id=7, value='10.12345/abc', relation=RelatedIdentifierRelation.CITES,
type=RelatedIdentifierType.DOI)], type=RelatedIdentifierType.DOI)],
creators=[IdentifierCreator(id=5, creator_name='Carberry, Josiah')], creators=[Creator(id=5, creator_name='Carberry, Josiah')],
status=IdentifierStatusType.PUBLISHED, status=IdentifierStatusType.PUBLISHED,
creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise')) creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'))
# mock # mock
...@@ -131,7 +130,7 @@ class IdentifierUnitTest(unittest.TestCase): ...@@ -131,7 +130,7 @@ class IdentifierUnitTest(unittest.TestCase):
related_identifiers=[RelatedIdentifier(id=7, value='10.12345/abc', related_identifiers=[RelatedIdentifier(id=7, value='10.12345/abc',
relation=RelatedIdentifierRelation.CITES, relation=RelatedIdentifierRelation.CITES,
type=RelatedIdentifierType.DOI)], type=RelatedIdentifierType.DOI)],
creators=[IdentifierCreator(id=5, creator_name='Carberry, Josiah')], creators=[Creator(id=5, creator_name='Carberry, Josiah')],
status=IdentifierStatusType.PUBLISHED, status=IdentifierStatusType.PUBLISHED,
creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'))] creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'))]
# mock # mock
......
...@@ -3,7 +3,6 @@ import unittest ...@@ -3,7 +3,6 @@ import unittest
import requests_mock import requests_mock
from dbrepo.RestClient import RestClient from dbrepo.RestClient import RestClient
from dbrepo.api.dto import License from dbrepo.api.dto import License
......
import datetime
import unittest import unittest
import requests_mock import requests_mock
import datetime
from dbrepo.RestClient import RestClient
from pandas import DataFrame from pandas import DataFrame
from dbrepo.RestClient import RestClient
from dbrepo.api.dto import Result, Query, User, UserAttributes, QueryType from dbrepo.api.dto import Result, Query, User, UserAttributes, QueryType
from dbrepo.api.exceptions import MalformedError, NotExistsError, ForbiddenError, QueryStoreError, \ from dbrepo.api.exceptions import MalformedError, NotExistsError, ForbiddenError
MetadataConsistencyError, AuthenticationError
class QueryUnitTest(unittest.TestCase): class QueryUnitTest(unittest.TestCase):
......
import unittest import unittest
from json import dumps
import requests_mock import requests_mock
import datetime import datetime
...@@ -21,10 +20,8 @@ class TableUnitTest(unittest.TestCase): ...@@ -21,10 +20,8 @@ class TableUnitTest(unittest.TestCase):
description="Test Table", description="Test Table",
database_id=1, database_id=1,
internal_name="test", internal_name="test",
creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
attributes=UserAttributes(theme='light')), owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise',
attributes=UserAttributes(theme='light')),
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
is_versioned=True, is_versioned=True,
created_by='8638c043-5145-4be8-a3e4-4b79991b0a16', created_by='8638c043-5145-4be8-a3e4-4b79991b0a16',
...@@ -147,10 +144,8 @@ class TableUnitTest(unittest.TestCase): ...@@ -147,10 +144,8 @@ class TableUnitTest(unittest.TestCase):
description="Test Table", description="Test Table",
database_id=1, database_id=1,
internal_name="test", internal_name="test",
creator=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise', creator=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
attributes=UserAttributes(theme='light')), owner=UserBrief(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise'),
owner=User(id='8638c043-5145-4be8-a3e4-4b79991b0a16', username='mweise',
attributes=UserAttributes(theme='light')),
created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc), created=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
is_versioned=True, is_versioned=True,
created_by='8638c043-5145-4be8-a3e4-4b79991b0a16', created_by='8638c043-5145-4be8-a3e4-4b79991b0a16',
......
import datetime
import unittest import unittest
from json import dumps
import requests_mock import requests_mock
import datetime
from dbrepo.RestClient import RestClient
from pandas import DataFrame 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 from dbrepo.api.exceptions import ForbiddenError, NotExistsError, MalformedError, AuthenticationError
...@@ -27,6 +25,16 @@ class ViewUnitTest(unittest.TestCase): ...@@ -27,6 +25,16 @@ class ViewUnitTest(unittest.TestCase):
name="Data", name="Data",
internal_name="data", internal_name="data",
database_id=1, 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, initial_view=False,
query="SELECT id FROM mytable WHERE deg > 0", query="SELECT id FROM mytable WHERE deg > 0",
query_hash="94c74728b11a690e51d64719868824735f0817b7", query_hash="94c74728b11a690e51d64719868824735f0817b7",
...@@ -34,7 +42,8 @@ class ViewUnitTest(unittest.TestCase): ...@@ -34,7 +42,8 @@ class ViewUnitTest(unittest.TestCase):
attributes=UserAttributes(theme='light')), attributes=UserAttributes(theme='light')),
is_public=True, is_public=True,
columns=[ViewColumn(id=1, name="id", internal_name="id", database_id=1, auto_generated=False, 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), 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), last_modified=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
identifiers=[])] identifiers=[])]
...@@ -60,6 +69,16 @@ class ViewUnitTest(unittest.TestCase): ...@@ -60,6 +69,16 @@ class ViewUnitTest(unittest.TestCase):
name="Data", name="Data",
internal_name="data", internal_name="data",
database_id=1, 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, initial_view=False,
query="SELECT id FROM mytable WHERE deg > 0", query="SELECT id FROM mytable WHERE deg > 0",
query_hash="94c74728b11a690e51d64719868824735f0817b7", query_hash="94c74728b11a690e51d64719868824735f0817b7",
...@@ -67,7 +86,8 @@ class ViewUnitTest(unittest.TestCase): ...@@ -67,7 +86,8 @@ class ViewUnitTest(unittest.TestCase):
attributes=UserAttributes(theme='light')), attributes=UserAttributes(theme='light')),
is_public=True, is_public=True,
columns=[ViewColumn(id=1, name="id", internal_name="id", database_id=1, auto_generated=False, 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), 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), last_modified=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
identifiers=[]) identifiers=[])
...@@ -103,6 +123,16 @@ class ViewUnitTest(unittest.TestCase): ...@@ -103,6 +123,16 @@ class ViewUnitTest(unittest.TestCase):
name="Data", name="Data",
internal_name="data", internal_name="data",
database_id=1, 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, initial_view=False,
query="SELECT id FROM mytable WHERE deg > 0", query="SELECT id FROM mytable WHERE deg > 0",
query_hash="94c74728b11a690e51d64719868824735f0817b7", query_hash="94c74728b11a690e51d64719868824735f0817b7",
...@@ -110,7 +140,8 @@ class ViewUnitTest(unittest.TestCase): ...@@ -110,7 +140,8 @@ class ViewUnitTest(unittest.TestCase):
attributes=UserAttributes(theme='light')), attributes=UserAttributes(theme='light')),
is_public=True, is_public=True,
columns=[ViewColumn(id=1, name="id", internal_name="id", database_id=1, auto_generated=False, 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), 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), last_modified=datetime.datetime(2024, 1, 1, 0, 0, 0, 0, datetime.timezone.utc),
identifiers=[]) identifiers=[])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment