From e5e4b43d949f106a6cce09cd750eb1c17d64fec0 Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Thu, 1 Jun 2023 09:06:47 +0200 Subject: [PATCH] Updated docs --- docs/contact.md | 34 +- docs/customization.md | 42 +- docs/get-started.md | 7 +- docs/images/architecture.png | Bin 115868 -> 114890 bytes docs/images/auth-ssl.png | Bin 43547 -> 0 bytes docs/images/custom_icon.png | Bin 0 -> 8376 bytes docs/images/custom_logo.png | Bin 66472 -> 70389 bytes docs/images/deployment-tuwien.png | Bin 70960 -> 69986 bytes docs/images/groups-roles.png | Bin 44821 -> 52471 bytes docs/system.md | 79 +- misc/architecture.drawio | 17 +- misc/diagrams.drawio | 33 +- swagger/api-container.yaml | 1429 ++++++++++++++--- swagger/api-database.yaml | 208 +-- swagger/api-identifier.yaml | 547 +++++-- swagger/api-metadata.yaml | 4 +- swagger/api-query.yaml | 416 +++-- swagger/api-semantics.yaml | 686 +++++++- swagger/api-table.yaml | 365 +++-- swagger/api-user.yaml | 835 ++++++---- swagger/api/api_container/__init__.py | 22 + .../api/container_endpoint_api.py | 6 +- .../api_container/api/image_endpoint_api.py | 36 +- swagger/api/api_container/models/__init__.py | 22 + .../api/api_container/models/api_error_dto.py | 2 +- .../api_container/models/column_brief_dto.py | 56 +- .../api/api_container/models/constraints.py | 162 ++ swagger/api/api_container/models/container.py | 474 ++++++ .../api_container/models/container_image.py | 500 ++++++ .../models/container_image_date.py | 292 ++++ .../container_image_environment_item.py | 298 ++++ swagger/api/api_container/models/creator.py | 344 ++++ .../api/api_container/models/creator_dto.py | 58 +- .../api/api_container/models/credential.py | 292 ++++ swagger/api/api_container/models/database.py | 552 +++++++ .../api/api_container/models/foreign_key.py | 356 ++++ .../models/foreign_key_reference.py | 188 +++ .../api/api_container/models/identifier.py | 805 ++++++++++ .../models/identifier_brief_dto.py | 54 +- .../api_container/models/identifier_dto.py | 2 +- .../api_container/models/image_brief_dto.py | 29 +- .../api_container/models/image_change_dto.py | 29 +- .../api_container/models/image_create_dto.py | 29 +- swagger/api/api_container/models/image_dto.py | 29 +- swagger/api/api_container/models/license.py | 136 ++ .../models/related_identifier.py | 304 ++++ swagger/api/api_container/models/role.py | 188 +++ swagger/api/api_container/models/table.py | 448 ++++++ .../api_container/models/table_brief_dto.py | 32 +- .../api/api_container/models/table_column.py | 688 ++++++++ .../models/table_column_concept.py | 214 +++ .../api_container/models/table_column_unit.py | 214 +++ swagger/api/api_container/models/unique.py | 214 +++ swagger/api/api_container/models/user.py | 526 ++++++ .../api_container/models/user_attribute.py | 214 +++ swagger/api/api_container/models/view.py | 448 ++++++ .../api_database/api/database_endpoint_api.py | 6 +- .../api_database/api/license_endpoint_api.py | 6 +- .../api/api_database/models/api_error_dto.py | 2 +- .../api_database/models/column_brief_dto.py | 56 +- .../api/api_database/models/creator_dto.py | 58 +- .../models/identifier_brief_dto.py | 54 +- .../api/api_database/models/identifier_dto.py | 2 +- .../api_database/models/image_brief_dto.py | 29 +- swagger/api/api_database/models/image_dto.py | 29 +- .../api_database/models/table_brief_dto.py | 32 +- swagger/api/api_identifier/__init__.py | 1 + .../api/identifier_endpoint_api.py | 204 +-- .../api/persistence_endpoint_api.py | 198 +++ swagger/api/api_identifier/models/__init__.py | 1 + .../api_identifier/models/api_error_dto.py | 2 +- .../api/api_identifier/models/creator_dto.py | 58 +- .../models/identifier_create_dto.py | 35 +- .../api_identifier/models/identifier_dto.py | 2 +- .../models/identifier_update_dto.py | 525 ++++++ .../models/oai_list_identifiers_parameters.py | 58 +- swagger/api/api_query/__init__.py | 4 + swagger/api/api_query/api/__init__.py | 12 +- .../api/api_query/api/export_endpoint_api.py | 2 +- .../api/api_query/api/query_endpoint_api.py | 2 +- .../api/api_query/api/store_endpoint_api.py | 8 +- .../api_query/api/table_data_endpoint_api.py | 6 +- .../api/table_history_endpoint_api.py | 18 +- .../api/api_query/api/view_endpoint_api.py | 8 +- swagger/api/api_query/configuration.py | 4 +- swagger/api/api_query/models/__init__.py | 4 + swagger/api/api_query/models/api_error_dto.py | 2 +- .../api/api_query/models/column_brief_dto.py | 56 +- .../api/api_query/models/creator_brief_dto.py | 164 ++ swagger/api/api_query/models/creator_dto.py | 58 +- .../api_query/models/identifier_brief_dto.py | 126 +- .../api/api_query/models/identifier_dto.py | 2 +- .../api/api_query/models/image_brief_dto.py | 29 +- swagger/api/api_query/models/image_dto.py | 29 +- .../api/api_query/models/query_brief_dto.py | 2 +- .../api/api_query/models/table_brief_dto.py | 32 +- .../api/api_query/models/table_history_dto.py | 2 +- swagger/api/api_semantics/__init__.py | 27 +- swagger/api/api_semantics/api/__init__.py | 7 +- .../api/ontology_endpoint_api.py | 506 ++++++ .../api_semantics/api/query_endpoint_api.py | 134 ++ .../api/semantics_endpoint_api.py | 397 +++++ .../api_semantics/api/table_endpoint_api.py | 243 +++ swagger/api/api_semantics/api_client.py | 4 +- swagger/api/api_semantics/configuration.py | 4 +- swagger/api/api_semantics/models/__init__.py | 20 +- .../api/api_semantics/models/api_error_dto.py | 171 ++ .../api_semantics/models/column_brief_dto.py | 252 +++ .../api/api_semantics/models/concept_dto.py | 217 +++ .../api_semantics/models/concept_save_dto.py | 165 ++ .../api/api_semantics/models/entity_dto.py | 164 ++ .../models/ontology_create_dto.py | 164 ++ .../api/api_semantics/models/ontology_dto.py | 298 ++++ .../models/ontology_modify_dto.py | 164 ++ .../models/table_column_entity_dto.py | 244 +++ swagger/api/api_semantics/models/unit_dto.py | 217 +++ .../api/api_semantics/models/unit_save_dto.py | 165 ++ .../api_semantics/models/user_brief_dto.py | 270 ++++ swagger/api/api_semantics/rest.py | 4 +- .../api/table_column_endpoint_api.py | 22 +- .../api/api_table/api/table_endpoint_api.py | 6 +- swagger/api/api_table/models/api_error_dto.py | 2 +- .../api/api_table/models/column_brief_dto.py | 56 +- swagger/api/api_table/models/concept_dto.py | 64 +- .../api/api_table/models/table_brief_dto.py | 32 +- swagger/api/api_table/models/table_dto.py | 29 +- swagger/api/api_table/models/unit_dto.py | 64 +- swagger/api/api_user/__init__.py | 9 + swagger/api/api_user/api/__init__.py | 1 + .../api_user/api/maintenance_endpoint_api.py | 591 +++++++ swagger/api/api_user/api/user_endpoint_api.py | 12 +- swagger/api/api_user/models/__init__.py | 8 + swagger/api/api_user/models/api_error_dto.py | 2 +- .../models/banner_message_brief_dto.py | 196 +++ .../models/banner_message_create_dto.py | 248 +++ .../api/api_user/models/banner_message_dto.py | 275 ++++ .../banner_message_not_found_exception.py | 214 +++ ...anner_message_not_found_exception_cause.py | 188 +++ ...e_not_found_exception_cause_stack_trace.py | 292 ++++ ...ge_not_found_exception_cause_suppressed.py | 162 ++ .../models/banner_message_update_dto.py | 248 +++ .../api/api_user/models/column_brief_dto.py | 56 +- swagger/api/api_user/models/creator_dto.py | 58 +- swagger/api/api_user/models/identifier_dto.py | 2 +- .../api/api_user/models/image_brief_dto.py | 29 +- swagger/api/api_user/models/image_dto.py | 29 +- .../api/api_user/models/table_brief_dto.py | 32 +- .../api/api_user/models/user_update_dto.py | 58 +- swagger/container/api.yaml | 1429 ++++++++++++++--- swagger/database/api.yaml | 208 +-- swagger/generate.sh | 7 +- swagger/identifier/api.yaml | 547 +++++-- swagger/metadata/api.yaml | 4 +- swagger/query/api.yaml | 416 +++-- swagger/semantics/api.yaml | 686 +++++++- swagger/table/api.yaml | 365 +++-- swagger/user/api.yaml | 835 ++++++---- 157 files changed, 22953 insertions(+), 3259 deletions(-) delete mode 100644 docs/images/auth-ssl.png create mode 100644 docs/images/custom_icon.png create mode 100644 swagger/api/api_container/models/constraints.py create mode 100644 swagger/api/api_container/models/container.py create mode 100644 swagger/api/api_container/models/container_image.py create mode 100644 swagger/api/api_container/models/container_image_date.py create mode 100644 swagger/api/api_container/models/container_image_environment_item.py create mode 100644 swagger/api/api_container/models/creator.py create mode 100644 swagger/api/api_container/models/credential.py create mode 100644 swagger/api/api_container/models/database.py create mode 100644 swagger/api/api_container/models/foreign_key.py create mode 100644 swagger/api/api_container/models/foreign_key_reference.py create mode 100644 swagger/api/api_container/models/identifier.py create mode 100644 swagger/api/api_container/models/license.py create mode 100644 swagger/api/api_container/models/related_identifier.py create mode 100644 swagger/api/api_container/models/role.py create mode 100644 swagger/api/api_container/models/table.py create mode 100644 swagger/api/api_container/models/table_column.py create mode 100644 swagger/api/api_container/models/table_column_concept.py create mode 100644 swagger/api/api_container/models/table_column_unit.py create mode 100644 swagger/api/api_container/models/unique.py create mode 100644 swagger/api/api_container/models/user.py create mode 100644 swagger/api/api_container/models/user_attribute.py create mode 100644 swagger/api/api_container/models/view.py create mode 100644 swagger/api/api_identifier/models/identifier_update_dto.py create mode 100644 swagger/api/api_query/models/creator_brief_dto.py create mode 100644 swagger/api/api_semantics/api/ontology_endpoint_api.py create mode 100644 swagger/api/api_semantics/api/query_endpoint_api.py create mode 100644 swagger/api/api_semantics/api/semantics_endpoint_api.py create mode 100644 swagger/api/api_semantics/api/table_endpoint_api.py create mode 100644 swagger/api/api_semantics/models/api_error_dto.py create mode 100644 swagger/api/api_semantics/models/column_brief_dto.py create mode 100644 swagger/api/api_semantics/models/concept_dto.py create mode 100644 swagger/api/api_semantics/models/concept_save_dto.py create mode 100644 swagger/api/api_semantics/models/entity_dto.py create mode 100644 swagger/api/api_semantics/models/ontology_create_dto.py create mode 100644 swagger/api/api_semantics/models/ontology_dto.py create mode 100644 swagger/api/api_semantics/models/ontology_modify_dto.py create mode 100644 swagger/api/api_semantics/models/table_column_entity_dto.py create mode 100644 swagger/api/api_semantics/models/unit_dto.py create mode 100644 swagger/api/api_semantics/models/unit_save_dto.py create mode 100644 swagger/api/api_semantics/models/user_brief_dto.py create mode 100644 swagger/api/api_user/api/maintenance_endpoint_api.py create mode 100644 swagger/api/api_user/models/banner_message_brief_dto.py create mode 100644 swagger/api/api_user/models/banner_message_create_dto.py create mode 100644 swagger/api/api_user/models/banner_message_dto.py create mode 100644 swagger/api/api_user/models/banner_message_not_found_exception.py create mode 100644 swagger/api/api_user/models/banner_message_not_found_exception_cause.py create mode 100644 swagger/api/api_user/models/banner_message_not_found_exception_cause_stack_trace.py create mode 100644 swagger/api/api_user/models/banner_message_not_found_exception_cause_suppressed.py create mode 100644 swagger/api/api_user/models/banner_message_update_dto.py diff --git a/docs/contact.md b/docs/contact.md index 435fc74..c299b47 100644 --- a/docs/contact.md +++ b/docs/contact.md @@ -8,30 +8,32 @@ hide: ## Team -### Project +### Project Management -Ao.univ.Prof. Dr. [Andreas Rauber](//tiss.tuwien.ac.at/person/39608.html)<br /> +Ao.univ.Prof. Dr. [Andreas Rauber](https://www.ifs.tuwien.ac.at/~andi)<br /> Technische Universität Wien<br /> -Information and Software Engineering Group<br /> +Research Unit Data Science<br /> Favoritenstraße 9-11<br /> A-1040 Vienna, Austria ### Development -Projektass. Dipl.-Ing. [Martin Weise](//tiss.tuwien.ac.at/person/287722.html)<br /> +Projektass. Dipl.-Ing. [Martin Weise](https://ec.tuwien.ac.at/~weise/)<br /> Technische Universität Wien<br /> -Information and Software Engineering Group<br /> +Research Unit Data Science<br /> Favoritenstraße 9-11<br /> A-1040 Vienna, Austria -## Contributors - -- Martin Weise -- Moritz Staudinger -- Cornelia Michlits -- Eva Gergely -- Kirill Stytsenko -- Josef Taha -- Tobias Grantner -- Raman Ganguly -- Andreas Rauber +## Contributors (alphabetically) + +- Ganguly, Raman +- Gergely, Eva +- Grantner, Tobias +- Karnbach, Geoffrey +- Michlits, Cornelia +- Rauber, Andreas +- Staudinger, Moritz +- Stytsenko, Kirill +- Taha, Josef +- Tsepelakis, Sotiris +- Weise, Martin diff --git a/docs/customization.md b/docs/customization.md index ac90f88..af996d9 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -10,11 +10,47 @@ hide: On this page, we showcase the customization capabilities of DBRepo to e.g. whitelabel your deployment. -## Logo +## Custom Title -If you want to display your own logo instead of the placeholder logo in the UI, you need to: +The default title is "Database Repository" and can be replaced by changing the `TITLE` environment variable. + +## Custom Logo + +The default placeholder logo consists of the two universities that developed this software. You can replace it by +mounting your own logo with a volume. + +```console +docker run -v /path/to/your_logo.png:/logo.png ... +``` + +In case your logo is not in PNG format, you need to change the environment variable `LOGO` accordingly, e.g. for a logo +in JPEG format, set `LOGO: "/logo.JPEG"` in the `.env` file and start the container with a volume. + +```console +docker run -v /path/to/your_logo.JPEG:/logo.JPEG ... +``` <figure markdown>  -<figcaption>Custom logo which replaces the default placeholder logo.</figcaption> +<figcaption>Custom logo which replaces the default placeholder logo</figcaption> </figure> + +## Custom Icon + +The default placeholder icon can be replaced by mounting your own icon with a volume. + +```console +docker run -v /path/to/your_logo.ico:/favicon.ico ... +``` + +<figure markdown> + +<figcaption>Custom icon which replaces the default placeholder icon</figcaption> +</figure> + +In case your icon is not in ICO format, you need to change the environment variable `ICON` accordingly, e.g. for an icon +in GIF format, set `ICON: "/favicon.GIF"` in the `.env` file and start the container with a volume. + +```console +docker run -v /path/to/favicon.GIF:/favicon.GIF ... +``` diff --git a/docs/get-started.md b/docs/get-started.md index 862ec46..5992112 100644 --- a/docs/get-started.md +++ b/docs/get-started.md @@ -17,8 +17,9 @@ hide: ### Hardware -For this small, local, test deployment any modern hardware would suffice, we recommend a machine (or laptop) with at -least: +For this small, local, test deployment any modern hardware would suffice, we recommend a dedicated virtual machine with +the following settings. Note that most of the CPU and RAM resources will be needed for starting the infrastructure, +this is because of Docker. - 8 CPU cores - 16GB RAM memory @@ -83,7 +84,7 @@ running system within minutes to play around within the system and explore featu [simple guide](https://onlinehelp.coveo.com/en/ces/7.0/administrator/changing_the_rabbitmq_administrator_password.htm) to be very useful. - * **Search Service**: by default, this service is configured to require authentication with an administrative user + * **Search Database**: by default, this service is configured to require authentication with an administrative user that is allowed to write into the indizes. Following this [simple guide](https://www.elastic.co/guide/en/elasticsearch/reference/8.7/reset-password.html), this can be achieved using the command line. diff --git a/docs/images/architecture.png b/docs/images/architecture.png index f02f070de6eb492e7e294c0e5aa25623cf829c3c..f2353af4120193e1d777f1c1eaf8fad95a5c761c 100644 GIT binary patch literal 114890 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 literal 115868 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𝔈SG2;{ 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≦B$v2Xw9Wx8ioDScfk!RcfB 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%0AN`LcF3 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 N!PC{xWt~$(69Dw~_P_uD diff --git a/docs/images/auth-ssl.png b/docs/images/auth-ssl.png deleted file mode 100644 index 494172505d996c548b2a340b5201b8851b0a6d1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43547 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 SJ%WLOfx*+&&t;ucLK6U%BGB6a diff --git a/docs/images/custom_icon.png b/docs/images/custom_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fde478eaffef802311bc0a370931bf6a30f3eb82 GIT binary patch literal 8376 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 D(DQ-} literal 0 HcmV?d00001 diff --git a/docs/images/custom_logo.png b/docs/images/custom_logo.png index cf4ea1122c529fb45596860cf5b9a50fcf4adbc8..b84dcdae2f5fd04d84245c05b20b0ad9ad342b12 100644 GIT binary patch literal 70389 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 Pz`)??>gTe~DWM4f+irIm literal 66472 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 W<bM3q5ENVqie^t&KbLh*2~7Yo5(!}d diff --git a/docs/images/deployment-tuwien.png b/docs/images/deployment-tuwien.png index b70dfb7b4e6ff1e191975170f05e8665e93ee28a..642b1de2fe6dfa660b1978bbacb24f7e70cb2886 100644 GIT binary patch delta 45704 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 C0`}Yh delta 46695 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ΞoC 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 MPgg&ebxsLQ06FI?kpKVy diff --git a/docs/images/groups-roles.png b/docs/images/groups-roles.png index 3c73de60a81e3a9f1343b3f39f4f373daa42b680..8762013cda252dd93e4278df9f5e3994c4d6a8cb 100644 GIT binary patch literal 52471 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 DRDI?) literal 44821 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 Q1_lNOPgg&ebxsLQ05I!1Hvj+t diff --git a/docs/system.md b/docs/system.md index a1835dd..23b1373 100644 --- a/docs/system.md +++ b/docs/system.md @@ -1,7 +1,9 @@ --- author: Martin Weise hide: + - navigation + --- # System @@ -185,6 +187,25 @@ public ResponseEntity<DatabaseBriefDto> create(@NotNull Long containerId, | `modify-user-theme` | Can modify the user theme (light, dark) | | `modify-user-information` | Can modify the user information | +##### Default Maintenance Handling + +| Name | Description | +|------------------------------|------------------------------------------| +| `create-maintenance-message` | Can create a maintenance message banner | +| `delete-maintenance-message` | Can delete a maintenance message banner | +| `find-maintenance-message` | Can find a maintenance message banner | +| `list-maintenance-messages` | Can list all maintenance message banners | +| `update-maintenance-message` | Can update a maintenance message banner | + +##### Default Semantics Handling + +| Name | Description | +|---------------------------|-----------------------------------------------------------------| +| `create-semantic-unit` | Can save a previously unknown unit for a table column | +| `create-semantic-concept` | Can save a previously unknown concept for a table column | +| `execute-semantic-query` | Can query remote SPARQL endpoints to get labels and description | +| `table-semantic-analyse` | Can automatically suggest units and concepts for a table | + ##### Escalated User Handling | Name | Description | @@ -214,6 +235,7 @@ public ResponseEntity<DatabaseBriefDto> create(@NotNull Long containerId, | Name | Description | |------|-------------| +| / | | ##### Escalated Identifier Handling @@ -223,6 +245,18 @@ public ResponseEntity<DatabaseBriefDto> create(@NotNull Long containerId, | `delete-identifier` | Can delete any identifier | | `modify-identifier-metadata` | Can modify any identifier metadata | +##### Escalated Semantics Handling + +| Name | Description | +|-----------------------------------------|----------------------------------------------| +| `create-ontology` | Can register a new ontology | +| `delete-ontology` | Can unregister an ontology | +| `list-ontologies` | Can list all ontologies | +| `modify-foreign-table-column-semantics` | Can modify any table column concept and unit | +| `update-ontology` | Can update ontology metadata | +| `update-semantic-concept` | Can update own table column concept | +| `update-semantic-unit` | Can update own table column unit | + #### API ##### Obtain Access Token @@ -288,7 +322,7 @@ Using the response from above, a new access token can be created via the refresh * RabbitMQ Prometheus Plugin: `http://:15692/metrics` It holds exchanges and topics responsible for holding AMQP messages for later consumption. We -use [RabbitMQ](https://www.rabbitmq.com/) in the reference implementation. The AMQP endpoint listens to port `5672` for +use [RabbitMQ](https://www.rabbitmq.com/) in the implementation. The AMQP endpoint listens to port `5672` for regular declares and offers a management interface at port `15672`. The default credentials are: @@ -321,20 +355,6 @@ It is responsible for Docker container lifecycle operations and updating the loc It creates the databases inside a Docker container and the Query Store. Currently, we only support [MariaDB](https://mariadb.org/) images that allow table versioning with low programmatic effort. -### Discovery Service - -!!! debug "Debug Information" - - * Ports: 9090/tcp - * Info: `http://:9090/actuator/info` - * Health: `http://:9090/actuator/health` - * Prometheus: `http://:9090/actuator/prometheus` - * Eureka Dashboard: `http://:9090/` - -This microservice allows service discovery and registration of containers that provide services. It configures -a [Spring Cloud Netflix Eureka Server](https://cloud.spring.io/spring-cloud-netflix/reference/html/) to discover -services. - ### Gateway Service !!! debug "Debug Information" @@ -344,8 +364,8 @@ services. * Health: `http://:9095/actuator/health` * Prometheus: `http://:9095/actuator/prometheus` -Provides a single point of access to the *application programming interface* (API) and configures -the [Spring Cloud Gateway](https://spring.io/projects/spring-cloud-gateway) to route traffic to the services. +Provides a single point of access to the *application programming interface* (API) and configures a +standard [NGINX](https://www.nginx.com/) reverse proxy for load balancing, SSL/TLS configuration. ### Identifier Service @@ -392,14 +412,6 @@ port `3306`. This service provides an OAI-PMH endpoint for metadata crawler. -### Proxy - -!!! debug "Debug Information" - - * Ports: 80/tcp, 443/tcp - -The NGINX reverse proxy bundles the services and enables SSL/TLS communication for all endpoints. - ### Query Service !!! debug "Debug Information" @@ -414,15 +426,16 @@ It provides an interface to insert data into the tables created by the Table Ser paginated and versioned query execution to the raw data and consumes messages in the message queue from the Broker Service. -### Search Service +### Search Database !!! debug "Debug Information" * Ports: 9200/tcp - * Indizes: `http://:9200/_all` + * Indexes: `http://:9200/_all` + * Health: `http://:9200/_cluster/health/` -It processes search requests from the Gateway Service for full-text lookups in the Metadata Database. We use -[Elasticsearch](https://www.elastic.co/) in the reference implementation. The Search Service implements Elastic Search +It processes search requests from the Gateway Service for full-text lookups in the metadata database. We use +[Elasticsearch](https://www.elastic.co/) in the reference implementation. The search database implements Elastic Search and creates a retrievable index on all databases that is getting updated with each save operation on databases in the metadata database. @@ -432,9 +445,11 @@ All requests need to be authenticated, by default the credentials `elastic:elast !!! debug "Debug Information" - * Ports: 5010/tcp - * Prometheus: `http://:5010/metrics` - * Swagger UI: `http://:5010/swagger-ui/index.html` <a href="/infrastructures/dbrepo/swagger/semantics" target="_blank">:fontawesome-solid-square-up-right: view online</a> + * Ports: 9097/tcp + * Info: `http://:9097/actuator/info` + * Health: `http://:9097/actuator/health` + * Prometheus: `http://:9097/actuator/prometheus` + * Swagger UI: `http://:9097/swagger-ui/index.html` <a href="/infrastructures/dbrepo/swagger/semantics" target="_blank">:fontawesome-solid-square-up-right: view online</a> It is designed to map terms in the domain of units of measurement to controlled vocabulary, modelled in the [ontology of units of measure](https://github.com/HajoRijgersberg/OM). This service validates researcher provided in diff --git a/misc/architecture.drawio b/misc/architecture.drawio index bdd437b..a688ab9 100644 --- a/misc/architecture.drawio +++ b/misc/architecture.drawio @@ -1,4 +1,4 @@ -<mxfile host="Electron" modified="2023-05-24T09:23:45.383Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="5oa3miSaTiV7Vprq83bZ" version="21.1.2" type="device" pages="3"> +<mxfile host="Electron" modified="2023-06-01T06:09:08.990Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="-Z1STi4cUE9hBolYebCG" version="21.1.2" type="device" pages="3"> <diagram name="Deployment" id="BS_rNRZWEkVqn4O3IFNu"> <mxGraphModel dx="1434" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="840" pageHeight="509" math="0" shadow="0"> <root> @@ -58,7 +58,7 @@ <mxCell id="qJbSU32InUa3qXW1C_Xf-11" value="Analyse Service" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="516" y="308" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="qJbSU32InUa3qXW1C_Xf-12" value="Search Service" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxCell id="qJbSU32InUa3qXW1C_Xf-12" value="Search Database" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="666" y="248" width="130" height="40" as="geometry" /> </mxCell> <mxCell id="qJbSU32InUa3qXW1C_Xf-13" value="Semantics Service" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> @@ -199,9 +199,6 @@ <mxCell id="qJbSU32InUa3qXW1C_Xf-95" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://assets.stickpng.com/images/58480f12cef1014c0b5e4931.png;" parent="1" vertex="1"> <mxGeometry x="772.17" y="400" width="34.67" height="23" as="geometry" /> </mxCell> - <mxCell id="k2mV4V4qi4BGH7ll39v4-1" value="Elastic Search" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#B3B3B3;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="666" y="309" width="130" height="40" as="geometry" /> - </mxCell> <mxCell id="EIwzJq8dkpXTqFd1RJj--1" value="User Service" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="355" y="308" width="130" height="40" as="geometry" /> </mxCell> @@ -240,14 +237,6 @@ <mxCell id="CohMdi7D_fRk0dSxzjYi-1" value="Gateway Service" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#B3B3B3;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> <mxGeometry x="24" y="206" width="130" height="40" as="geometry" /> </mxCell> - <mxCell id="glPSNq5Z3xSe9Szlq7L9-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="FjrNxjV7lKJhjLr2JuWJ-1" edge="1"> - <mxGeometry relative="1" as="geometry"> - <mxPoint x="121" y="466" as="targetPoint" /> - </mxGeometry> - </mxCell> - <mxCell id="FjrNxjV7lKJhjLr2JuWJ-1" value="Search Service" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="212" y="446.5" width="130" height="40" as="geometry" /> - </mxCell> <mxCell id="13tBXMPt0xomx7MP2VuM-1" value="Analyse Service" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="384" y="526" width="130" height="40" as="geometry" /> </mxCell> @@ -540,7 +529,7 @@ <mxCell id="7RDKXMOAFIesw4qWB4ET-105" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://assets.stickpng.com/images/58480f12cef1014c0b5e4931.png;" parent="7RDKXMOAFIesw4qWB4ET-103" vertex="1"> <mxGeometry x="28" y="33" width="34.67" height="23" as="geometry" /> </mxCell> - <mxCell id="glPSNq5Z3xSe9Szlq7L9-6" value="Elastic<br>Search" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#B3B3B3;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> + <mxCell id="glPSNq5Z3xSe9Szlq7L9-6" value="Search<br>Database" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#B3B3B3;fontColor=#000000;strokeColor=#000000;" parent="1" vertex="1"> <mxGeometry x="60" y="426.5" width="60" height="80" as="geometry" /> </mxCell> <mxCell id="45LT9Xtm5jvL1Omwo4Uv-4" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://brandslogos.com/wp-content/uploads/images/large/elastic-elasticsearch-logo.png;imageBackground=default;" parent="1" vertex="1"> diff --git a/misc/diagrams.drawio b/misc/diagrams.drawio index a398066..fbd74ff 100644 --- a/misc/diagrams.drawio +++ b/misc/diagrams.drawio @@ -1,6 +1,6 @@ -<mxfile host="Electron" modified="2023-05-24T09:23:59.741Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="kEBBNfs3pHTYPqyQ0YQ_" version="21.1.2" type="device"> +<mxfile host="Electron" modified="2023-06-01T05:20:18.779Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.1.2 Chrome/106.0.5249.199 Electron/21.4.3 Safari/537.36" etag="dIGRWifoC4RPeXPQbuQo" version="21.1.2" type="device"> <diagram id="knNdf-EWXshwNRS6GdW0" name="groups-roles"> - <mxGraphModel dx="1434" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="585" pageHeight="520" math="0" shadow="0"> + <mxGraphModel dx="1434" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="585" pageHeight="581" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> @@ -13,10 +13,10 @@ </mxGeometry> </mxCell> <mxCell id="p7gkXpudOZQYVS-MGniQ-26" value="" style="rounded=1;whiteSpace=wrap;html=1;arcSize=7;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="223.5" y="156" width="141" height="360" as="geometry" /> + <mxGeometry x="223.5" y="156" width="141" height="424" as="geometry" /> </mxCell> <mxCell id="p7gkXpudOZQYVS-MGniQ-22" value="" style="rounded=1;whiteSpace=wrap;html=1;arcSize=7;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="2" y="156" width="141" height="360" as="geometry" /> + <mxGeometry x="2" y="156" width="141" height="424" as="geometry" /> </mxCell> <mxCell id="p7gkXpudOZQYVS-MGniQ-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="p7gkXpudOZQYVS-MGniQ-1" target="p7gkXpudOZQYVS-MGniQ-4" edge="1"> <mxGeometry relative="1" as="geometry" /> @@ -75,23 +75,38 @@ <mxGeometry x="12.5" y="346" width="120" height="40" as="geometry" /> </mxCell> <mxCell id="p7gkXpudOZQYVS-MGniQ-18" value="escalated-container-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="234" y="166" width="120" height="40" as="geometry" /> + <mxGeometry x="234" y="226" width="120" height="40" as="geometry" /> </mxCell> <mxCell id="p7gkXpudOZQYVS-MGniQ-19" value="escalated-database-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="234" y="226" width="120" height="40" as="geometry" /> + <mxGeometry x="234" y="286" width="120" height="40" as="geometry" /> </mxCell> <mxCell id="p7gkXpudOZQYVS-MGniQ-20" value="escalated-query-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="234" y="346" width="120" height="40" as="geometry" /> + <mxGeometry x="234" y="406" width="120" height="40" as="geometry" /> </mxCell> <mxCell id="p7gkXpudOZQYVS-MGniQ-21" value="escalated-table-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> - <mxGeometry x="234" y="286" width="120" height="40" as="geometry" /> + <mxGeometry x="234" y="346" width="120" height="40" as="geometry" /> </mxCell> <mxCell id="p7gkXpudOZQYVS-MGniQ-30" value="" style="rounded=1;whiteSpace=wrap;html=1;arcSize=7;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#000000;" parent="1" vertex="1"> - <mxGeometry x="441.5" y="156" width="141" height="360" as="geometry" /> + <mxGeometry x="441.5" y="156" width="141" height="424" as="geometry" /> </mxCell> <mxCell id="p7gkXpudOZQYVS-MGniQ-31" value="escalated-identifier-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1"> + <mxGeometry x="452" y="286" width="120" height="40" as="geometry" /> + </mxCell> + <mxCell id="eG7ZnV9Yg5ZkV4eK6rEn-1" value="default-semantics-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="12" y="530" width="120" height="40" as="geometry" /> + </mxCell> + <mxCell id="eG7ZnV9Yg5ZkV4eK6rEn-3" value="default-maintenance-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="234" y="166" width="120" height="40" as="geometry" /> + </mxCell> + <mxCell id="eG7ZnV9Yg5ZkV4eK6rEn-5" value="default-user-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="452" y="166" width="120" height="40" as="geometry" /> </mxCell> + <mxCell id="eG7ZnV9Yg5ZkV4eK6rEn-6" value="default-semantics-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="452" y="226" width="120" height="40" as="geometry" /> + </mxCell> + <mxCell id="eG7ZnV9Yg5ZkV4eK6rEn-7" value="escalated-semantics-<br>handling" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="452" y="346" width="120" height="40" as="geometry" /> + </mxCell> </root> </mxGraphModel> </diagram> diff --git a/swagger/api-container.yaml b/swagger/api-container.yaml index bd8f5e7..2102e2f 100644 --- a/swagger/api-container.yaml +++ b/swagger/api-container.yaml @@ -32,18 +32,18 @@ paths: type: integer format: int64 responses: - "404": - description: Image could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Found image content: application/json: schema: $ref: '#/components/schemas/ImageDto' + "404": + description: Image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' put: tags: - image-endpoint @@ -63,18 +63,18 @@ paths: $ref: '#/components/schemas/ImageChangeDto' required: true responses: - "404": - description: Image could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "202": description: Updated image successfully content: application/json: schema: $ref: '#/components/schemas/ImageDto' + "404": + description: Image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] delete: @@ -83,21 +83,21 @@ paths: summary: Delete some image operationId: delete parameters: - - name: imageId + - name: id in: path required: true schema: type: integer format: int64 responses: + "202": + description: Deleted image successfully "404": description: Image could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Deleted image successfully security: - bearerAuth: [] /api/container/{id}: @@ -114,18 +114,18 @@ paths: type: integer format: int64 responses: - "200": - description: Found container + "502": + description: Docker client failed to connect content: application/json: schema: - $ref: '#/components/schemas/ContainerDto' - "502": - description: Connection to the container failed + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Found container content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/ContainerDto' "404": description: Container image could not be found content: @@ -151,20 +151,20 @@ paths: $ref: '#/components/schemas/ContainerChangeDto' required: true responses: - "404": - description: Container or user could not be found + "409": + description: Container is already started/stopped content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Modification of container state is not permitted + "404": + description: Container or user could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Container is already started/stopped + "405": + description: Modification of container state is not permitted content: application/json: schema: @@ -196,14 +196,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Deleted container successfully "409": description: Container is still running content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Deleted container successfully security: - bearerAuth: [] /api/image: @@ -218,7 +218,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/ContainerImage' post: tags: - image-endpoint @@ -231,6 +233,12 @@ paths: $ref: '#/components/schemas/ImageCreateDto' required: true responses: + "201": + description: Created image + content: + application/json: + schema: + $ref: '#/components/schemas/ImageDto' "404": description: User could not be found content: @@ -255,12 +263,6 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Created image - content: - application/json: - schema: - $ref: '#/components/schemas/ImageDto' security: - bearerAuth: [] /api/container: @@ -282,7 +284,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/ContainerBriefDto' post: tags: - container-endpoint @@ -295,12 +299,6 @@ paths: $ref: '#/components/schemas/ContainerCreateRequestDto' required: true responses: - "502": - description: Docker client failed to connect - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "201": description: Created a new container content: @@ -319,6 +317,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "502": + description: Docker client failed to connect + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] components: @@ -328,8 +332,12 @@ components: - dialect - driver_class - jdbc_method + - registry type: object properties: + registry: + type: string + example: docker.io/library defaultPort: maximum: 65535 minimum: 1024 @@ -370,6 +378,84 @@ components: - password - privileged_username - privileged_password + ImageDateDto: + required: + - database_format + - example + - has_time + - id + - unix_format + type: object + properties: + id: + type: integer + format: int64 + example: + type: string + example: 30.01.2022 + database_format: + type: string + example: '%d.%c.%Y' + unix_format: + type: string + example: dd.MM.YYYY + has_time: + type: boolean + example: false + created_at: + type: string + format: date-time + ImageDto: + required: + - default_port + - dialect + - driver_class + - id + - jdbc_method + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + dialect: + type: string + example: org.hibernate.dialect.MariaDBDialect + hash: + type: string + example: sha256:c5ec7353d87dfc35067e7bffeb25d6a0d52dad41e8b7357213e3b12d6e7ff78e + compiled: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + size: + type: integer + example: 314295447 + driver_class: + type: string + example: org.mariadb.jdbc.Driver + date_formats: + type: array + items: + $ref: '#/components/schemas/ImageDateDto' + jdbc_method: + type: string + example: mariadb + default_port: + type: integer + format: int32 + example: 3306 ApiErrorDto: required: - code @@ -384,6 +470,7 @@ components: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS - 102 PROCESSING + - 103 EARLY_HINTS - 103 CHECKPOINT - 200 OK - 201 CREATED @@ -455,80 +542,6 @@ components: code: type: string example: error.service.code - ImageDateDto: - required: - - database_format - - example - - has_time - - id - - unix_format - type: object - properties: - id: - type: integer - format: int64 - example: - type: string - example: 30.01.2022 - database_format: - type: string - example: '%d.%c.%Y' - unix_format: - type: string - example: dd.MM.YYYY - has_time: - type: boolean - example: false - created_at: - type: string - format: date-time - ImageDto: - required: - - default_port - - dialect - - driver_class - - id - - jdbc_method - - repository - - tag - type: object - properties: - id: - type: integer - format: int64 - repository: - type: string - example: mariadb - tag: - type: string - example: "10.5" - dialect: - type: string - example: org.hibernate.dialect.MariaDBDialect - hash: - type: string - example: sha256:c5ec7353d87dfc35067e7bffeb25d6a0d52dad41e8b7357213e3b12d6e7ff78e - compiled: - type: string - format: date-time - example: 2021-03-12T15:26:21.678396092Z - size: - type: integer - example: 314295447 - driver_class: - type: string - example: org.mariadb.jdbc.Driver - date_formats: - type: array - items: - $ref: '#/components/schemas/ImageDateDto' - jdbc_method: - type: string - example: mariadb - default_port: - type: integer - format: int32 - example: 3306 ContainerChangeDto: required: - action @@ -570,188 +583,1125 @@ components: format: date-time internal_name: type: string - example: air-quality - CreatorBriefDto: - required: - - firstname - - lastname + example: air-quality + CreatorBriefDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + DatabaseBriefDto: + required: + - id + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + identifier: + $ref: '#/components/schemas/IdentifierBriefDto' + engine: + type: string + example: mariadb:10.5 + owner: + $ref: '#/components/schemas/UserBriefDto' + container: + $ref: '#/components/schemas/ContainerBriefDto' + creator: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + is_public: + type: boolean + example: true + IdentifierBriefDto: + required: + - container id + - creators + - database id + - id + - publication_year + - title + - type + type: object + properties: + id: + type: integer + format: int64 + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + type: + type: string + enum: + - database + - subset + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + creators: + type: array + items: + $ref: '#/components/schemas/CreatorBriefDto' + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + publication_year: + type: integer + format: int32 + example: 2022 + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ImageCreateDto: + required: + - default_port + - dialect + - driver_class + - jdbc_method + - registry + - repository + - tag + type: object + properties: + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + dialect: + type: string + environment: + type: array + items: + $ref: '#/components/schemas/ImageEnvItemDto' + driver_class: + type: string + jdbc_method: + type: string + default_port: + maximum: 65535 + minimum: 1024 + type: integer + format: int32 + ContainerCreateRequestDto: + required: + - name + - repository + - tag + type: object + properties: + name: + type: string + example: Air Quality + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + Constraints: + type: object + properties: + uniques: + type: array + items: + $ref: '#/components/schemas/Unique' + foreignKeys: + type: array + items: + $ref: '#/components/schemas/ForeignKey' + checks: + uniqueItems: true + type: array + items: + type: string + Container: + type: object + properties: + id: + type: integer + format: int64 + createdBy: + type: string + format: uuid + creator: + $ref: '#/components/schemas/User' + ownedBy: + type: string + format: uuid + owner: + $ref: '#/components/schemas/User' + name: + type: string + internalName: + type: string + hash: + type: string + imageId: + type: integer + format: int64 + port: + type: integer + format: int32 + database: + $ref: '#/components/schemas/Database' + image: + $ref: '#/components/schemas/ContainerImage' + ipAddress: + type: string + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ContainerImage: + type: object + properties: + id: + type: integer + format: int64 + repository: + type: string + registry: + type: string + tag: + type: string + driverClass: + type: string + dialect: + type: string + jdbcMethod: + type: string + hash: + type: string + compiled: + type: string + format: date-time + size: + type: integer + format: int64 + defaultPort: + type: integer + format: int32 + environment: + type: array + items: + $ref: '#/components/schemas/ContainerImageEnvironmentItem' + dateFormats: + type: array + items: + $ref: '#/components/schemas/ContainerImageDate' + containers: + type: array + items: + $ref: '#/components/schemas/Container' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ContainerImageDate: + type: object + properties: + id: + type: integer + format: int64 + iid: + type: integer + format: int64 + image: + $ref: '#/components/schemas/ContainerImage' + example: + type: string + hasTime: + type: boolean + databaseFormat: + type: string + unixFormat: + type: string + createdAt: + type: string + format: date-time + ContainerImageEnvironmentItem: + type: object + properties: + id: + type: integer + format: int64 + iid: + type: integer + format: int64 + key: + type: string + value: + type: string + type: + type: string + enum: + - USERNAME + - PASSWORD + - PRIVILEGED_USERNAME + - PRIVILEGED_PASSWORD + image: + $ref: '#/components/schemas/ContainerImage' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + Creator: + type: object + properties: + id: + type: integer + format: int64 + pid: + type: integer + format: int64 + firstname: + type: string + lastname: + type: string + affiliation: + type: string + orcid: + type: string + identifier: + $ref: '#/components/schemas/Identifier' + created: + type: string + format: date-time + creator: + $ref: '#/components/schemas/User' + lastModified: + type: string + format: date-time + Credential: + type: object + properties: + id: + type: string + format: uuid + type: + type: string + userId: + type: string + format: uuid + createdDate: + type: integer + format: int64 + secretData: + type: string + credentialData: + type: string + priority: + type: integer + format: int32 + user: + $ref: '#/components/schemas/User' + Database: + type: object + properties: + id: + type: integer + format: int64 + createdBy: + type: string + format: uuid + creator: + $ref: '#/components/schemas/User' + ownedBy: + type: string + format: uuid + owner: + $ref: '#/components/schemas/User' + container: + $ref: '#/components/schemas/Container' + name: + type: string + internalName: + type: string + exchangeName: + type: string + description: + type: string + contactPerson: + type: string + format: uuid + contact: + $ref: '#/components/schemas/User' + identifier: + $ref: '#/components/schemas/Identifier' + tables: + type: array + items: + $ref: '#/components/schemas/Table' + views: + type: array + items: + $ref: '#/components/schemas/View' + isPublic: + type: boolean + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ForeignKey: + type: object + properties: + fkid: + type: integer + format: int64 + tid: + type: integer + format: int64 + tdbid: + type: integer + format: int64 + table: + $ref: '#/components/schemas/Table' + rtid: + type: integer + format: int64 + rtdbid: + type: integer + format: int64 + referencedTable: + $ref: '#/components/schemas/Table' + references: + type: array + items: + $ref: '#/components/schemas/ForeignKeyReference' + onUpdate: + type: string + enum: + - ReferenceType.RESTRICT + - ReferenceType.CASCADE + - ReferenceType.SET_NULL + - ReferenceType.NO_ACTION + - ReferenceType.SET_DEFAULT + onDelete: + type: string + enum: + - ReferenceType.RESTRICT + - ReferenceType.CASCADE + - ReferenceType.SET_NULL + - ReferenceType.NO_ACTION + - ReferenceType.SET_DEFAULT + ForeignKeyReference: + type: object + properties: + id: + type: integer + format: int64 + foreignKey: + $ref: '#/components/schemas/ForeignKey' + column: + $ref: '#/components/schemas/TableColumn' + referencedColumn: + $ref: '#/components/schemas/TableColumn' + Identifier: + required: + - publisher + type: object + properties: + id: + type: integer + format: int64 + containerId: + type: integer + format: int64 + databaseId: + type: integer + format: int64 + queryId: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/User' + title: + type: string + description: + type: string + publisher: + type: string + language: + type: string + enum: + - LanguageType.AB + - LanguageType.AA + - LanguageType.AF + - LanguageType.AK + - LanguageType.SQ + - LanguageType.AM + - LanguageType.AR + - LanguageType.AN + - LanguageType.HY + - LanguageType.AS + - LanguageType.AV + - LanguageType.AE + - LanguageType.AY + - LanguageType.AZ + - LanguageType.BM + - LanguageType.BA + - LanguageType.EU + - LanguageType.BE + - LanguageType.BN + - LanguageType.BH + - LanguageType.BI + - LanguageType.BS + - LanguageType.BR + - LanguageType.BG + - LanguageType.MY + - LanguageType.CA + - LanguageType.KM + - LanguageType.CH + - LanguageType.CE + - LanguageType.NY + - LanguageType.ZH + - LanguageType.CU + - LanguageType.CV + - LanguageType.KW + - LanguageType.CO + - LanguageType.CR + - LanguageType.HR + - LanguageType.CS + - LanguageType.DA + - LanguageType.DV + - LanguageType.NL + - LanguageType.DZ + - LanguageType.EN + - LanguageType.EO + - LanguageType.ET + - LanguageType.EE + - LanguageType.FO + - LanguageType.FJ + - LanguageType.FI + - LanguageType.FR + - LanguageType.FF + - LanguageType.GD + - LanguageType.GL + - LanguageType.LG + - LanguageType.KA + - LanguageType.DE + - LanguageType.KI + - LanguageType.EL + - LanguageType.KL + - LanguageType.GN + - LanguageType.GU + - LanguageType.HT + - LanguageType.HA + - LanguageType.HE + - LanguageType.HZ + - LanguageType.HI + - LanguageType.HO + - LanguageType.HU + - LanguageType.IS + - LanguageType.IO + - LanguageType.IG + - LanguageType.ID + - LanguageType.IA + - LanguageType.IE + - LanguageType.IU + - LanguageType.IK + - LanguageType.GA + - LanguageType.IT + - LanguageType.JA + - LanguageType.JV + - LanguageType.KN + - LanguageType.KR + - LanguageType.KS + - LanguageType.KK + - LanguageType.RW + - LanguageType.KV + - LanguageType.KG + - LanguageType.KO + - LanguageType.KJ + - LanguageType.KU + - LanguageType.KY + - LanguageType.LO + - LanguageType.LA + - LanguageType.LV + - LanguageType.LB + - LanguageType.LI + - LanguageType.LN + - LanguageType.LT + - LanguageType.LU + - LanguageType.MK + - LanguageType.MG + - LanguageType.MS + - LanguageType.ML + - LanguageType.MT + - LanguageType.GV + - LanguageType.MI + - LanguageType.MR + - LanguageType.MH + - LanguageType.RO + - LanguageType.MN + - LanguageType.NA + - LanguageType.NV + - LanguageType.ND + - LanguageType.NG + - LanguageType.NE + - LanguageType.SE + - LanguageType.NO + - LanguageType.NB + - LanguageType.NN + - LanguageType.II + - LanguageType.OC + - LanguageType.OJ + - LanguageType.OR + - LanguageType.OM + - LanguageType.OS + - LanguageType.PI + - LanguageType.PA + - LanguageType.PS + - LanguageType.FA + - LanguageType.PL + - LanguageType.PT + - LanguageType.QU + - LanguageType.RM + - LanguageType.RN + - LanguageType.RU + - LanguageType.SM + - LanguageType.SG + - LanguageType.SA + - LanguageType.SC + - LanguageType.SR + - LanguageType.SN + - LanguageType.SD + - LanguageType.SI + - LanguageType.SK + - LanguageType.SL + - LanguageType.SO + - LanguageType.ST + - LanguageType.NR + - LanguageType.ES + - LanguageType.SU + - LanguageType.SW + - LanguageType.SS + - LanguageType.SV + - LanguageType.TL + - LanguageType.TY + - LanguageType.TG + - LanguageType.TA + - LanguageType.TT + - LanguageType.TE + - LanguageType.TH + - LanguageType.BO + - LanguageType.TI + - LanguageType.TO + - LanguageType.TS + - LanguageType.TN + - LanguageType.TR + - LanguageType.TK + - LanguageType.TW + - LanguageType.UG + - LanguageType.UK + - LanguageType.UR + - LanguageType.UZ + - LanguageType.VE + - LanguageType.VI + - LanguageType.VO + - LanguageType.WA + - LanguageType.CY + - LanguageType.FY + - LanguageType.WO + - LanguageType.XH + - LanguageType.YI + - LanguageType.YO + - LanguageType.ZA + - LanguageType.ZU + license: + $ref: '#/components/schemas/License' + type: + type: string + enum: + - DATABASE + - SUBSET + query: + type: string + queryNormalized: + type: string + queryHash: + type: string + resultHash: + type: string + execution: + type: string + format: date-time + resultNumber: + type: integer + format: int64 + publicationYear: + type: integer + format: int32 + publicationMonth: + type: integer + format: int32 + publicationDay: + type: integer + format: int32 + visibility: + type: string + enum: + - VisibilityType.EVERYONE + - VisibilityType.SELF + database: + $ref: '#/components/schemas/Database' + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifier' + doi: + type: string + creators: + type: array + items: + $ref: '#/components/schemas/Creator' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + License: + type: object + properties: + identifier: + type: string + uri: + type: string + RelatedIdentifier: + type: object + properties: + id: + type: integer + format: int64 + iid: + type: integer + format: int64 + value: + type: string + type: + type: string + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + creator: + $ref: '#/components/schemas/User' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + Role: type: object properties: - firstname: + id: type: string - example: Josiah - lastname: + format: uuid + name: type: string - example: Carberry - affiliation: + realmId: type: string - example: Wesleyan University - DatabaseBriefDto: - required: - - id - - name - - owner + format: uuid + users: + type: array + items: + $ref: '#/components/schemas/User' + Table: type: object properties: id: type: integer format: int64 + tdbid: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/User' + owner: + $ref: '#/components/schemas/User' name: type: string - example: Air Quality - description: + internalName: type: string - example: Air Quality in Austria - identifier: - $ref: '#/components/schemas/IdentifierBriefDto' - engine: + queueName: type: string - example: mariadb:10.5 - owner: - $ref: '#/components/schemas/UserBriefDto' - container: - $ref: '#/components/schemas/ContainerBriefDto' - creator: - $ref: '#/components/schemas/UserBriefDto' + routingKey: + type: string + description: + type: string + database: + $ref: '#/components/schemas/Database' + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + constraints: + $ref: '#/components/schemas/Constraints' created: type: string format: date-time - is_public: - type: boolean - example: true - IdentifierBriefDto: - required: - - container id - - creators - - database id - - id - - publication_year - - title - - type + lastModified: + type: string + format: date-time + TableColumn: type: object properties: id: type: integer format: int64 - title: + tid: + type: integer + format: int64 + cdbid: + type: integer + format: int64 + dfid: + type: integer + format: int64 + dateFormat: + $ref: '#/components/schemas/ContainerImageDate' + table: + $ref: '#/components/schemas/Table' + view: + $ref: '#/components/schemas/View' + creator: + $ref: '#/components/schemas/User' + name: type: string - example: "Airquality Stephansplatz, Vienna, Austria" - type: + autoGenerated: + type: boolean + internalName: type: string - enum: - - database - - subset - doi: + isPrimaryKey: + type: boolean + indexLength: + type: integer + format: int32 + alias: type: string - example: 10.1038/nphys1170 - publisher: + columnType: type: string - example: TU Wien - creators: + enum: + - TableColumnType.ENUM + - TableColumnType.NUMBER + - TableColumnType.DECIMAL + - TableColumnType.STRING + - TableColumnType.TEXT + - TableColumnType.BOOLEAN + - TableColumnType.DATE + - TableColumnType.TIMESTAMP + - TableColumnType.BLOB + length: + type: integer + format: int32 + isNullAllowed: + type: boolean + enumValues: type: array items: - $ref: '#/components/schemas/CreatorBriefDto' + type: string + ordinalPosition: + type: integer + format: int32 created: type: string format: date-time + concept: + $ref: '#/components/schemas/TableColumnConcept' + unit: + $ref: '#/components/schemas/TableColumnUnit' lastModified: type: string format: date-time - container id: + TableColumnConcept: + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + TableColumnUnit: + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + Unique: + type: object + properties: + uid: type: integer format: int64 - example: 1 - database id: + tid: type: integer format: int64 - example: 1 - query id: + tdbid: type: integer format: int64 - example: 1 - publication_year: - type: integer - format: int32 - example: 2022 - UserBriefDto: - required: - - id - - username + table: + $ref: '#/components/schemas/Table' + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + User: type: object properties: id: type: string format: uuid - example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 username: type: string - description: Only contains lowercase characters - example: jcarberry - name: + firstname: type: string - example: Josiah Carberry - orcid: + lastname: type: string - example: 0000-0002-1825-0097 - given_name: + realmId: type: string - example: Josiah - family_name: + format: uuid + email: type: string - example: Carberry - email_verified: + emailVerified: type: boolean - example: true - ImageCreateDto: - required: - - default_port - - dialect - - driver_class - - jdbc_method - - repository - - tag + enabled: + type: boolean + createdTimestamp: + type: integer + format: int64 + databasePassword: + type: string + attributes: + type: array + items: + $ref: '#/components/schemas/UserAttribute' + credentials: + type: array + items: + $ref: '#/components/schemas/Credential' + containers: + type: array + items: + $ref: '#/components/schemas/Container' + databases: + type: array + items: + $ref: '#/components/schemas/Database' + identifiers: + type: array + items: + $ref: '#/components/schemas/Identifier' + roles: + type: array + items: + $ref: '#/components/schemas/Role' + tables: + type: array + items: + $ref: '#/components/schemas/Table' + UserAttribute: type: object properties: - repository: - type: string - example: mariadb - tag: + id: type: string - dialect: + format: uuid + userId: type: string - environment: - type: array - items: - $ref: '#/components/schemas/ImageEnvItemDto' - driver_class: + format: uuid + name: type: string - jdbc_method: + value: type: string - default_port: - type: integer - format: int32 - ContainerCreateRequestDto: - required: - - name - - repository - - tag + user: + $ref: '#/components/schemas/User' + View: type: object properties: + id: + type: integer + format: int64 + vcid: + type: integer + format: int64 + vdbid: + type: integer + format: int64 + createdBy: + type: string + format: uuid + creator: + $ref: '#/components/schemas/User' + database: + $ref: '#/components/schemas/Database' name: type: string - example: Air Quality - repository: + internalName: type: string - example: mariadb - tag: + isPublic: + type: boolean + isInitialView: + type: boolean + query: type: string - example: "10.5" + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time ColumnBriefDto: required: - column_type + - database_id - id - internal_name - name + - table_id type: object properties: id: @@ -760,6 +1710,12 @@ components: name: type: string example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 internal_name: type: string example: mdb_date @@ -848,12 +1804,6 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time DatabaseAccessDto: required: - type @@ -967,7 +1917,6 @@ components: example: everyone enum: - everyone - - trusted - self doi: type: string @@ -1218,6 +2167,7 @@ components: ImageBriefDto: required: - id + - registry - repository - tag type: object @@ -1225,6 +2175,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1325,11 +2278,11 @@ components: TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -1341,7 +2294,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array diff --git a/swagger/api-database.yaml b/swagger/api-database.yaml index a9f5bff..40b7699 100644 --- a/swagger/api-database.yaml +++ b/swagger/api-database.yaml @@ -50,18 +50,18 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Visibility modification is not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "202": description: Visibility modified successfully content: application/json: schema: $ref: '#/components/schemas/DatabaseDto' + "405": + description: Visibility modification is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/container/{id}/database/{databaseId}/transfer: @@ -90,18 +90,18 @@ paths: $ref: '#/components/schemas/DatabaseTransferDto' required: true responses: - "404": - description: Database or user could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "202": description: Transfer of ownership was successful content: application/json: schema: $ref: '#/components/schemas/DatabaseDto' + "404": + description: Database or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "405": description: Transfer of ownership is not permitted content: @@ -141,20 +141,20 @@ paths: $ref: '#/components/schemas/DatabaseModifyAccessDto' required: true responses: - "202": - description: Modify access succeeded - "400": - description: Modify access query or database connection is malformed + "404": + description: Database or user not found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Database or user not found + "400": + description: Modify access query or database connection is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Modify access succeeded "403": description: Modify access not permitted when no access is granted in the first place @@ -188,32 +188,32 @@ paths: schema: type: string responses: - "202": - description: Revoked access successfully - "400": - description: Modify access query or database connection is malformed + "404": + description: User with access was not found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Revoke of access not permitted as no access was found + "400": + description: Modify access query or database connection is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: User with access was not found + "405": + description: Revoke of access not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Revoke of access not permitted + "403": + description: Revoke of access not permitted as no access was found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Revoked access successfully security: - bearerAuth: [] /api/container/{id}/database: @@ -235,7 +235,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/DatabaseBriefDto' post: tags: - database-endpoint @@ -255,26 +257,21 @@ paths: $ref: '#/components/schemas/DatabaseCreateDto' required: true responses: - "501": - description: Container image is not supported - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "201": description: Created a new database content: application/json: schema: $ref: '#/components/schemas/DatabaseBriefDto' - "502": - description: Connection to the container failed + "404": + description: "Container, user or database could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Database create query is malformed + "406": + description: Failed to create user at broker service or virtual host could + not be reached at broker service content: application/json: schema: @@ -286,27 +283,32 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Container, user or database could not be found" + "501": + description: Container image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Failed to create user at broker service or virtual host could - not be reached at broker service + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Database name already exist or query store could not be created + "502": + description: Connection to the container failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "400": + description: Database create query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Database name already exist or query store could not be created content: application/json: schema: @@ -333,18 +335,18 @@ paths: type: integer format: int64 responses: - "200": - description: Found database access - content: - application/json: - schema: - $ref: '#/components/schemas/DatabaseAccessDto' "403": description: No access to this database content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Found database access + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseAccessDto' "405": description: Check access is not permitted content: @@ -380,14 +382,14 @@ paths: responses: "202": description: Granting access succeeded - "400": - description: Granting access query or database connection is malformed + "405": + description: Granting access not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Granting access not permitted + "400": + description: Granting access query or database connection is malformed content: application/json: schema: @@ -420,12 +422,6 @@ paths: type: integer format: int64 responses: - "200": - description: Database found successfully - content: - application/json: - schema: - $ref: '#/components/schemas/DatabaseDto' "405": description: Database information is not permitted content: @@ -433,11 +429,17 @@ paths: schema: $ref: '#/components/schemas/ApiErrorDto' "404": - description: Database could not be found + description: Database or container could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Database found successfully + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseDto' security: - bearerAuth: [] delete: @@ -459,39 +461,33 @@ paths: type: integer format: int64 responses: - "201": - description: Deleted a database - content: - application/json: - schema: - $ref: '#/components/schemas/DatabaseBriefDto' - "405": - description: Database delete permission is missing or revoke permissions - at broker service failed + "400": + description: Database delete query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Container image is not supported + "404": + description: Container or database could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "502": - description: Connection to the container failed + "405": + description: Database delete permission is missing or revoke permissions + at broker service failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Database delete query is malformed + "501": + description: Container image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Container or database could not be found + "503": + description: Connection to the database failed content: application/json: schema: @@ -503,12 +499,18 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "502": + description: Connection to the container failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "201": + description: Deleted a database + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseBriefDto' security: - bearerAuth: [] /api/container/{id}/database/license: @@ -530,7 +532,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DatabaseBriefDto' + type: array + items: + $ref: '#/components/schemas/LicenseDto' components: schemas: DatabaseModifyVisibilityDto: @@ -555,6 +559,7 @@ components: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS - 102 PROCESSING + - 103 EARLY_HINTS - 103 CHECKPOINT - 200 OK - 201 CREATED @@ -629,9 +634,11 @@ components: ColumnBriefDto: required: - column_type + - database_id - id - internal_name - name + - table_id type: object properties: id: @@ -640,6 +647,12 @@ components: name: type: string example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 internal_name: type: string example: mdb_date @@ -728,12 +741,6 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time DatabaseAccessDto: required: - type @@ -847,7 +854,6 @@ components: example: everyone enum: - everyone - - trusted - self doi: type: string @@ -1098,6 +1104,7 @@ components: ImageBriefDto: required: - id + - registry - repository - tag type: object @@ -1105,6 +1112,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1145,6 +1155,7 @@ components: - driver_class - id - jdbc_method + - registry - repository - tag type: object @@ -1152,6 +1163,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1279,11 +1293,11 @@ components: TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -1295,7 +1309,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array @@ -1575,12 +1589,6 @@ components: type: array items: $ref: '#/components/schemas/CreatorBriefDto' - created: - type: string - format: date-time - lastModified: - type: string - format: date-time container id: type: integer format: int64 diff --git a/swagger/api-identifier.yaml b/swagger/api-identifier.yaml index a3326c7..002b392 100644 --- a/swagger/api-identifier.yaml +++ b/swagger/api-identifier.yaml @@ -18,10 +18,10 @@ servers: - url: https://dbrepo2.tuwien.ac.at description: Sandbox paths: - /api/identifier/{id}: + /api/pid/{id}: put: tags: - - identifier-endpoint + - persistence-endpoint summary: Update some identifier operationId: update parameters: @@ -35,11 +35,11 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/IdentifierDto' + $ref: '#/components/schemas/IdentifierUpdateDto' required: true responses: - "404": - description: Identifier could not be found + "405": + description: Updating identifier not permitted content: application/json: schema: @@ -50,6 +50,18 @@ paths: application/json: schema: $ref: '#/components/schemas/IdentifierDto' + "404": + description: Identifier or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Identifier data is not valid to the form + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "406": description: Updating identifier not allowed content: @@ -60,7 +72,7 @@ paths: - bearerAuth: [] delete: tags: - - identifier-endpoint + - persistence-endpoint summary: Delete some identifier operationId: delete parameters: @@ -77,6 +89,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Deleting identifier not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "202": description: Deleted identifier security: @@ -114,7 +132,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/IdentifierDto' post: tags: - identifier-endpoint @@ -133,20 +153,14 @@ paths: $ref: '#/components/schemas/IdentifierCreateDto' required: true responses: - "201": - description: Created identifier - content: - application/json: - schema: - $ref: '#/components/schemas/IdentifierDto' - "404": - description: "Query, database or user could not be found" + "406": + description: Creating identifier not allowed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Identifier for this resource already exists + "400": + description: Identifier form contains invalid request data content: application/json: schema: @@ -157,14 +171,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Creating identifier not allowed + "201": + description: Created identifier content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Identifier form contains invalid request data + $ref: '#/components/schemas/IdentifierDto' + "403": + description: Insufficient access rights or authorities content: application/json: schema: @@ -175,6 +189,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Identifier for this resource already exists + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/pid/{pid}: @@ -208,6 +228,13 @@ paths: text/bibliography; style=apa: {} text/bibliography; style=ieee: {} text/bibliography; style=bibtex: {} + "404": + description: Identifier could not be exported from database as the resource + was not found + content: + text/csv: + schema: + $ref: '#/components/schemas/ApiErrorDto' "400": description: "Identifier could not be exported, the requested style is not\ \ known" @@ -221,13 +248,6 @@ paths: text/csv: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Identifier could not be exported from database as the resource - was not found - content: - text/csv: - schema: - $ref: '#/components/schemas/ApiErrorDto' components: schemas: CreatorDto: @@ -252,32 +272,29 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time - IdentifierDto: + IdentifierUpdateDto: required: - - container id + - cid - creators - - database id - - execution + - dbid - publication_year - - query - - query_hash - - query_normalized - - result_hash - - result_number - title - type - visibility type: object properties: - id: + cid: + type: integer + format: int64 + dbid: type: integer format: int64 + qid: + type: integer + format: int64 + doi: + type: string + example: 10.1038/nphys1170 type: type: string enum: @@ -289,23 +306,12 @@ components: description: type: string example: "Air quality reports at Stephansplatz, Vienna" - query: - type: string - example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ - \ = \"09:STEF\"" - execution: - type: string - format: date-time visibility: type: string example: everyone enum: - everyone - - trusted - self - doi: - type: string - example: 10.1038/nphys1170 publisher: type: string example: TU Wien @@ -502,38 +508,6 @@ components: type: array items: $ref: '#/components/schemas/CreatorDto' - created: - type: string - format: date-time - container id: - type: integer - format: int64 - example: 1 - database id: - type: integer - format: int64 - example: 1 - query id: - type: integer - format: int64 - example: 1 - query_normalized: - type: string - example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ - \ = \"09:STEF\"" - related: - type: array - items: - $ref: '#/components/schemas/RelatedIdentifierDto' - query_hash: - type: string - description: query hash in sha512 - result_hash: - type: string - result_number: - type: integer - format: int64 - example: 1 publication_day: type: integer format: int32 @@ -546,9 +520,10 @@ components: type: integer format: int32 example: 2022 - last_modified: - type: string - format: date-time + related_identifiers: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierCreateDto' LicenseDto: required: - identifier @@ -561,16 +536,11 @@ components: uri: type: string example: https://opensource.org/licenses/MIT - RelatedIdentifierDto: + RelatedIdentifierCreateDto: required: - - created - - id - value type: object properties: - id: - type: integer - format: int64 value: type: string example: 10.70124/dc4zh-9ce78 @@ -634,12 +604,6 @@ components: - Requires - IsObsoletedBy - Obsoletes - created: - type: string - format: date-time - last_modified: - type: string - format: date-time ApiErrorDto: required: - code @@ -654,6 +618,7 @@ components: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS - 102 PROCESSING + - 103 EARLY_HINTS - 103 CHECKPOINT - 200 OK - 201 CREATED @@ -725,41 +690,24 @@ components: code: type: string example: error.service.code - CreatorCreateDto: - required: - - firstname - - lastname - type: object - properties: - firstname: - type: string - example: Josiah - lastname: - type: string - example: Carberry - affiliation: - type: string - example: Wesleyan University - orcid: - type: string - example: 0000-0002-1825-0097 - IdentifierCreateDto: + IdentifierDto: required: - - cid + - container id - creators - - dbid + - database id + - execution - publication_year + - query + - query_hash + - query_normalized + - result_hash + - result_number - title - type + - visibility type: object properties: - cid: - type: integer - format: int64 - dbid: - type: integer - format: int64 - qid: + id: type: integer format: int64 type: @@ -773,6 +721,22 @@ components: description: type: string example: "Air quality reports at Stephansplatz, Vienna" + query: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + execution: + type: string + format: date-time + visibility: + type: string + example: everyone + enum: + - everyone + - self + doi: + type: string + example: 10.1038/nphys1170 publisher: type: string example: TU Wien @@ -968,7 +932,39 @@ components: creators: type: array items: - $ref: '#/components/schemas/CreatorCreateDto' + $ref: '#/components/schemas/CreatorDto' + created: + type: string + format: date-time + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + query_normalized: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierDto' + query_hash: + type: string + description: query hash in sha512 + result_hash: + type: string + result_number: + type: integer + format: int64 + example: 1 publication_day: type: integer format: int32 @@ -981,15 +977,19 @@ components: type: integer format: int32 example: 2022 - related_identifiers: - type: array - items: - $ref: '#/components/schemas/RelatedIdentifierCreateDto' - RelatedIdentifierCreateDto: + last_modified: + type: string + format: date-time + RelatedIdentifierDto: required: + - created + - id - value type: object properties: + id: + type: integer + format: int64 value: type: string example: 10.70124/dc4zh-9ce78 @@ -1053,6 +1053,279 @@ components: - Requires - IsObsoletedBy - Obsoletes + created: + type: string + format: date-time + last_modified: + type: string + format: date-time + CreatorCreateDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + orcid: + type: string + example: 0000-0002-1825-0097 + IdentifierCreateDto: + required: + - cid + - creators + - dbid + - publication_year + - title + - type + - visibility + type: object + properties: + cid: + type: integer + format: int64 + dbid: + type: integer + format: int64 + qid: + type: integer + format: int64 + type: + type: string + enum: + - database + - subset + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + visibility: + type: string + example: everyone + enum: + - everyone + - self + publisher: + type: string + example: TU Wien + language: + type: string + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + license: + $ref: '#/components/schemas/LicenseDto' + creators: + type: array + items: + $ref: '#/components/schemas/CreatorCreateDto' + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + related_identifiers: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierCreateDto' securitySchemes: bearerAuth: type: http diff --git a/swagger/api-metadata.yaml b/swagger/api-metadata.yaml index 6ce0126..bc1c717 100644 --- a/swagger/api-metadata.yaml +++ b/swagger/api-metadata.yaml @@ -52,11 +52,11 @@ components: type: string resumptionToken: type: string - parametersString: - type: string fromDate: type: string format: date-time untilDate: type: string format: date-time + parametersString: + type: string diff --git a/swagger/api-query.yaml b/swagger/api-query.yaml index a40d3d7..16168d9 100644 --- a/swagger/api-query.yaml +++ b/swagger/api-query.yaml @@ -23,7 +23,7 @@ paths: tags: - table-history-endpoint summary: Find all history - operationId: getAll_1 + operationId: getAll parameters: - name: id in: path @@ -44,38 +44,40 @@ paths: type: integer format: int64 responses: - "504": - description: Query store failed to query table history + "405": + description: Find table history is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Table history query is malformed + "200": + description: Find table history successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + type: array + items: + $ref: '#/components/schemas/TableHistoryDto' + "404": + description: "Table, database or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find table history successfully + "504": + description: Query store failed to query table history content: application/json: schema: - type: string - "404": - description: "Table, database or user could not be found" + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find table history is not permitted + "400": + description: Table history query is malformed content: application/json: schema: @@ -86,7 +88,7 @@ paths: tags: - table-history-endpoint summary: Find all history - operationId: getAll + operationId: getAll_1 parameters: - name: id in: path @@ -107,38 +109,40 @@ paths: type: integer format: int64 responses: - "504": - description: Query store failed to query table history + "405": + description: Find table history is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Table history query is malformed + "200": + description: Find table history successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + type: array + items: + $ref: '#/components/schemas/TableHistoryDto' + "404": + description: "Table, database or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find table history successfully + "504": + description: Query store failed to query table history content: application/json: schema: - type: string - "404": - description: "Table, database or user could not be found" + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find table history is not permitted + "400": + description: Table history query is malformed content: application/json: schema: @@ -150,7 +154,7 @@ paths: tags: - table-data-endpoint summary: Find data - operationId: getAll_3 + operationId: getAll_2 parameters: - name: id in: path @@ -320,7 +324,7 @@ paths: tags: - table-data-endpoint summary: Find data - operationId: getAll_2 + operationId: getAll_3 parameters: - name: id in: path @@ -406,26 +410,20 @@ paths: type: integer format: int64 responses: - "405": - description: Find query is not permitted + "200": + description: List queries content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/QueryDto' "404": description: "Database, query or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: List queries - content: - application/json: - schema: - $ref: '#/components/schemas/QueryDto' - "503": - description: Connection to the database failed + "405": + description: Find query is not permitted content: application/json: schema: @@ -442,6 +440,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] put: @@ -475,6 +479,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "200": description: Persist query successful content: @@ -487,8 +497,8 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "504": + description: Query store failed to persist query content: application/json: schema: @@ -499,12 +509,6 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Query store failed to persist query - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/container/{id}/database/{databaseId}/view: @@ -544,7 +548,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/ViewBriefDto' security: - bearerAuth: [] post: @@ -578,20 +584,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Create view is not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "404": + description: Database or user could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Create view query is malformed + "405": + description: Create view is not permitted content: application/json: schema: @@ -602,24 +602,30 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Database or user could not be found + "201": + description: Create view successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/ViewBriefDto' "423": description: Create view resulted in an invalid query statement content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Create view successfully + "400": + description: Create view query is malformed content: application/json: schema: - $ref: '#/components/schemas/ViewBriefDto' + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/container/{id}/database/{databaseId}/table/{tableId}/data/import: @@ -683,49 +689,51 @@ paths: schema: type: boolean responses: - "200": - description: List queries + "405": + description: Find all queries is not permitted content: application/json: schema: - type: string - "503": - description: Connection to the database failed + $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find all queries is not permitted + "504": + description: Query store failed to select query content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Selection of time-versioned query resulted in an invalid query - statement + "404": + description: "Database, container or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "423": + description: Selection of time-versioned query resulted in an invalid query + statement content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Database, container or user could not be found" + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Query store failed to select query + "200": + description: List queries content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + type: array + items: + $ref: '#/components/schemas/QueryBriefDto' security: - bearerAuth: [] post: @@ -812,12 +820,6 @@ paths: type: integer format: int64 responses: - "405": - description: Find view is not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Find view successfully content: @@ -830,6 +832,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Find view is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] delete: @@ -863,40 +871,40 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "403": + description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Credentials missing + "404": + description: "Database, view or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Delete view is not permitted + "400": + description: Delete view query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "200": description: Delete view successfully - "404": - description: "Database, view or user could not be found" + "423": + description: Delete view resulted in an invalid query statement content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Delete view query is malformed + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Delete view resulted in an invalid query statement + "405": + description: Delete view is not permitted content: application/json: schema: @@ -941,14 +949,14 @@ paths: type: integer format: int64 responses: - "401": - description: Credentials missing + "200": + description: Find data successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Query store failed to query view data + $ref: '#/components/schemas/QueryResultDto' + "401": + description: Credentials missing content: application/json: schema: @@ -959,26 +967,26 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "403": + description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find data successfully + "417": + description: Parsing of resulting columns failed content: application/json: schema: - $ref: '#/components/schemas/QueryResultDto' - "403": - description: Credentials missing + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Query store failed to query view data content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "404": + description: "Database, view, container or user could not be found" content: application/json: schema: @@ -989,20 +997,20 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Database, view, container or user could not be found" + "501": + description: Image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Parsing of resulting columns failed + "405": + description: Find data is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find data is not permitted + "503": + description: Connection to the database failed content: application/json: schema: @@ -1275,6 +1283,7 @@ components: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS - 102 PROCESSING + - 103 EARLY_HINTS - 103 CHECKPOINT - 200 OK - 201 CREATED @@ -1346,6 +1355,22 @@ components: code: type: string example: error.service.code + TableHistoryDto: + required: + - event + - timestamp + - total + type: object + properties: + timestamp: + type: string + format: date-time + event: + type: string + total: + type: integer + format: int64 + example: 1 QueryResultDto: required: - id @@ -1382,9 +1407,11 @@ components: ColumnBriefDto: required: - column_type + - database_id - id - internal_name - name + - table_id type: object properties: id: @@ -1393,6 +1420,12 @@ components: name: type: string example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 internal_name: type: string example: mdb_date @@ -1481,12 +1514,6 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time DatabaseAccessDto: required: - type @@ -1600,7 +1627,6 @@ components: example: everyone enum: - everyone - - trusted - self doi: type: string @@ -1851,6 +1877,7 @@ components: ImageBriefDto: required: - id + - registry - repository - tag type: object @@ -1858,6 +1885,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1898,6 +1928,7 @@ components: - driver_class - id - jdbc_method + - registry - repository - tag type: object @@ -1905,6 +1936,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -2091,11 +2125,11 @@ components: TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -2107,7 +2141,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array @@ -2352,6 +2386,124 @@ components: last_modified: type: string format: date-time + CreatorBriefDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + IdentifierBriefDto: + required: + - container id + - creators + - database id + - id + - publication_year + - title + - type + type: object + properties: + id: + type: integer + format: int64 + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + type: + type: string + enum: + - database + - subset + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + creators: + type: array + items: + $ref: '#/components/schemas/CreatorBriefDto' + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + publication_year: + type: integer + format: int32 + example: 2022 + QueryBriefDto: + required: + - cid + - created + - creator + - dbid + - id + - query + - query_hash + type: object + properties: + id: + type: integer + format: int64 + cid: + type: integer + format: int64 + dbid: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/UserDto' + execution: + type: string + format: date-time + query: + type: string + example: SELECT `id` FROM `air_quality` + type: + type: string + example: query + enum: + - query + - view + identifier: + $ref: '#/components/schemas/IdentifierBriefDto' + created: + type: string + format: date-time + query_normalized: + type: string + example: SELECT `id` FROM `air_quality` + query_hash: + type: string + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + result_hash: + type: string + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + result_number: + type: integer + format: int64 + example: 1 + last_modified: + type: string + format: date-time TableCsvDeleteDto: required: - keys diff --git a/swagger/api-semantics.yaml b/swagger/api-semantics.yaml index 20727fd..c001c6d 100644 --- a/swagger/api-semantics.yaml +++ b/swagger/api-semantics.yaml @@ -1 +1,685 @@ -{"definitions":{},"externalDocs":{"description":"Sourcecode Documentation","url":"https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services"},"info":{"contact":{"email":"andreas.rauber@tuwien.ac.at","name":"Prof. Andreas Rauber"},"description":"Service for assigning concepts to database tables and columns.","license":{"name":"Apache 2.0","url":"https://www.apache.org/licenses/LICENSE-2.0"},"title":"Database Repository Unit / Ontology Service API","version":"1.2.0"},"openapi":"3.0.0","paths":{"/api/semantics/concept":{"get":{"consumes":["application/json"],"description":"This is a simple API which returns a list of suggested concepts.","parameters":[{"description":"The query to retrieve a fitting concept","in":"query","name":"q","schema":{"type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Suggest a concept","tags":["concepts-endpoint"]},"post":{"consumes":["application/json"],"description":"This is a simple API for saving concept","produces":["application/json"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"name":{"example":"metre","type":"string"},"uri":{"example":"http://www.ontology-of-units-of-measure.org/resource/om-2/metre","type":"string"}},"required":["uri","name"],"type":"object"}}}},"responses":{"200":{"description":"OK"},"201":{"description":"Created"},"405":{"description":"Invalid input"},"409":{"description":"Concept already present"}},"summary":"Save concept to MDB","tags":["concepts-endpoint"]},"put":{"consumes":["application/json"],"description":"This is a simple API for retrieving label from concepts","produces":["application/json"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"uri":{"example":"http://www.wikidata.org/entity/Q35120","type":"string"}},"required":["uri","name"],"type":"object"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid URI"},"500":{"description":"Server error"}},"summary":"Retrieve label from URI","tags":["concepts-endpoint"]}},"/api/semantics/concept/{concept}/validate":{"get":{"consumes":["application/json"],"description":"This is a simple API for validating concepts.","parameters":[{"description":"Validates concepts against om-2.","in":"path","name":"unit","required":true,"schema":{"example":"distance","type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Validate concepts","tags":["concepts-endpoint"]}},"/api/semantics/ontology":{"get":{"consumes":["application/json"],"description":"This is a simple API for listing all ontologies (.nt, .ttl files) used in DB-Repo.","produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"List ontologies","tags":["ontologies-endpoint"]}},"/api/semantics/ontology/{name}":{"get":{"consumes":["application/json"],"description":"This is a simple API for getting a certain ontologies (.nt, .ttl files) stored in DB-Repo.","parameters":[{"in":"path","name":"o_name","required":true,"schema":{"example":"VOCAB_QUDT-UNITS-ALL-v2.1","type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"404":{"description":"Not found"},"405":{"description":"Invalid input"}},"summary":"Get ontology","tags":["ontologies-endpoint"]}},"/api/semantics/unit":{"get":{"consumes":["application/json"],"description":"This is a simple API which returns a list of suggested units.","parameters":[{"description":"The query to retrieve a fitting unit","in":"query","name":"q","schema":{"type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Suggest a unit","tags":["units-endpoint"]},"post":{"consumes":["application/json"],"description":"This is a simple API for saving units","produces":["application/json"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"name":{"example":"second","type":"string"},"uri":{"example":"http://www.ontology-of-units-of-measure.org/resource/om-2/second-Time","type":"string"}},"required":["uri","name"],"type":"object"}}}},"responses":{"200":{"description":"OK"},"201":{"description":"Created"},"405":{"description":"Invalid input"},"409":{"description":"Concept already present"}},"summary":"Save unit to MDB","tags":["units-endpoint"]},"put":{"consumes":["application/json"],"description":"This is a simple API for retrieving label from units","produces":["application/json"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"uri":{"example":"http://www.ontology-of-units-of-measure.org/resource/om-2/second-Time","type":"string"}},"required":["uri","name"],"type":"object"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid URI"},"404":{"description":"Unit not found"},"500":{"description":"Server error"}},"summary":"Retrieve label from URI","tags":["units-endpoint"]}},"/api/semantics/unit/{unit}/validate":{"get":{"consumes":["application/json"],"description":"This is a simple API for validating units.","parameters":[{"description":"Validates unit against om-2.","in":"path","name":"unit","required":true,"schema":{"example":"metre","type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Validate units","tags":["units-endpoint"]}}},"servers":[{"description":"Generated server url","url":"http://localhost:5010"},{"description":"Sandbox","url":"https://dbrepo2.ec.tuwien.ac.at"}]} +openapi: 3.0.1 +info: + title: Database Repository Semantic Service API + description: Service that manages the tables + contact: + name: Prof. Andreas Rauber + email: andreas.rauber@tuwien.ac.at + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + version: 1.2.0 +externalDocs: + description: Sourcecode Documentation + url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +servers: +- url: http://localhost:9097 + description: Generated server url +- url: https://dbrepo2.tuwien.ac.at + description: Sandbox +paths: + /api/semantic/ontology/{id}: + get: + tags: + - ontology-endpoint + summary: Find one ontology + operationId: find + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: Find one ontology + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + put: + tags: + - ontology-endpoint + summary: Update an ontology + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyModifyDto' + required: true + responses: + "202": + description: Updated ontology successfully + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + delete: + tags: + - ontology-endpoint + summary: Delete an ontology + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "202": + description: Deleted ontology successfully + content: + application/json: {} + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/semantic/unit: + get: + tags: + - semantics-endpoint + summary: List semantic units + operationId: findAllUnits + responses: + "200": + description: Find all semantic units + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UnitDto' + post: + tags: + - semantics-endpoint + summary: Save a semantic unit + operationId: saveUnit + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UnitSaveDto' + required: true + responses: + "202": + description: Saved a semantic unit + content: + application/json: + schema: + $ref: '#/components/schemas/UnitDto' + security: + - bearerAuth: [] + /api/semantic/ontology: + get: + tags: + - ontology-endpoint + summary: List all ontologies + operationId: findAll + responses: + "200": + description: List all ontologies + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/OntologyDto' + post: + tags: + - ontology-endpoint + summary: Register a new ontology + operationId: create + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyCreateDto' + required: true + responses: + "201": + description: Registered ontology successfully + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyDto' + security: + - bearerAuth: [] + /api/semantic/concept: + get: + tags: + - semantics-endpoint + summary: List semantic concepts + operationId: findAllConcepts + responses: + "200": + description: Find all semantic concepts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ConceptDto' + post: + tags: + - semantics-endpoint + summary: Create or update a semantic concept + operationId: saveUnit_1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConceptSaveDto' + required: true + responses: + "202": + description: Saved a semantic concept + content: + application/json: + schema: + $ref: '#/components/schemas/ConceptDto' + security: + - bearerAuth: [] + /api/semantic/ontology/{id}/entity: + get: + tags: + - query-endpoint + summary: Find entities + operationId: find_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: label + in: query + required: false + schema: + type: string + - name: uri + in: query + required: false + schema: + type: string + responses: + "200": + description: Found entities + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/EntityDto' + "417": + description: Generated query or uri is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Filter params are invalid + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/semantic/database/{databaseId}/table/{tableId}: + get: + tags: + - table-endpoint + summary: Suggest table semantics + operationId: analyseTable + parameters: + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "417": + description: Generated query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Could not find the table + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Suggested table semantics successfully + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TableColumnEntityDto' + security: + - bearerAuth: [] + /api/semantic/database/{databaseId}/table/{tableId}/column/{columnId}: + get: + tags: + - table-endpoint + summary: Suggest table column semantics + operationId: analyseTableColumn + parameters: + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + - name: columnId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "417": + description: Generated query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Suggested table column semantics successfully + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TableColumnEntityDto' + "404": + description: Could not find the table column + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] +components: + schemas: + OntologyModifyDto: + required: + - prefix + - uri + type: object + properties: + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + OntologyDto: + required: + - created + - id + - prefix + - rdf + - sparql + - uri + type: object + properties: + id: + type: integer + format: int64 + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql: + type: boolean + example: true + rdf: + type: boolean + example: true + creator: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + UnitSaveDto: + required: + - description + - name + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + UnitDto: + required: + - columns + - created + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + OntologyCreateDto: + required: + - prefix + - uri + type: object + properties: + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + ConceptSaveDto: + required: + - description + - name + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + ConceptDto: + required: + - columns + - created + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + EntityDto: + required: + - label + - uri + type: object + properties: + uri: + type: string + example: https://www.wikidata.org/entity/Q1686799 + label: + type: string + example: Apache Jena + description: + type: string + example: open source semantic web framework for Java + TableColumnEntityDto: + required: + - columnId + - databaseId + - tableId + - uri + type: object + properties: + databaseId: + type: integer + format: int64 + example: 1 + tableId: + type: integer + format: int64 + example: 1 + columnId: + type: integer + format: int64 + example: 1 + uri: + type: string + example: https://www.wikidata.org/entity/Q1686799 + label: + type: string + example: Apache Jena + description: + type: string + example: open source semantic web framework for Java + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/swagger/api-table.yaml b/swagger/api-table.yaml index f0807a9..9639c5f 100644 --- a/swagger/api-table.yaml +++ b/swagger/api-table.yaml @@ -49,6 +49,11 @@ paths: schema: type: integer format: int64 + - name: Authorization + in: header + required: true + schema: + type: string requestBody: content: application/json: @@ -56,19 +61,6 @@ paths: $ref: '#/components/schemas/ColumnSemanticsUpdateDto' required: true responses: - "405": - description: Update column semantics not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ColumnDto' - "400": - description: Update semantic concept query is malformed or update unit of - measurement query is malformed - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "404": description: "Table, database, semantic concept, unit of measurement or\ \ container could not be found" @@ -88,6 +80,19 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Update semantic concept query is malformed or update unit of + measurement query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Update column semantics not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ColumnDto' security: - bearerAuth: [] /api/container/{id}/database/{databaseId}/table: @@ -127,7 +132,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/TableBriefDto' security: - bearerAuth: [] post: @@ -155,32 +162,26 @@ paths: $ref: '#/components/schemas/TableCreateDto' required: true responses: - "409": - description: Create table conflicts with existing table name + "501": + description: Image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Database, container or user could not be found" + "504": + description: Broker service failed to create queue content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "404": + description: "Database, container or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Created a new table - content: - application/json: - schema: - $ref: '#/components/schemas/TableBriefDto' - "400": - description: Create table query is malformed + "409": + description: Create table conflicts with existing table name content: application/json: schema: @@ -191,8 +192,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Broker service failed to create queue + "201": + description: Created a new table + content: + application/json: + schema: + $ref: '#/components/schemas/TableBriefDto' + "400": + description: Create table query is malformed content: application/json: schema: @@ -237,14 +244,14 @@ paths: application/json: schema: $ref: '#/components/schemas/TableDto' - "404": - description: "Table, database or container could not be found" + "403": + description: Access to the database is forbidden content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Access to the database is forbidden + "404": + description: "Table, database or container could not be found" content: application/json: schema: @@ -276,14 +283,8 @@ paths: type: integer format: int64 responses: - "405": - description: Delete table not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Delete table resulted in an invalid state + "501": + description: Image is not supported content: application/json: schema: @@ -294,20 +295,20 @@ paths: application/json: schema: $ref: '#/components/schemas/TableDto' - "400": - description: Delete table query resulted in an invalid query statement + "405": + description: Delete table not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "423": + description: Delete table resulted in an invalid state content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Table, database or container could not be found" + "400": + description: Delete table query resulted in an invalid query statement content: application/json: schema: @@ -318,6 +319,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "404": + description: "Table, database or container could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] components: @@ -329,6 +336,130 @@ components: type: string unit_uri: type: string + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob ColumnDto: required: - auto_generated @@ -394,8 +525,8 @@ components: type: string ConceptDto: required: + - columns - created - - name - uri type: object properties: @@ -403,9 +534,15 @@ components: type: string name: type: string + description: + type: string created: type: string format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' ImageDateDto: required: - database_format @@ -435,8 +572,8 @@ components: format: date-time UnitDto: required: + - columns - created - - name - uri type: object properties: @@ -444,94 +581,15 @@ components: type: string name: type: string + description: + type: string created: type: string format: date-time - ApiErrorDto: - required: - - code - - message - - status - type: object - properties: - status: - type: string - example: STATUS - enum: - - 100 CONTINUE - - 101 SWITCHING_PROTOCOLS - - 102 PROCESSING - - 103 CHECKPOINT - - 200 OK - - 201 CREATED - - 202 ACCEPTED - - 203 NON_AUTHORITATIVE_INFORMATION - - 204 NO_CONTENT - - 205 RESET_CONTENT - - 206 PARTIAL_CONTENT - - 207 MULTI_STATUS - - 208 ALREADY_REPORTED - - 226 IM_USED - - 300 MULTIPLE_CHOICES - - 301 MOVED_PERMANENTLY - - 302 FOUND - - 302 MOVED_TEMPORARILY - - 303 SEE_OTHER - - 304 NOT_MODIFIED - - 305 USE_PROXY - - 307 TEMPORARY_REDIRECT - - 308 PERMANENT_REDIRECT - - 400 BAD_REQUEST - - 401 UNAUTHORIZED - - 402 PAYMENT_REQUIRED - - 403 FORBIDDEN - - 404 NOT_FOUND - - 405 METHOD_NOT_ALLOWED - - 406 NOT_ACCEPTABLE - - 407 PROXY_AUTHENTICATION_REQUIRED - - 408 REQUEST_TIMEOUT - - 409 CONFLICT - - 410 GONE - - 411 LENGTH_REQUIRED - - 412 PRECONDITION_FAILED - - 413 PAYLOAD_TOO_LARGE - - 413 REQUEST_ENTITY_TOO_LARGE - - 414 URI_TOO_LONG - - 414 REQUEST_URI_TOO_LONG - - 415 UNSUPPORTED_MEDIA_TYPE - - 416 REQUESTED_RANGE_NOT_SATISFIABLE - - 417 EXPECTATION_FAILED - - 418 I_AM_A_TEAPOT - - 419 INSUFFICIENT_SPACE_ON_RESOURCE - - 420 METHOD_FAILURE - - 421 DESTINATION_LOCKED - - 422 UNPROCESSABLE_ENTITY - - 423 LOCKED - - 424 FAILED_DEPENDENCY - - 425 TOO_EARLY - - 426 UPGRADE_REQUIRED - - 428 PRECONDITION_REQUIRED - - 429 TOO_MANY_REQUESTS - - 431 REQUEST_HEADER_FIELDS_TOO_LARGE - - 451 UNAVAILABLE_FOR_LEGAL_REASONS - - 500 INTERNAL_SERVER_ERROR - - 501 NOT_IMPLEMENTED - - 502 BAD_GATEWAY - - 503 SERVICE_UNAVAILABLE - - 504 GATEWAY_TIMEOUT - - 505 HTTP_VERSION_NOT_SUPPORTED - - 506 VARIANT_ALSO_NEGOTIATES - - 507 INSUFFICIENT_STORAGE - - 508 LOOP_DETECTED - - 509 BANDWIDTH_LIMIT_EXCEEDED - - 510 NOT_EXTENDED - - 511 NETWORK_AUTHENTICATION_REQUIRED - message: - type: string - example: Error message - code: - type: string - example: error.service.code + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' ColumnCreateDto: required: - name @@ -644,44 +702,14 @@ components: $ref: '#/components/schemas/ColumnCreateDto' constraints: $ref: '#/components/schemas/ConstraintsCreateDto' - ColumnBriefDto: - required: - - column_type - - id - - internal_name - - name - type: object - properties: - id: - type: integer - format: int64 - name: - type: string - example: date - internal_name: - type: string - example: mdb_date - column_type: - type: string - example: date - enum: - - enum - - number - - decimal - - string - - text - - boolean - - date - - timestamp - - blob TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -693,7 +721,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array @@ -786,6 +814,7 @@ components: - internal_name - is_public - name + - owner - queue_name - routing_key type: object @@ -798,6 +827,8 @@ components: example: Air Quality creator: $ref: '#/components/schemas/UserBriefDto' + owner: + $ref: '#/components/schemas/UserBriefDto' description: type: string example: Air Quality in Austria diff --git a/swagger/api-user.yaml b/swagger/api-user.yaml index eb32257..56bd25f 100644 --- a/swagger/api-user.yaml +++ b/swagger/api-user.yaml @@ -29,58 +29,22 @@ paths: schema: type: string responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' "404": - description: Not Found + description: User was not found content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict - content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "405": - description: Method Not Allowed - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + description: Find user is not permitted content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable - content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "200": - description: OK + description: Found user content: - '*/*': + application/json: schema: $ref: '#/components/schemas/UserDto' security: @@ -103,60 +67,24 @@ paths: $ref: '#/components/schemas/UserUpdateDto' required: true responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Not Found + "202": + description: Modified user information content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/UserDto' "405": - description: Method Not Allowed + description: Modify user is not permitted content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + "404": + description: User attribute was not found content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: OK - content: - '*/*': - schema: - $ref: '#/components/schemas/UserDto' security: - bearerAuth: [] /api/user/{id}/theme: @@ -178,58 +106,22 @@ paths: $ref: '#/components/schemas/UserThemeSetDto' required: true responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Not Found - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' "405": - description: Method Not Allowed - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + description: Modify user is not permitted content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + "404": + description: User or user attribute was not found content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: OK + "202": + description: Modified user theme content: - '*/*': + application/json: schema: $ref: '#/components/schemas/UserDto' security: @@ -253,121 +145,111 @@ paths: $ref: '#/components/schemas/UserPasswordDto' required: true responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' "404": - description: Not Found + description: User was not found content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict - content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "405": - description: Method Not Allowed - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + description: Modify user is not permitted content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + "202": + description: Modified user password content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "200": - description: OK - content: - '*/*': + application/json: schema: $ref: '#/components/schemas/UserDto' security: - bearerAuth: [] - /api/user: + /api/maintenance/message/{id}: get: tags: - - user-endpoint - summary: Find all users - operationId: findAll + - maintenance-endpoint + summary: Find one maintenance message + operationId: find_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked + "200": + description: Get messages content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/BannerMessageDto' + put: + tags: + - maintenance-endpoint + summary: Update maintenance message + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageUpdateDto' + required: true + responses: "404": - description: Not Found - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict + description: Could not find message content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Method Not Allowed + $ref: '#/components/schemas/BannerMessageNotFoundException' + "202": + description: Updated message content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + $ref: '#/components/schemas/BannerMessageBriefDto' + delete: + tags: + - maintenance-endpoint + summary: Delete maintenance message + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "202": + description: Deleted message content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + application/json: {} + "404": + description: Could not find message content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/BannerMessageNotFoundException' + /api/user: + get: + tags: + - user-endpoint + summary: Find all users + operationId: findAll + responses: "200": - description: OK + description: List users content: - '*/*': + application/json: schema: type: array items: @@ -384,147 +266,80 @@ paths: $ref: '#/components/schemas/SignupRequestDto' required: true responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked + "409": + description: User with username already exists content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "404": - description: Not Found + description: Realm or default role not found content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict + "201": + description: Created user content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Method Not Allowed + $ref: '#/components/schemas/UserBriefDto' + "417": + description: User with e-mail already exists content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + /api/maintenance/message: + get: + tags: + - maintenance-endpoint + summary: Find maintenance messages + operationId: list + responses: + "200": + description: List messages content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + type: array + items: + $ref: '#/components/schemas/BannerMessageDto' + post: + tags: + - maintenance-endpoint + summary: Create maintenance message + operationId: create_1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageCreateDto' + required: true + responses: + "201": + description: Created message content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/BannerMessageBriefDto' + /api/maintenance/message/active: + get: + tags: + - maintenance-endpoint + summary: Find active maintenance messages + operationId: active + responses: "200": - description: OK + description: List messages content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/UserBriefDto' + type: array + items: + $ref: '#/components/schemas/BannerMessageBriefDto' components: schemas: - ApiErrorDto: - required: - - code - - message - - status - type: object - properties: - status: - type: string - example: STATUS - enum: - - 100 CONTINUE - - 101 SWITCHING_PROTOCOLS - - 102 PROCESSING - - 103 CHECKPOINT - - 200 OK - - 201 CREATED - - 202 ACCEPTED - - 203 NON_AUTHORITATIVE_INFORMATION - - 204 NO_CONTENT - - 205 RESET_CONTENT - - 206 PARTIAL_CONTENT - - 207 MULTI_STATUS - - 208 ALREADY_REPORTED - - 226 IM_USED - - 300 MULTIPLE_CHOICES - - 301 MOVED_PERMANENTLY - - 302 FOUND - - 302 MOVED_TEMPORARILY - - 303 SEE_OTHER - - 304 NOT_MODIFIED - - 305 USE_PROXY - - 307 TEMPORARY_REDIRECT - - 308 PERMANENT_REDIRECT - - 400 BAD_REQUEST - - 401 UNAUTHORIZED - - 402 PAYMENT_REQUIRED - - 403 FORBIDDEN - - 404 NOT_FOUND - - 405 METHOD_NOT_ALLOWED - - 406 NOT_ACCEPTABLE - - 407 PROXY_AUTHENTICATION_REQUIRED - - 408 REQUEST_TIMEOUT - - 409 CONFLICT - - 410 GONE - - 411 LENGTH_REQUIRED - - 412 PRECONDITION_FAILED - - 413 PAYLOAD_TOO_LARGE - - 413 REQUEST_ENTITY_TOO_LARGE - - 414 URI_TOO_LONG - - 414 REQUEST_URI_TOO_LONG - - 415 UNSUPPORTED_MEDIA_TYPE - - 416 REQUESTED_RANGE_NOT_SATISFIABLE - - 417 EXPECTATION_FAILED - - 418 I_AM_A_TEAPOT - - 419 INSUFFICIENT_SPACE_ON_RESOURCE - - 420 METHOD_FAILURE - - 421 DESTINATION_LOCKED - - 422 UNPROCESSABLE_ENTITY - - 423 LOCKED - - 424 FAILED_DEPENDENCY - - 425 TOO_EARLY - - 426 UPGRADE_REQUIRED - - 428 PRECONDITION_REQUIRED - - 429 TOO_MANY_REQUESTS - - 431 REQUEST_HEADER_FIELDS_TOO_LARGE - - 451 UNAVAILABLE_FOR_LEGAL_REASONS - - 500 INTERNAL_SERVER_ERROR - - 501 NOT_IMPLEMENTED - - 502 BAD_GATEWAY - - 503 SERVICE_UNAVAILABLE - - 504 GATEWAY_TIMEOUT - - 505 HTTP_VERSION_NOT_SUPPORTED - - 506 VARIANT_ALSO_NEGOTIATES - - 507 INSUFFICIENT_STORAGE - - 508 LOOP_DETECTED - - 509 BANDWIDTH_LIMIT_EXCEEDED - - 510 NOT_EXTENDED - - 511 NETWORK_AUTHENTICATION_REQUIRED - message: - type: string - example: Error message - code: - type: string - example: error.service.code UserUpdateDto: type: object properties: @@ -540,17 +355,14 @@ components: orcid: type: string example: 0000-0002-1825-0097 - titles_before: - type: string - example: Prof. - titles_after: - type: string ColumnBriefDto: required: - column_type + - database_id - id - internal_name - name + - table_id type: object properties: id: @@ -559,6 +371,12 @@ components: name: type: string example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 internal_name: type: string example: mdb_date @@ -647,12 +465,6 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time DatabaseAccessDto: required: - type @@ -766,7 +578,6 @@ components: example: everyone enum: - everyone - - trusted - self doi: type: string @@ -1017,6 +828,7 @@ components: ImageBriefDto: required: - id + - registry - repository - tag type: object @@ -1024,6 +836,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1064,6 +879,7 @@ components: - driver_class - id - jdbc_method + - registry - repository - tag type: object @@ -1071,6 +887,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1198,11 +1017,11 @@ components: TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -1214,7 +1033,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array @@ -1352,6 +1171,92 @@ components: last_modified: type: string format: date-time + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code UserThemeSetDto: required: - theme_dark @@ -1367,6 +1272,174 @@ components: properties: password: type: string + BannerMessageUpdateDto: + required: + - message + - type + type: object + properties: + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + display_start: + type: string + format: date-time + display_end: + type: string + format: date-time + BannerMessageNotFoundException: + type: object + properties: + cause: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + suppressed: + type: array + items: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + localizedMessage: + type: string + localizedMessage: + type: string + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + suppressed: + type: array + items: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + localizedMessage: + type: string + localizedMessage: + type: string + BannerMessageBriefDto: + required: + - message + - type + type: object + properties: + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More SignupRequestDto: required: - email @@ -1383,6 +1456,64 @@ components: example: user@example.com password: type: string + BannerMessageCreateDto: + required: + - message + - type + type: object + properties: + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + display_start: + type: string + format: date-time + display_end: + type: string + format: date-time + BannerMessageDto: + required: + - id + - message + - type + type: object + properties: + id: + type: integer + format: int64 + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + display_start: + type: string + format: date-time + display_end: + type: string + format: date-time securitySchemes: bearerAuth: type: http diff --git a/swagger/api/api_container/__init__.py b/swagger/api/api_container/__init__.py index 5140e78..90a1b91 100644 --- a/swagger/api/api_container/__init__.py +++ b/swagger/api/api_container/__init__.py @@ -23,15 +23,26 @@ from api_container.configuration import Configuration # import models into sdk package from api_container.models.api_error_dto import ApiErrorDto from api_container.models.column_brief_dto import ColumnBriefDto +from api_container.models.constraints import Constraints +from api_container.models.container import Container from api_container.models.container_brief_dto import ContainerBriefDto from api_container.models.container_change_dto import ContainerChangeDto from api_container.models.container_create_request_dto import ContainerCreateRequestDto from api_container.models.container_dto import ContainerDto +from api_container.models.container_image import ContainerImage +from api_container.models.container_image_date import ContainerImageDate +from api_container.models.container_image_environment_item import ContainerImageEnvironmentItem +from api_container.models.creator import Creator from api_container.models.creator_brief_dto import CreatorBriefDto from api_container.models.creator_dto import CreatorDto +from api_container.models.credential import Credential +from api_container.models.database import Database from api_container.models.database_access_dto import DatabaseAccessDto from api_container.models.database_brief_dto import DatabaseBriefDto from api_container.models.database_dto import DatabaseDto +from api_container.models.foreign_key import ForeignKey +from api_container.models.foreign_key_reference import ForeignKeyReference +from api_container.models.identifier import Identifier from api_container.models.identifier_brief_dto import IdentifierBriefDto from api_container.models.identifier_dto import IdentifierDto from api_container.models.image_brief_dto import ImageBriefDto @@ -40,10 +51,21 @@ from api_container.models.image_create_dto import ImageCreateDto from api_container.models.image_date_dto import ImageDateDto from api_container.models.image_dto import ImageDto from api_container.models.image_env_item_dto import ImageEnvItemDto +from api_container.models.license import License from api_container.models.license_dto import LicenseDto +from api_container.models.related_identifier import RelatedIdentifier from api_container.models.related_identifier_dto import RelatedIdentifierDto +from api_container.models.role import Role +from api_container.models.table import Table from api_container.models.table_brief_dto import TableBriefDto +from api_container.models.table_column import TableColumn +from api_container.models.table_column_concept import TableColumnConcept +from api_container.models.table_column_unit import TableColumnUnit +from api_container.models.unique import Unique +from api_container.models.user import User +from api_container.models.user_attribute import UserAttribute from api_container.models.user_attribute_dto import UserAttributeDto from api_container.models.user_brief_dto import UserBriefDto from api_container.models.user_dto import UserDto +from api_container.models.view import View from api_container.models.view_brief_dto import ViewBriefDto diff --git a/swagger/api/api_container/api/container_endpoint_api.py b/swagger/api/api_container/api/container_endpoint_api.py index 84692d1..0a8fb8b 100644 --- a/swagger/api/api_container/api/container_endpoint_api.py +++ b/swagger/api/api_container/api/container_endpoint_api.py @@ -232,7 +232,7 @@ class ContainerEndpointApi(object): :param async_req bool :param int limit: - :return: str + :return: list[ContainerBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -253,7 +253,7 @@ class ContainerEndpointApi(object): :param async_req bool :param int limit: - :return: str + :return: list[ContainerBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -303,7 +303,7 @@ class ContainerEndpointApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='str', # noqa: E501 + response_type='list[ContainerBriefDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/swagger/api/api_container/api/image_endpoint_api.py b/swagger/api/api_container/api/image_endpoint_api.py index 4d1c3d4..d266580 100644 --- a/swagger/api/api_container/api/image_endpoint_api.py +++ b/swagger/api/api_container/api/image_endpoint_api.py @@ -129,43 +129,43 @@ class ImageEndpointApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete(self, image_id, **kwargs): # noqa: E501 + def delete(self, id, **kwargs): # noqa: E501 """Delete some image # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete(image_id, async_req=True) + >>> thread = api.delete(id, async_req=True) >>> result = thread.get() :param async_req bool - :param int image_id: (required) + :param int id: (required) :return: None If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_with_http_info(image_id, **kwargs) # noqa: E501 + return self.delete_with_http_info(id, **kwargs) # noqa: E501 else: - (data) = self.delete_with_http_info(image_id, **kwargs) # noqa: E501 + (data) = self.delete_with_http_info(id, **kwargs) # noqa: E501 return data - def delete_with_http_info(self, image_id, **kwargs): # noqa: E501 + def delete_with_http_info(self, id, **kwargs): # noqa: E501 """Delete some image # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_with_http_info(image_id, async_req=True) + >>> thread = api.delete_with_http_info(id, async_req=True) >>> result = thread.get() :param async_req bool - :param int image_id: (required) + :param int id: (required) :return: None If the method is called asynchronously, returns the request thread. """ - all_params = ['image_id'] # noqa: E501 + all_params = ['id'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -180,16 +180,16 @@ class ImageEndpointApi(object): ) params[key] = val del params['kwargs'] - # verify the required parameter 'image_id' is set - if ('image_id' not in params or - params['image_id'] is None): - raise ValueError("Missing the required parameter `image_id` when calling `delete`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `delete`") # noqa: E501 collection_formats = {} path_params = {} - if 'image_id' in params: - path_params['imageId'] = params['image_id'] # noqa: E501 + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 query_params = [] @@ -231,7 +231,7 @@ class ImageEndpointApi(object): >>> result = thread.get() :param async_req bool - :return: str + :return: list[ContainerImage] If the method is called asynchronously, returns the request thread. """ @@ -251,7 +251,7 @@ class ImageEndpointApi(object): >>> result = thread.get() :param async_req bool - :return: str + :return: list[ContainerImage] If the method is called asynchronously, returns the request thread. """ @@ -299,7 +299,7 @@ class ImageEndpointApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='str', # noqa: E501 + response_type='list[ContainerImage]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/swagger/api/api_container/models/__init__.py b/swagger/api/api_container/models/__init__.py index 559ec67..fb5bfe3 100644 --- a/swagger/api/api_container/models/__init__.py +++ b/swagger/api/api_container/models/__init__.py @@ -16,15 +16,26 @@ from __future__ import absolute_import # import models into model package from api_container.models.api_error_dto import ApiErrorDto from api_container.models.column_brief_dto import ColumnBriefDto +from api_container.models.constraints import Constraints +from api_container.models.container import Container from api_container.models.container_brief_dto import ContainerBriefDto from api_container.models.container_change_dto import ContainerChangeDto from api_container.models.container_create_request_dto import ContainerCreateRequestDto from api_container.models.container_dto import ContainerDto +from api_container.models.container_image import ContainerImage +from api_container.models.container_image_date import ContainerImageDate +from api_container.models.container_image_environment_item import ContainerImageEnvironmentItem +from api_container.models.creator import Creator from api_container.models.creator_brief_dto import CreatorBriefDto from api_container.models.creator_dto import CreatorDto +from api_container.models.credential import Credential +from api_container.models.database import Database from api_container.models.database_access_dto import DatabaseAccessDto from api_container.models.database_brief_dto import DatabaseBriefDto from api_container.models.database_dto import DatabaseDto +from api_container.models.foreign_key import ForeignKey +from api_container.models.foreign_key_reference import ForeignKeyReference +from api_container.models.identifier import Identifier from api_container.models.identifier_brief_dto import IdentifierBriefDto from api_container.models.identifier_dto import IdentifierDto from api_container.models.image_brief_dto import ImageBriefDto @@ -33,10 +44,21 @@ from api_container.models.image_create_dto import ImageCreateDto from api_container.models.image_date_dto import ImageDateDto from api_container.models.image_dto import ImageDto from api_container.models.image_env_item_dto import ImageEnvItemDto +from api_container.models.license import License from api_container.models.license_dto import LicenseDto +from api_container.models.related_identifier import RelatedIdentifier from api_container.models.related_identifier_dto import RelatedIdentifierDto +from api_container.models.role import Role +from api_container.models.table import Table from api_container.models.table_brief_dto import TableBriefDto +from api_container.models.table_column import TableColumn +from api_container.models.table_column_concept import TableColumnConcept +from api_container.models.table_column_unit import TableColumnUnit +from api_container.models.unique import Unique +from api_container.models.user import User +from api_container.models.user_attribute import UserAttribute from api_container.models.user_attribute_dto import UserAttributeDto from api_container.models.user_brief_dto import UserBriefDto from api_container.models.user_dto import UserDto +from api_container.models.view import View from api_container.models.view_brief_dto import ViewBriefDto diff --git a/swagger/api/api_container/models/api_error_dto.py b/swagger/api/api_container/models/api_error_dto.py index 6ead500..e22a8c6 100644 --- a/swagger/api/api_container/models/api_error_dto.py +++ b/swagger/api/api_container/models/api_error_dto.py @@ -69,7 +69,7 @@ class ApiErrorDto(object): """ if status is None: raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501 - allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 + allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 EARLY_HINTS", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 if status not in allowed_values: raise ValueError( "Invalid value for `status` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_container/models/column_brief_dto.py b/swagger/api/api_container/models/column_brief_dto.py index 82914e6..7d1a1a4 100644 --- a/swagger/api/api_container/models/column_brief_dto.py +++ b/swagger/api/api_container/models/column_brief_dto.py @@ -30,6 +30,8 @@ class ColumnBriefDto(object): swagger_types = { 'id': 'int', 'name': 'str', + 'database_id': 'int', + 'table_id': 'int', 'internal_name': 'str', 'column_type': 'str' } @@ -37,19 +39,25 @@ class ColumnBriefDto(object): attribute_map = { 'id': 'id', 'name': 'name', + 'database_id': 'database_id', + 'table_id': 'table_id', 'internal_name': 'internal_name', 'column_type': 'column_type' } - def __init__(self, id=None, name=None, internal_name=None, column_type=None): # noqa: E501 + def __init__(self, id=None, name=None, database_id=None, table_id=None, internal_name=None, column_type=None): # noqa: E501 """ColumnBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None + self._database_id = None + self._table_id = None self._internal_name = None self._column_type = None self.discriminator = None self.id = id self.name = name + self.database_id = database_id + self.table_id = table_id self.internal_name = internal_name self.column_type = column_type @@ -99,6 +107,52 @@ class ColumnBriefDto(object): self._name = name + @property + def database_id(self): + """Gets the database_id of this ColumnBriefDto. # noqa: E501 + + + :return: The database_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._database_id + + @database_id.setter + def database_id(self, database_id): + """Sets the database_id of this ColumnBriefDto. + + + :param database_id: The database_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if database_id is None: + raise ValueError("Invalid value for `database_id`, must not be `None`") # noqa: E501 + + self._database_id = database_id + + @property + def table_id(self): + """Gets the table_id of this ColumnBriefDto. # noqa: E501 + + + :return: The table_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._table_id + + @table_id.setter + def table_id(self, table_id): + """Sets the table_id of this ColumnBriefDto. + + + :param table_id: The table_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if table_id is None: + raise ValueError("Invalid value for `table_id`, must not be `None`") # noqa: E501 + + self._table_id = table_id + @property def internal_name(self): """Gets the internal_name of this ColumnBriefDto. # noqa: E501 diff --git a/swagger/api/api_container/models/constraints.py b/swagger/api/api_container/models/constraints.py new file mode 100644 index 0000000..b78bb7b --- /dev/null +++ b/swagger/api/api_container/models/constraints.py @@ -0,0 +1,162 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class Constraints(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uniques': 'list[Unique]', + 'foreign_keys': 'list[ForeignKey]', + 'checks': 'list[str]' + } + + attribute_map = { + 'uniques': 'uniques', + 'foreign_keys': 'foreignKeys', + 'checks': 'checks' + } + + def __init__(self, uniques=None, foreign_keys=None, checks=None): # noqa: E501 + """Constraints - a model defined in Swagger""" # noqa: E501 + self._uniques = None + self._foreign_keys = None + self._checks = None + self.discriminator = None + if uniques is not None: + self.uniques = uniques + if foreign_keys is not None: + self.foreign_keys = foreign_keys + if checks is not None: + self.checks = checks + + @property + def uniques(self): + """Gets the uniques of this Constraints. # noqa: E501 + + + :return: The uniques of this Constraints. # noqa: E501 + :rtype: list[Unique] + """ + return self._uniques + + @uniques.setter + def uniques(self, uniques): + """Sets the uniques of this Constraints. + + + :param uniques: The uniques of this Constraints. # noqa: E501 + :type: list[Unique] + """ + + self._uniques = uniques + + @property + def foreign_keys(self): + """Gets the foreign_keys of this Constraints. # noqa: E501 + + + :return: The foreign_keys of this Constraints. # noqa: E501 + :rtype: list[ForeignKey] + """ + return self._foreign_keys + + @foreign_keys.setter + def foreign_keys(self, foreign_keys): + """Sets the foreign_keys of this Constraints. + + + :param foreign_keys: The foreign_keys of this Constraints. # noqa: E501 + :type: list[ForeignKey] + """ + + self._foreign_keys = foreign_keys + + @property + def checks(self): + """Gets the checks of this Constraints. # noqa: E501 + + + :return: The checks of this Constraints. # noqa: E501 + :rtype: list[str] + """ + return self._checks + + @checks.setter + def checks(self, checks): + """Sets the checks of this Constraints. + + + :param checks: The checks of this Constraints. # noqa: E501 + :type: list[str] + """ + + self._checks = checks + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(Constraints, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, Constraints): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/container.py b/swagger/api/api_container/models/container.py new file mode 100644 index 0000000..9a1ebac --- /dev/null +++ b/swagger/api/api_container/models/container.py @@ -0,0 +1,474 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class Container(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'created_by': 'str', + 'creator': 'User', + 'owned_by': 'str', + 'owner': 'User', + 'name': 'str', + 'internal_name': 'str', + 'hash': 'str', + 'image_id': 'int', + 'port': 'int', + 'database': 'Database', + 'image': 'ContainerImage', + 'ip_address': 'str', + 'created': 'datetime', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'created_by': 'createdBy', + 'creator': 'creator', + 'owned_by': 'ownedBy', + 'owner': 'owner', + 'name': 'name', + 'internal_name': 'internalName', + 'hash': 'hash', + 'image_id': 'imageId', + 'port': 'port', + 'database': 'database', + 'image': 'image', + 'ip_address': 'ipAddress', + 'created': 'created', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, created_by=None, creator=None, owned_by=None, owner=None, name=None, internal_name=None, hash=None, image_id=None, port=None, database=None, image=None, ip_address=None, created=None, last_modified=None): # noqa: E501 + """Container - a model defined in Swagger""" # noqa: E501 + self._id = None + self._created_by = None + self._creator = None + self._owned_by = None + self._owner = None + self._name = None + self._internal_name = None + self._hash = None + self._image_id = None + self._port = None + self._database = None + self._image = None + self._ip_address = None + self._created = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if created_by is not None: + self.created_by = created_by + if creator is not None: + self.creator = creator + if owned_by is not None: + self.owned_by = owned_by + if owner is not None: + self.owner = owner + if name is not None: + self.name = name + if internal_name is not None: + self.internal_name = internal_name + if hash is not None: + self.hash = hash + if image_id is not None: + self.image_id = image_id + if port is not None: + self.port = port + if database is not None: + self.database = database + if image is not None: + self.image = image + if ip_address is not None: + self.ip_address = ip_address + if created is not None: + self.created = created + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this Container. # noqa: E501 + + + :return: The id of this Container. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this Container. + + + :param id: The id of this Container. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def created_by(self): + """Gets the created_by of this Container. # noqa: E501 + + + :return: The created_by of this Container. # noqa: E501 + :rtype: str + """ + return self._created_by + + @created_by.setter + def created_by(self, created_by): + """Sets the created_by of this Container. + + + :param created_by: The created_by of this Container. # noqa: E501 + :type: str + """ + + self._created_by = created_by + + @property + def creator(self): + """Gets the creator of this Container. # noqa: E501 + + + :return: The creator of this Container. # noqa: E501 + :rtype: User + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this Container. + + + :param creator: The creator of this Container. # noqa: E501 + :type: User + """ + + self._creator = creator + + @property + def owned_by(self): + """Gets the owned_by of this Container. # noqa: E501 + + + :return: The owned_by of this Container. # noqa: E501 + :rtype: str + """ + return self._owned_by + + @owned_by.setter + def owned_by(self, owned_by): + """Sets the owned_by of this Container. + + + :param owned_by: The owned_by of this Container. # noqa: E501 + :type: str + """ + + self._owned_by = owned_by + + @property + def owner(self): + """Gets the owner of this Container. # noqa: E501 + + + :return: The owner of this Container. # noqa: E501 + :rtype: User + """ + return self._owner + + @owner.setter + def owner(self, owner): + """Sets the owner of this Container. + + + :param owner: The owner of this Container. # noqa: E501 + :type: User + """ + + self._owner = owner + + @property + def name(self): + """Gets the name of this Container. # noqa: E501 + + + :return: The name of this Container. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this Container. + + + :param name: The name of this Container. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def internal_name(self): + """Gets the internal_name of this Container. # noqa: E501 + + + :return: The internal_name of this Container. # noqa: E501 + :rtype: str + """ + return self._internal_name + + @internal_name.setter + def internal_name(self, internal_name): + """Sets the internal_name of this Container. + + + :param internal_name: The internal_name of this Container. # noqa: E501 + :type: str + """ + + self._internal_name = internal_name + + @property + def hash(self): + """Gets the hash of this Container. # noqa: E501 + + + :return: The hash of this Container. # noqa: E501 + :rtype: str + """ + return self._hash + + @hash.setter + def hash(self, hash): + """Sets the hash of this Container. + + + :param hash: The hash of this Container. # noqa: E501 + :type: str + """ + + self._hash = hash + + @property + def image_id(self): + """Gets the image_id of this Container. # noqa: E501 + + + :return: The image_id of this Container. # noqa: E501 + :rtype: int + """ + return self._image_id + + @image_id.setter + def image_id(self, image_id): + """Sets the image_id of this Container. + + + :param image_id: The image_id of this Container. # noqa: E501 + :type: int + """ + + self._image_id = image_id + + @property + def port(self): + """Gets the port of this Container. # noqa: E501 + + + :return: The port of this Container. # noqa: E501 + :rtype: int + """ + return self._port + + @port.setter + def port(self, port): + """Sets the port of this Container. + + + :param port: The port of this Container. # noqa: E501 + :type: int + """ + + self._port = port + + @property + def database(self): + """Gets the database of this Container. # noqa: E501 + + + :return: The database of this Container. # noqa: E501 + :rtype: Database + """ + return self._database + + @database.setter + def database(self, database): + """Sets the database of this Container. + + + :param database: The database of this Container. # noqa: E501 + :type: Database + """ + + self._database = database + + @property + def image(self): + """Gets the image of this Container. # noqa: E501 + + + :return: The image of this Container. # noqa: E501 + :rtype: ContainerImage + """ + return self._image + + @image.setter + def image(self, image): + """Sets the image of this Container. + + + :param image: The image of this Container. # noqa: E501 + :type: ContainerImage + """ + + self._image = image + + @property + def ip_address(self): + """Gets the ip_address of this Container. # noqa: E501 + + + :return: The ip_address of this Container. # noqa: E501 + :rtype: str + """ + return self._ip_address + + @ip_address.setter + def ip_address(self, ip_address): + """Sets the ip_address of this Container. + + + :param ip_address: The ip_address of this Container. # noqa: E501 + :type: str + """ + + self._ip_address = ip_address + + @property + def created(self): + """Gets the created of this Container. # noqa: E501 + + + :return: The created of this Container. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this Container. + + + :param created: The created of this Container. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def last_modified(self): + """Gets the last_modified of this Container. # noqa: E501 + + + :return: The last_modified of this Container. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this Container. + + + :param last_modified: The last_modified of this Container. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(Container, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, Container): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/container_image.py b/swagger/api/api_container/models/container_image.py new file mode 100644 index 0000000..d6291d3 --- /dev/null +++ b/swagger/api/api_container/models/container_image.py @@ -0,0 +1,500 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class ContainerImage(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'repository': 'str', + 'registry': 'str', + 'tag': 'str', + 'driver_class': 'str', + 'dialect': 'str', + 'jdbc_method': 'str', + 'hash': 'str', + 'compiled': 'datetime', + 'size': 'int', + 'default_port': 'int', + 'environment': 'list[ContainerImageEnvironmentItem]', + 'date_formats': 'list[ContainerImageDate]', + 'containers': 'list[Container]', + 'created': 'datetime', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'repository': 'repository', + 'registry': 'registry', + 'tag': 'tag', + 'driver_class': 'driverClass', + 'dialect': 'dialect', + 'jdbc_method': 'jdbcMethod', + 'hash': 'hash', + 'compiled': 'compiled', + 'size': 'size', + 'default_port': 'defaultPort', + 'environment': 'environment', + 'date_formats': 'dateFormats', + 'containers': 'containers', + 'created': 'created', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, repository=None, registry=None, tag=None, driver_class=None, dialect=None, jdbc_method=None, hash=None, compiled=None, size=None, default_port=None, environment=None, date_formats=None, containers=None, created=None, last_modified=None): # noqa: E501 + """ContainerImage - a model defined in Swagger""" # noqa: E501 + self._id = None + self._repository = None + self._registry = None + self._tag = None + self._driver_class = None + self._dialect = None + self._jdbc_method = None + self._hash = None + self._compiled = None + self._size = None + self._default_port = None + self._environment = None + self._date_formats = None + self._containers = None + self._created = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if repository is not None: + self.repository = repository + if registry is not None: + self.registry = registry + if tag is not None: + self.tag = tag + if driver_class is not None: + self.driver_class = driver_class + if dialect is not None: + self.dialect = dialect + if jdbc_method is not None: + self.jdbc_method = jdbc_method + if hash is not None: + self.hash = hash + if compiled is not None: + self.compiled = compiled + if size is not None: + self.size = size + if default_port is not None: + self.default_port = default_port + if environment is not None: + self.environment = environment + if date_formats is not None: + self.date_formats = date_formats + if containers is not None: + self.containers = containers + if created is not None: + self.created = created + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this ContainerImage. # noqa: E501 + + + :return: The id of this ContainerImage. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this ContainerImage. + + + :param id: The id of this ContainerImage. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def repository(self): + """Gets the repository of this ContainerImage. # noqa: E501 + + + :return: The repository of this ContainerImage. # noqa: E501 + :rtype: str + """ + return self._repository + + @repository.setter + def repository(self, repository): + """Sets the repository of this ContainerImage. + + + :param repository: The repository of this ContainerImage. # noqa: E501 + :type: str + """ + + self._repository = repository + + @property + def registry(self): + """Gets the registry of this ContainerImage. # noqa: E501 + + + :return: The registry of this ContainerImage. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ContainerImage. + + + :param registry: The registry of this ContainerImage. # noqa: E501 + :type: str + """ + + self._registry = registry + + @property + def tag(self): + """Gets the tag of this ContainerImage. # noqa: E501 + + + :return: The tag of this ContainerImage. # noqa: E501 + :rtype: str + """ + return self._tag + + @tag.setter + def tag(self, tag): + """Sets the tag of this ContainerImage. + + + :param tag: The tag of this ContainerImage. # noqa: E501 + :type: str + """ + + self._tag = tag + + @property + def driver_class(self): + """Gets the driver_class of this ContainerImage. # noqa: E501 + + + :return: The driver_class of this ContainerImage. # noqa: E501 + :rtype: str + """ + return self._driver_class + + @driver_class.setter + def driver_class(self, driver_class): + """Sets the driver_class of this ContainerImage. + + + :param driver_class: The driver_class of this ContainerImage. # noqa: E501 + :type: str + """ + + self._driver_class = driver_class + + @property + def dialect(self): + """Gets the dialect of this ContainerImage. # noqa: E501 + + + :return: The dialect of this ContainerImage. # noqa: E501 + :rtype: str + """ + return self._dialect + + @dialect.setter + def dialect(self, dialect): + """Sets the dialect of this ContainerImage. + + + :param dialect: The dialect of this ContainerImage. # noqa: E501 + :type: str + """ + + self._dialect = dialect + + @property + def jdbc_method(self): + """Gets the jdbc_method of this ContainerImage. # noqa: E501 + + + :return: The jdbc_method of this ContainerImage. # noqa: E501 + :rtype: str + """ + return self._jdbc_method + + @jdbc_method.setter + def jdbc_method(self, jdbc_method): + """Sets the jdbc_method of this ContainerImage. + + + :param jdbc_method: The jdbc_method of this ContainerImage. # noqa: E501 + :type: str + """ + + self._jdbc_method = jdbc_method + + @property + def hash(self): + """Gets the hash of this ContainerImage. # noqa: E501 + + + :return: The hash of this ContainerImage. # noqa: E501 + :rtype: str + """ + return self._hash + + @hash.setter + def hash(self, hash): + """Sets the hash of this ContainerImage. + + + :param hash: The hash of this ContainerImage. # noqa: E501 + :type: str + """ + + self._hash = hash + + @property + def compiled(self): + """Gets the compiled of this ContainerImage. # noqa: E501 + + + :return: The compiled of this ContainerImage. # noqa: E501 + :rtype: datetime + """ + return self._compiled + + @compiled.setter + def compiled(self, compiled): + """Sets the compiled of this ContainerImage. + + + :param compiled: The compiled of this ContainerImage. # noqa: E501 + :type: datetime + """ + + self._compiled = compiled + + @property + def size(self): + """Gets the size of this ContainerImage. # noqa: E501 + + + :return: The size of this ContainerImage. # noqa: E501 + :rtype: int + """ + return self._size + + @size.setter + def size(self, size): + """Sets the size of this ContainerImage. + + + :param size: The size of this ContainerImage. # noqa: E501 + :type: int + """ + + self._size = size + + @property + def default_port(self): + """Gets the default_port of this ContainerImage. # noqa: E501 + + + :return: The default_port of this ContainerImage. # noqa: E501 + :rtype: int + """ + return self._default_port + + @default_port.setter + def default_port(self, default_port): + """Sets the default_port of this ContainerImage. + + + :param default_port: The default_port of this ContainerImage. # noqa: E501 + :type: int + """ + + self._default_port = default_port + + @property + def environment(self): + """Gets the environment of this ContainerImage. # noqa: E501 + + + :return: The environment of this ContainerImage. # noqa: E501 + :rtype: list[ContainerImageEnvironmentItem] + """ + return self._environment + + @environment.setter + def environment(self, environment): + """Sets the environment of this ContainerImage. + + + :param environment: The environment of this ContainerImage. # noqa: E501 + :type: list[ContainerImageEnvironmentItem] + """ + + self._environment = environment + + @property + def date_formats(self): + """Gets the date_formats of this ContainerImage. # noqa: E501 + + + :return: The date_formats of this ContainerImage. # noqa: E501 + :rtype: list[ContainerImageDate] + """ + return self._date_formats + + @date_formats.setter + def date_formats(self, date_formats): + """Sets the date_formats of this ContainerImage. + + + :param date_formats: The date_formats of this ContainerImage. # noqa: E501 + :type: list[ContainerImageDate] + """ + + self._date_formats = date_formats + + @property + def containers(self): + """Gets the containers of this ContainerImage. # noqa: E501 + + + :return: The containers of this ContainerImage. # noqa: E501 + :rtype: list[Container] + """ + return self._containers + + @containers.setter + def containers(self, containers): + """Sets the containers of this ContainerImage. + + + :param containers: The containers of this ContainerImage. # noqa: E501 + :type: list[Container] + """ + + self._containers = containers + + @property + def created(self): + """Gets the created of this ContainerImage. # noqa: E501 + + + :return: The created of this ContainerImage. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this ContainerImage. + + + :param created: The created of this ContainerImage. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def last_modified(self): + """Gets the last_modified of this ContainerImage. # noqa: E501 + + + :return: The last_modified of this ContainerImage. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this ContainerImage. + + + :param last_modified: The last_modified of this ContainerImage. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(ContainerImage, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, ContainerImage): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/container_image_date.py b/swagger/api/api_container/models/container_image_date.py new file mode 100644 index 0000000..45fc8ac --- /dev/null +++ b/swagger/api/api_container/models/container_image_date.py @@ -0,0 +1,292 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class ContainerImageDate(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'iid': 'int', + 'image': 'ContainerImage', + 'example': 'str', + 'has_time': 'bool', + 'database_format': 'str', + 'unix_format': 'str', + 'created_at': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'iid': 'iid', + 'image': 'image', + 'example': 'example', + 'has_time': 'hasTime', + 'database_format': 'databaseFormat', + 'unix_format': 'unixFormat', + 'created_at': 'createdAt' + } + + def __init__(self, id=None, iid=None, image=None, example=None, has_time=None, database_format=None, unix_format=None, created_at=None): # noqa: E501 + """ContainerImageDate - a model defined in Swagger""" # noqa: E501 + self._id = None + self._iid = None + self._image = None + self._example = None + self._has_time = None + self._database_format = None + self._unix_format = None + self._created_at = None + self.discriminator = None + if id is not None: + self.id = id + if iid is not None: + self.iid = iid + if image is not None: + self.image = image + if example is not None: + self.example = example + if has_time is not None: + self.has_time = has_time + if database_format is not None: + self.database_format = database_format + if unix_format is not None: + self.unix_format = unix_format + if created_at is not None: + self.created_at = created_at + + @property + def id(self): + """Gets the id of this ContainerImageDate. # noqa: E501 + + + :return: The id of this ContainerImageDate. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this ContainerImageDate. + + + :param id: The id of this ContainerImageDate. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def iid(self): + """Gets the iid of this ContainerImageDate. # noqa: E501 + + + :return: The iid of this ContainerImageDate. # noqa: E501 + :rtype: int + """ + return self._iid + + @iid.setter + def iid(self, iid): + """Sets the iid of this ContainerImageDate. + + + :param iid: The iid of this ContainerImageDate. # noqa: E501 + :type: int + """ + + self._iid = iid + + @property + def image(self): + """Gets the image of this ContainerImageDate. # noqa: E501 + + + :return: The image of this ContainerImageDate. # noqa: E501 + :rtype: ContainerImage + """ + return self._image + + @image.setter + def image(self, image): + """Sets the image of this ContainerImageDate. + + + :param image: The image of this ContainerImageDate. # noqa: E501 + :type: ContainerImage + """ + + self._image = image + + @property + def example(self): + """Gets the example of this ContainerImageDate. # noqa: E501 + + + :return: The example of this ContainerImageDate. # noqa: E501 + :rtype: str + """ + return self._example + + @example.setter + def example(self, example): + """Sets the example of this ContainerImageDate. + + + :param example: The example of this ContainerImageDate. # noqa: E501 + :type: str + """ + + self._example = example + + @property + def has_time(self): + """Gets the has_time of this ContainerImageDate. # noqa: E501 + + + :return: The has_time of this ContainerImageDate. # noqa: E501 + :rtype: bool + """ + return self._has_time + + @has_time.setter + def has_time(self, has_time): + """Sets the has_time of this ContainerImageDate. + + + :param has_time: The has_time of this ContainerImageDate. # noqa: E501 + :type: bool + """ + + self._has_time = has_time + + @property + def database_format(self): + """Gets the database_format of this ContainerImageDate. # noqa: E501 + + + :return: The database_format of this ContainerImageDate. # noqa: E501 + :rtype: str + """ + return self._database_format + + @database_format.setter + def database_format(self, database_format): + """Sets the database_format of this ContainerImageDate. + + + :param database_format: The database_format of this ContainerImageDate. # noqa: E501 + :type: str + """ + + self._database_format = database_format + + @property + def unix_format(self): + """Gets the unix_format of this ContainerImageDate. # noqa: E501 + + + :return: The unix_format of this ContainerImageDate. # noqa: E501 + :rtype: str + """ + return self._unix_format + + @unix_format.setter + def unix_format(self, unix_format): + """Sets the unix_format of this ContainerImageDate. + + + :param unix_format: The unix_format of this ContainerImageDate. # noqa: E501 + :type: str + """ + + self._unix_format = unix_format + + @property + def created_at(self): + """Gets the created_at of this ContainerImageDate. # noqa: E501 + + + :return: The created_at of this ContainerImageDate. # noqa: E501 + :rtype: datetime + """ + return self._created_at + + @created_at.setter + def created_at(self, created_at): + """Sets the created_at of this ContainerImageDate. + + + :param created_at: The created_at of this ContainerImageDate. # noqa: E501 + :type: datetime + """ + + self._created_at = created_at + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(ContainerImageDate, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, ContainerImageDate): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/container_image_environment_item.py b/swagger/api/api_container/models/container_image_environment_item.py new file mode 100644 index 0000000..ce7e88c --- /dev/null +++ b/swagger/api/api_container/models/container_image_environment_item.py @@ -0,0 +1,298 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class ContainerImageEnvironmentItem(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'iid': 'int', + 'key': 'str', + 'value': 'str', + 'type': 'str', + 'image': 'ContainerImage', + 'created': 'datetime', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'iid': 'iid', + 'key': 'key', + 'value': 'value', + 'type': 'type', + 'image': 'image', + 'created': 'created', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, iid=None, key=None, value=None, type=None, image=None, created=None, last_modified=None): # noqa: E501 + """ContainerImageEnvironmentItem - a model defined in Swagger""" # noqa: E501 + self._id = None + self._iid = None + self._key = None + self._value = None + self._type = None + self._image = None + self._created = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if iid is not None: + self.iid = iid + if key is not None: + self.key = key + if value is not None: + self.value = value + if type is not None: + self.type = type + if image is not None: + self.image = image + if created is not None: + self.created = created + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this ContainerImageEnvironmentItem. # noqa: E501 + + + :return: The id of this ContainerImageEnvironmentItem. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this ContainerImageEnvironmentItem. + + + :param id: The id of this ContainerImageEnvironmentItem. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def iid(self): + """Gets the iid of this ContainerImageEnvironmentItem. # noqa: E501 + + + :return: The iid of this ContainerImageEnvironmentItem. # noqa: E501 + :rtype: int + """ + return self._iid + + @iid.setter + def iid(self, iid): + """Sets the iid of this ContainerImageEnvironmentItem. + + + :param iid: The iid of this ContainerImageEnvironmentItem. # noqa: E501 + :type: int + """ + + self._iid = iid + + @property + def key(self): + """Gets the key of this ContainerImageEnvironmentItem. # noqa: E501 + + + :return: The key of this ContainerImageEnvironmentItem. # noqa: E501 + :rtype: str + """ + return self._key + + @key.setter + def key(self, key): + """Sets the key of this ContainerImageEnvironmentItem. + + + :param key: The key of this ContainerImageEnvironmentItem. # noqa: E501 + :type: str + """ + + self._key = key + + @property + def value(self): + """Gets the value of this ContainerImageEnvironmentItem. # noqa: E501 + + + :return: The value of this ContainerImageEnvironmentItem. # noqa: E501 + :rtype: str + """ + return self._value + + @value.setter + def value(self, value): + """Sets the value of this ContainerImageEnvironmentItem. + + + :param value: The value of this ContainerImageEnvironmentItem. # noqa: E501 + :type: str + """ + + self._value = value + + @property + def type(self): + """Gets the type of this ContainerImageEnvironmentItem. # noqa: E501 + + + :return: The type of this ContainerImageEnvironmentItem. # noqa: E501 + :rtype: str + """ + return self._type + + @type.setter + def type(self, type): + """Sets the type of this ContainerImageEnvironmentItem. + + + :param type: The type of this ContainerImageEnvironmentItem. # noqa: E501 + :type: str + """ + allowed_values = ["USERNAME", "PASSWORD", "PRIVILEGED_USERNAME", "PRIVILEGED_PASSWORD"] # noqa: E501 + if type not in allowed_values: + raise ValueError( + "Invalid value for `type` ({0}), must be one of {1}" # noqa: E501 + .format(type, allowed_values) + ) + + self._type = type + + @property + def image(self): + """Gets the image of this ContainerImageEnvironmentItem. # noqa: E501 + + + :return: The image of this ContainerImageEnvironmentItem. # noqa: E501 + :rtype: ContainerImage + """ + return self._image + + @image.setter + def image(self, image): + """Sets the image of this ContainerImageEnvironmentItem. + + + :param image: The image of this ContainerImageEnvironmentItem. # noqa: E501 + :type: ContainerImage + """ + + self._image = image + + @property + def created(self): + """Gets the created of this ContainerImageEnvironmentItem. # noqa: E501 + + + :return: The created of this ContainerImageEnvironmentItem. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this ContainerImageEnvironmentItem. + + + :param created: The created of this ContainerImageEnvironmentItem. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def last_modified(self): + """Gets the last_modified of this ContainerImageEnvironmentItem. # noqa: E501 + + + :return: The last_modified of this ContainerImageEnvironmentItem. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this ContainerImageEnvironmentItem. + + + :param last_modified: The last_modified of this ContainerImageEnvironmentItem. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(ContainerImageEnvironmentItem, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, ContainerImageEnvironmentItem): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/creator.py b/swagger/api/api_container/models/creator.py new file mode 100644 index 0000000..ba0c726 --- /dev/null +++ b/swagger/api/api_container/models/creator.py @@ -0,0 +1,344 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class Creator(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'pid': 'int', + 'firstname': 'str', + 'lastname': 'str', + 'affiliation': 'str', + 'orcid': 'str', + 'identifier': 'Identifier', + 'created': 'datetime', + 'creator': 'User', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'pid': 'pid', + 'firstname': 'firstname', + 'lastname': 'lastname', + 'affiliation': 'affiliation', + 'orcid': 'orcid', + 'identifier': 'identifier', + 'created': 'created', + 'creator': 'creator', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, pid=None, firstname=None, lastname=None, affiliation=None, orcid=None, identifier=None, created=None, creator=None, last_modified=None): # noqa: E501 + """Creator - a model defined in Swagger""" # noqa: E501 + self._id = None + self._pid = None + self._firstname = None + self._lastname = None + self._affiliation = None + self._orcid = None + self._identifier = None + self._created = None + self._creator = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if pid is not None: + self.pid = pid + if firstname is not None: + self.firstname = firstname + if lastname is not None: + self.lastname = lastname + if affiliation is not None: + self.affiliation = affiliation + if orcid is not None: + self.orcid = orcid + if identifier is not None: + self.identifier = identifier + if created is not None: + self.created = created + if creator is not None: + self.creator = creator + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this Creator. # noqa: E501 + + + :return: The id of this Creator. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this Creator. + + + :param id: The id of this Creator. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def pid(self): + """Gets the pid of this Creator. # noqa: E501 + + + :return: The pid of this Creator. # noqa: E501 + :rtype: int + """ + return self._pid + + @pid.setter + def pid(self, pid): + """Sets the pid of this Creator. + + + :param pid: The pid of this Creator. # noqa: E501 + :type: int + """ + + self._pid = pid + + @property + def firstname(self): + """Gets the firstname of this Creator. # noqa: E501 + + + :return: The firstname of this Creator. # noqa: E501 + :rtype: str + """ + return self._firstname + + @firstname.setter + def firstname(self, firstname): + """Sets the firstname of this Creator. + + + :param firstname: The firstname of this Creator. # noqa: E501 + :type: str + """ + + self._firstname = firstname + + @property + def lastname(self): + """Gets the lastname of this Creator. # noqa: E501 + + + :return: The lastname of this Creator. # noqa: E501 + :rtype: str + """ + return self._lastname + + @lastname.setter + def lastname(self, lastname): + """Sets the lastname of this Creator. + + + :param lastname: The lastname of this Creator. # noqa: E501 + :type: str + """ + + self._lastname = lastname + + @property + def affiliation(self): + """Gets the affiliation of this Creator. # noqa: E501 + + + :return: The affiliation of this Creator. # noqa: E501 + :rtype: str + """ + return self._affiliation + + @affiliation.setter + def affiliation(self, affiliation): + """Sets the affiliation of this Creator. + + + :param affiliation: The affiliation of this Creator. # noqa: E501 + :type: str + """ + + self._affiliation = affiliation + + @property + def orcid(self): + """Gets the orcid of this Creator. # noqa: E501 + + + :return: The orcid of this Creator. # noqa: E501 + :rtype: str + """ + return self._orcid + + @orcid.setter + def orcid(self, orcid): + """Sets the orcid of this Creator. + + + :param orcid: The orcid of this Creator. # noqa: E501 + :type: str + """ + + self._orcid = orcid + + @property + def identifier(self): + """Gets the identifier of this Creator. # noqa: E501 + + + :return: The identifier of this Creator. # noqa: E501 + :rtype: Identifier + """ + return self._identifier + + @identifier.setter + def identifier(self, identifier): + """Sets the identifier of this Creator. + + + :param identifier: The identifier of this Creator. # noqa: E501 + :type: Identifier + """ + + self._identifier = identifier + + @property + def created(self): + """Gets the created of this Creator. # noqa: E501 + + + :return: The created of this Creator. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this Creator. + + + :param created: The created of this Creator. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def creator(self): + """Gets the creator of this Creator. # noqa: E501 + + + :return: The creator of this Creator. # noqa: E501 + :rtype: User + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this Creator. + + + :param creator: The creator of this Creator. # noqa: E501 + :type: User + """ + + self._creator = creator + + @property + def last_modified(self): + """Gets the last_modified of this Creator. # noqa: E501 + + + :return: The last_modified of this Creator. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this Creator. + + + :param last_modified: The last_modified of this Creator. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(Creator, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, Creator): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/creator_dto.py b/swagger/api/api_container/models/creator_dto.py index aad3a7f..57e8c6b 100644 --- a/swagger/api/api_container/models/creator_dto.py +++ b/swagger/api/api_container/models/creator_dto.py @@ -32,9 +32,7 @@ class CreatorDto(object): 'firstname': 'str', 'lastname': 'str', 'affiliation': 'str', - 'orcid': 'str', - 'created': 'datetime', - 'last_modified': 'datetime' + 'orcid': 'str' } attribute_map = { @@ -42,20 +40,16 @@ class CreatorDto(object): 'firstname': 'firstname', 'lastname': 'lastname', 'affiliation': 'affiliation', - 'orcid': 'orcid', - 'created': 'created', - 'last_modified': 'lastModified' + 'orcid': 'orcid' } - def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None, created=None, last_modified=None): # noqa: E501 + def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None): # noqa: E501 """CreatorDto - a model defined in Swagger""" # noqa: E501 self._id = None self._firstname = None self._lastname = None self._affiliation = None self._orcid = None - self._created = None - self._last_modified = None self.discriminator = None self.id = id self.firstname = firstname @@ -64,10 +58,6 @@ class CreatorDto(object): self.affiliation = affiliation if orcid is not None: self.orcid = orcid - if created is not None: - self.created = created - if last_modified is not None: - self.last_modified = last_modified @property def id(self): @@ -180,48 +170,6 @@ class CreatorDto(object): self._orcid = orcid - @property - def created(self): - """Gets the created of this CreatorDto. # noqa: E501 - - - :return: The created of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._created - - @created.setter - def created(self, created): - """Sets the created of this CreatorDto. - - - :param created: The created of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._created = created - - @property - def last_modified(self): - """Gets the last_modified of this CreatorDto. # noqa: E501 - - - :return: The last_modified of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._last_modified - - @last_modified.setter - def last_modified(self, last_modified): - """Sets the last_modified of this CreatorDto. - - - :param last_modified: The last_modified of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._last_modified = last_modified - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/api/api_container/models/credential.py b/swagger/api/api_container/models/credential.py new file mode 100644 index 0000000..57ed256 --- /dev/null +++ b/swagger/api/api_container/models/credential.py @@ -0,0 +1,292 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class Credential(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'str', + 'type': 'str', + 'user_id': 'str', + 'created_date': 'int', + 'secret_data': 'str', + 'credential_data': 'str', + 'priority': 'int', + 'user': 'User' + } + + attribute_map = { + 'id': 'id', + 'type': 'type', + 'user_id': 'userId', + 'created_date': 'createdDate', + 'secret_data': 'secretData', + 'credential_data': 'credentialData', + 'priority': 'priority', + 'user': 'user' + } + + def __init__(self, id=None, type=None, user_id=None, created_date=None, secret_data=None, credential_data=None, priority=None, user=None): # noqa: E501 + """Credential - a model defined in Swagger""" # noqa: E501 + self._id = None + self._type = None + self._user_id = None + self._created_date = None + self._secret_data = None + self._credential_data = None + self._priority = None + self._user = None + self.discriminator = None + if id is not None: + self.id = id + if type is not None: + self.type = type + if user_id is not None: + self.user_id = user_id + if created_date is not None: + self.created_date = created_date + if secret_data is not None: + self.secret_data = secret_data + if credential_data is not None: + self.credential_data = credential_data + if priority is not None: + self.priority = priority + if user is not None: + self.user = user + + @property + def id(self): + """Gets the id of this Credential. # noqa: E501 + + + :return: The id of this Credential. # noqa: E501 + :rtype: str + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this Credential. + + + :param id: The id of this Credential. # noqa: E501 + :type: str + """ + + self._id = id + + @property + def type(self): + """Gets the type of this Credential. # noqa: E501 + + + :return: The type of this Credential. # noqa: E501 + :rtype: str + """ + return self._type + + @type.setter + def type(self, type): + """Sets the type of this Credential. + + + :param type: The type of this Credential. # noqa: E501 + :type: str + """ + + self._type = type + + @property + def user_id(self): + """Gets the user_id of this Credential. # noqa: E501 + + + :return: The user_id of this Credential. # noqa: E501 + :rtype: str + """ + return self._user_id + + @user_id.setter + def user_id(self, user_id): + """Sets the user_id of this Credential. + + + :param user_id: The user_id of this Credential. # noqa: E501 + :type: str + """ + + self._user_id = user_id + + @property + def created_date(self): + """Gets the created_date of this Credential. # noqa: E501 + + + :return: The created_date of this Credential. # noqa: E501 + :rtype: int + """ + return self._created_date + + @created_date.setter + def created_date(self, created_date): + """Sets the created_date of this Credential. + + + :param created_date: The created_date of this Credential. # noqa: E501 + :type: int + """ + + self._created_date = created_date + + @property + def secret_data(self): + """Gets the secret_data of this Credential. # noqa: E501 + + + :return: The secret_data of this Credential. # noqa: E501 + :rtype: str + """ + return self._secret_data + + @secret_data.setter + def secret_data(self, secret_data): + """Sets the secret_data of this Credential. + + + :param secret_data: The secret_data of this Credential. # noqa: E501 + :type: str + """ + + self._secret_data = secret_data + + @property + def credential_data(self): + """Gets the credential_data of this Credential. # noqa: E501 + + + :return: The credential_data of this Credential. # noqa: E501 + :rtype: str + """ + return self._credential_data + + @credential_data.setter + def credential_data(self, credential_data): + """Sets the credential_data of this Credential. + + + :param credential_data: The credential_data of this Credential. # noqa: E501 + :type: str + """ + + self._credential_data = credential_data + + @property + def priority(self): + """Gets the priority of this Credential. # noqa: E501 + + + :return: The priority of this Credential. # noqa: E501 + :rtype: int + """ + return self._priority + + @priority.setter + def priority(self, priority): + """Sets the priority of this Credential. + + + :param priority: The priority of this Credential. # noqa: E501 + :type: int + """ + + self._priority = priority + + @property + def user(self): + """Gets the user of this Credential. # noqa: E501 + + + :return: The user of this Credential. # noqa: E501 + :rtype: User + """ + return self._user + + @user.setter + def user(self, user): + """Sets the user of this Credential. + + + :param user: The user of this Credential. # noqa: E501 + :type: User + """ + + self._user = user + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(Credential, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, Credential): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/database.py b/swagger/api/api_container/models/database.py new file mode 100644 index 0000000..e1d3608 --- /dev/null +++ b/swagger/api/api_container/models/database.py @@ -0,0 +1,552 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class Database(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'created_by': 'str', + 'creator': 'User', + 'owned_by': 'str', + 'owner': 'User', + 'container': 'Container', + 'name': 'str', + 'internal_name': 'str', + 'exchange_name': 'str', + 'description': 'str', + 'contact_person': 'str', + 'contact': 'User', + 'identifier': 'Identifier', + 'tables': 'list[Table]', + 'views': 'list[View]', + 'is_public': 'bool', + 'created': 'datetime', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'created_by': 'createdBy', + 'creator': 'creator', + 'owned_by': 'ownedBy', + 'owner': 'owner', + 'container': 'container', + 'name': 'name', + 'internal_name': 'internalName', + 'exchange_name': 'exchangeName', + 'description': 'description', + 'contact_person': 'contactPerson', + 'contact': 'contact', + 'identifier': 'identifier', + 'tables': 'tables', + 'views': 'views', + 'is_public': 'isPublic', + 'created': 'created', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, created_by=None, creator=None, owned_by=None, owner=None, container=None, name=None, internal_name=None, exchange_name=None, description=None, contact_person=None, contact=None, identifier=None, tables=None, views=None, is_public=None, created=None, last_modified=None): # noqa: E501 + """Database - a model defined in Swagger""" # noqa: E501 + self._id = None + self._created_by = None + self._creator = None + self._owned_by = None + self._owner = None + self._container = None + self._name = None + self._internal_name = None + self._exchange_name = None + self._description = None + self._contact_person = None + self._contact = None + self._identifier = None + self._tables = None + self._views = None + self._is_public = None + self._created = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if created_by is not None: + self.created_by = created_by + if creator is not None: + self.creator = creator + if owned_by is not None: + self.owned_by = owned_by + if owner is not None: + self.owner = owner + if container is not None: + self.container = container + if name is not None: + self.name = name + if internal_name is not None: + self.internal_name = internal_name + if exchange_name is not None: + self.exchange_name = exchange_name + if description is not None: + self.description = description + if contact_person is not None: + self.contact_person = contact_person + if contact is not None: + self.contact = contact + if identifier is not None: + self.identifier = identifier + if tables is not None: + self.tables = tables + if views is not None: + self.views = views + if is_public is not None: + self.is_public = is_public + if created is not None: + self.created = created + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this Database. # noqa: E501 + + + :return: The id of this Database. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this Database. + + + :param id: The id of this Database. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def created_by(self): + """Gets the created_by of this Database. # noqa: E501 + + + :return: The created_by of this Database. # noqa: E501 + :rtype: str + """ + return self._created_by + + @created_by.setter + def created_by(self, created_by): + """Sets the created_by of this Database. + + + :param created_by: The created_by of this Database. # noqa: E501 + :type: str + """ + + self._created_by = created_by + + @property + def creator(self): + """Gets the creator of this Database. # noqa: E501 + + + :return: The creator of this Database. # noqa: E501 + :rtype: User + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this Database. + + + :param creator: The creator of this Database. # noqa: E501 + :type: User + """ + + self._creator = creator + + @property + def owned_by(self): + """Gets the owned_by of this Database. # noqa: E501 + + + :return: The owned_by of this Database. # noqa: E501 + :rtype: str + """ + return self._owned_by + + @owned_by.setter + def owned_by(self, owned_by): + """Sets the owned_by of this Database. + + + :param owned_by: The owned_by of this Database. # noqa: E501 + :type: str + """ + + self._owned_by = owned_by + + @property + def owner(self): + """Gets the owner of this Database. # noqa: E501 + + + :return: The owner of this Database. # noqa: E501 + :rtype: User + """ + return self._owner + + @owner.setter + def owner(self, owner): + """Sets the owner of this Database. + + + :param owner: The owner of this Database. # noqa: E501 + :type: User + """ + + self._owner = owner + + @property + def container(self): + """Gets the container of this Database. # noqa: E501 + + + :return: The container of this Database. # noqa: E501 + :rtype: Container + """ + return self._container + + @container.setter + def container(self, container): + """Sets the container of this Database. + + + :param container: The container of this Database. # noqa: E501 + :type: Container + """ + + self._container = container + + @property + def name(self): + """Gets the name of this Database. # noqa: E501 + + + :return: The name of this Database. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this Database. + + + :param name: The name of this Database. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def internal_name(self): + """Gets the internal_name of this Database. # noqa: E501 + + + :return: The internal_name of this Database. # noqa: E501 + :rtype: str + """ + return self._internal_name + + @internal_name.setter + def internal_name(self, internal_name): + """Sets the internal_name of this Database. + + + :param internal_name: The internal_name of this Database. # noqa: E501 + :type: str + """ + + self._internal_name = internal_name + + @property + def exchange_name(self): + """Gets the exchange_name of this Database. # noqa: E501 + + + :return: The exchange_name of this Database. # noqa: E501 + :rtype: str + """ + return self._exchange_name + + @exchange_name.setter + def exchange_name(self, exchange_name): + """Sets the exchange_name of this Database. + + + :param exchange_name: The exchange_name of this Database. # noqa: E501 + :type: str + """ + + self._exchange_name = exchange_name + + @property + def description(self): + """Gets the description of this Database. # noqa: E501 + + + :return: The description of this Database. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this Database. + + + :param description: The description of this Database. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def contact_person(self): + """Gets the contact_person of this Database. # noqa: E501 + + + :return: The contact_person of this Database. # noqa: E501 + :rtype: str + """ + return self._contact_person + + @contact_person.setter + def contact_person(self, contact_person): + """Sets the contact_person of this Database. + + + :param contact_person: The contact_person of this Database. # noqa: E501 + :type: str + """ + + self._contact_person = contact_person + + @property + def contact(self): + """Gets the contact of this Database. # noqa: E501 + + + :return: The contact of this Database. # noqa: E501 + :rtype: User + """ + return self._contact + + @contact.setter + def contact(self, contact): + """Sets the contact of this Database. + + + :param contact: The contact of this Database. # noqa: E501 + :type: User + """ + + self._contact = contact + + @property + def identifier(self): + """Gets the identifier of this Database. # noqa: E501 + + + :return: The identifier of this Database. # noqa: E501 + :rtype: Identifier + """ + return self._identifier + + @identifier.setter + def identifier(self, identifier): + """Sets the identifier of this Database. + + + :param identifier: The identifier of this Database. # noqa: E501 + :type: Identifier + """ + + self._identifier = identifier + + @property + def tables(self): + """Gets the tables of this Database. # noqa: E501 + + + :return: The tables of this Database. # noqa: E501 + :rtype: list[Table] + """ + return self._tables + + @tables.setter + def tables(self, tables): + """Sets the tables of this Database. + + + :param tables: The tables of this Database. # noqa: E501 + :type: list[Table] + """ + + self._tables = tables + + @property + def views(self): + """Gets the views of this Database. # noqa: E501 + + + :return: The views of this Database. # noqa: E501 + :rtype: list[View] + """ + return self._views + + @views.setter + def views(self, views): + """Sets the views of this Database. + + + :param views: The views of this Database. # noqa: E501 + :type: list[View] + """ + + self._views = views + + @property + def is_public(self): + """Gets the is_public of this Database. # noqa: E501 + + + :return: The is_public of this Database. # noqa: E501 + :rtype: bool + """ + return self._is_public + + @is_public.setter + def is_public(self, is_public): + """Sets the is_public of this Database. + + + :param is_public: The is_public of this Database. # noqa: E501 + :type: bool + """ + + self._is_public = is_public + + @property + def created(self): + """Gets the created of this Database. # noqa: E501 + + + :return: The created of this Database. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this Database. + + + :param created: The created of this Database. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def last_modified(self): + """Gets the last_modified of this Database. # noqa: E501 + + + :return: The last_modified of this Database. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this Database. + + + :param last_modified: The last_modified of this Database. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(Database, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, Database): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/foreign_key.py b/swagger/api/api_container/models/foreign_key.py new file mode 100644 index 0000000..865db8e --- /dev/null +++ b/swagger/api/api_container/models/foreign_key.py @@ -0,0 +1,356 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class ForeignKey(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'fkid': 'int', + 'tid': 'int', + 'tdbid': 'int', + 'table': 'Table', + 'rtid': 'int', + 'rtdbid': 'int', + 'referenced_table': 'Table', + 'references': 'list[ForeignKeyReference]', + 'on_update': 'str', + 'on_delete': 'str' + } + + attribute_map = { + 'fkid': 'fkid', + 'tid': 'tid', + 'tdbid': 'tdbid', + 'table': 'table', + 'rtid': 'rtid', + 'rtdbid': 'rtdbid', + 'referenced_table': 'referencedTable', + 'references': 'references', + 'on_update': 'onUpdate', + 'on_delete': 'onDelete' + } + + def __init__(self, fkid=None, tid=None, tdbid=None, table=None, rtid=None, rtdbid=None, referenced_table=None, references=None, on_update=None, on_delete=None): # noqa: E501 + """ForeignKey - a model defined in Swagger""" # noqa: E501 + self._fkid = None + self._tid = None + self._tdbid = None + self._table = None + self._rtid = None + self._rtdbid = None + self._referenced_table = None + self._references = None + self._on_update = None + self._on_delete = None + self.discriminator = None + if fkid is not None: + self.fkid = fkid + if tid is not None: + self.tid = tid + if tdbid is not None: + self.tdbid = tdbid + if table is not None: + self.table = table + if rtid is not None: + self.rtid = rtid + if rtdbid is not None: + self.rtdbid = rtdbid + if referenced_table is not None: + self.referenced_table = referenced_table + if references is not None: + self.references = references + if on_update is not None: + self.on_update = on_update + if on_delete is not None: + self.on_delete = on_delete + + @property + def fkid(self): + """Gets the fkid of this ForeignKey. # noqa: E501 + + + :return: The fkid of this ForeignKey. # noqa: E501 + :rtype: int + """ + return self._fkid + + @fkid.setter + def fkid(self, fkid): + """Sets the fkid of this ForeignKey. + + + :param fkid: The fkid of this ForeignKey. # noqa: E501 + :type: int + """ + + self._fkid = fkid + + @property + def tid(self): + """Gets the tid of this ForeignKey. # noqa: E501 + + + :return: The tid of this ForeignKey. # noqa: E501 + :rtype: int + """ + return self._tid + + @tid.setter + def tid(self, tid): + """Sets the tid of this ForeignKey. + + + :param tid: The tid of this ForeignKey. # noqa: E501 + :type: int + """ + + self._tid = tid + + @property + def tdbid(self): + """Gets the tdbid of this ForeignKey. # noqa: E501 + + + :return: The tdbid of this ForeignKey. # noqa: E501 + :rtype: int + """ + return self._tdbid + + @tdbid.setter + def tdbid(self, tdbid): + """Sets the tdbid of this ForeignKey. + + + :param tdbid: The tdbid of this ForeignKey. # noqa: E501 + :type: int + """ + + self._tdbid = tdbid + + @property + def table(self): + """Gets the table of this ForeignKey. # noqa: E501 + + + :return: The table of this ForeignKey. # noqa: E501 + :rtype: Table + """ + return self._table + + @table.setter + def table(self, table): + """Sets the table of this ForeignKey. + + + :param table: The table of this ForeignKey. # noqa: E501 + :type: Table + """ + + self._table = table + + @property + def rtid(self): + """Gets the rtid of this ForeignKey. # noqa: E501 + + + :return: The rtid of this ForeignKey. # noqa: E501 + :rtype: int + """ + return self._rtid + + @rtid.setter + def rtid(self, rtid): + """Sets the rtid of this ForeignKey. + + + :param rtid: The rtid of this ForeignKey. # noqa: E501 + :type: int + """ + + self._rtid = rtid + + @property + def rtdbid(self): + """Gets the rtdbid of this ForeignKey. # noqa: E501 + + + :return: The rtdbid of this ForeignKey. # noqa: E501 + :rtype: int + """ + return self._rtdbid + + @rtdbid.setter + def rtdbid(self, rtdbid): + """Sets the rtdbid of this ForeignKey. + + + :param rtdbid: The rtdbid of this ForeignKey. # noqa: E501 + :type: int + """ + + self._rtdbid = rtdbid + + @property + def referenced_table(self): + """Gets the referenced_table of this ForeignKey. # noqa: E501 + + + :return: The referenced_table of this ForeignKey. # noqa: E501 + :rtype: Table + """ + return self._referenced_table + + @referenced_table.setter + def referenced_table(self, referenced_table): + """Sets the referenced_table of this ForeignKey. + + + :param referenced_table: The referenced_table of this ForeignKey. # noqa: E501 + :type: Table + """ + + self._referenced_table = referenced_table + + @property + def references(self): + """Gets the references of this ForeignKey. # noqa: E501 + + + :return: The references of this ForeignKey. # noqa: E501 + :rtype: list[ForeignKeyReference] + """ + return self._references + + @references.setter + def references(self, references): + """Sets the references of this ForeignKey. + + + :param references: The references of this ForeignKey. # noqa: E501 + :type: list[ForeignKeyReference] + """ + + self._references = references + + @property + def on_update(self): + """Gets the on_update of this ForeignKey. # noqa: E501 + + + :return: The on_update of this ForeignKey. # noqa: E501 + :rtype: str + """ + return self._on_update + + @on_update.setter + def on_update(self, on_update): + """Sets the on_update of this ForeignKey. + + + :param on_update: The on_update of this ForeignKey. # noqa: E501 + :type: str + """ + allowed_values = ["ReferenceType.RESTRICT", "ReferenceType.CASCADE", "ReferenceType.SET_NULL", "ReferenceType.NO_ACTION", "ReferenceType.SET_DEFAULT"] # noqa: E501 + if on_update not in allowed_values: + raise ValueError( + "Invalid value for `on_update` ({0}), must be one of {1}" # noqa: E501 + .format(on_update, allowed_values) + ) + + self._on_update = on_update + + @property + def on_delete(self): + """Gets the on_delete of this ForeignKey. # noqa: E501 + + + :return: The on_delete of this ForeignKey. # noqa: E501 + :rtype: str + """ + return self._on_delete + + @on_delete.setter + def on_delete(self, on_delete): + """Sets the on_delete of this ForeignKey. + + + :param on_delete: The on_delete of this ForeignKey. # noqa: E501 + :type: str + """ + allowed_values = ["ReferenceType.RESTRICT", "ReferenceType.CASCADE", "ReferenceType.SET_NULL", "ReferenceType.NO_ACTION", "ReferenceType.SET_DEFAULT"] # noqa: E501 + if on_delete not in allowed_values: + raise ValueError( + "Invalid value for `on_delete` ({0}), must be one of {1}" # noqa: E501 + .format(on_delete, allowed_values) + ) + + self._on_delete = on_delete + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(ForeignKey, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, ForeignKey): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/foreign_key_reference.py b/swagger/api/api_container/models/foreign_key_reference.py new file mode 100644 index 0000000..9789412 --- /dev/null +++ b/swagger/api/api_container/models/foreign_key_reference.py @@ -0,0 +1,188 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class ForeignKeyReference(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'foreign_key': 'ForeignKey', + 'column': 'TableColumn', + 'referenced_column': 'TableColumn' + } + + attribute_map = { + 'id': 'id', + 'foreign_key': 'foreignKey', + 'column': 'column', + 'referenced_column': 'referencedColumn' + } + + def __init__(self, id=None, foreign_key=None, column=None, referenced_column=None): # noqa: E501 + """ForeignKeyReference - a model defined in Swagger""" # noqa: E501 + self._id = None + self._foreign_key = None + self._column = None + self._referenced_column = None + self.discriminator = None + if id is not None: + self.id = id + if foreign_key is not None: + self.foreign_key = foreign_key + if column is not None: + self.column = column + if referenced_column is not None: + self.referenced_column = referenced_column + + @property + def id(self): + """Gets the id of this ForeignKeyReference. # noqa: E501 + + + :return: The id of this ForeignKeyReference. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this ForeignKeyReference. + + + :param id: The id of this ForeignKeyReference. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def foreign_key(self): + """Gets the foreign_key of this ForeignKeyReference. # noqa: E501 + + + :return: The foreign_key of this ForeignKeyReference. # noqa: E501 + :rtype: ForeignKey + """ + return self._foreign_key + + @foreign_key.setter + def foreign_key(self, foreign_key): + """Sets the foreign_key of this ForeignKeyReference. + + + :param foreign_key: The foreign_key of this ForeignKeyReference. # noqa: E501 + :type: ForeignKey + """ + + self._foreign_key = foreign_key + + @property + def column(self): + """Gets the column of this ForeignKeyReference. # noqa: E501 + + + :return: The column of this ForeignKeyReference. # noqa: E501 + :rtype: TableColumn + """ + return self._column + + @column.setter + def column(self, column): + """Sets the column of this ForeignKeyReference. + + + :param column: The column of this ForeignKeyReference. # noqa: E501 + :type: TableColumn + """ + + self._column = column + + @property + def referenced_column(self): + """Gets the referenced_column of this ForeignKeyReference. # noqa: E501 + + + :return: The referenced_column of this ForeignKeyReference. # noqa: E501 + :rtype: TableColumn + """ + return self._referenced_column + + @referenced_column.setter + def referenced_column(self, referenced_column): + """Sets the referenced_column of this ForeignKeyReference. + + + :param referenced_column: The referenced_column of this ForeignKeyReference. # noqa: E501 + :type: TableColumn + """ + + self._referenced_column = referenced_column + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(ForeignKeyReference, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, ForeignKeyReference): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/identifier.py b/swagger/api/api_container/models/identifier.py new file mode 100644 index 0000000..fcfc55f --- /dev/null +++ b/swagger/api/api_container/models/identifier.py @@ -0,0 +1,805 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class Identifier(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'container_id': 'int', + 'database_id': 'int', + 'query_id': 'int', + 'creator': 'User', + 'title': 'str', + 'description': 'str', + 'publisher': 'str', + 'language': 'str', + 'license': 'License', + 'type': 'str', + 'query': 'str', + 'query_normalized': 'str', + 'query_hash': 'str', + 'result_hash': 'str', + 'execution': 'datetime', + 'result_number': 'int', + 'publication_year': 'int', + 'publication_month': 'int', + 'publication_day': 'int', + 'visibility': 'str', + 'database': 'Database', + 'related': 'list[RelatedIdentifier]', + 'doi': 'str', + 'creators': 'list[Creator]', + 'created': 'datetime', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'container_id': 'containerId', + 'database_id': 'databaseId', + 'query_id': 'queryId', + 'creator': 'creator', + 'title': 'title', + 'description': 'description', + 'publisher': 'publisher', + 'language': 'language', + 'license': 'license', + 'type': 'type', + 'query': 'query', + 'query_normalized': 'queryNormalized', + 'query_hash': 'queryHash', + 'result_hash': 'resultHash', + 'execution': 'execution', + 'result_number': 'resultNumber', + 'publication_year': 'publicationYear', + 'publication_month': 'publicationMonth', + 'publication_day': 'publicationDay', + 'visibility': 'visibility', + 'database': 'database', + 'related': 'related', + 'doi': 'doi', + 'creators': 'creators', + 'created': 'created', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, container_id=None, database_id=None, query_id=None, creator=None, title=None, description=None, publisher=None, language=None, license=None, type=None, query=None, query_normalized=None, query_hash=None, result_hash=None, execution=None, result_number=None, publication_year=None, publication_month=None, publication_day=None, visibility=None, database=None, related=None, doi=None, creators=None, created=None, last_modified=None): # noqa: E501 + """Identifier - a model defined in Swagger""" # noqa: E501 + self._id = None + self._container_id = None + self._database_id = None + self._query_id = None + self._creator = None + self._title = None + self._description = None + self._publisher = None + self._language = None + self._license = None + self._type = None + self._query = None + self._query_normalized = None + self._query_hash = None + self._result_hash = None + self._execution = None + self._result_number = None + self._publication_year = None + self._publication_month = None + self._publication_day = None + self._visibility = None + self._database = None + self._related = None + self._doi = None + self._creators = None + self._created = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if container_id is not None: + self.container_id = container_id + if database_id is not None: + self.database_id = database_id + if query_id is not None: + self.query_id = query_id + if creator is not None: + self.creator = creator + if title is not None: + self.title = title + if description is not None: + self.description = description + self.publisher = publisher + if language is not None: + self.language = language + if license is not None: + self.license = license + if type is not None: + self.type = type + if query is not None: + self.query = query + if query_normalized is not None: + self.query_normalized = query_normalized + if query_hash is not None: + self.query_hash = query_hash + if result_hash is not None: + self.result_hash = result_hash + if execution is not None: + self.execution = execution + if result_number is not None: + self.result_number = result_number + if publication_year is not None: + self.publication_year = publication_year + if publication_month is not None: + self.publication_month = publication_month + if publication_day is not None: + self.publication_day = publication_day + if visibility is not None: + self.visibility = visibility + if database is not None: + self.database = database + if related is not None: + self.related = related + if doi is not None: + self.doi = doi + if creators is not None: + self.creators = creators + if created is not None: + self.created = created + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this Identifier. # noqa: E501 + + + :return: The id of this Identifier. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this Identifier. + + + :param id: The id of this Identifier. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def container_id(self): + """Gets the container_id of this Identifier. # noqa: E501 + + + :return: The container_id of this Identifier. # noqa: E501 + :rtype: int + """ + return self._container_id + + @container_id.setter + def container_id(self, container_id): + """Sets the container_id of this Identifier. + + + :param container_id: The container_id of this Identifier. # noqa: E501 + :type: int + """ + + self._container_id = container_id + + @property + def database_id(self): + """Gets the database_id of this Identifier. # noqa: E501 + + + :return: The database_id of this Identifier. # noqa: E501 + :rtype: int + """ + return self._database_id + + @database_id.setter + def database_id(self, database_id): + """Sets the database_id of this Identifier. + + + :param database_id: The database_id of this Identifier. # noqa: E501 + :type: int + """ + + self._database_id = database_id + + @property + def query_id(self): + """Gets the query_id of this Identifier. # noqa: E501 + + + :return: The query_id of this Identifier. # noqa: E501 + :rtype: int + """ + return self._query_id + + @query_id.setter + def query_id(self, query_id): + """Sets the query_id of this Identifier. + + + :param query_id: The query_id of this Identifier. # noqa: E501 + :type: int + """ + + self._query_id = query_id + + @property + def creator(self): + """Gets the creator of this Identifier. # noqa: E501 + + + :return: The creator of this Identifier. # noqa: E501 + :rtype: User + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this Identifier. + + + :param creator: The creator of this Identifier. # noqa: E501 + :type: User + """ + + self._creator = creator + + @property + def title(self): + """Gets the title of this Identifier. # noqa: E501 + + + :return: The title of this Identifier. # noqa: E501 + :rtype: str + """ + return self._title + + @title.setter + def title(self, title): + """Sets the title of this Identifier. + + + :param title: The title of this Identifier. # noqa: E501 + :type: str + """ + + self._title = title + + @property + def description(self): + """Gets the description of this Identifier. # noqa: E501 + + + :return: The description of this Identifier. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this Identifier. + + + :param description: The description of this Identifier. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def publisher(self): + """Gets the publisher of this Identifier. # noqa: E501 + + + :return: The publisher of this Identifier. # noqa: E501 + :rtype: str + """ + return self._publisher + + @publisher.setter + def publisher(self, publisher): + """Sets the publisher of this Identifier. + + + :param publisher: The publisher of this Identifier. # noqa: E501 + :type: str + """ + if publisher is None: + raise ValueError("Invalid value for `publisher`, must not be `None`") # noqa: E501 + + self._publisher = publisher + + @property + def language(self): + """Gets the language of this Identifier. # noqa: E501 + + + :return: The language of this Identifier. # noqa: E501 + :rtype: str + """ + return self._language + + @language.setter + def language(self, language): + """Sets the language of this Identifier. + + + :param language: The language of this Identifier. # noqa: E501 + :type: str + """ + allowed_values = ["LanguageType.AB", "LanguageType.AA", "LanguageType.AF", "LanguageType.AK", "LanguageType.SQ", "LanguageType.AM", "LanguageType.AR", "LanguageType.AN", "LanguageType.HY", "LanguageType.AS", "LanguageType.AV", "LanguageType.AE", "LanguageType.AY", "LanguageType.AZ", "LanguageType.BM", "LanguageType.BA", "LanguageType.EU", "LanguageType.BE", "LanguageType.BN", "LanguageType.BH", "LanguageType.BI", "LanguageType.BS", "LanguageType.BR", "LanguageType.BG", "LanguageType.MY", "LanguageType.CA", "LanguageType.KM", "LanguageType.CH", "LanguageType.CE", "LanguageType.NY", "LanguageType.ZH", "LanguageType.CU", "LanguageType.CV", "LanguageType.KW", "LanguageType.CO", "LanguageType.CR", "LanguageType.HR", "LanguageType.CS", "LanguageType.DA", "LanguageType.DV", "LanguageType.NL", "LanguageType.DZ", "LanguageType.EN", "LanguageType.EO", "LanguageType.ET", "LanguageType.EE", "LanguageType.FO", "LanguageType.FJ", "LanguageType.FI", "LanguageType.FR", "LanguageType.FF", "LanguageType.GD", "LanguageType.GL", "LanguageType.LG", "LanguageType.KA", "LanguageType.DE", "LanguageType.KI", "LanguageType.EL", "LanguageType.KL", "LanguageType.GN", "LanguageType.GU", "LanguageType.HT", "LanguageType.HA", "LanguageType.HE", "LanguageType.HZ", "LanguageType.HI", "LanguageType.HO", "LanguageType.HU", "LanguageType.IS", "LanguageType.IO", "LanguageType.IG", "LanguageType.ID", "LanguageType.IA", "LanguageType.IE", "LanguageType.IU", "LanguageType.IK", "LanguageType.GA", "LanguageType.IT", "LanguageType.JA", "LanguageType.JV", "LanguageType.KN", "LanguageType.KR", "LanguageType.KS", "LanguageType.KK", "LanguageType.RW", "LanguageType.KV", "LanguageType.KG", "LanguageType.KO", "LanguageType.KJ", "LanguageType.KU", "LanguageType.KY", "LanguageType.LO", "LanguageType.LA", "LanguageType.LV", "LanguageType.LB", "LanguageType.LI", "LanguageType.LN", "LanguageType.LT", "LanguageType.LU", "LanguageType.MK", "LanguageType.MG", "LanguageType.MS", "LanguageType.ML", "LanguageType.MT", "LanguageType.GV", "LanguageType.MI", "LanguageType.MR", "LanguageType.MH", "LanguageType.RO", "LanguageType.MN", "LanguageType.NA", "LanguageType.NV", "LanguageType.ND", "LanguageType.NG", "LanguageType.NE", "LanguageType.SE", "LanguageType.NO", "LanguageType.NB", "LanguageType.NN", "LanguageType.II", "LanguageType.OC", "LanguageType.OJ", "LanguageType.OR", "LanguageType.OM", "LanguageType.OS", "LanguageType.PI", "LanguageType.PA", "LanguageType.PS", "LanguageType.FA", "LanguageType.PL", "LanguageType.PT", "LanguageType.QU", "LanguageType.RM", "LanguageType.RN", "LanguageType.RU", "LanguageType.SM", "LanguageType.SG", "LanguageType.SA", "LanguageType.SC", "LanguageType.SR", "LanguageType.SN", "LanguageType.SD", "LanguageType.SI", "LanguageType.SK", "LanguageType.SL", "LanguageType.SO", "LanguageType.ST", "LanguageType.NR", "LanguageType.ES", "LanguageType.SU", "LanguageType.SW", "LanguageType.SS", "LanguageType.SV", "LanguageType.TL", "LanguageType.TY", "LanguageType.TG", "LanguageType.TA", "LanguageType.TT", "LanguageType.TE", "LanguageType.TH", "LanguageType.BO", "LanguageType.TI", "LanguageType.TO", "LanguageType.TS", "LanguageType.TN", "LanguageType.TR", "LanguageType.TK", "LanguageType.TW", "LanguageType.UG", "LanguageType.UK", "LanguageType.UR", "LanguageType.UZ", "LanguageType.VE", "LanguageType.VI", "LanguageType.VO", "LanguageType.WA", "LanguageType.CY", "LanguageType.FY", "LanguageType.WO", "LanguageType.XH", "LanguageType.YI", "LanguageType.YO", "LanguageType.ZA", "LanguageType.ZU"] # noqa: E501 + if language not in allowed_values: + raise ValueError( + "Invalid value for `language` ({0}), must be one of {1}" # noqa: E501 + .format(language, allowed_values) + ) + + self._language = language + + @property + def license(self): + """Gets the license of this Identifier. # noqa: E501 + + + :return: The license of this Identifier. # noqa: E501 + :rtype: License + """ + return self._license + + @license.setter + def license(self, license): + """Sets the license of this Identifier. + + + :param license: The license of this Identifier. # noqa: E501 + :type: License + """ + + self._license = license + + @property + def type(self): + """Gets the type of this Identifier. # noqa: E501 + + + :return: The type of this Identifier. # noqa: E501 + :rtype: str + """ + return self._type + + @type.setter + def type(self, type): + """Sets the type of this Identifier. + + + :param type: The type of this Identifier. # noqa: E501 + :type: str + """ + allowed_values = ["DATABASE", "SUBSET"] # noqa: E501 + if type not in allowed_values: + raise ValueError( + "Invalid value for `type` ({0}), must be one of {1}" # noqa: E501 + .format(type, allowed_values) + ) + + self._type = type + + @property + def query(self): + """Gets the query of this Identifier. # noqa: E501 + + + :return: The query of this Identifier. # noqa: E501 + :rtype: str + """ + return self._query + + @query.setter + def query(self, query): + """Sets the query of this Identifier. + + + :param query: The query of this Identifier. # noqa: E501 + :type: str + """ + + self._query = query + + @property + def query_normalized(self): + """Gets the query_normalized of this Identifier. # noqa: E501 + + + :return: The query_normalized of this Identifier. # noqa: E501 + :rtype: str + """ + return self._query_normalized + + @query_normalized.setter + def query_normalized(self, query_normalized): + """Sets the query_normalized of this Identifier. + + + :param query_normalized: The query_normalized of this Identifier. # noqa: E501 + :type: str + """ + + self._query_normalized = query_normalized + + @property + def query_hash(self): + """Gets the query_hash of this Identifier. # noqa: E501 + + + :return: The query_hash of this Identifier. # noqa: E501 + :rtype: str + """ + return self._query_hash + + @query_hash.setter + def query_hash(self, query_hash): + """Sets the query_hash of this Identifier. + + + :param query_hash: The query_hash of this Identifier. # noqa: E501 + :type: str + """ + + self._query_hash = query_hash + + @property + def result_hash(self): + """Gets the result_hash of this Identifier. # noqa: E501 + + + :return: The result_hash of this Identifier. # noqa: E501 + :rtype: str + """ + return self._result_hash + + @result_hash.setter + def result_hash(self, result_hash): + """Sets the result_hash of this Identifier. + + + :param result_hash: The result_hash of this Identifier. # noqa: E501 + :type: str + """ + + self._result_hash = result_hash + + @property + def execution(self): + """Gets the execution of this Identifier. # noqa: E501 + + + :return: The execution of this Identifier. # noqa: E501 + :rtype: datetime + """ + return self._execution + + @execution.setter + def execution(self, execution): + """Sets the execution of this Identifier. + + + :param execution: The execution of this Identifier. # noqa: E501 + :type: datetime + """ + + self._execution = execution + + @property + def result_number(self): + """Gets the result_number of this Identifier. # noqa: E501 + + + :return: The result_number of this Identifier. # noqa: E501 + :rtype: int + """ + return self._result_number + + @result_number.setter + def result_number(self, result_number): + """Sets the result_number of this Identifier. + + + :param result_number: The result_number of this Identifier. # noqa: E501 + :type: int + """ + + self._result_number = result_number + + @property + def publication_year(self): + """Gets the publication_year of this Identifier. # noqa: E501 + + + :return: The publication_year of this Identifier. # noqa: E501 + :rtype: int + """ + return self._publication_year + + @publication_year.setter + def publication_year(self, publication_year): + """Sets the publication_year of this Identifier. + + + :param publication_year: The publication_year of this Identifier. # noqa: E501 + :type: int + """ + + self._publication_year = publication_year + + @property + def publication_month(self): + """Gets the publication_month of this Identifier. # noqa: E501 + + + :return: The publication_month of this Identifier. # noqa: E501 + :rtype: int + """ + return self._publication_month + + @publication_month.setter + def publication_month(self, publication_month): + """Sets the publication_month of this Identifier. + + + :param publication_month: The publication_month of this Identifier. # noqa: E501 + :type: int + """ + + self._publication_month = publication_month + + @property + def publication_day(self): + """Gets the publication_day of this Identifier. # noqa: E501 + + + :return: The publication_day of this Identifier. # noqa: E501 + :rtype: int + """ + return self._publication_day + + @publication_day.setter + def publication_day(self, publication_day): + """Sets the publication_day of this Identifier. + + + :param publication_day: The publication_day of this Identifier. # noqa: E501 + :type: int + """ + + self._publication_day = publication_day + + @property + def visibility(self): + """Gets the visibility of this Identifier. # noqa: E501 + + + :return: The visibility of this Identifier. # noqa: E501 + :rtype: str + """ + return self._visibility + + @visibility.setter + def visibility(self, visibility): + """Sets the visibility of this Identifier. + + + :param visibility: The visibility of this Identifier. # noqa: E501 + :type: str + """ + allowed_values = ["VisibilityType.EVERYONE", "VisibilityType.SELF"] # noqa: E501 + if visibility not in allowed_values: + raise ValueError( + "Invalid value for `visibility` ({0}), must be one of {1}" # noqa: E501 + .format(visibility, allowed_values) + ) + + self._visibility = visibility + + @property + def database(self): + """Gets the database of this Identifier. # noqa: E501 + + + :return: The database of this Identifier. # noqa: E501 + :rtype: Database + """ + return self._database + + @database.setter + def database(self, database): + """Sets the database of this Identifier. + + + :param database: The database of this Identifier. # noqa: E501 + :type: Database + """ + + self._database = database + + @property + def related(self): + """Gets the related of this Identifier. # noqa: E501 + + + :return: The related of this Identifier. # noqa: E501 + :rtype: list[RelatedIdentifier] + """ + return self._related + + @related.setter + def related(self, related): + """Sets the related of this Identifier. + + + :param related: The related of this Identifier. # noqa: E501 + :type: list[RelatedIdentifier] + """ + + self._related = related + + @property + def doi(self): + """Gets the doi of this Identifier. # noqa: E501 + + + :return: The doi of this Identifier. # noqa: E501 + :rtype: str + """ + return self._doi + + @doi.setter + def doi(self, doi): + """Sets the doi of this Identifier. + + + :param doi: The doi of this Identifier. # noqa: E501 + :type: str + """ + + self._doi = doi + + @property + def creators(self): + """Gets the creators of this Identifier. # noqa: E501 + + + :return: The creators of this Identifier. # noqa: E501 + :rtype: list[Creator] + """ + return self._creators + + @creators.setter + def creators(self, creators): + """Sets the creators of this Identifier. + + + :param creators: The creators of this Identifier. # noqa: E501 + :type: list[Creator] + """ + + self._creators = creators + + @property + def created(self): + """Gets the created of this Identifier. # noqa: E501 + + + :return: The created of this Identifier. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this Identifier. + + + :param created: The created of this Identifier. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def last_modified(self): + """Gets the last_modified of this Identifier. # noqa: E501 + + + :return: The last_modified of this Identifier. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this Identifier. + + + :param last_modified: The last_modified of this Identifier. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(Identifier, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, Identifier): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/identifier_brief_dto.py b/swagger/api/api_container/models/identifier_brief_dto.py index da1c539..c0dcdfe 100644 --- a/swagger/api/api_container/models/identifier_brief_dto.py +++ b/swagger/api/api_container/models/identifier_brief_dto.py @@ -34,8 +34,6 @@ class IdentifierBriefDto(object): 'doi': 'str', 'publisher': 'str', 'creators': 'list[CreatorBriefDto]', - 'created': 'datetime', - 'last_modified': 'datetime', 'container_id': 'int', 'database_id': 'int', 'query_id': 'int', @@ -49,15 +47,13 @@ class IdentifierBriefDto(object): 'doi': 'doi', 'publisher': 'publisher', 'creators': 'creators', - 'created': 'created', - 'last_modified': 'lastModified', 'container_id': 'container id', 'database_id': 'database id', 'query_id': 'query id', 'publication_year': 'publication_year' } - def __init__(self, id=None, title=None, type=None, doi=None, publisher=None, creators=None, created=None, last_modified=None, container_id=None, database_id=None, query_id=None, publication_year=None): # noqa: E501 + def __init__(self, id=None, title=None, type=None, doi=None, publisher=None, creators=None, container_id=None, database_id=None, query_id=None, publication_year=None): # noqa: E501 """IdentifierBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._title = None @@ -65,8 +61,6 @@ class IdentifierBriefDto(object): self._doi = None self._publisher = None self._creators = None - self._created = None - self._last_modified = None self._container_id = None self._database_id = None self._query_id = None @@ -80,10 +74,6 @@ class IdentifierBriefDto(object): if publisher is not None: self.publisher = publisher self.creators = creators - if created is not None: - self.created = created - if last_modified is not None: - self.last_modified = last_modified self.container_id = container_id self.database_id = database_id if query_id is not None: @@ -230,48 +220,6 @@ class IdentifierBriefDto(object): self._creators = creators - @property - def created(self): - """Gets the created of this IdentifierBriefDto. # noqa: E501 - - - :return: The created of this IdentifierBriefDto. # noqa: E501 - :rtype: datetime - """ - return self._created - - @created.setter - def created(self, created): - """Sets the created of this IdentifierBriefDto. - - - :param created: The created of this IdentifierBriefDto. # noqa: E501 - :type: datetime - """ - - self._created = created - - @property - def last_modified(self): - """Gets the last_modified of this IdentifierBriefDto. # noqa: E501 - - - :return: The last_modified of this IdentifierBriefDto. # noqa: E501 - :rtype: datetime - """ - return self._last_modified - - @last_modified.setter - def last_modified(self, last_modified): - """Sets the last_modified of this IdentifierBriefDto. - - - :param last_modified: The last_modified of this IdentifierBriefDto. # noqa: E501 - :type: datetime - """ - - self._last_modified = last_modified - @property def container_id(self): """Gets the container_id of this IdentifierBriefDto. # noqa: E501 diff --git a/swagger/api/api_container/models/identifier_dto.py b/swagger/api/api_container/models/identifier_dto.py index b251e49..0c98144 100644 --- a/swagger/api/api_container/models/identifier_dto.py +++ b/swagger/api/api_container/models/identifier_dto.py @@ -309,7 +309,7 @@ class IdentifierDto(object): """ if visibility is None: raise ValueError("Invalid value for `visibility`, must not be `None`") # noqa: E501 - allowed_values = ["everyone", "trusted", "self"] # noqa: E501 + allowed_values = ["everyone", "self"] # noqa: E501 if visibility not in allowed_values: raise ValueError( "Invalid value for `visibility` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_container/models/image_brief_dto.py b/swagger/api/api_container/models/image_brief_dto.py index 52feb21..91a8205 100644 --- a/swagger/api/api_container/models/image_brief_dto.py +++ b/swagger/api/api_container/models/image_brief_dto.py @@ -29,23 +29,27 @@ class ImageBriefDto(object): """ swagger_types = { 'id': 'int', + 'registry': 'str', 'repository': 'str', 'tag': 'str' } attribute_map = { 'id': 'id', + 'registry': 'registry', 'repository': 'repository', 'tag': 'tag' } - def __init__(self, id=None, repository=None, tag=None): # noqa: E501 + def __init__(self, id=None, registry=None, repository=None, tag=None): # noqa: E501 """ImageBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None + self._registry = None self._repository = None self._tag = None self.discriminator = None self.id = id + self.registry = registry self.repository = repository self.tag = tag @@ -72,6 +76,29 @@ class ImageBriefDto(object): self._id = id + @property + def registry(self): + """Gets the registry of this ImageBriefDto. # noqa: E501 + + + :return: The registry of this ImageBriefDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageBriefDto. + + + :param registry: The registry of this ImageBriefDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def repository(self): """Gets the repository of this ImageBriefDto. # noqa: E501 diff --git a/swagger/api/api_container/models/image_change_dto.py b/swagger/api/api_container/models/image_change_dto.py index 8b8dc9f..d418e30 100644 --- a/swagger/api/api_container/models/image_change_dto.py +++ b/swagger/api/api_container/models/image_change_dto.py @@ -28,6 +28,7 @@ class ImageChangeDto(object): and the value is json key in definition. """ swagger_types = { + 'registry': 'str', 'default_port': 'int', 'environment': 'list[ImageEnvItemDto]', 'dialect': 'str', @@ -36,6 +37,7 @@ class ImageChangeDto(object): } attribute_map = { + 'registry': 'registry', 'default_port': 'defaultPort', 'environment': 'environment', 'dialect': 'dialect', @@ -43,14 +45,16 @@ class ImageChangeDto(object): 'jdbc_method': 'jdbc_method' } - def __init__(self, default_port=None, environment=None, dialect=None, driver_class=None, jdbc_method=None): # noqa: E501 + def __init__(self, registry=None, default_port=None, environment=None, dialect=None, driver_class=None, jdbc_method=None): # noqa: E501 """ImageChangeDto - a model defined in Swagger""" # noqa: E501 + self._registry = None self._default_port = None self._environment = None self._dialect = None self._driver_class = None self._jdbc_method = None self.discriminator = None + self.registry = registry if default_port is not None: self.default_port = default_port if environment is not None: @@ -59,6 +63,29 @@ class ImageChangeDto(object): self.driver_class = driver_class self.jdbc_method = jdbc_method + @property + def registry(self): + """Gets the registry of this ImageChangeDto. # noqa: E501 + + + :return: The registry of this ImageChangeDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageChangeDto. + + + :param registry: The registry of this ImageChangeDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def default_port(self): """Gets the default_port of this ImageChangeDto. # noqa: E501 diff --git a/swagger/api/api_container/models/image_create_dto.py b/swagger/api/api_container/models/image_create_dto.py index 9645abf..0488e10 100644 --- a/swagger/api/api_container/models/image_create_dto.py +++ b/swagger/api/api_container/models/image_create_dto.py @@ -28,6 +28,7 @@ class ImageCreateDto(object): and the value is json key in definition. """ swagger_types = { + 'registry': 'str', 'repository': 'str', 'tag': 'str', 'dialect': 'str', @@ -38,6 +39,7 @@ class ImageCreateDto(object): } attribute_map = { + 'registry': 'registry', 'repository': 'repository', 'tag': 'tag', 'dialect': 'dialect', @@ -47,8 +49,9 @@ class ImageCreateDto(object): 'default_port': 'default_port' } - def __init__(self, repository=None, tag=None, dialect=None, environment=None, driver_class=None, jdbc_method=None, default_port=None): # noqa: E501 + def __init__(self, registry=None, repository=None, tag=None, dialect=None, environment=None, driver_class=None, jdbc_method=None, default_port=None): # noqa: E501 """ImageCreateDto - a model defined in Swagger""" # noqa: E501 + self._registry = None self._repository = None self._tag = None self._dialect = None @@ -57,6 +60,7 @@ class ImageCreateDto(object): self._jdbc_method = None self._default_port = None self.discriminator = None + self.registry = registry self.repository = repository self.tag = tag self.dialect = dialect @@ -66,6 +70,29 @@ class ImageCreateDto(object): self.jdbc_method = jdbc_method self.default_port = default_port + @property + def registry(self): + """Gets the registry of this ImageCreateDto. # noqa: E501 + + + :return: The registry of this ImageCreateDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageCreateDto. + + + :param registry: The registry of this ImageCreateDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def repository(self): """Gets the repository of this ImageCreateDto. # noqa: E501 diff --git a/swagger/api/api_container/models/image_dto.py b/swagger/api/api_container/models/image_dto.py index 01e10e3..c3beb2d 100644 --- a/swagger/api/api_container/models/image_dto.py +++ b/swagger/api/api_container/models/image_dto.py @@ -29,6 +29,7 @@ class ImageDto(object): """ swagger_types = { 'id': 'int', + 'registry': 'str', 'repository': 'str', 'tag': 'str', 'dialect': 'str', @@ -43,6 +44,7 @@ class ImageDto(object): attribute_map = { 'id': 'id', + 'registry': 'registry', 'repository': 'repository', 'tag': 'tag', 'dialect': 'dialect', @@ -55,9 +57,10 @@ class ImageDto(object): 'default_port': 'default_port' } - def __init__(self, id=None, repository=None, tag=None, dialect=None, hash=None, compiled=None, size=None, driver_class=None, date_formats=None, jdbc_method=None, default_port=None): # noqa: E501 + def __init__(self, id=None, registry=None, repository=None, tag=None, dialect=None, hash=None, compiled=None, size=None, driver_class=None, date_formats=None, jdbc_method=None, default_port=None): # noqa: E501 """ImageDto - a model defined in Swagger""" # noqa: E501 self._id = None + self._registry = None self._repository = None self._tag = None self._dialect = None @@ -70,6 +73,7 @@ class ImageDto(object): self._default_port = None self.discriminator = None self.id = id + self.registry = registry self.repository = repository self.tag = tag self.dialect = dialect @@ -108,6 +112,29 @@ class ImageDto(object): self._id = id + @property + def registry(self): + """Gets the registry of this ImageDto. # noqa: E501 + + + :return: The registry of this ImageDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageDto. + + + :param registry: The registry of this ImageDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def repository(self): """Gets the repository of this ImageDto. # noqa: E501 diff --git a/swagger/api/api_container/models/license.py b/swagger/api/api_container/models/license.py new file mode 100644 index 0000000..79b2898 --- /dev/null +++ b/swagger/api/api_container/models/license.py @@ -0,0 +1,136 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class License(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'identifier': 'str', + 'uri': 'str' + } + + attribute_map = { + 'identifier': 'identifier', + 'uri': 'uri' + } + + def __init__(self, identifier=None, uri=None): # noqa: E501 + """License - a model defined in Swagger""" # noqa: E501 + self._identifier = None + self._uri = None + self.discriminator = None + if identifier is not None: + self.identifier = identifier + if uri is not None: + self.uri = uri + + @property + def identifier(self): + """Gets the identifier of this License. # noqa: E501 + + + :return: The identifier of this License. # noqa: E501 + :rtype: str + """ + return self._identifier + + @identifier.setter + def identifier(self, identifier): + """Sets the identifier of this License. + + + :param identifier: The identifier of this License. # noqa: E501 + :type: str + """ + + self._identifier = identifier + + @property + def uri(self): + """Gets the uri of this License. # noqa: E501 + + + :return: The uri of this License. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this License. + + + :param uri: The uri of this License. # noqa: E501 + :type: str + """ + + self._uri = uri + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(License, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, License): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/related_identifier.py b/swagger/api/api_container/models/related_identifier.py new file mode 100644 index 0000000..f14313f --- /dev/null +++ b/swagger/api/api_container/models/related_identifier.py @@ -0,0 +1,304 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class RelatedIdentifier(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'iid': 'int', + 'value': 'str', + 'type': 'str', + 'relation': 'str', + 'creator': 'User', + 'created': 'datetime', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'iid': 'iid', + 'value': 'value', + 'type': 'type', + 'relation': 'relation', + 'creator': 'creator', + 'created': 'created', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, iid=None, value=None, type=None, relation=None, creator=None, created=None, last_modified=None): # noqa: E501 + """RelatedIdentifier - a model defined in Swagger""" # noqa: E501 + self._id = None + self._iid = None + self._value = None + self._type = None + self._relation = None + self._creator = None + self._created = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if iid is not None: + self.iid = iid + if value is not None: + self.value = value + if type is not None: + self.type = type + if relation is not None: + self.relation = relation + if creator is not None: + self.creator = creator + if created is not None: + self.created = created + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this RelatedIdentifier. # noqa: E501 + + + :return: The id of this RelatedIdentifier. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this RelatedIdentifier. + + + :param id: The id of this RelatedIdentifier. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def iid(self): + """Gets the iid of this RelatedIdentifier. # noqa: E501 + + + :return: The iid of this RelatedIdentifier. # noqa: E501 + :rtype: int + """ + return self._iid + + @iid.setter + def iid(self, iid): + """Sets the iid of this RelatedIdentifier. + + + :param iid: The iid of this RelatedIdentifier. # noqa: E501 + :type: int + """ + + self._iid = iid + + @property + def value(self): + """Gets the value of this RelatedIdentifier. # noqa: E501 + + + :return: The value of this RelatedIdentifier. # noqa: E501 + :rtype: str + """ + return self._value + + @value.setter + def value(self, value): + """Sets the value of this RelatedIdentifier. + + + :param value: The value of this RelatedIdentifier. # noqa: E501 + :type: str + """ + + self._value = value + + @property + def type(self): + """Gets the type of this RelatedIdentifier. # noqa: E501 + + + :return: The type of this RelatedIdentifier. # noqa: E501 + :rtype: str + """ + return self._type + + @type.setter + def type(self, type): + """Sets the type of this RelatedIdentifier. + + + :param type: The type of this RelatedIdentifier. # noqa: E501 + :type: str + """ + allowed_values = ["DOI", "URL", "URN", "ARK", "arXiv", "bibcode", "EAN13", "EISSN", "Handle", "IGSN", "ISBN", "ISTC", "LISSN", "LSID", "PMID", "PURL", "UPC", "w3id"] # noqa: E501 + if type not in allowed_values: + raise ValueError( + "Invalid value for `type` ({0}), must be one of {1}" # noqa: E501 + .format(type, allowed_values) + ) + + self._type = type + + @property + def relation(self): + """Gets the relation of this RelatedIdentifier. # noqa: E501 + + + :return: The relation of this RelatedIdentifier. # noqa: E501 + :rtype: str + """ + return self._relation + + @relation.setter + def relation(self, relation): + """Sets the relation of this RelatedIdentifier. + + + :param relation: The relation of this RelatedIdentifier. # noqa: E501 + :type: str + """ + allowed_values = ["IsCitedBy", "Cites", "IsSupplementTo", "IsSupplementedBy", "IsContinuedBy", "Continues", "IsDescribedBy", "Describes", "HasMetadata", "IsMetadataFor", "HasVersion", "IsVersionOf", "IsNewVersionOf", "IsPreviousVersionOf", "IsPartOf", "HasPart", "IsPublishedIn", "IsReferencedBy", "References", "IsDocumentedBy", "Documents", "IsCompiledBy", "Compiles", "IsVariantFormOf", "IsOriginalFormOf", "IsIdenticalTo", "IsReviewedBy", "Reviews", "IsDerivedFrom", "IsSourceOf", "IsRequiredBy", "Requires", "IsObsoletedBy", "Obsoletes"] # noqa: E501 + if relation not in allowed_values: + raise ValueError( + "Invalid value for `relation` ({0}), must be one of {1}" # noqa: E501 + .format(relation, allowed_values) + ) + + self._relation = relation + + @property + def creator(self): + """Gets the creator of this RelatedIdentifier. # noqa: E501 + + + :return: The creator of this RelatedIdentifier. # noqa: E501 + :rtype: User + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this RelatedIdentifier. + + + :param creator: The creator of this RelatedIdentifier. # noqa: E501 + :type: User + """ + + self._creator = creator + + @property + def created(self): + """Gets the created of this RelatedIdentifier. # noqa: E501 + + + :return: The created of this RelatedIdentifier. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this RelatedIdentifier. + + + :param created: The created of this RelatedIdentifier. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def last_modified(self): + """Gets the last_modified of this RelatedIdentifier. # noqa: E501 + + + :return: The last_modified of this RelatedIdentifier. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this RelatedIdentifier. + + + :param last_modified: The last_modified of this RelatedIdentifier. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(RelatedIdentifier, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, RelatedIdentifier): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/role.py b/swagger/api/api_container/models/role.py new file mode 100644 index 0000000..cdecfc5 --- /dev/null +++ b/swagger/api/api_container/models/role.py @@ -0,0 +1,188 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class Role(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'str', + 'name': 'str', + 'realm_id': 'str', + 'users': 'list[User]' + } + + attribute_map = { + 'id': 'id', + 'name': 'name', + 'realm_id': 'realmId', + 'users': 'users' + } + + def __init__(self, id=None, name=None, realm_id=None, users=None): # noqa: E501 + """Role - a model defined in Swagger""" # noqa: E501 + self._id = None + self._name = None + self._realm_id = None + self._users = None + self.discriminator = None + if id is not None: + self.id = id + if name is not None: + self.name = name + if realm_id is not None: + self.realm_id = realm_id + if users is not None: + self.users = users + + @property + def id(self): + """Gets the id of this Role. # noqa: E501 + + + :return: The id of this Role. # noqa: E501 + :rtype: str + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this Role. + + + :param id: The id of this Role. # noqa: E501 + :type: str + """ + + self._id = id + + @property + def name(self): + """Gets the name of this Role. # noqa: E501 + + + :return: The name of this Role. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this Role. + + + :param name: The name of this Role. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def realm_id(self): + """Gets the realm_id of this Role. # noqa: E501 + + + :return: The realm_id of this Role. # noqa: E501 + :rtype: str + """ + return self._realm_id + + @realm_id.setter + def realm_id(self, realm_id): + """Sets the realm_id of this Role. + + + :param realm_id: The realm_id of this Role. # noqa: E501 + :type: str + """ + + self._realm_id = realm_id + + @property + def users(self): + """Gets the users of this Role. # noqa: E501 + + + :return: The users of this Role. # noqa: E501 + :rtype: list[User] + """ + return self._users + + @users.setter + def users(self, users): + """Sets the users of this Role. + + + :param users: The users of this Role. # noqa: E501 + :type: list[User] + """ + + self._users = users + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(Role, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, Role): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/table.py b/swagger/api/api_container/models/table.py new file mode 100644 index 0000000..6a60176 --- /dev/null +++ b/swagger/api/api_container/models/table.py @@ -0,0 +1,448 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class Table(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'tdbid': 'int', + 'creator': 'User', + 'owner': 'User', + 'name': 'str', + 'internal_name': 'str', + 'queue_name': 'str', + 'routing_key': 'str', + 'description': 'str', + 'database': 'Database', + 'columns': 'list[TableColumn]', + 'constraints': 'Constraints', + 'created': 'datetime', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'tdbid': 'tdbid', + 'creator': 'creator', + 'owner': 'owner', + 'name': 'name', + 'internal_name': 'internalName', + 'queue_name': 'queueName', + 'routing_key': 'routingKey', + 'description': 'description', + 'database': 'database', + 'columns': 'columns', + 'constraints': 'constraints', + 'created': 'created', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, tdbid=None, creator=None, owner=None, name=None, internal_name=None, queue_name=None, routing_key=None, description=None, database=None, columns=None, constraints=None, created=None, last_modified=None): # noqa: E501 + """Table - a model defined in Swagger""" # noqa: E501 + self._id = None + self._tdbid = None + self._creator = None + self._owner = None + self._name = None + self._internal_name = None + self._queue_name = None + self._routing_key = None + self._description = None + self._database = None + self._columns = None + self._constraints = None + self._created = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if tdbid is not None: + self.tdbid = tdbid + if creator is not None: + self.creator = creator + if owner is not None: + self.owner = owner + if name is not None: + self.name = name + if internal_name is not None: + self.internal_name = internal_name + if queue_name is not None: + self.queue_name = queue_name + if routing_key is not None: + self.routing_key = routing_key + if description is not None: + self.description = description + if database is not None: + self.database = database + if columns is not None: + self.columns = columns + if constraints is not None: + self.constraints = constraints + if created is not None: + self.created = created + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this Table. # noqa: E501 + + + :return: The id of this Table. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this Table. + + + :param id: The id of this Table. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def tdbid(self): + """Gets the tdbid of this Table. # noqa: E501 + + + :return: The tdbid of this Table. # noqa: E501 + :rtype: int + """ + return self._tdbid + + @tdbid.setter + def tdbid(self, tdbid): + """Sets the tdbid of this Table. + + + :param tdbid: The tdbid of this Table. # noqa: E501 + :type: int + """ + + self._tdbid = tdbid + + @property + def creator(self): + """Gets the creator of this Table. # noqa: E501 + + + :return: The creator of this Table. # noqa: E501 + :rtype: User + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this Table. + + + :param creator: The creator of this Table. # noqa: E501 + :type: User + """ + + self._creator = creator + + @property + def owner(self): + """Gets the owner of this Table. # noqa: E501 + + + :return: The owner of this Table. # noqa: E501 + :rtype: User + """ + return self._owner + + @owner.setter + def owner(self, owner): + """Sets the owner of this Table. + + + :param owner: The owner of this Table. # noqa: E501 + :type: User + """ + + self._owner = owner + + @property + def name(self): + """Gets the name of this Table. # noqa: E501 + + + :return: The name of this Table. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this Table. + + + :param name: The name of this Table. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def internal_name(self): + """Gets the internal_name of this Table. # noqa: E501 + + + :return: The internal_name of this Table. # noqa: E501 + :rtype: str + """ + return self._internal_name + + @internal_name.setter + def internal_name(self, internal_name): + """Sets the internal_name of this Table. + + + :param internal_name: The internal_name of this Table. # noqa: E501 + :type: str + """ + + self._internal_name = internal_name + + @property + def queue_name(self): + """Gets the queue_name of this Table. # noqa: E501 + + + :return: The queue_name of this Table. # noqa: E501 + :rtype: str + """ + return self._queue_name + + @queue_name.setter + def queue_name(self, queue_name): + """Sets the queue_name of this Table. + + + :param queue_name: The queue_name of this Table. # noqa: E501 + :type: str + """ + + self._queue_name = queue_name + + @property + def routing_key(self): + """Gets the routing_key of this Table. # noqa: E501 + + + :return: The routing_key of this Table. # noqa: E501 + :rtype: str + """ + return self._routing_key + + @routing_key.setter + def routing_key(self, routing_key): + """Sets the routing_key of this Table. + + + :param routing_key: The routing_key of this Table. # noqa: E501 + :type: str + """ + + self._routing_key = routing_key + + @property + def description(self): + """Gets the description of this Table. # noqa: E501 + + + :return: The description of this Table. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this Table. + + + :param description: The description of this Table. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def database(self): + """Gets the database of this Table. # noqa: E501 + + + :return: The database of this Table. # noqa: E501 + :rtype: Database + """ + return self._database + + @database.setter + def database(self, database): + """Sets the database of this Table. + + + :param database: The database of this Table. # noqa: E501 + :type: Database + """ + + self._database = database + + @property + def columns(self): + """Gets the columns of this Table. # noqa: E501 + + + :return: The columns of this Table. # noqa: E501 + :rtype: list[TableColumn] + """ + return self._columns + + @columns.setter + def columns(self, columns): + """Sets the columns of this Table. + + + :param columns: The columns of this Table. # noqa: E501 + :type: list[TableColumn] + """ + + self._columns = columns + + @property + def constraints(self): + """Gets the constraints of this Table. # noqa: E501 + + + :return: The constraints of this Table. # noqa: E501 + :rtype: Constraints + """ + return self._constraints + + @constraints.setter + def constraints(self, constraints): + """Sets the constraints of this Table. + + + :param constraints: The constraints of this Table. # noqa: E501 + :type: Constraints + """ + + self._constraints = constraints + + @property + def created(self): + """Gets the created of this Table. # noqa: E501 + + + :return: The created of this Table. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this Table. + + + :param created: The created of this Table. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def last_modified(self): + """Gets the last_modified of this Table. # noqa: E501 + + + :return: The last_modified of this Table. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this Table. + + + :param last_modified: The last_modified of this Table. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(Table, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, Table): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/table_brief_dto.py b/swagger/api/api_container/models/table_brief_dto.py index d7d1e9b..34b45ce 100644 --- a/swagger/api/api_container/models/table_brief_dto.py +++ b/swagger/api/api_container/models/table_brief_dto.py @@ -31,7 +31,7 @@ class TableBriefDto(object): 'id': 'int', 'name': 'str', 'description': 'str', - 'creator': 'UserBriefDto', + 'owner': 'UserBriefDto', 'columns': 'list[ColumnBriefDto]', 'internal_name': 'str' } @@ -40,24 +40,24 @@ class TableBriefDto(object): 'id': 'id', 'name': 'name', 'description': 'description', - 'creator': 'creator', + 'owner': 'owner', 'columns': 'columns', 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, description=None, creator=None, columns=None, internal_name=None): # noqa: E501 + def __init__(self, id=None, name=None, description=None, owner=None, columns=None, internal_name=None): # noqa: E501 """TableBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._description = None - self._creator = None + self._owner = None self._columns = None self._internal_name = None self.discriminator = None self.id = id self.name = name self.description = description - self.creator = creator + self.owner = owner self.columns = columns self.internal_name = internal_name @@ -131,27 +131,27 @@ class TableBriefDto(object): self._description = description @property - def creator(self): - """Gets the creator of this TableBriefDto. # noqa: E501 + def owner(self): + """Gets the owner of this TableBriefDto. # noqa: E501 - :return: The creator of this TableBriefDto. # noqa: E501 + :return: The owner of this TableBriefDto. # noqa: E501 :rtype: UserBriefDto """ - return self._creator + return self._owner - @creator.setter - def creator(self, creator): - """Sets the creator of this TableBriefDto. + @owner.setter + def owner(self, owner): + """Sets the owner of this TableBriefDto. - :param creator: The creator of this TableBriefDto. # noqa: E501 + :param owner: The owner of this TableBriefDto. # noqa: E501 :type: UserBriefDto """ - if creator is None: - raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + if owner is None: + raise ValueError("Invalid value for `owner`, must not be `None`") # noqa: E501 - self._creator = creator + self._owner = owner @property def columns(self): diff --git a/swagger/api/api_container/models/table_column.py b/swagger/api/api_container/models/table_column.py new file mode 100644 index 0000000..bfed7ff --- /dev/null +++ b/swagger/api/api_container/models/table_column.py @@ -0,0 +1,688 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class TableColumn(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'tid': 'int', + 'cdbid': 'int', + 'dfid': 'int', + 'date_format': 'ContainerImageDate', + 'table': 'Table', + 'view': 'View', + 'creator': 'User', + 'name': 'str', + 'auto_generated': 'bool', + 'internal_name': 'str', + 'is_primary_key': 'bool', + 'index_length': 'int', + 'alias': 'str', + 'column_type': 'str', + 'length': 'int', + 'is_null_allowed': 'bool', + 'enum_values': 'list[str]', + 'ordinal_position': 'int', + 'created': 'datetime', + 'concept': 'TableColumnConcept', + 'unit': 'TableColumnUnit', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'tid': 'tid', + 'cdbid': 'cdbid', + 'dfid': 'dfid', + 'date_format': 'dateFormat', + 'table': 'table', + 'view': 'view', + 'creator': 'creator', + 'name': 'name', + 'auto_generated': 'autoGenerated', + 'internal_name': 'internalName', + 'is_primary_key': 'isPrimaryKey', + 'index_length': 'indexLength', + 'alias': 'alias', + 'column_type': 'columnType', + 'length': 'length', + 'is_null_allowed': 'isNullAllowed', + 'enum_values': 'enumValues', + 'ordinal_position': 'ordinalPosition', + 'created': 'created', + 'concept': 'concept', + 'unit': 'unit', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, tid=None, cdbid=None, dfid=None, date_format=None, table=None, view=None, creator=None, name=None, auto_generated=None, internal_name=None, is_primary_key=None, index_length=None, alias=None, column_type=None, length=None, is_null_allowed=None, enum_values=None, ordinal_position=None, created=None, concept=None, unit=None, last_modified=None): # noqa: E501 + """TableColumn - a model defined in Swagger""" # noqa: E501 + self._id = None + self._tid = None + self._cdbid = None + self._dfid = None + self._date_format = None + self._table = None + self._view = None + self._creator = None + self._name = None + self._auto_generated = None + self._internal_name = None + self._is_primary_key = None + self._index_length = None + self._alias = None + self._column_type = None + self._length = None + self._is_null_allowed = None + self._enum_values = None + self._ordinal_position = None + self._created = None + self._concept = None + self._unit = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if tid is not None: + self.tid = tid + if cdbid is not None: + self.cdbid = cdbid + if dfid is not None: + self.dfid = dfid + if date_format is not None: + self.date_format = date_format + if table is not None: + self.table = table + if view is not None: + self.view = view + if creator is not None: + self.creator = creator + if name is not None: + self.name = name + if auto_generated is not None: + self.auto_generated = auto_generated + if internal_name is not None: + self.internal_name = internal_name + if is_primary_key is not None: + self.is_primary_key = is_primary_key + if index_length is not None: + self.index_length = index_length + if alias is not None: + self.alias = alias + if column_type is not None: + self.column_type = column_type + if length is not None: + self.length = length + if is_null_allowed is not None: + self.is_null_allowed = is_null_allowed + if enum_values is not None: + self.enum_values = enum_values + if ordinal_position is not None: + self.ordinal_position = ordinal_position + if created is not None: + self.created = created + if concept is not None: + self.concept = concept + if unit is not None: + self.unit = unit + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this TableColumn. # noqa: E501 + + + :return: The id of this TableColumn. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this TableColumn. + + + :param id: The id of this TableColumn. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def tid(self): + """Gets the tid of this TableColumn. # noqa: E501 + + + :return: The tid of this TableColumn. # noqa: E501 + :rtype: int + """ + return self._tid + + @tid.setter + def tid(self, tid): + """Sets the tid of this TableColumn. + + + :param tid: The tid of this TableColumn. # noqa: E501 + :type: int + """ + + self._tid = tid + + @property + def cdbid(self): + """Gets the cdbid of this TableColumn. # noqa: E501 + + + :return: The cdbid of this TableColumn. # noqa: E501 + :rtype: int + """ + return self._cdbid + + @cdbid.setter + def cdbid(self, cdbid): + """Sets the cdbid of this TableColumn. + + + :param cdbid: The cdbid of this TableColumn. # noqa: E501 + :type: int + """ + + self._cdbid = cdbid + + @property + def dfid(self): + """Gets the dfid of this TableColumn. # noqa: E501 + + + :return: The dfid of this TableColumn. # noqa: E501 + :rtype: int + """ + return self._dfid + + @dfid.setter + def dfid(self, dfid): + """Sets the dfid of this TableColumn. + + + :param dfid: The dfid of this TableColumn. # noqa: E501 + :type: int + """ + + self._dfid = dfid + + @property + def date_format(self): + """Gets the date_format of this TableColumn. # noqa: E501 + + + :return: The date_format of this TableColumn. # noqa: E501 + :rtype: ContainerImageDate + """ + return self._date_format + + @date_format.setter + def date_format(self, date_format): + """Sets the date_format of this TableColumn. + + + :param date_format: The date_format of this TableColumn. # noqa: E501 + :type: ContainerImageDate + """ + + self._date_format = date_format + + @property + def table(self): + """Gets the table of this TableColumn. # noqa: E501 + + + :return: The table of this TableColumn. # noqa: E501 + :rtype: Table + """ + return self._table + + @table.setter + def table(self, table): + """Sets the table of this TableColumn. + + + :param table: The table of this TableColumn. # noqa: E501 + :type: Table + """ + + self._table = table + + @property + def view(self): + """Gets the view of this TableColumn. # noqa: E501 + + + :return: The view of this TableColumn. # noqa: E501 + :rtype: View + """ + return self._view + + @view.setter + def view(self, view): + """Sets the view of this TableColumn. + + + :param view: The view of this TableColumn. # noqa: E501 + :type: View + """ + + self._view = view + + @property + def creator(self): + """Gets the creator of this TableColumn. # noqa: E501 + + + :return: The creator of this TableColumn. # noqa: E501 + :rtype: User + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this TableColumn. + + + :param creator: The creator of this TableColumn. # noqa: E501 + :type: User + """ + + self._creator = creator + + @property + def name(self): + """Gets the name of this TableColumn. # noqa: E501 + + + :return: The name of this TableColumn. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this TableColumn. + + + :param name: The name of this TableColumn. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def auto_generated(self): + """Gets the auto_generated of this TableColumn. # noqa: E501 + + + :return: The auto_generated of this TableColumn. # noqa: E501 + :rtype: bool + """ + return self._auto_generated + + @auto_generated.setter + def auto_generated(self, auto_generated): + """Sets the auto_generated of this TableColumn. + + + :param auto_generated: The auto_generated of this TableColumn. # noqa: E501 + :type: bool + """ + + self._auto_generated = auto_generated + + @property + def internal_name(self): + """Gets the internal_name of this TableColumn. # noqa: E501 + + + :return: The internal_name of this TableColumn. # noqa: E501 + :rtype: str + """ + return self._internal_name + + @internal_name.setter + def internal_name(self, internal_name): + """Sets the internal_name of this TableColumn. + + + :param internal_name: The internal_name of this TableColumn. # noqa: E501 + :type: str + """ + + self._internal_name = internal_name + + @property + def is_primary_key(self): + """Gets the is_primary_key of this TableColumn. # noqa: E501 + + + :return: The is_primary_key of this TableColumn. # noqa: E501 + :rtype: bool + """ + return self._is_primary_key + + @is_primary_key.setter + def is_primary_key(self, is_primary_key): + """Sets the is_primary_key of this TableColumn. + + + :param is_primary_key: The is_primary_key of this TableColumn. # noqa: E501 + :type: bool + """ + + self._is_primary_key = is_primary_key + + @property + def index_length(self): + """Gets the index_length of this TableColumn. # noqa: E501 + + + :return: The index_length of this TableColumn. # noqa: E501 + :rtype: int + """ + return self._index_length + + @index_length.setter + def index_length(self, index_length): + """Sets the index_length of this TableColumn. + + + :param index_length: The index_length of this TableColumn. # noqa: E501 + :type: int + """ + + self._index_length = index_length + + @property + def alias(self): + """Gets the alias of this TableColumn. # noqa: E501 + + + :return: The alias of this TableColumn. # noqa: E501 + :rtype: str + """ + return self._alias + + @alias.setter + def alias(self, alias): + """Sets the alias of this TableColumn. + + + :param alias: The alias of this TableColumn. # noqa: E501 + :type: str + """ + + self._alias = alias + + @property + def column_type(self): + """Gets the column_type of this TableColumn. # noqa: E501 + + + :return: The column_type of this TableColumn. # noqa: E501 + :rtype: str + """ + return self._column_type + + @column_type.setter + def column_type(self, column_type): + """Sets the column_type of this TableColumn. + + + :param column_type: The column_type of this TableColumn. # noqa: E501 + :type: str + """ + allowed_values = ["TableColumnType.ENUM", "TableColumnType.NUMBER", "TableColumnType.DECIMAL", "TableColumnType.STRING", "TableColumnType.TEXT", "TableColumnType.BOOLEAN", "TableColumnType.DATE", "TableColumnType.TIMESTAMP", "TableColumnType.BLOB"] # noqa: E501 + if column_type not in allowed_values: + raise ValueError( + "Invalid value for `column_type` ({0}), must be one of {1}" # noqa: E501 + .format(column_type, allowed_values) + ) + + self._column_type = column_type + + @property + def length(self): + """Gets the length of this TableColumn. # noqa: E501 + + + :return: The length of this TableColumn. # noqa: E501 + :rtype: int + """ + return self._length + + @length.setter + def length(self, length): + """Sets the length of this TableColumn. + + + :param length: The length of this TableColumn. # noqa: E501 + :type: int + """ + + self._length = length + + @property + def is_null_allowed(self): + """Gets the is_null_allowed of this TableColumn. # noqa: E501 + + + :return: The is_null_allowed of this TableColumn. # noqa: E501 + :rtype: bool + """ + return self._is_null_allowed + + @is_null_allowed.setter + def is_null_allowed(self, is_null_allowed): + """Sets the is_null_allowed of this TableColumn. + + + :param is_null_allowed: The is_null_allowed of this TableColumn. # noqa: E501 + :type: bool + """ + + self._is_null_allowed = is_null_allowed + + @property + def enum_values(self): + """Gets the enum_values of this TableColumn. # noqa: E501 + + + :return: The enum_values of this TableColumn. # noqa: E501 + :rtype: list[str] + """ + return self._enum_values + + @enum_values.setter + def enum_values(self, enum_values): + """Sets the enum_values of this TableColumn. + + + :param enum_values: The enum_values of this TableColumn. # noqa: E501 + :type: list[str] + """ + + self._enum_values = enum_values + + @property + def ordinal_position(self): + """Gets the ordinal_position of this TableColumn. # noqa: E501 + + + :return: The ordinal_position of this TableColumn. # noqa: E501 + :rtype: int + """ + return self._ordinal_position + + @ordinal_position.setter + def ordinal_position(self, ordinal_position): + """Sets the ordinal_position of this TableColumn. + + + :param ordinal_position: The ordinal_position of this TableColumn. # noqa: E501 + :type: int + """ + + self._ordinal_position = ordinal_position + + @property + def created(self): + """Gets the created of this TableColumn. # noqa: E501 + + + :return: The created of this TableColumn. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this TableColumn. + + + :param created: The created of this TableColumn. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def concept(self): + """Gets the concept of this TableColumn. # noqa: E501 + + + :return: The concept of this TableColumn. # noqa: E501 + :rtype: TableColumnConcept + """ + return self._concept + + @concept.setter + def concept(self, concept): + """Sets the concept of this TableColumn. + + + :param concept: The concept of this TableColumn. # noqa: E501 + :type: TableColumnConcept + """ + + self._concept = concept + + @property + def unit(self): + """Gets the unit of this TableColumn. # noqa: E501 + + + :return: The unit of this TableColumn. # noqa: E501 + :rtype: TableColumnUnit + """ + return self._unit + + @unit.setter + def unit(self, unit): + """Sets the unit of this TableColumn. + + + :param unit: The unit of this TableColumn. # noqa: E501 + :type: TableColumnUnit + """ + + self._unit = unit + + @property + def last_modified(self): + """Gets the last_modified of this TableColumn. # noqa: E501 + + + :return: The last_modified of this TableColumn. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this TableColumn. + + + :param last_modified: The last_modified of this TableColumn. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(TableColumn, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, TableColumn): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/table_column_concept.py b/swagger/api/api_container/models/table_column_concept.py new file mode 100644 index 0000000..6ebfb1d --- /dev/null +++ b/swagger/api/api_container/models/table_column_concept.py @@ -0,0 +1,214 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class TableColumnConcept(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uri': 'str', + 'name': 'str', + 'description': 'str', + 'created': 'datetime', + 'columns': 'list[TableColumn]' + } + + attribute_map = { + 'uri': 'uri', + 'name': 'name', + 'description': 'description', + 'created': 'created', + 'columns': 'columns' + } + + def __init__(self, uri=None, name=None, description=None, created=None, columns=None): # noqa: E501 + """TableColumnConcept - a model defined in Swagger""" # noqa: E501 + self._uri = None + self._name = None + self._description = None + self._created = None + self._columns = None + self.discriminator = None + if uri is not None: + self.uri = uri + if name is not None: + self.name = name + if description is not None: + self.description = description + if created is not None: + self.created = created + if columns is not None: + self.columns = columns + + @property + def uri(self): + """Gets the uri of this TableColumnConcept. # noqa: E501 + + + :return: The uri of this TableColumnConcept. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this TableColumnConcept. + + + :param uri: The uri of this TableColumnConcept. # noqa: E501 + :type: str + """ + + self._uri = uri + + @property + def name(self): + """Gets the name of this TableColumnConcept. # noqa: E501 + + + :return: The name of this TableColumnConcept. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this TableColumnConcept. + + + :param name: The name of this TableColumnConcept. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def description(self): + """Gets the description of this TableColumnConcept. # noqa: E501 + + + :return: The description of this TableColumnConcept. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this TableColumnConcept. + + + :param description: The description of this TableColumnConcept. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def created(self): + """Gets the created of this TableColumnConcept. # noqa: E501 + + + :return: The created of this TableColumnConcept. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this TableColumnConcept. + + + :param created: The created of this TableColumnConcept. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def columns(self): + """Gets the columns of this TableColumnConcept. # noqa: E501 + + + :return: The columns of this TableColumnConcept. # noqa: E501 + :rtype: list[TableColumn] + """ + return self._columns + + @columns.setter + def columns(self, columns): + """Sets the columns of this TableColumnConcept. + + + :param columns: The columns of this TableColumnConcept. # noqa: E501 + :type: list[TableColumn] + """ + + self._columns = columns + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(TableColumnConcept, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, TableColumnConcept): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/table_column_unit.py b/swagger/api/api_container/models/table_column_unit.py new file mode 100644 index 0000000..eca05a2 --- /dev/null +++ b/swagger/api/api_container/models/table_column_unit.py @@ -0,0 +1,214 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class TableColumnUnit(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uri': 'str', + 'name': 'str', + 'description': 'str', + 'created': 'datetime', + 'columns': 'list[TableColumn]' + } + + attribute_map = { + 'uri': 'uri', + 'name': 'name', + 'description': 'description', + 'created': 'created', + 'columns': 'columns' + } + + def __init__(self, uri=None, name=None, description=None, created=None, columns=None): # noqa: E501 + """TableColumnUnit - a model defined in Swagger""" # noqa: E501 + self._uri = None + self._name = None + self._description = None + self._created = None + self._columns = None + self.discriminator = None + if uri is not None: + self.uri = uri + if name is not None: + self.name = name + if description is not None: + self.description = description + if created is not None: + self.created = created + if columns is not None: + self.columns = columns + + @property + def uri(self): + """Gets the uri of this TableColumnUnit. # noqa: E501 + + + :return: The uri of this TableColumnUnit. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this TableColumnUnit. + + + :param uri: The uri of this TableColumnUnit. # noqa: E501 + :type: str + """ + + self._uri = uri + + @property + def name(self): + """Gets the name of this TableColumnUnit. # noqa: E501 + + + :return: The name of this TableColumnUnit. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this TableColumnUnit. + + + :param name: The name of this TableColumnUnit. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def description(self): + """Gets the description of this TableColumnUnit. # noqa: E501 + + + :return: The description of this TableColumnUnit. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this TableColumnUnit. + + + :param description: The description of this TableColumnUnit. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def created(self): + """Gets the created of this TableColumnUnit. # noqa: E501 + + + :return: The created of this TableColumnUnit. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this TableColumnUnit. + + + :param created: The created of this TableColumnUnit. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def columns(self): + """Gets the columns of this TableColumnUnit. # noqa: E501 + + + :return: The columns of this TableColumnUnit. # noqa: E501 + :rtype: list[TableColumn] + """ + return self._columns + + @columns.setter + def columns(self, columns): + """Sets the columns of this TableColumnUnit. + + + :param columns: The columns of this TableColumnUnit. # noqa: E501 + :type: list[TableColumn] + """ + + self._columns = columns + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(TableColumnUnit, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, TableColumnUnit): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/unique.py b/swagger/api/api_container/models/unique.py new file mode 100644 index 0000000..495f258 --- /dev/null +++ b/swagger/api/api_container/models/unique.py @@ -0,0 +1,214 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class Unique(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uid': 'int', + 'tid': 'int', + 'tdbid': 'int', + 'table': 'Table', + 'columns': 'list[TableColumn]' + } + + attribute_map = { + 'uid': 'uid', + 'tid': 'tid', + 'tdbid': 'tdbid', + 'table': 'table', + 'columns': 'columns' + } + + def __init__(self, uid=None, tid=None, tdbid=None, table=None, columns=None): # noqa: E501 + """Unique - a model defined in Swagger""" # noqa: E501 + self._uid = None + self._tid = None + self._tdbid = None + self._table = None + self._columns = None + self.discriminator = None + if uid is not None: + self.uid = uid + if tid is not None: + self.tid = tid + if tdbid is not None: + self.tdbid = tdbid + if table is not None: + self.table = table + if columns is not None: + self.columns = columns + + @property + def uid(self): + """Gets the uid of this Unique. # noqa: E501 + + + :return: The uid of this Unique. # noqa: E501 + :rtype: int + """ + return self._uid + + @uid.setter + def uid(self, uid): + """Sets the uid of this Unique. + + + :param uid: The uid of this Unique. # noqa: E501 + :type: int + """ + + self._uid = uid + + @property + def tid(self): + """Gets the tid of this Unique. # noqa: E501 + + + :return: The tid of this Unique. # noqa: E501 + :rtype: int + """ + return self._tid + + @tid.setter + def tid(self, tid): + """Sets the tid of this Unique. + + + :param tid: The tid of this Unique. # noqa: E501 + :type: int + """ + + self._tid = tid + + @property + def tdbid(self): + """Gets the tdbid of this Unique. # noqa: E501 + + + :return: The tdbid of this Unique. # noqa: E501 + :rtype: int + """ + return self._tdbid + + @tdbid.setter + def tdbid(self, tdbid): + """Sets the tdbid of this Unique. + + + :param tdbid: The tdbid of this Unique. # noqa: E501 + :type: int + """ + + self._tdbid = tdbid + + @property + def table(self): + """Gets the table of this Unique. # noqa: E501 + + + :return: The table of this Unique. # noqa: E501 + :rtype: Table + """ + return self._table + + @table.setter + def table(self, table): + """Sets the table of this Unique. + + + :param table: The table of this Unique. # noqa: E501 + :type: Table + """ + + self._table = table + + @property + def columns(self): + """Gets the columns of this Unique. # noqa: E501 + + + :return: The columns of this Unique. # noqa: E501 + :rtype: list[TableColumn] + """ + return self._columns + + @columns.setter + def columns(self, columns): + """Sets the columns of this Unique. + + + :param columns: The columns of this Unique. # noqa: E501 + :type: list[TableColumn] + """ + + self._columns = columns + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(Unique, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, Unique): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/user.py b/swagger/api/api_container/models/user.py new file mode 100644 index 0000000..ed602c9 --- /dev/null +++ b/swagger/api/api_container/models/user.py @@ -0,0 +1,526 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class User(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'str', + 'username': 'str', + 'firstname': 'str', + 'lastname': 'str', + 'realm_id': 'str', + 'email': 'str', + 'email_verified': 'bool', + 'enabled': 'bool', + 'created_timestamp': 'int', + 'database_password': 'str', + 'attributes': 'list[UserAttribute]', + 'credentials': 'list[Credential]', + 'containers': 'list[Container]', + 'databases': 'list[Database]', + 'identifiers': 'list[Identifier]', + 'roles': 'list[Role]', + 'tables': 'list[Table]' + } + + attribute_map = { + 'id': 'id', + 'username': 'username', + 'firstname': 'firstname', + 'lastname': 'lastname', + 'realm_id': 'realmId', + 'email': 'email', + 'email_verified': 'emailVerified', + 'enabled': 'enabled', + 'created_timestamp': 'createdTimestamp', + 'database_password': 'databasePassword', + 'attributes': 'attributes', + 'credentials': 'credentials', + 'containers': 'containers', + 'databases': 'databases', + 'identifiers': 'identifiers', + 'roles': 'roles', + 'tables': 'tables' + } + + def __init__(self, id=None, username=None, firstname=None, lastname=None, realm_id=None, email=None, email_verified=None, enabled=None, created_timestamp=None, database_password=None, attributes=None, credentials=None, containers=None, databases=None, identifiers=None, roles=None, tables=None): # noqa: E501 + """User - a model defined in Swagger""" # noqa: E501 + self._id = None + self._username = None + self._firstname = None + self._lastname = None + self._realm_id = None + self._email = None + self._email_verified = None + self._enabled = None + self._created_timestamp = None + self._database_password = None + self._attributes = None + self._credentials = None + self._containers = None + self._databases = None + self._identifiers = None + self._roles = None + self._tables = None + self.discriminator = None + if id is not None: + self.id = id + if username is not None: + self.username = username + if firstname is not None: + self.firstname = firstname + if lastname is not None: + self.lastname = lastname + if realm_id is not None: + self.realm_id = realm_id + if email is not None: + self.email = email + if email_verified is not None: + self.email_verified = email_verified + if enabled is not None: + self.enabled = enabled + if created_timestamp is not None: + self.created_timestamp = created_timestamp + if database_password is not None: + self.database_password = database_password + if attributes is not None: + self.attributes = attributes + if credentials is not None: + self.credentials = credentials + if containers is not None: + self.containers = containers + if databases is not None: + self.databases = databases + if identifiers is not None: + self.identifiers = identifiers + if roles is not None: + self.roles = roles + if tables is not None: + self.tables = tables + + @property + def id(self): + """Gets the id of this User. # noqa: E501 + + + :return: The id of this User. # noqa: E501 + :rtype: str + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this User. + + + :param id: The id of this User. # noqa: E501 + :type: str + """ + + self._id = id + + @property + def username(self): + """Gets the username of this User. # noqa: E501 + + + :return: The username of this User. # noqa: E501 + :rtype: str + """ + return self._username + + @username.setter + def username(self, username): + """Sets the username of this User. + + + :param username: The username of this User. # noqa: E501 + :type: str + """ + + self._username = username + + @property + def firstname(self): + """Gets the firstname of this User. # noqa: E501 + + + :return: The firstname of this User. # noqa: E501 + :rtype: str + """ + return self._firstname + + @firstname.setter + def firstname(self, firstname): + """Sets the firstname of this User. + + + :param firstname: The firstname of this User. # noqa: E501 + :type: str + """ + + self._firstname = firstname + + @property + def lastname(self): + """Gets the lastname of this User. # noqa: E501 + + + :return: The lastname of this User. # noqa: E501 + :rtype: str + """ + return self._lastname + + @lastname.setter + def lastname(self, lastname): + """Sets the lastname of this User. + + + :param lastname: The lastname of this User. # noqa: E501 + :type: str + """ + + self._lastname = lastname + + @property + def realm_id(self): + """Gets the realm_id of this User. # noqa: E501 + + + :return: The realm_id of this User. # noqa: E501 + :rtype: str + """ + return self._realm_id + + @realm_id.setter + def realm_id(self, realm_id): + """Sets the realm_id of this User. + + + :param realm_id: The realm_id of this User. # noqa: E501 + :type: str + """ + + self._realm_id = realm_id + + @property + def email(self): + """Gets the email of this User. # noqa: E501 + + + :return: The email of this User. # noqa: E501 + :rtype: str + """ + return self._email + + @email.setter + def email(self, email): + """Sets the email of this User. + + + :param email: The email of this User. # noqa: E501 + :type: str + """ + + self._email = email + + @property + def email_verified(self): + """Gets the email_verified of this User. # noqa: E501 + + + :return: The email_verified of this User. # noqa: E501 + :rtype: bool + """ + return self._email_verified + + @email_verified.setter + def email_verified(self, email_verified): + """Sets the email_verified of this User. + + + :param email_verified: The email_verified of this User. # noqa: E501 + :type: bool + """ + + self._email_verified = email_verified + + @property + def enabled(self): + """Gets the enabled of this User. # noqa: E501 + + + :return: The enabled of this User. # noqa: E501 + :rtype: bool + """ + return self._enabled + + @enabled.setter + def enabled(self, enabled): + """Sets the enabled of this User. + + + :param enabled: The enabled of this User. # noqa: E501 + :type: bool + """ + + self._enabled = enabled + + @property + def created_timestamp(self): + """Gets the created_timestamp of this User. # noqa: E501 + + + :return: The created_timestamp of this User. # noqa: E501 + :rtype: int + """ + return self._created_timestamp + + @created_timestamp.setter + def created_timestamp(self, created_timestamp): + """Sets the created_timestamp of this User. + + + :param created_timestamp: The created_timestamp of this User. # noqa: E501 + :type: int + """ + + self._created_timestamp = created_timestamp + + @property + def database_password(self): + """Gets the database_password of this User. # noqa: E501 + + + :return: The database_password of this User. # noqa: E501 + :rtype: str + """ + return self._database_password + + @database_password.setter + def database_password(self, database_password): + """Sets the database_password of this User. + + + :param database_password: The database_password of this User. # noqa: E501 + :type: str + """ + + self._database_password = database_password + + @property + def attributes(self): + """Gets the attributes of this User. # noqa: E501 + + + :return: The attributes of this User. # noqa: E501 + :rtype: list[UserAttribute] + """ + return self._attributes + + @attributes.setter + def attributes(self, attributes): + """Sets the attributes of this User. + + + :param attributes: The attributes of this User. # noqa: E501 + :type: list[UserAttribute] + """ + + self._attributes = attributes + + @property + def credentials(self): + """Gets the credentials of this User. # noqa: E501 + + + :return: The credentials of this User. # noqa: E501 + :rtype: list[Credential] + """ + return self._credentials + + @credentials.setter + def credentials(self, credentials): + """Sets the credentials of this User. + + + :param credentials: The credentials of this User. # noqa: E501 + :type: list[Credential] + """ + + self._credentials = credentials + + @property + def containers(self): + """Gets the containers of this User. # noqa: E501 + + + :return: The containers of this User. # noqa: E501 + :rtype: list[Container] + """ + return self._containers + + @containers.setter + def containers(self, containers): + """Sets the containers of this User. + + + :param containers: The containers of this User. # noqa: E501 + :type: list[Container] + """ + + self._containers = containers + + @property + def databases(self): + """Gets the databases of this User. # noqa: E501 + + + :return: The databases of this User. # noqa: E501 + :rtype: list[Database] + """ + return self._databases + + @databases.setter + def databases(self, databases): + """Sets the databases of this User. + + + :param databases: The databases of this User. # noqa: E501 + :type: list[Database] + """ + + self._databases = databases + + @property + def identifiers(self): + """Gets the identifiers of this User. # noqa: E501 + + + :return: The identifiers of this User. # noqa: E501 + :rtype: list[Identifier] + """ + return self._identifiers + + @identifiers.setter + def identifiers(self, identifiers): + """Sets the identifiers of this User. + + + :param identifiers: The identifiers of this User. # noqa: E501 + :type: list[Identifier] + """ + + self._identifiers = identifiers + + @property + def roles(self): + """Gets the roles of this User. # noqa: E501 + + + :return: The roles of this User. # noqa: E501 + :rtype: list[Role] + """ + return self._roles + + @roles.setter + def roles(self, roles): + """Sets the roles of this User. + + + :param roles: The roles of this User. # noqa: E501 + :type: list[Role] + """ + + self._roles = roles + + @property + def tables(self): + """Gets the tables of this User. # noqa: E501 + + + :return: The tables of this User. # noqa: E501 + :rtype: list[Table] + """ + return self._tables + + @tables.setter + def tables(self, tables): + """Sets the tables of this User. + + + :param tables: The tables of this User. # noqa: E501 + :type: list[Table] + """ + + self._tables = tables + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(User, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, User): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/user_attribute.py b/swagger/api/api_container/models/user_attribute.py new file mode 100644 index 0000000..f497a5e --- /dev/null +++ b/swagger/api/api_container/models/user_attribute.py @@ -0,0 +1,214 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class UserAttribute(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'str', + 'user_id': 'str', + 'name': 'str', + 'value': 'str', + 'user': 'User' + } + + attribute_map = { + 'id': 'id', + 'user_id': 'userId', + 'name': 'name', + 'value': 'value', + 'user': 'user' + } + + def __init__(self, id=None, user_id=None, name=None, value=None, user=None): # noqa: E501 + """UserAttribute - a model defined in Swagger""" # noqa: E501 + self._id = None + self._user_id = None + self._name = None + self._value = None + self._user = None + self.discriminator = None + if id is not None: + self.id = id + if user_id is not None: + self.user_id = user_id + if name is not None: + self.name = name + if value is not None: + self.value = value + if user is not None: + self.user = user + + @property + def id(self): + """Gets the id of this UserAttribute. # noqa: E501 + + + :return: The id of this UserAttribute. # noqa: E501 + :rtype: str + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this UserAttribute. + + + :param id: The id of this UserAttribute. # noqa: E501 + :type: str + """ + + self._id = id + + @property + def user_id(self): + """Gets the user_id of this UserAttribute. # noqa: E501 + + + :return: The user_id of this UserAttribute. # noqa: E501 + :rtype: str + """ + return self._user_id + + @user_id.setter + def user_id(self, user_id): + """Sets the user_id of this UserAttribute. + + + :param user_id: The user_id of this UserAttribute. # noqa: E501 + :type: str + """ + + self._user_id = user_id + + @property + def name(self): + """Gets the name of this UserAttribute. # noqa: E501 + + + :return: The name of this UserAttribute. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this UserAttribute. + + + :param name: The name of this UserAttribute. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def value(self): + """Gets the value of this UserAttribute. # noqa: E501 + + + :return: The value of this UserAttribute. # noqa: E501 + :rtype: str + """ + return self._value + + @value.setter + def value(self, value): + """Sets the value of this UserAttribute. + + + :param value: The value of this UserAttribute. # noqa: E501 + :type: str + """ + + self._value = value + + @property + def user(self): + """Gets the user of this UserAttribute. # noqa: E501 + + + :return: The user of this UserAttribute. # noqa: E501 + :rtype: User + """ + return self._user + + @user.setter + def user(self, user): + """Sets the user of this UserAttribute. + + + :param user: The user of this UserAttribute. # noqa: E501 + :type: User + """ + + self._user = user + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(UserAttribute, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, UserAttribute): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_container/models/view.py b/swagger/api/api_container/models/view.py new file mode 100644 index 0000000..8aff666 --- /dev/null +++ b/swagger/api/api_container/models/view.py @@ -0,0 +1,448 @@ +# coding: utf-8 + +""" + Database Repository Container Service API + + Service that manages the containers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class View(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'vcid': 'int', + 'vdbid': 'int', + 'created_by': 'str', + 'creator': 'User', + 'database': 'Database', + 'name': 'str', + 'internal_name': 'str', + 'is_public': 'bool', + 'is_initial_view': 'bool', + 'query': 'str', + 'columns': 'list[TableColumn]', + 'created': 'datetime', + 'last_modified': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'vcid': 'vcid', + 'vdbid': 'vdbid', + 'created_by': 'createdBy', + 'creator': 'creator', + 'database': 'database', + 'name': 'name', + 'internal_name': 'internalName', + 'is_public': 'isPublic', + 'is_initial_view': 'isInitialView', + 'query': 'query', + 'columns': 'columns', + 'created': 'created', + 'last_modified': 'lastModified' + } + + def __init__(self, id=None, vcid=None, vdbid=None, created_by=None, creator=None, database=None, name=None, internal_name=None, is_public=None, is_initial_view=None, query=None, columns=None, created=None, last_modified=None): # noqa: E501 + """View - a model defined in Swagger""" # noqa: E501 + self._id = None + self._vcid = None + self._vdbid = None + self._created_by = None + self._creator = None + self._database = None + self._name = None + self._internal_name = None + self._is_public = None + self._is_initial_view = None + self._query = None + self._columns = None + self._created = None + self._last_modified = None + self.discriminator = None + if id is not None: + self.id = id + if vcid is not None: + self.vcid = vcid + if vdbid is not None: + self.vdbid = vdbid + if created_by is not None: + self.created_by = created_by + if creator is not None: + self.creator = creator + if database is not None: + self.database = database + if name is not None: + self.name = name + if internal_name is not None: + self.internal_name = internal_name + if is_public is not None: + self.is_public = is_public + if is_initial_view is not None: + self.is_initial_view = is_initial_view + if query is not None: + self.query = query + if columns is not None: + self.columns = columns + if created is not None: + self.created = created + if last_modified is not None: + self.last_modified = last_modified + + @property + def id(self): + """Gets the id of this View. # noqa: E501 + + + :return: The id of this View. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this View. + + + :param id: The id of this View. # noqa: E501 + :type: int + """ + + self._id = id + + @property + def vcid(self): + """Gets the vcid of this View. # noqa: E501 + + + :return: The vcid of this View. # noqa: E501 + :rtype: int + """ + return self._vcid + + @vcid.setter + def vcid(self, vcid): + """Sets the vcid of this View. + + + :param vcid: The vcid of this View. # noqa: E501 + :type: int + """ + + self._vcid = vcid + + @property + def vdbid(self): + """Gets the vdbid of this View. # noqa: E501 + + + :return: The vdbid of this View. # noqa: E501 + :rtype: int + """ + return self._vdbid + + @vdbid.setter + def vdbid(self, vdbid): + """Sets the vdbid of this View. + + + :param vdbid: The vdbid of this View. # noqa: E501 + :type: int + """ + + self._vdbid = vdbid + + @property + def created_by(self): + """Gets the created_by of this View. # noqa: E501 + + + :return: The created_by of this View. # noqa: E501 + :rtype: str + """ + return self._created_by + + @created_by.setter + def created_by(self, created_by): + """Sets the created_by of this View. + + + :param created_by: The created_by of this View. # noqa: E501 + :type: str + """ + + self._created_by = created_by + + @property + def creator(self): + """Gets the creator of this View. # noqa: E501 + + + :return: The creator of this View. # noqa: E501 + :rtype: User + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this View. + + + :param creator: The creator of this View. # noqa: E501 + :type: User + """ + + self._creator = creator + + @property + def database(self): + """Gets the database of this View. # noqa: E501 + + + :return: The database of this View. # noqa: E501 + :rtype: Database + """ + return self._database + + @database.setter + def database(self, database): + """Sets the database of this View. + + + :param database: The database of this View. # noqa: E501 + :type: Database + """ + + self._database = database + + @property + def name(self): + """Gets the name of this View. # noqa: E501 + + + :return: The name of this View. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this View. + + + :param name: The name of this View. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def internal_name(self): + """Gets the internal_name of this View. # noqa: E501 + + + :return: The internal_name of this View. # noqa: E501 + :rtype: str + """ + return self._internal_name + + @internal_name.setter + def internal_name(self, internal_name): + """Sets the internal_name of this View. + + + :param internal_name: The internal_name of this View. # noqa: E501 + :type: str + """ + + self._internal_name = internal_name + + @property + def is_public(self): + """Gets the is_public of this View. # noqa: E501 + + + :return: The is_public of this View. # noqa: E501 + :rtype: bool + """ + return self._is_public + + @is_public.setter + def is_public(self, is_public): + """Sets the is_public of this View. + + + :param is_public: The is_public of this View. # noqa: E501 + :type: bool + """ + + self._is_public = is_public + + @property + def is_initial_view(self): + """Gets the is_initial_view of this View. # noqa: E501 + + + :return: The is_initial_view of this View. # noqa: E501 + :rtype: bool + """ + return self._is_initial_view + + @is_initial_view.setter + def is_initial_view(self, is_initial_view): + """Sets the is_initial_view of this View. + + + :param is_initial_view: The is_initial_view of this View. # noqa: E501 + :type: bool + """ + + self._is_initial_view = is_initial_view + + @property + def query(self): + """Gets the query of this View. # noqa: E501 + + + :return: The query of this View. # noqa: E501 + :rtype: str + """ + return self._query + + @query.setter + def query(self, query): + """Sets the query of this View. + + + :param query: The query of this View. # noqa: E501 + :type: str + """ + + self._query = query + + @property + def columns(self): + """Gets the columns of this View. # noqa: E501 + + + :return: The columns of this View. # noqa: E501 + :rtype: list[TableColumn] + """ + return self._columns + + @columns.setter + def columns(self, columns): + """Sets the columns of this View. + + + :param columns: The columns of this View. # noqa: E501 + :type: list[TableColumn] + """ + + self._columns = columns + + @property + def created(self): + """Gets the created of this View. # noqa: E501 + + + :return: The created of this View. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this View. + + + :param created: The created of this View. # noqa: E501 + :type: datetime + """ + + self._created = created + + @property + def last_modified(self): + """Gets the last_modified of this View. # noqa: E501 + + + :return: The last_modified of this View. # noqa: E501 + :rtype: datetime + """ + return self._last_modified + + @last_modified.setter + def last_modified(self, last_modified): + """Sets the last_modified of this View. + + + :param last_modified: The last_modified of this View. # noqa: E501 + :type: datetime + """ + + self._last_modified = last_modified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(View, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, View): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_database/api/database_endpoint_api.py b/swagger/api/api_database/api/database_endpoint_api.py index 1c7b892..660a403 100644 --- a/swagger/api/api_database/api/database_endpoint_api.py +++ b/swagger/api/api_database/api/database_endpoint_api.py @@ -349,7 +349,7 @@ class DatabaseEndpointApi(object): :param async_req bool :param int id: (required) - :return: str + :return: list[DatabaseBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -370,7 +370,7 @@ class DatabaseEndpointApi(object): :param async_req bool :param int id: (required) - :return: str + :return: list[DatabaseBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -424,7 +424,7 @@ class DatabaseEndpointApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='str', # noqa: E501 + response_type='list[DatabaseBriefDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/swagger/api/api_database/api/license_endpoint_api.py b/swagger/api/api_database/api/license_endpoint_api.py index 2b45a22..82e1f10 100644 --- a/swagger/api/api_database/api/license_endpoint_api.py +++ b/swagger/api/api_database/api/license_endpoint_api.py @@ -42,7 +42,7 @@ class LicenseEndpointApi(object): :param async_req bool :param int id: (required) - :return: DatabaseBriefDto + :return: list[LicenseDto] If the method is called asynchronously, returns the request thread. """ @@ -63,7 +63,7 @@ class LicenseEndpointApi(object): :param async_req bool :param int id: (required) - :return: DatabaseBriefDto + :return: list[LicenseDto] If the method is called asynchronously, returns the request thread. """ @@ -117,7 +117,7 @@ class LicenseEndpointApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='DatabaseBriefDto', # noqa: E501 + response_type='list[LicenseDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/swagger/api/api_database/models/api_error_dto.py b/swagger/api/api_database/models/api_error_dto.py index 75c27d9..c5b8e89 100644 --- a/swagger/api/api_database/models/api_error_dto.py +++ b/swagger/api/api_database/models/api_error_dto.py @@ -69,7 +69,7 @@ class ApiErrorDto(object): """ if status is None: raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501 - allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 + allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 EARLY_HINTS", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 if status not in allowed_values: raise ValueError( "Invalid value for `status` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_database/models/column_brief_dto.py b/swagger/api/api_database/models/column_brief_dto.py index dda2b24..fe2553e 100644 --- a/swagger/api/api_database/models/column_brief_dto.py +++ b/swagger/api/api_database/models/column_brief_dto.py @@ -30,6 +30,8 @@ class ColumnBriefDto(object): swagger_types = { 'id': 'int', 'name': 'str', + 'database_id': 'int', + 'table_id': 'int', 'internal_name': 'str', 'column_type': 'str' } @@ -37,19 +39,25 @@ class ColumnBriefDto(object): attribute_map = { 'id': 'id', 'name': 'name', + 'database_id': 'database_id', + 'table_id': 'table_id', 'internal_name': 'internal_name', 'column_type': 'column_type' } - def __init__(self, id=None, name=None, internal_name=None, column_type=None): # noqa: E501 + def __init__(self, id=None, name=None, database_id=None, table_id=None, internal_name=None, column_type=None): # noqa: E501 """ColumnBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None + self._database_id = None + self._table_id = None self._internal_name = None self._column_type = None self.discriminator = None self.id = id self.name = name + self.database_id = database_id + self.table_id = table_id self.internal_name = internal_name self.column_type = column_type @@ -99,6 +107,52 @@ class ColumnBriefDto(object): self._name = name + @property + def database_id(self): + """Gets the database_id of this ColumnBriefDto. # noqa: E501 + + + :return: The database_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._database_id + + @database_id.setter + def database_id(self, database_id): + """Sets the database_id of this ColumnBriefDto. + + + :param database_id: The database_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if database_id is None: + raise ValueError("Invalid value for `database_id`, must not be `None`") # noqa: E501 + + self._database_id = database_id + + @property + def table_id(self): + """Gets the table_id of this ColumnBriefDto. # noqa: E501 + + + :return: The table_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._table_id + + @table_id.setter + def table_id(self, table_id): + """Sets the table_id of this ColumnBriefDto. + + + :param table_id: The table_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if table_id is None: + raise ValueError("Invalid value for `table_id`, must not be `None`") # noqa: E501 + + self._table_id = table_id + @property def internal_name(self): """Gets the internal_name of this ColumnBriefDto. # noqa: E501 diff --git a/swagger/api/api_database/models/creator_dto.py b/swagger/api/api_database/models/creator_dto.py index 54d49c2..383cdb1 100644 --- a/swagger/api/api_database/models/creator_dto.py +++ b/swagger/api/api_database/models/creator_dto.py @@ -32,9 +32,7 @@ class CreatorDto(object): 'firstname': 'str', 'lastname': 'str', 'affiliation': 'str', - 'orcid': 'str', - 'created': 'datetime', - 'last_modified': 'datetime' + 'orcid': 'str' } attribute_map = { @@ -42,20 +40,16 @@ class CreatorDto(object): 'firstname': 'firstname', 'lastname': 'lastname', 'affiliation': 'affiliation', - 'orcid': 'orcid', - 'created': 'created', - 'last_modified': 'lastModified' + 'orcid': 'orcid' } - def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None, created=None, last_modified=None): # noqa: E501 + def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None): # noqa: E501 """CreatorDto - a model defined in Swagger""" # noqa: E501 self._id = None self._firstname = None self._lastname = None self._affiliation = None self._orcid = None - self._created = None - self._last_modified = None self.discriminator = None self.id = id self.firstname = firstname @@ -64,10 +58,6 @@ class CreatorDto(object): self.affiliation = affiliation if orcid is not None: self.orcid = orcid - if created is not None: - self.created = created - if last_modified is not None: - self.last_modified = last_modified @property def id(self): @@ -180,48 +170,6 @@ class CreatorDto(object): self._orcid = orcid - @property - def created(self): - """Gets the created of this CreatorDto. # noqa: E501 - - - :return: The created of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._created - - @created.setter - def created(self, created): - """Sets the created of this CreatorDto. - - - :param created: The created of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._created = created - - @property - def last_modified(self): - """Gets the last_modified of this CreatorDto. # noqa: E501 - - - :return: The last_modified of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._last_modified - - @last_modified.setter - def last_modified(self, last_modified): - """Sets the last_modified of this CreatorDto. - - - :param last_modified: The last_modified of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._last_modified = last_modified - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/api/api_database/models/identifier_brief_dto.py b/swagger/api/api_database/models/identifier_brief_dto.py index f3f62be..95ac69b 100644 --- a/swagger/api/api_database/models/identifier_brief_dto.py +++ b/swagger/api/api_database/models/identifier_brief_dto.py @@ -34,8 +34,6 @@ class IdentifierBriefDto(object): 'doi': 'str', 'publisher': 'str', 'creators': 'list[CreatorBriefDto]', - 'created': 'datetime', - 'last_modified': 'datetime', 'container_id': 'int', 'database_id': 'int', 'query_id': 'int', @@ -49,15 +47,13 @@ class IdentifierBriefDto(object): 'doi': 'doi', 'publisher': 'publisher', 'creators': 'creators', - 'created': 'created', - 'last_modified': 'lastModified', 'container_id': 'container id', 'database_id': 'database id', 'query_id': 'query id', 'publication_year': 'publication_year' } - def __init__(self, id=None, title=None, type=None, doi=None, publisher=None, creators=None, created=None, last_modified=None, container_id=None, database_id=None, query_id=None, publication_year=None): # noqa: E501 + def __init__(self, id=None, title=None, type=None, doi=None, publisher=None, creators=None, container_id=None, database_id=None, query_id=None, publication_year=None): # noqa: E501 """IdentifierBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._title = None @@ -65,8 +61,6 @@ class IdentifierBriefDto(object): self._doi = None self._publisher = None self._creators = None - self._created = None - self._last_modified = None self._container_id = None self._database_id = None self._query_id = None @@ -80,10 +74,6 @@ class IdentifierBriefDto(object): if publisher is not None: self.publisher = publisher self.creators = creators - if created is not None: - self.created = created - if last_modified is not None: - self.last_modified = last_modified self.container_id = container_id self.database_id = database_id if query_id is not None: @@ -230,48 +220,6 @@ class IdentifierBriefDto(object): self._creators = creators - @property - def created(self): - """Gets the created of this IdentifierBriefDto. # noqa: E501 - - - :return: The created of this IdentifierBriefDto. # noqa: E501 - :rtype: datetime - """ - return self._created - - @created.setter - def created(self, created): - """Sets the created of this IdentifierBriefDto. - - - :param created: The created of this IdentifierBriefDto. # noqa: E501 - :type: datetime - """ - - self._created = created - - @property - def last_modified(self): - """Gets the last_modified of this IdentifierBriefDto. # noqa: E501 - - - :return: The last_modified of this IdentifierBriefDto. # noqa: E501 - :rtype: datetime - """ - return self._last_modified - - @last_modified.setter - def last_modified(self, last_modified): - """Sets the last_modified of this IdentifierBriefDto. - - - :param last_modified: The last_modified of this IdentifierBriefDto. # noqa: E501 - :type: datetime - """ - - self._last_modified = last_modified - @property def container_id(self): """Gets the container_id of this IdentifierBriefDto. # noqa: E501 diff --git a/swagger/api/api_database/models/identifier_dto.py b/swagger/api/api_database/models/identifier_dto.py index b863550..406ed00 100644 --- a/swagger/api/api_database/models/identifier_dto.py +++ b/swagger/api/api_database/models/identifier_dto.py @@ -309,7 +309,7 @@ class IdentifierDto(object): """ if visibility is None: raise ValueError("Invalid value for `visibility`, must not be `None`") # noqa: E501 - allowed_values = ["everyone", "trusted", "self"] # noqa: E501 + allowed_values = ["everyone", "self"] # noqa: E501 if visibility not in allowed_values: raise ValueError( "Invalid value for `visibility` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_database/models/image_brief_dto.py b/swagger/api/api_database/models/image_brief_dto.py index c4be791..b584508 100644 --- a/swagger/api/api_database/models/image_brief_dto.py +++ b/swagger/api/api_database/models/image_brief_dto.py @@ -29,23 +29,27 @@ class ImageBriefDto(object): """ swagger_types = { 'id': 'int', + 'registry': 'str', 'repository': 'str', 'tag': 'str' } attribute_map = { 'id': 'id', + 'registry': 'registry', 'repository': 'repository', 'tag': 'tag' } - def __init__(self, id=None, repository=None, tag=None): # noqa: E501 + def __init__(self, id=None, registry=None, repository=None, tag=None): # noqa: E501 """ImageBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None + self._registry = None self._repository = None self._tag = None self.discriminator = None self.id = id + self.registry = registry self.repository = repository self.tag = tag @@ -72,6 +76,29 @@ class ImageBriefDto(object): self._id = id + @property + def registry(self): + """Gets the registry of this ImageBriefDto. # noqa: E501 + + + :return: The registry of this ImageBriefDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageBriefDto. + + + :param registry: The registry of this ImageBriefDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def repository(self): """Gets the repository of this ImageBriefDto. # noqa: E501 diff --git a/swagger/api/api_database/models/image_dto.py b/swagger/api/api_database/models/image_dto.py index fd8eae2..c9bedc4 100644 --- a/swagger/api/api_database/models/image_dto.py +++ b/swagger/api/api_database/models/image_dto.py @@ -29,6 +29,7 @@ class ImageDto(object): """ swagger_types = { 'id': 'int', + 'registry': 'str', 'repository': 'str', 'tag': 'str', 'dialect': 'str', @@ -43,6 +44,7 @@ class ImageDto(object): attribute_map = { 'id': 'id', + 'registry': 'registry', 'repository': 'repository', 'tag': 'tag', 'dialect': 'dialect', @@ -55,9 +57,10 @@ class ImageDto(object): 'default_port': 'default_port' } - def __init__(self, id=None, repository=None, tag=None, dialect=None, hash=None, compiled=None, size=None, driver_class=None, date_formats=None, jdbc_method=None, default_port=None): # noqa: E501 + def __init__(self, id=None, registry=None, repository=None, tag=None, dialect=None, hash=None, compiled=None, size=None, driver_class=None, date_formats=None, jdbc_method=None, default_port=None): # noqa: E501 """ImageDto - a model defined in Swagger""" # noqa: E501 self._id = None + self._registry = None self._repository = None self._tag = None self._dialect = None @@ -70,6 +73,7 @@ class ImageDto(object): self._default_port = None self.discriminator = None self.id = id + self.registry = registry self.repository = repository self.tag = tag self.dialect = dialect @@ -108,6 +112,29 @@ class ImageDto(object): self._id = id + @property + def registry(self): + """Gets the registry of this ImageDto. # noqa: E501 + + + :return: The registry of this ImageDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageDto. + + + :param registry: The registry of this ImageDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def repository(self): """Gets the repository of this ImageDto. # noqa: E501 diff --git a/swagger/api/api_database/models/table_brief_dto.py b/swagger/api/api_database/models/table_brief_dto.py index 2871c14..1983111 100644 --- a/swagger/api/api_database/models/table_brief_dto.py +++ b/swagger/api/api_database/models/table_brief_dto.py @@ -31,7 +31,7 @@ class TableBriefDto(object): 'id': 'int', 'name': 'str', 'description': 'str', - 'creator': 'UserBriefDto', + 'owner': 'UserBriefDto', 'columns': 'list[ColumnBriefDto]', 'internal_name': 'str' } @@ -40,24 +40,24 @@ class TableBriefDto(object): 'id': 'id', 'name': 'name', 'description': 'description', - 'creator': 'creator', + 'owner': 'owner', 'columns': 'columns', 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, description=None, creator=None, columns=None, internal_name=None): # noqa: E501 + def __init__(self, id=None, name=None, description=None, owner=None, columns=None, internal_name=None): # noqa: E501 """TableBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._description = None - self._creator = None + self._owner = None self._columns = None self._internal_name = None self.discriminator = None self.id = id self.name = name self.description = description - self.creator = creator + self.owner = owner self.columns = columns self.internal_name = internal_name @@ -131,27 +131,27 @@ class TableBriefDto(object): self._description = description @property - def creator(self): - """Gets the creator of this TableBriefDto. # noqa: E501 + def owner(self): + """Gets the owner of this TableBriefDto. # noqa: E501 - :return: The creator of this TableBriefDto. # noqa: E501 + :return: The owner of this TableBriefDto. # noqa: E501 :rtype: UserBriefDto """ - return self._creator + return self._owner - @creator.setter - def creator(self, creator): - """Sets the creator of this TableBriefDto. + @owner.setter + def owner(self, owner): + """Sets the owner of this TableBriefDto. - :param creator: The creator of this TableBriefDto. # noqa: E501 + :param owner: The owner of this TableBriefDto. # noqa: E501 :type: UserBriefDto """ - if creator is None: - raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + if owner is None: + raise ValueError("Invalid value for `owner`, must not be `None`") # noqa: E501 - self._creator = creator + self._owner = owner @property def columns(self): diff --git a/swagger/api/api_identifier/__init__.py b/swagger/api/api_identifier/__init__.py index c3f3bb6..4dab50d 100644 --- a/swagger/api/api_identifier/__init__.py +++ b/swagger/api/api_identifier/__init__.py @@ -26,6 +26,7 @@ from api_identifier.models.creator_create_dto import CreatorCreateDto from api_identifier.models.creator_dto import CreatorDto from api_identifier.models.identifier_create_dto import IdentifierCreateDto from api_identifier.models.identifier_dto import IdentifierDto +from api_identifier.models.identifier_update_dto import IdentifierUpdateDto from api_identifier.models.license_dto import LicenseDto from api_identifier.models.related_identifier_create_dto import RelatedIdentifierCreateDto from api_identifier.models.related_identifier_dto import RelatedIdentifierDto diff --git a/swagger/api/api_identifier/api/identifier_endpoint_api.py b/swagger/api/api_identifier/api/identifier_endpoint_api.py index a25a583..72934f3 100644 --- a/swagger/api/api_identifier/api/identifier_endpoint_api.py +++ b/swagger/api/api_identifier/api/identifier_endpoint_api.py @@ -137,99 +137,6 @@ class IdentifierEndpointApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete(self, id, **kwargs): # noqa: E501 - """Delete some identifier # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.delete_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.delete_with_http_info(id, **kwargs) # noqa: E501 - return data - - def delete_with_http_info(self, id, **kwargs): # noqa: E501 - """Delete some identifier # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param int id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method delete" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `delete`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # Authentication setting - auth_settings = ['bearerAuth'] # noqa: E501 - - return self.api_client.call_api( - '/api/identifier/{id}', 'DELETE', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - def list(self, **kwargs): # noqa: E501 """Find identifiers # noqa: E501 @@ -242,7 +149,7 @@ class IdentifierEndpointApi(object): :param int dbid: :param int qid: :param str type: - :return: str + :return: list[IdentifierDto] If the method is called asynchronously, returns the request thread. """ @@ -265,7 +172,7 @@ class IdentifierEndpointApi(object): :param int dbid: :param int qid: :param str type: - :return: str + :return: list[IdentifierDto] If the method is called asynchronously, returns the request thread. """ @@ -319,112 +226,7 @@ class IdentifierEndpointApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='str', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def update(self, body, id, **kwargs): # noqa: E501 - """Update some identifier # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.update(body, id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param IdentifierDto body: (required) - :param int id: (required) - :return: IdentifierDto - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.update_with_http_info(body, id, **kwargs) # noqa: E501 - else: - (data) = self.update_with_http_info(body, id, **kwargs) # noqa: E501 - return data - - def update_with_http_info(self, body, id, **kwargs): # noqa: E501 - """Update some identifier # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_with_http_info(body, id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param IdentifierDto body: (required) - :param int id: (required) - :return: IdentifierDto - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['body', 'id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method update" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `update`") # noqa: E501 - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `update`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'body' in params: - body_params = params['body'] - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['application/json']) # noqa: E501 - - # Authentication setting - auth_settings = ['bearerAuth'] # noqa: E501 - - return self.api_client.call_api( - '/api/identifier/{id}', 'PUT', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='IdentifierDto', # noqa: E501 + response_type='list[IdentifierDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/swagger/api/api_identifier/api/persistence_endpoint_api.py b/swagger/api/api_identifier/api/persistence_endpoint_api.py index 074686f..94308dc 100644 --- a/swagger/api/api_identifier/api/persistence_endpoint_api.py +++ b/swagger/api/api_identifier/api/persistence_endpoint_api.py @@ -32,6 +32,99 @@ class PersistenceEndpointApi(object): api_client = ApiClient() self.api_client = api_client + def delete(self, id, **kwargs): # noqa: E501 + """Delete some identifier # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.delete(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: None + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.delete_with_http_info(id, **kwargs) # noqa: E501 + else: + (data) = self.delete_with_http_info(id, **kwargs) # noqa: E501 + return data + + def delete_with_http_info(self, id, **kwargs): # noqa: E501 + """Delete some identifier # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.delete_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: None + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method delete" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `delete`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/pid/{id}', 'DELETE', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type=None, # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + def find(self, pid, accept, **kwargs): # noqa: E501 """Find some identifier # noqa: E501 @@ -132,3 +225,108 @@ class PersistenceEndpointApi(object): _preload_content=params.get('_preload_content', True), _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) + + def update(self, body, id, **kwargs): # noqa: E501 + """Update some identifier # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param IdentifierUpdateDto body: (required) + :param int id: (required) + :return: IdentifierDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.update_with_http_info(body, id, **kwargs) # noqa: E501 + else: + (data) = self.update_with_http_info(body, id, **kwargs) # noqa: E501 + return data + + def update_with_http_info(self, body, id, **kwargs): # noqa: E501 + """Update some identifier # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_with_http_info(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param IdentifierUpdateDto body: (required) + :param int id: (required) + :return: IdentifierDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body', 'id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method update" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `update`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/pid/{id}', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='IdentifierDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) diff --git a/swagger/api/api_identifier/models/__init__.py b/swagger/api/api_identifier/models/__init__.py index 845f477..c4f0d79 100644 --- a/swagger/api/api_identifier/models/__init__.py +++ b/swagger/api/api_identifier/models/__init__.py @@ -19,6 +19,7 @@ from api_identifier.models.creator_create_dto import CreatorCreateDto from api_identifier.models.creator_dto import CreatorDto from api_identifier.models.identifier_create_dto import IdentifierCreateDto from api_identifier.models.identifier_dto import IdentifierDto +from api_identifier.models.identifier_update_dto import IdentifierUpdateDto from api_identifier.models.license_dto import LicenseDto from api_identifier.models.related_identifier_create_dto import RelatedIdentifierCreateDto from api_identifier.models.related_identifier_dto import RelatedIdentifierDto diff --git a/swagger/api/api_identifier/models/api_error_dto.py b/swagger/api/api_identifier/models/api_error_dto.py index c47a336..dc406e5 100644 --- a/swagger/api/api_identifier/models/api_error_dto.py +++ b/swagger/api/api_identifier/models/api_error_dto.py @@ -69,7 +69,7 @@ class ApiErrorDto(object): """ if status is None: raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501 - allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 + allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 EARLY_HINTS", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 if status not in allowed_values: raise ValueError( "Invalid value for `status` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_identifier/models/creator_dto.py b/swagger/api/api_identifier/models/creator_dto.py index 8a6b3dd..cc892db 100644 --- a/swagger/api/api_identifier/models/creator_dto.py +++ b/swagger/api/api_identifier/models/creator_dto.py @@ -32,9 +32,7 @@ class CreatorDto(object): 'firstname': 'str', 'lastname': 'str', 'affiliation': 'str', - 'orcid': 'str', - 'created': 'datetime', - 'last_modified': 'datetime' + 'orcid': 'str' } attribute_map = { @@ -42,20 +40,16 @@ class CreatorDto(object): 'firstname': 'firstname', 'lastname': 'lastname', 'affiliation': 'affiliation', - 'orcid': 'orcid', - 'created': 'created', - 'last_modified': 'lastModified' + 'orcid': 'orcid' } - def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None, created=None, last_modified=None): # noqa: E501 + def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None): # noqa: E501 """CreatorDto - a model defined in Swagger""" # noqa: E501 self._id = None self._firstname = None self._lastname = None self._affiliation = None self._orcid = None - self._created = None - self._last_modified = None self.discriminator = None self.id = id self.firstname = firstname @@ -64,10 +58,6 @@ class CreatorDto(object): self.affiliation = affiliation if orcid is not None: self.orcid = orcid - if created is not None: - self.created = created - if last_modified is not None: - self.last_modified = last_modified @property def id(self): @@ -180,48 +170,6 @@ class CreatorDto(object): self._orcid = orcid - @property - def created(self): - """Gets the created of this CreatorDto. # noqa: E501 - - - :return: The created of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._created - - @created.setter - def created(self, created): - """Sets the created of this CreatorDto. - - - :param created: The created of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._created = created - - @property - def last_modified(self): - """Gets the last_modified of this CreatorDto. # noqa: E501 - - - :return: The last_modified of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._last_modified - - @last_modified.setter - def last_modified(self, last_modified): - """Sets the last_modified of this CreatorDto. - - - :param last_modified: The last_modified of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._last_modified = last_modified - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/api/api_identifier/models/identifier_create_dto.py b/swagger/api/api_identifier/models/identifier_create_dto.py index c147d4c..376cb14 100644 --- a/swagger/api/api_identifier/models/identifier_create_dto.py +++ b/swagger/api/api_identifier/models/identifier_create_dto.py @@ -34,6 +34,7 @@ class IdentifierCreateDto(object): 'type': 'str', 'title': 'str', 'description': 'str', + 'visibility': 'str', 'publisher': 'str', 'language': 'str', 'license': 'LicenseDto', @@ -51,6 +52,7 @@ class IdentifierCreateDto(object): 'type': 'type', 'title': 'title', 'description': 'description', + 'visibility': 'visibility', 'publisher': 'publisher', 'language': 'language', 'license': 'license', @@ -61,7 +63,7 @@ class IdentifierCreateDto(object): 'related_identifiers': 'related_identifiers' } - def __init__(self, cid=None, dbid=None, qid=None, type=None, title=None, description=None, publisher=None, language=None, license=None, creators=None, publication_day=None, publication_month=None, publication_year=None, related_identifiers=None): # noqa: E501 + def __init__(self, cid=None, dbid=None, qid=None, type=None, title=None, description=None, visibility=None, publisher=None, language=None, license=None, creators=None, publication_day=None, publication_month=None, publication_year=None, related_identifiers=None): # noqa: E501 """IdentifierCreateDto - a model defined in Swagger""" # noqa: E501 self._cid = None self._dbid = None @@ -69,6 +71,7 @@ class IdentifierCreateDto(object): self._type = None self._title = None self._description = None + self._visibility = None self._publisher = None self._language = None self._license = None @@ -86,6 +89,7 @@ class IdentifierCreateDto(object): self.title = title if description is not None: self.description = description + self.visibility = visibility if publisher is not None: self.publisher = publisher if language is not None: @@ -241,6 +245,35 @@ class IdentifierCreateDto(object): self._description = description + @property + def visibility(self): + """Gets the visibility of this IdentifierCreateDto. # noqa: E501 + + + :return: The visibility of this IdentifierCreateDto. # noqa: E501 + :rtype: str + """ + return self._visibility + + @visibility.setter + def visibility(self, visibility): + """Sets the visibility of this IdentifierCreateDto. + + + :param visibility: The visibility of this IdentifierCreateDto. # noqa: E501 + :type: str + """ + if visibility is None: + raise ValueError("Invalid value for `visibility`, must not be `None`") # noqa: E501 + allowed_values = ["everyone", "self"] # noqa: E501 + if visibility not in allowed_values: + raise ValueError( + "Invalid value for `visibility` ({0}), must be one of {1}" # noqa: E501 + .format(visibility, allowed_values) + ) + + self._visibility = visibility + @property def publisher(self): """Gets the publisher of this IdentifierCreateDto. # noqa: E501 diff --git a/swagger/api/api_identifier/models/identifier_dto.py b/swagger/api/api_identifier/models/identifier_dto.py index ada34b9..75ef56e 100644 --- a/swagger/api/api_identifier/models/identifier_dto.py +++ b/swagger/api/api_identifier/models/identifier_dto.py @@ -309,7 +309,7 @@ class IdentifierDto(object): """ if visibility is None: raise ValueError("Invalid value for `visibility`, must not be `None`") # noqa: E501 - allowed_values = ["everyone", "trusted", "self"] # noqa: E501 + allowed_values = ["everyone", "self"] # noqa: E501 if visibility not in allowed_values: raise ValueError( "Invalid value for `visibility` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_identifier/models/identifier_update_dto.py b/swagger/api/api_identifier/models/identifier_update_dto.py new file mode 100644 index 0000000..fc11594 --- /dev/null +++ b/swagger/api/api_identifier/models/identifier_update_dto.py @@ -0,0 +1,525 @@ +# coding: utf-8 + +""" + Database Repository Identifier Service API + + Service that manages the identifiers # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class IdentifierUpdateDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'cid': 'int', + 'dbid': 'int', + 'qid': 'int', + 'doi': 'str', + 'type': 'str', + 'title': 'str', + 'description': 'str', + 'visibility': 'str', + 'publisher': 'str', + 'language': 'str', + 'license': 'LicenseDto', + 'creators': 'list[CreatorDto]', + 'publication_day': 'int', + 'publication_month': 'int', + 'publication_year': 'int', + 'related_identifiers': 'list[RelatedIdentifierCreateDto]' + } + + attribute_map = { + 'cid': 'cid', + 'dbid': 'dbid', + 'qid': 'qid', + 'doi': 'doi', + 'type': 'type', + 'title': 'title', + 'description': 'description', + 'visibility': 'visibility', + 'publisher': 'publisher', + 'language': 'language', + 'license': 'license', + 'creators': 'creators', + 'publication_day': 'publication_day', + 'publication_month': 'publication_month', + 'publication_year': 'publication_year', + 'related_identifiers': 'related_identifiers' + } + + def __init__(self, cid=None, dbid=None, qid=None, doi=None, type=None, title=None, description=None, visibility=None, publisher=None, language=None, license=None, creators=None, publication_day=None, publication_month=None, publication_year=None, related_identifiers=None): # noqa: E501 + """IdentifierUpdateDto - a model defined in Swagger""" # noqa: E501 + self._cid = None + self._dbid = None + self._qid = None + self._doi = None + self._type = None + self._title = None + self._description = None + self._visibility = None + self._publisher = None + self._language = None + self._license = None + self._creators = None + self._publication_day = None + self._publication_month = None + self._publication_year = None + self._related_identifiers = None + self.discriminator = None + self.cid = cid + self.dbid = dbid + if qid is not None: + self.qid = qid + if doi is not None: + self.doi = doi + self.type = type + self.title = title + if description is not None: + self.description = description + self.visibility = visibility + if publisher is not None: + self.publisher = publisher + if language is not None: + self.language = language + if license is not None: + self.license = license + self.creators = creators + if publication_day is not None: + self.publication_day = publication_day + if publication_month is not None: + self.publication_month = publication_month + self.publication_year = publication_year + if related_identifiers is not None: + self.related_identifiers = related_identifiers + + @property + def cid(self): + """Gets the cid of this IdentifierUpdateDto. # noqa: E501 + + + :return: The cid of this IdentifierUpdateDto. # noqa: E501 + :rtype: int + """ + return self._cid + + @cid.setter + def cid(self, cid): + """Sets the cid of this IdentifierUpdateDto. + + + :param cid: The cid of this IdentifierUpdateDto. # noqa: E501 + :type: int + """ + if cid is None: + raise ValueError("Invalid value for `cid`, must not be `None`") # noqa: E501 + + self._cid = cid + + @property + def dbid(self): + """Gets the dbid of this IdentifierUpdateDto. # noqa: E501 + + + :return: The dbid of this IdentifierUpdateDto. # noqa: E501 + :rtype: int + """ + return self._dbid + + @dbid.setter + def dbid(self, dbid): + """Sets the dbid of this IdentifierUpdateDto. + + + :param dbid: The dbid of this IdentifierUpdateDto. # noqa: E501 + :type: int + """ + if dbid is None: + raise ValueError("Invalid value for `dbid`, must not be `None`") # noqa: E501 + + self._dbid = dbid + + @property + def qid(self): + """Gets the qid of this IdentifierUpdateDto. # noqa: E501 + + + :return: The qid of this IdentifierUpdateDto. # noqa: E501 + :rtype: int + """ + return self._qid + + @qid.setter + def qid(self, qid): + """Sets the qid of this IdentifierUpdateDto. + + + :param qid: The qid of this IdentifierUpdateDto. # noqa: E501 + :type: int + """ + + self._qid = qid + + @property + def doi(self): + """Gets the doi of this IdentifierUpdateDto. # noqa: E501 + + + :return: The doi of this IdentifierUpdateDto. # noqa: E501 + :rtype: str + """ + return self._doi + + @doi.setter + def doi(self, doi): + """Sets the doi of this IdentifierUpdateDto. + + + :param doi: The doi of this IdentifierUpdateDto. # noqa: E501 + :type: str + """ + + self._doi = doi + + @property + def type(self): + """Gets the type of this IdentifierUpdateDto. # noqa: E501 + + + :return: The type of this IdentifierUpdateDto. # noqa: E501 + :rtype: str + """ + return self._type + + @type.setter + def type(self, type): + """Sets the type of this IdentifierUpdateDto. + + + :param type: The type of this IdentifierUpdateDto. # noqa: E501 + :type: str + """ + if type is None: + raise ValueError("Invalid value for `type`, must not be `None`") # noqa: E501 + allowed_values = ["database", "subset"] # noqa: E501 + if type not in allowed_values: + raise ValueError( + "Invalid value for `type` ({0}), must be one of {1}" # noqa: E501 + .format(type, allowed_values) + ) + + self._type = type + + @property + def title(self): + """Gets the title of this IdentifierUpdateDto. # noqa: E501 + + + :return: The title of this IdentifierUpdateDto. # noqa: E501 + :rtype: str + """ + return self._title + + @title.setter + def title(self, title): + """Sets the title of this IdentifierUpdateDto. + + + :param title: The title of this IdentifierUpdateDto. # noqa: E501 + :type: str + """ + if title is None: + raise ValueError("Invalid value for `title`, must not be `None`") # noqa: E501 + + self._title = title + + @property + def description(self): + """Gets the description of this IdentifierUpdateDto. # noqa: E501 + + + :return: The description of this IdentifierUpdateDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this IdentifierUpdateDto. + + + :param description: The description of this IdentifierUpdateDto. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def visibility(self): + """Gets the visibility of this IdentifierUpdateDto. # noqa: E501 + + + :return: The visibility of this IdentifierUpdateDto. # noqa: E501 + :rtype: str + """ + return self._visibility + + @visibility.setter + def visibility(self, visibility): + """Sets the visibility of this IdentifierUpdateDto. + + + :param visibility: The visibility of this IdentifierUpdateDto. # noqa: E501 + :type: str + """ + if visibility is None: + raise ValueError("Invalid value for `visibility`, must not be `None`") # noqa: E501 + allowed_values = ["everyone", "self"] # noqa: E501 + if visibility not in allowed_values: + raise ValueError( + "Invalid value for `visibility` ({0}), must be one of {1}" # noqa: E501 + .format(visibility, allowed_values) + ) + + self._visibility = visibility + + @property + def publisher(self): + """Gets the publisher of this IdentifierUpdateDto. # noqa: E501 + + + :return: The publisher of this IdentifierUpdateDto. # noqa: E501 + :rtype: str + """ + return self._publisher + + @publisher.setter + def publisher(self, publisher): + """Sets the publisher of this IdentifierUpdateDto. + + + :param publisher: The publisher of this IdentifierUpdateDto. # noqa: E501 + :type: str + """ + + self._publisher = publisher + + @property + def language(self): + """Gets the language of this IdentifierUpdateDto. # noqa: E501 + + + :return: The language of this IdentifierUpdateDto. # noqa: E501 + :rtype: str + """ + return self._language + + @language.setter + def language(self, language): + """Sets the language of this IdentifierUpdateDto. + + + :param language: The language of this IdentifierUpdateDto. # noqa: E501 + :type: str + """ + allowed_values = ["ab", "aa", "af", "ak", "sq", "am", "ar", "an", "hy", "as", "av", "ae", "ay", "az", "bm", "ba", "eu", "be", "bn", "bh", "bi", "bs", "br", "bg", "my", "ca", "km", "ch", "ce", "ny", "zh", "cu", "cv", "kw", "co", "cr", "hr", "cs", "da", "dv", "nl", "dz", "en", "eo", "et", "ee", "fo", "fj", "fi", "fr", "ff", "gd", "gl", "lg", "ka", "de", "ki", "el", "kl", "gn", "gu", "ht", "ha", "he", "hz", "hi", "ho", "hu", "is", "io", "ig", "id", "ia", "ie", "iu", "ik", "ga", "it", "ja", "jv", "kn", "kr", "ks", "kk", "rw", "kv", "kg", "ko", "kj", "ku", "ky", "lo", "la", "lv", "lb", "li", "ln", "lt", "lu", "mk", "mg", "ms", "ml", "mt", "gv", "mi", "mr", "mh", "ro", "mn", "na", "nv", "nd", "ng", "ne", "se", "no", "nb", "nn", "ii", "oc", "oj", "or", "om", "os", "pi", "pa", "ps", "fa", "pl", "pt", "qu", "rm", "rn", "ru", "sm", "sg", "sa", "sc", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "nr", "es", "su", "sw", "ss", "sv", "tl", "ty", "tg", "ta", "tt", "te", "th", "bo", "ti", "to", "ts", "tn", "tr", "tk", "tw", "ug", "uk", "ur", "uz", "ve", "vi", "vo", "wa", "cy", "fy", "wo", "xh", "yi", "yo", "za", "zu"] # noqa: E501 + if language not in allowed_values: + raise ValueError( + "Invalid value for `language` ({0}), must be one of {1}" # noqa: E501 + .format(language, allowed_values) + ) + + self._language = language + + @property + def license(self): + """Gets the license of this IdentifierUpdateDto. # noqa: E501 + + + :return: The license of this IdentifierUpdateDto. # noqa: E501 + :rtype: LicenseDto + """ + return self._license + + @license.setter + def license(self, license): + """Sets the license of this IdentifierUpdateDto. + + + :param license: The license of this IdentifierUpdateDto. # noqa: E501 + :type: LicenseDto + """ + + self._license = license + + @property + def creators(self): + """Gets the creators of this IdentifierUpdateDto. # noqa: E501 + + + :return: The creators of this IdentifierUpdateDto. # noqa: E501 + :rtype: list[CreatorDto] + """ + return self._creators + + @creators.setter + def creators(self, creators): + """Sets the creators of this IdentifierUpdateDto. + + + :param creators: The creators of this IdentifierUpdateDto. # noqa: E501 + :type: list[CreatorDto] + """ + if creators is None: + raise ValueError("Invalid value for `creators`, must not be `None`") # noqa: E501 + + self._creators = creators + + @property + def publication_day(self): + """Gets the publication_day of this IdentifierUpdateDto. # noqa: E501 + + + :return: The publication_day of this IdentifierUpdateDto. # noqa: E501 + :rtype: int + """ + return self._publication_day + + @publication_day.setter + def publication_day(self, publication_day): + """Sets the publication_day of this IdentifierUpdateDto. + + + :param publication_day: The publication_day of this IdentifierUpdateDto. # noqa: E501 + :type: int + """ + + self._publication_day = publication_day + + @property + def publication_month(self): + """Gets the publication_month of this IdentifierUpdateDto. # noqa: E501 + + + :return: The publication_month of this IdentifierUpdateDto. # noqa: E501 + :rtype: int + """ + return self._publication_month + + @publication_month.setter + def publication_month(self, publication_month): + """Sets the publication_month of this IdentifierUpdateDto. + + + :param publication_month: The publication_month of this IdentifierUpdateDto. # noqa: E501 + :type: int + """ + + self._publication_month = publication_month + + @property + def publication_year(self): + """Gets the publication_year of this IdentifierUpdateDto. # noqa: E501 + + + :return: The publication_year of this IdentifierUpdateDto. # noqa: E501 + :rtype: int + """ + return self._publication_year + + @publication_year.setter + def publication_year(self, publication_year): + """Sets the publication_year of this IdentifierUpdateDto. + + + :param publication_year: The publication_year of this IdentifierUpdateDto. # noqa: E501 + :type: int + """ + if publication_year is None: + raise ValueError("Invalid value for `publication_year`, must not be `None`") # noqa: E501 + + self._publication_year = publication_year + + @property + def related_identifiers(self): + """Gets the related_identifiers of this IdentifierUpdateDto. # noqa: E501 + + + :return: The related_identifiers of this IdentifierUpdateDto. # noqa: E501 + :rtype: list[RelatedIdentifierCreateDto] + """ + return self._related_identifiers + + @related_identifiers.setter + def related_identifiers(self, related_identifiers): + """Sets the related_identifiers of this IdentifierUpdateDto. + + + :param related_identifiers: The related_identifiers of this IdentifierUpdateDto. # noqa: E501 + :type: list[RelatedIdentifierCreateDto] + """ + + self._related_identifiers = related_identifiers + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(IdentifierUpdateDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, IdentifierUpdateDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_metadata/models/oai_list_identifiers_parameters.py b/swagger/api/api_metadata/models/oai_list_identifiers_parameters.py index 10de050..fc88c7a 100644 --- a/swagger/api/api_metadata/models/oai_list_identifiers_parameters.py +++ b/swagger/api/api_metadata/models/oai_list_identifiers_parameters.py @@ -33,9 +33,9 @@ class OaiListIdentifiersParameters(object): 'until': 'str', 'set': 'str', 'resumption_token': 'str', - 'parameters_string': 'str', 'from_date': 'datetime', - 'until_date': 'datetime' + 'until_date': 'datetime', + 'parameters_string': 'str' } attribute_map = { @@ -44,21 +44,21 @@ class OaiListIdentifiersParameters(object): 'until': 'until', 'set': 'set', 'resumption_token': 'resumptionToken', - 'parameters_string': 'parametersString', 'from_date': 'fromDate', - 'until_date': 'untilDate' + 'until_date': 'untilDate', + 'parameters_string': 'parametersString' } - def __init__(self, metadata_prefix=None, _from=None, until=None, set=None, resumption_token=None, parameters_string=None, from_date=None, until_date=None): # noqa: E501 + def __init__(self, metadata_prefix=None, _from=None, until=None, set=None, resumption_token=None, from_date=None, until_date=None, parameters_string=None): # noqa: E501 """OaiListIdentifiersParameters - a model defined in Swagger""" # noqa: E501 self._metadata_prefix = None self.__from = None self._until = None self._set = None self._resumption_token = None - self._parameters_string = None self._from_date = None self._until_date = None + self._parameters_string = None self.discriminator = None if metadata_prefix is not None: self.metadata_prefix = metadata_prefix @@ -70,12 +70,12 @@ class OaiListIdentifiersParameters(object): self.set = set if resumption_token is not None: self.resumption_token = resumption_token - if parameters_string is not None: - self.parameters_string = parameters_string if from_date is not None: self.from_date = from_date if until_date is not None: self.until_date = until_date + if parameters_string is not None: + self.parameters_string = parameters_string @property def metadata_prefix(self): @@ -182,27 +182,6 @@ class OaiListIdentifiersParameters(object): self._resumption_token = resumption_token - @property - def parameters_string(self): - """Gets the parameters_string of this OaiListIdentifiersParameters. # noqa: E501 - - - :return: The parameters_string of this OaiListIdentifiersParameters. # noqa: E501 - :rtype: str - """ - return self._parameters_string - - @parameters_string.setter - def parameters_string(self, parameters_string): - """Sets the parameters_string of this OaiListIdentifiersParameters. - - - :param parameters_string: The parameters_string of this OaiListIdentifiersParameters. # noqa: E501 - :type: str - """ - - self._parameters_string = parameters_string - @property def from_date(self): """Gets the from_date of this OaiListIdentifiersParameters. # noqa: E501 @@ -245,6 +224,27 @@ class OaiListIdentifiersParameters(object): self._until_date = until_date + @property + def parameters_string(self): + """Gets the parameters_string of this OaiListIdentifiersParameters. # noqa: E501 + + + :return: The parameters_string of this OaiListIdentifiersParameters. # noqa: E501 + :rtype: str + """ + return self._parameters_string + + @parameters_string.setter + def parameters_string(self, parameters_string): + """Sets the parameters_string of this OaiListIdentifiersParameters. + + + :param parameters_string: The parameters_string of this OaiListIdentifiersParameters. # noqa: E501 + :type: str + """ + + self._parameters_string = parameters_string + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/api/api_query/__init__.py b/swagger/api/api_query/__init__.py index a36aab6..c8bac19 100644 --- a/swagger/api/api_query/__init__.py +++ b/swagger/api/api_query/__init__.py @@ -28,16 +28,19 @@ from api_query.configuration import Configuration from api_query.models.api_error_dto import ApiErrorDto from api_query.models.column_brief_dto import ColumnBriefDto from api_query.models.container_dto import ContainerDto +from api_query.models.creator_brief_dto import CreatorBriefDto from api_query.models.creator_dto import CreatorDto from api_query.models.database_access_dto import DatabaseAccessDto from api_query.models.database_dto import DatabaseDto from api_query.models.execute_statement_dto import ExecuteStatementDto +from api_query.models.identifier_brief_dto import IdentifierBriefDto from api_query.models.identifier_dto import IdentifierDto from api_query.models.image_brief_dto import ImageBriefDto from api_query.models.image_date_dto import ImageDateDto from api_query.models.image_dto import ImageDto from api_query.models.import_dto import ImportDto from api_query.models.license_dto import LicenseDto +from api_query.models.query_brief_dto import QueryBriefDto from api_query.models.query_dto import QueryDto from api_query.models.query_result_dto import QueryResultDto from api_query.models.related_identifier_dto import RelatedIdentifierDto @@ -45,6 +48,7 @@ from api_query.models.table_brief_dto import TableBriefDto from api_query.models.table_csv_delete_dto import TableCsvDeleteDto from api_query.models.table_csv_dto import TableCsvDto from api_query.models.table_csv_update_dto import TableCsvUpdateDto +from api_query.models.table_history_dto import TableHistoryDto from api_query.models.user_attribute_dto import UserAttributeDto from api_query.models.user_brief_dto import UserBriefDto from api_query.models.user_dto import UserDto diff --git a/swagger/api/api_query/api/__init__.py b/swagger/api/api_query/api/__init__.py index 9bfad55..eef04da 100644 --- a/swagger/api/api_query/api/__init__.py +++ b/swagger/api/api_query/api/__init__.py @@ -3,9 +3,9 @@ from __future__ import absolute_import # flake8: noqa # import apis into api package -from swagger_client.api.export_endpoint_api import ExportEndpointApi -from swagger_client.api.query_endpoint_api import QueryEndpointApi -from swagger_client.api.store_endpoint_api import StoreEndpointApi -from swagger_client.api.table_data_endpoint_api import TableDataEndpointApi -from swagger_client.api.table_history_endpoint_api import TableHistoryEndpointApi -from swagger_client.api.view_endpoint_api import ViewEndpointApi +from api_query.api.export_endpoint_api import ExportEndpointApi +from api_query.api.query_endpoint_api import QueryEndpointApi +from api_query.api.store_endpoint_api import StoreEndpointApi +from api_query.api.table_data_endpoint_api import TableDataEndpointApi +from api_query.api.table_history_endpoint_api import TableHistoryEndpointApi +from api_query.api.view_endpoint_api import ViewEndpointApi diff --git a/swagger/api/api_query/api/export_endpoint_api.py b/swagger/api/api_query/api/export_endpoint_api.py index bd63bf3..ab2ef34 100644 --- a/swagger/api/api_query/api/export_endpoint_api.py +++ b/swagger/api/api_query/api/export_endpoint_api.py @@ -17,7 +17,7 @@ import re # noqa: F401 # python 2 and python 3 compatibility library import six -from swagger_client.api_client import ApiClient +from api_query.api_client import ApiClient class ExportEndpointApi(object): diff --git a/swagger/api/api_query/api/query_endpoint_api.py b/swagger/api/api_query/api/query_endpoint_api.py index b07abd5..16d0c3d 100644 --- a/swagger/api/api_query/api/query_endpoint_api.py +++ b/swagger/api/api_query/api/query_endpoint_api.py @@ -17,7 +17,7 @@ import re # noqa: F401 # python 2 and python 3 compatibility library import six -from swagger_client.api_client import ApiClient +from api_query.api_client import ApiClient class QueryEndpointApi(object): diff --git a/swagger/api/api_query/api/store_endpoint_api.py b/swagger/api/api_query/api/store_endpoint_api.py index 352718b..e858fd2 100644 --- a/swagger/api/api_query/api/store_endpoint_api.py +++ b/swagger/api/api_query/api/store_endpoint_api.py @@ -17,7 +17,7 @@ import re # noqa: F401 # python 2 and python 3 compatibility library import six -from swagger_client.api_client import ApiClient +from api_query.api_client import ApiClient class StoreEndpointApi(object): @@ -153,7 +153,7 @@ class StoreEndpointApi(object): :param int id: (required) :param int database_id: (required) :param bool persisted: - :return: str + :return: list[QueryBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -176,7 +176,7 @@ class StoreEndpointApi(object): :param int id: (required) :param int database_id: (required) :param bool persisted: - :return: str + :return: list[QueryBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -238,7 +238,7 @@ class StoreEndpointApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='str', # noqa: E501 + response_type='list[QueryBriefDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/swagger/api/api_query/api/table_data_endpoint_api.py b/swagger/api/api_query/api/table_data_endpoint_api.py index 5814165..83a382d 100644 --- a/swagger/api/api_query/api/table_data_endpoint_api.py +++ b/swagger/api/api_query/api/table_data_endpoint_api.py @@ -17,7 +17,7 @@ import re # noqa: F401 # python 2 and python 3 compatibility library import six -from swagger_client.api_client import ApiClient +from api_query.api_client import ApiClient class TableDataEndpointApi(object): @@ -263,7 +263,7 @@ class TableDataEndpointApi(object): auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( - '/api/container/{id}/database/{databaseId}/table/{tableId}/data', 'HEAD', + '/api/container/{id}/database/{databaseId}/table/{tableId}/data', 'GET', path_params, query_params, header_params, @@ -392,7 +392,7 @@ class TableDataEndpointApi(object): auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( - '/api/container/{id}/database/{databaseId}/table/{tableId}/data', 'GET', + '/api/container/{id}/database/{databaseId}/table/{tableId}/data', 'HEAD', path_params, query_params, header_params, diff --git a/swagger/api/api_query/api/table_history_endpoint_api.py b/swagger/api/api_query/api/table_history_endpoint_api.py index 95949e0..c5d0d51 100644 --- a/swagger/api/api_query/api/table_history_endpoint_api.py +++ b/swagger/api/api_query/api/table_history_endpoint_api.py @@ -17,7 +17,7 @@ import re # noqa: F401 # python 2 and python 3 compatibility library import six -from swagger_client.api_client import ApiClient +from api_query.api_client import ApiClient class TableHistoryEndpointApi(object): @@ -44,7 +44,7 @@ class TableHistoryEndpointApi(object): :param int id: (required) :param int database_id: (required) :param int table_id: (required) - :return: str + :return: list[TableHistoryDto] If the method is called asynchronously, returns the request thread. """ @@ -67,7 +67,7 @@ class TableHistoryEndpointApi(object): :param int id: (required) :param int database_id: (required) :param int table_id: (required) - :return: str + :return: list[TableHistoryDto] If the method is called asynchronously, returns the request thread. """ @@ -126,14 +126,14 @@ class TableHistoryEndpointApi(object): auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( - '/api/container/{id}/database/{databaseId}/table/{tableId}/history', 'HEAD', + '/api/container/{id}/database/{databaseId}/table/{tableId}/history', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='str', # noqa: E501 + response_type='list[TableHistoryDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -153,7 +153,7 @@ class TableHistoryEndpointApi(object): :param int id: (required) :param int database_id: (required) :param int table_id: (required) - :return: str + :return: list[TableHistoryDto] If the method is called asynchronously, returns the request thread. """ @@ -176,7 +176,7 @@ class TableHistoryEndpointApi(object): :param int id: (required) :param int database_id: (required) :param int table_id: (required) - :return: str + :return: list[TableHistoryDto] If the method is called asynchronously, returns the request thread. """ @@ -235,14 +235,14 @@ class TableHistoryEndpointApi(object): auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( - '/api/container/{id}/database/{databaseId}/table/{tableId}/history', 'GET', + '/api/container/{id}/database/{databaseId}/table/{tableId}/history', 'HEAD', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='str', # noqa: E501 + response_type='list[TableHistoryDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/swagger/api/api_query/api/view_endpoint_api.py b/swagger/api/api_query/api/view_endpoint_api.py index de4ad15..fa07cd3 100644 --- a/swagger/api/api_query/api/view_endpoint_api.py +++ b/swagger/api/api_query/api/view_endpoint_api.py @@ -17,7 +17,7 @@ import re # noqa: F401 # python 2 and python 3 compatibility library import six -from swagger_client.api_client import ApiClient +from api_query.api_client import ApiClient class ViewEndpointApi(object): @@ -600,7 +600,7 @@ class ViewEndpointApi(object): :param async_req bool :param int id: (required) :param int database_id: (required) - :return: str + :return: list[ViewBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -622,7 +622,7 @@ class ViewEndpointApi(object): :param async_req bool :param int id: (required) :param int database_id: (required) - :return: str + :return: list[ViewBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -682,7 +682,7 @@ class ViewEndpointApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='str', # noqa: E501 + response_type='list[ViewBriefDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/swagger/api/api_query/configuration.py b/swagger/api/api_query/configuration.py index e6c7c7d..2268056 100644 --- a/swagger/api/api_query/configuration.py +++ b/swagger/api/api_query/configuration.py @@ -46,7 +46,7 @@ class Configuration(six.with_metaclass(TypeWithDefault, object)): def __init__(self): """Constructor""" # Default Base url - self.host = "http://localhost:9093" + self.host = "http://localhost:9095" # Temp file folder for downloading files self.temp_folder_path = None @@ -63,7 +63,7 @@ class Configuration(six.with_metaclass(TypeWithDefault, object)): self.password = "" # Logging Settings self.logger = {} - self.logger["package_logger"] = logging.getLogger("swagger_client") + self.logger["package_logger"] = logging.getLogger("api_query") self.logger["urllib3_logger"] = logging.getLogger("urllib3") # Log format self.logger_format = '%(asctime)s %(levelname)s %(message)s' diff --git a/swagger/api/api_query/models/__init__.py b/swagger/api/api_query/models/__init__.py index b967f62..ee1d231 100644 --- a/swagger/api/api_query/models/__init__.py +++ b/swagger/api/api_query/models/__init__.py @@ -17,16 +17,19 @@ from __future__ import absolute_import from api_query.models.api_error_dto import ApiErrorDto from api_query.models.column_brief_dto import ColumnBriefDto from api_query.models.container_dto import ContainerDto +from api_query.models.creator_brief_dto import CreatorBriefDto from api_query.models.creator_dto import CreatorDto from api_query.models.database_access_dto import DatabaseAccessDto from api_query.models.database_dto import DatabaseDto from api_query.models.execute_statement_dto import ExecuteStatementDto +from api_query.models.identifier_brief_dto import IdentifierBriefDto from api_query.models.identifier_dto import IdentifierDto from api_query.models.image_brief_dto import ImageBriefDto from api_query.models.image_date_dto import ImageDateDto from api_query.models.image_dto import ImageDto from api_query.models.import_dto import ImportDto from api_query.models.license_dto import LicenseDto +from api_query.models.query_brief_dto import QueryBriefDto from api_query.models.query_dto import QueryDto from api_query.models.query_result_dto import QueryResultDto from api_query.models.related_identifier_dto import RelatedIdentifierDto @@ -34,6 +37,7 @@ from api_query.models.table_brief_dto import TableBriefDto from api_query.models.table_csv_delete_dto import TableCsvDeleteDto from api_query.models.table_csv_dto import TableCsvDto from api_query.models.table_csv_update_dto import TableCsvUpdateDto +from api_query.models.table_history_dto import TableHistoryDto from api_query.models.user_attribute_dto import UserAttributeDto from api_query.models.user_brief_dto import UserBriefDto from api_query.models.user_dto import UserDto diff --git a/swagger/api/api_query/models/api_error_dto.py b/swagger/api/api_query/models/api_error_dto.py index ab6998e..218e194 100644 --- a/swagger/api/api_query/models/api_error_dto.py +++ b/swagger/api/api_query/models/api_error_dto.py @@ -69,7 +69,7 @@ class ApiErrorDto(object): """ if status is None: raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501 - allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 + allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 EARLY_HINTS", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 if status not in allowed_values: raise ValueError( "Invalid value for `status` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_query/models/column_brief_dto.py b/swagger/api/api_query/models/column_brief_dto.py index a60f9a1..cd3cd68 100644 --- a/swagger/api/api_query/models/column_brief_dto.py +++ b/swagger/api/api_query/models/column_brief_dto.py @@ -30,6 +30,8 @@ class ColumnBriefDto(object): swagger_types = { 'id': 'int', 'name': 'str', + 'database_id': 'int', + 'table_id': 'int', 'internal_name': 'str', 'column_type': 'str' } @@ -37,19 +39,25 @@ class ColumnBriefDto(object): attribute_map = { 'id': 'id', 'name': 'name', + 'database_id': 'database_id', + 'table_id': 'table_id', 'internal_name': 'internal_name', 'column_type': 'column_type' } - def __init__(self, id=None, name=None, internal_name=None, column_type=None): # noqa: E501 + def __init__(self, id=None, name=None, database_id=None, table_id=None, internal_name=None, column_type=None): # noqa: E501 """ColumnBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None + self._database_id = None + self._table_id = None self._internal_name = None self._column_type = None self.discriminator = None self.id = id self.name = name + self.database_id = database_id + self.table_id = table_id self.internal_name = internal_name self.column_type = column_type @@ -99,6 +107,52 @@ class ColumnBriefDto(object): self._name = name + @property + def database_id(self): + """Gets the database_id of this ColumnBriefDto. # noqa: E501 + + + :return: The database_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._database_id + + @database_id.setter + def database_id(self, database_id): + """Sets the database_id of this ColumnBriefDto. + + + :param database_id: The database_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if database_id is None: + raise ValueError("Invalid value for `database_id`, must not be `None`") # noqa: E501 + + self._database_id = database_id + + @property + def table_id(self): + """Gets the table_id of this ColumnBriefDto. # noqa: E501 + + + :return: The table_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._table_id + + @table_id.setter + def table_id(self, table_id): + """Sets the table_id of this ColumnBriefDto. + + + :param table_id: The table_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if table_id is None: + raise ValueError("Invalid value for `table_id`, must not be `None`") # noqa: E501 + + self._table_id = table_id + @property def internal_name(self): """Gets the internal_name of this ColumnBriefDto. # noqa: E501 diff --git a/swagger/api/api_query/models/creator_brief_dto.py b/swagger/api/api_query/models/creator_brief_dto.py new file mode 100644 index 0000000..b234e4d --- /dev/null +++ b/swagger/api/api_query/models/creator_brief_dto.py @@ -0,0 +1,164 @@ +# coding: utf-8 + +""" + Database Repository Query Service API + + Service that manages the queries # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class CreatorBriefDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'firstname': 'str', + 'lastname': 'str', + 'affiliation': 'str' + } + + attribute_map = { + 'firstname': 'firstname', + 'lastname': 'lastname', + 'affiliation': 'affiliation' + } + + def __init__(self, firstname=None, lastname=None, affiliation=None): # noqa: E501 + """CreatorBriefDto - a model defined in Swagger""" # noqa: E501 + self._firstname = None + self._lastname = None + self._affiliation = None + self.discriminator = None + self.firstname = firstname + self.lastname = lastname + if affiliation is not None: + self.affiliation = affiliation + + @property + def firstname(self): + """Gets the firstname of this CreatorBriefDto. # noqa: E501 + + + :return: The firstname of this CreatorBriefDto. # noqa: E501 + :rtype: str + """ + return self._firstname + + @firstname.setter + def firstname(self, firstname): + """Sets the firstname of this CreatorBriefDto. + + + :param firstname: The firstname of this CreatorBriefDto. # noqa: E501 + :type: str + """ + if firstname is None: + raise ValueError("Invalid value for `firstname`, must not be `None`") # noqa: E501 + + self._firstname = firstname + + @property + def lastname(self): + """Gets the lastname of this CreatorBriefDto. # noqa: E501 + + + :return: The lastname of this CreatorBriefDto. # noqa: E501 + :rtype: str + """ + return self._lastname + + @lastname.setter + def lastname(self, lastname): + """Sets the lastname of this CreatorBriefDto. + + + :param lastname: The lastname of this CreatorBriefDto. # noqa: E501 + :type: str + """ + if lastname is None: + raise ValueError("Invalid value for `lastname`, must not be `None`") # noqa: E501 + + self._lastname = lastname + + @property + def affiliation(self): + """Gets the affiliation of this CreatorBriefDto. # noqa: E501 + + + :return: The affiliation of this CreatorBriefDto. # noqa: E501 + :rtype: str + """ + return self._affiliation + + @affiliation.setter + def affiliation(self, affiliation): + """Sets the affiliation of this CreatorBriefDto. + + + :param affiliation: The affiliation of this CreatorBriefDto. # noqa: E501 + :type: str + """ + + self._affiliation = affiliation + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(CreatorBriefDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, CreatorBriefDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_query/models/creator_dto.py b/swagger/api/api_query/models/creator_dto.py index a7c9d92..383e4e6 100644 --- a/swagger/api/api_query/models/creator_dto.py +++ b/swagger/api/api_query/models/creator_dto.py @@ -32,9 +32,7 @@ class CreatorDto(object): 'firstname': 'str', 'lastname': 'str', 'affiliation': 'str', - 'orcid': 'str', - 'created': 'datetime', - 'last_modified': 'datetime' + 'orcid': 'str' } attribute_map = { @@ -42,20 +40,16 @@ class CreatorDto(object): 'firstname': 'firstname', 'lastname': 'lastname', 'affiliation': 'affiliation', - 'orcid': 'orcid', - 'created': 'created', - 'last_modified': 'lastModified' + 'orcid': 'orcid' } - def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None, created=None, last_modified=None): # noqa: E501 + def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None): # noqa: E501 """CreatorDto - a model defined in Swagger""" # noqa: E501 self._id = None self._firstname = None self._lastname = None self._affiliation = None self._orcid = None - self._created = None - self._last_modified = None self.discriminator = None self.id = id self.firstname = firstname @@ -64,10 +58,6 @@ class CreatorDto(object): self.affiliation = affiliation if orcid is not None: self.orcid = orcid - if created is not None: - self.created = created - if last_modified is not None: - self.last_modified = last_modified @property def id(self): @@ -180,48 +170,6 @@ class CreatorDto(object): self._orcid = orcid - @property - def created(self): - """Gets the created of this CreatorDto. # noqa: E501 - - - :return: The created of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._created - - @created.setter - def created(self, created): - """Sets the created of this CreatorDto. - - - :param created: The created of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._created = created - - @property - def last_modified(self): - """Gets the last_modified of this CreatorDto. # noqa: E501 - - - :return: The last_modified of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._last_modified - - @last_modified.setter - def last_modified(self, last_modified): - """Sets the last_modified of this CreatorDto. - - - :param last_modified: The last_modified of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._last_modified = last_modified - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/api/api_query/models/identifier_brief_dto.py b/swagger/api/api_query/models/identifier_brief_dto.py index 32acb76..31a92e0 100644 --- a/swagger/api/api_query/models/identifier_brief_dto.py +++ b/swagger/api/api_query/models/identifier_brief_dto.py @@ -5,7 +5,7 @@ Service that manages the queries # noqa: E501 - OpenAPI spec version: 1.1.0-alpha + OpenAPI spec version: 1.2.0 Contact: andreas.rauber@tuwien.ac.at Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -31,46 +31,54 @@ class IdentifierBriefDto(object): 'id': 'int', 'title': 'str', 'type': 'str', - 'created': 'datetime', - 'last_modified': 'datetime', + 'doi': 'str', + 'publisher': 'str', + 'creators': 'list[CreatorBriefDto]', 'container_id': 'int', 'database_id': 'int', - 'query_id': 'int' + 'query_id': 'int', + 'publication_year': 'int' } attribute_map = { 'id': 'id', 'title': 'title', 'type': 'type', - 'created': 'created', - 'last_modified': 'lastModified', + 'doi': 'doi', + 'publisher': 'publisher', + 'creators': 'creators', 'container_id': 'container id', 'database_id': 'database id', - 'query_id': 'query id' + 'query_id': 'query id', + 'publication_year': 'publication_year' } - def __init__(self, id=None, title=None, type=None, created=None, last_modified=None, container_id=None, database_id=None, query_id=None): # noqa: E501 + def __init__(self, id=None, title=None, type=None, doi=None, publisher=None, creators=None, container_id=None, database_id=None, query_id=None, publication_year=None): # noqa: E501 """IdentifierBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._title = None self._type = None - self._created = None - self._last_modified = None + self._doi = None + self._publisher = None + self._creators = None self._container_id = None self._database_id = None self._query_id = None + self._publication_year = None self.discriminator = None self.id = id self.title = title self.type = type - if created is not None: - self.created = created - if last_modified is not None: - self.last_modified = last_modified + if doi is not None: + self.doi = doi + if publisher is not None: + self.publisher = publisher + self.creators = creators self.container_id = container_id self.database_id = database_id if query_id is not None: self.query_id = query_id + self.publication_year = publication_year @property def id(self): @@ -148,46 +156,69 @@ class IdentifierBriefDto(object): self._type = type @property - def created(self): - """Gets the created of this IdentifierBriefDto. # noqa: E501 + def doi(self): + """Gets the doi of this IdentifierBriefDto. # noqa: E501 - :return: The created of this IdentifierBriefDto. # noqa: E501 - :rtype: datetime + :return: The doi of this IdentifierBriefDto. # noqa: E501 + :rtype: str + """ + return self._doi + + @doi.setter + def doi(self, doi): + """Sets the doi of this IdentifierBriefDto. + + + :param doi: The doi of this IdentifierBriefDto. # noqa: E501 + :type: str + """ + + self._doi = doi + + @property + def publisher(self): + """Gets the publisher of this IdentifierBriefDto. # noqa: E501 + + + :return: The publisher of this IdentifierBriefDto. # noqa: E501 + :rtype: str """ - return self._created + return self._publisher - @created.setter - def created(self, created): - """Sets the created of this IdentifierBriefDto. + @publisher.setter + def publisher(self, publisher): + """Sets the publisher of this IdentifierBriefDto. - :param created: The created of this IdentifierBriefDto. # noqa: E501 - :type: datetime + :param publisher: The publisher of this IdentifierBriefDto. # noqa: E501 + :type: str """ - self._created = created + self._publisher = publisher @property - def last_modified(self): - """Gets the last_modified of this IdentifierBriefDto. # noqa: E501 + def creators(self): + """Gets the creators of this IdentifierBriefDto. # noqa: E501 - :return: The last_modified of this IdentifierBriefDto. # noqa: E501 - :rtype: datetime + :return: The creators of this IdentifierBriefDto. # noqa: E501 + :rtype: list[CreatorBriefDto] """ - return self._last_modified + return self._creators - @last_modified.setter - def last_modified(self, last_modified): - """Sets the last_modified of this IdentifierBriefDto. + @creators.setter + def creators(self, creators): + """Sets the creators of this IdentifierBriefDto. - :param last_modified: The last_modified of this IdentifierBriefDto. # noqa: E501 - :type: datetime + :param creators: The creators of this IdentifierBriefDto. # noqa: E501 + :type: list[CreatorBriefDto] """ + if creators is None: + raise ValueError("Invalid value for `creators`, must not be `None`") # noqa: E501 - self._last_modified = last_modified + self._creators = creators @property def container_id(self): @@ -256,6 +287,29 @@ class IdentifierBriefDto(object): self._query_id = query_id + @property + def publication_year(self): + """Gets the publication_year of this IdentifierBriefDto. # noqa: E501 + + + :return: The publication_year of this IdentifierBriefDto. # noqa: E501 + :rtype: int + """ + return self._publication_year + + @publication_year.setter + def publication_year(self, publication_year): + """Sets the publication_year of this IdentifierBriefDto. + + + :param publication_year: The publication_year of this IdentifierBriefDto. # noqa: E501 + :type: int + """ + if publication_year is None: + raise ValueError("Invalid value for `publication_year`, must not be `None`") # noqa: E501 + + self._publication_year = publication_year + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/api/api_query/models/identifier_dto.py b/swagger/api/api_query/models/identifier_dto.py index d8467c6..d7b31a9 100644 --- a/swagger/api/api_query/models/identifier_dto.py +++ b/swagger/api/api_query/models/identifier_dto.py @@ -309,7 +309,7 @@ class IdentifierDto(object): """ if visibility is None: raise ValueError("Invalid value for `visibility`, must not be `None`") # noqa: E501 - allowed_values = ["everyone", "trusted", "self"] # noqa: E501 + allowed_values = ["everyone", "self"] # noqa: E501 if visibility not in allowed_values: raise ValueError( "Invalid value for `visibility` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_query/models/image_brief_dto.py b/swagger/api/api_query/models/image_brief_dto.py index 92f7bc7..7ad406d 100644 --- a/swagger/api/api_query/models/image_brief_dto.py +++ b/swagger/api/api_query/models/image_brief_dto.py @@ -29,23 +29,27 @@ class ImageBriefDto(object): """ swagger_types = { 'id': 'int', + 'registry': 'str', 'repository': 'str', 'tag': 'str' } attribute_map = { 'id': 'id', + 'registry': 'registry', 'repository': 'repository', 'tag': 'tag' } - def __init__(self, id=None, repository=None, tag=None): # noqa: E501 + def __init__(self, id=None, registry=None, repository=None, tag=None): # noqa: E501 """ImageBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None + self._registry = None self._repository = None self._tag = None self.discriminator = None self.id = id + self.registry = registry self.repository = repository self.tag = tag @@ -72,6 +76,29 @@ class ImageBriefDto(object): self._id = id + @property + def registry(self): + """Gets the registry of this ImageBriefDto. # noqa: E501 + + + :return: The registry of this ImageBriefDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageBriefDto. + + + :param registry: The registry of this ImageBriefDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def repository(self): """Gets the repository of this ImageBriefDto. # noqa: E501 diff --git a/swagger/api/api_query/models/image_dto.py b/swagger/api/api_query/models/image_dto.py index 34675e1..096b9c1 100644 --- a/swagger/api/api_query/models/image_dto.py +++ b/swagger/api/api_query/models/image_dto.py @@ -29,6 +29,7 @@ class ImageDto(object): """ swagger_types = { 'id': 'int', + 'registry': 'str', 'repository': 'str', 'tag': 'str', 'dialect': 'str', @@ -43,6 +44,7 @@ class ImageDto(object): attribute_map = { 'id': 'id', + 'registry': 'registry', 'repository': 'repository', 'tag': 'tag', 'dialect': 'dialect', @@ -55,9 +57,10 @@ class ImageDto(object): 'default_port': 'default_port' } - def __init__(self, id=None, repository=None, tag=None, dialect=None, hash=None, compiled=None, size=None, driver_class=None, date_formats=None, jdbc_method=None, default_port=None): # noqa: E501 + def __init__(self, id=None, registry=None, repository=None, tag=None, dialect=None, hash=None, compiled=None, size=None, driver_class=None, date_formats=None, jdbc_method=None, default_port=None): # noqa: E501 """ImageDto - a model defined in Swagger""" # noqa: E501 self._id = None + self._registry = None self._repository = None self._tag = None self._dialect = None @@ -70,6 +73,7 @@ class ImageDto(object): self._default_port = None self.discriminator = None self.id = id + self.registry = registry self.repository = repository self.tag = tag self.dialect = dialect @@ -108,6 +112,29 @@ class ImageDto(object): self._id = id + @property + def registry(self): + """Gets the registry of this ImageDto. # noqa: E501 + + + :return: The registry of this ImageDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageDto. + + + :param registry: The registry of this ImageDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def repository(self): """Gets the repository of this ImageDto. # noqa: E501 diff --git a/swagger/api/api_query/models/query_brief_dto.py b/swagger/api/api_query/models/query_brief_dto.py index 059107a..3bdb95a 100644 --- a/swagger/api/api_query/models/query_brief_dto.py +++ b/swagger/api/api_query/models/query_brief_dto.py @@ -5,7 +5,7 @@ Service that manages the queries # noqa: E501 - OpenAPI spec version: 1.1.0-alpha + OpenAPI spec version: 1.2.0 Contact: andreas.rauber@tuwien.ac.at Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/swagger/api/api_query/models/table_brief_dto.py b/swagger/api/api_query/models/table_brief_dto.py index e55f344..a719d84 100644 --- a/swagger/api/api_query/models/table_brief_dto.py +++ b/swagger/api/api_query/models/table_brief_dto.py @@ -31,7 +31,7 @@ class TableBriefDto(object): 'id': 'int', 'name': 'str', 'description': 'str', - 'creator': 'UserBriefDto', + 'owner': 'UserBriefDto', 'columns': 'list[ColumnBriefDto]', 'internal_name': 'str' } @@ -40,24 +40,24 @@ class TableBriefDto(object): 'id': 'id', 'name': 'name', 'description': 'description', - 'creator': 'creator', + 'owner': 'owner', 'columns': 'columns', 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, description=None, creator=None, columns=None, internal_name=None): # noqa: E501 + def __init__(self, id=None, name=None, description=None, owner=None, columns=None, internal_name=None): # noqa: E501 """TableBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._description = None - self._creator = None + self._owner = None self._columns = None self._internal_name = None self.discriminator = None self.id = id self.name = name self.description = description - self.creator = creator + self.owner = owner self.columns = columns self.internal_name = internal_name @@ -131,27 +131,27 @@ class TableBriefDto(object): self._description = description @property - def creator(self): - """Gets the creator of this TableBriefDto. # noqa: E501 + def owner(self): + """Gets the owner of this TableBriefDto. # noqa: E501 - :return: The creator of this TableBriefDto. # noqa: E501 + :return: The owner of this TableBriefDto. # noqa: E501 :rtype: UserBriefDto """ - return self._creator + return self._owner - @creator.setter - def creator(self, creator): - """Sets the creator of this TableBriefDto. + @owner.setter + def owner(self, owner): + """Sets the owner of this TableBriefDto. - :param creator: The creator of this TableBriefDto. # noqa: E501 + :param owner: The owner of this TableBriefDto. # noqa: E501 :type: UserBriefDto """ - if creator is None: - raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + if owner is None: + raise ValueError("Invalid value for `owner`, must not be `None`") # noqa: E501 - self._creator = creator + self._owner = owner @property def columns(self): diff --git a/swagger/api/api_query/models/table_history_dto.py b/swagger/api/api_query/models/table_history_dto.py index b792190..c144548 100644 --- a/swagger/api/api_query/models/table_history_dto.py +++ b/swagger/api/api_query/models/table_history_dto.py @@ -5,7 +5,7 @@ Service that manages the queries # noqa: E501 - OpenAPI spec version: 1.1.0-alpha + OpenAPI spec version: 1.2.0 Contact: andreas.rauber@tuwien.ac.at Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/swagger/api/api_semantics/__init__.py b/swagger/api/api_semantics/__init__.py index 55bda9d..6f9594a 100644 --- a/swagger/api/api_semantics/__init__.py +++ b/swagger/api/api_semantics/__init__.py @@ -3,9 +3,9 @@ # flake8: noqa """ - Database Repository Unit / Ontology Service API + Database Repository Semantic Service API - Service for assigning concepts to database tables and columns. # noqa: E501 + Service that manages the tables # noqa: E501 OpenAPI spec version: 1.2.0 Contact: andreas.rauber@tuwien.ac.at @@ -15,14 +15,23 @@ from __future__ import absolute_import # import apis into sdk package -from api_semantics.api.concepts_endpoint_api import ConceptsEndpointApi -from api_semantics.api.ontologies_endpoint_api import OntologiesEndpointApi -from api_semantics.api.units_endpoint_api import UnitsEndpointApi +from api_semantics.api.ontology_endpoint_api import OntologyEndpointApi +from api_semantics.api.query_endpoint_api import QueryEndpointApi +from api_semantics.api.semantics_endpoint_api import SemanticsEndpointApi +from api_semantics.api.table_endpoint_api import TableEndpointApi # import ApiClient from api_semantics.api_client import ApiClient from api_semantics.configuration import Configuration # import models into sdk package -from api_semantics.models.semantics_concept_body import SemanticsConceptBody -from api_semantics.models.semantics_concept_body1 import SemanticsConceptBody1 -from api_semantics.models.semantics_unit_body import SemanticsUnitBody -from api_semantics.models.semantics_unit_body1 import SemanticsUnitBody1 +from api_semantics.models.api_error_dto import ApiErrorDto +from api_semantics.models.column_brief_dto import ColumnBriefDto +from api_semantics.models.concept_dto import ConceptDto +from api_semantics.models.concept_save_dto import ConceptSaveDto +from api_semantics.models.entity_dto import EntityDto +from api_semantics.models.ontology_create_dto import OntologyCreateDto +from api_semantics.models.ontology_dto import OntologyDto +from api_semantics.models.ontology_modify_dto import OntologyModifyDto +from api_semantics.models.table_column_entity_dto import TableColumnEntityDto +from api_semantics.models.unit_dto import UnitDto +from api_semantics.models.unit_save_dto import UnitSaveDto +from api_semantics.models.user_brief_dto import UserBriefDto diff --git a/swagger/api/api_semantics/api/__init__.py b/swagger/api/api_semantics/api/__init__.py index ac02c27..3c29f90 100644 --- a/swagger/api/api_semantics/api/__init__.py +++ b/swagger/api/api_semantics/api/__init__.py @@ -3,6 +3,7 @@ from __future__ import absolute_import # flake8: noqa # import apis into api package -from api_semantics.api.concepts_endpoint_api import ConceptsEndpointApi -from api_semantics.api.ontologies_endpoint_api import OntologiesEndpointApi -from api_semantics.api.units_endpoint_api import UnitsEndpointApi +from api_semantics.api.ontology_endpoint_api import OntologyEndpointApi +from api_semantics.api.query_endpoint_api import QueryEndpointApi +from api_semantics.api.semantics_endpoint_api import SemanticsEndpointApi +from api_semantics.api.table_endpoint_api import TableEndpointApi diff --git a/swagger/api/api_semantics/api/ontology_endpoint_api.py b/swagger/api/api_semantics/api/ontology_endpoint_api.py new file mode 100644 index 0000000..815b922 --- /dev/null +++ b/swagger/api/api_semantics/api/ontology_endpoint_api.py @@ -0,0 +1,506 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import re # noqa: F401 + +# python 2 and python 3 compatibility library +import six + +from api_semantics.api_client import ApiClient + + +class OntologyEndpointApi(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + Ref: https://github.com/swagger-api/swagger-codegen + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def create(self, body, **kwargs): # noqa: E501 + """Register a new ontology # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.create(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param OntologyCreateDto body: (required) + :return: OntologyDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.create_with_http_info(body, **kwargs) # noqa: E501 + else: + (data) = self.create_with_http_info(body, **kwargs) # noqa: E501 + return data + + def create_with_http_info(self, body, **kwargs): # noqa: E501 + """Register a new ontology # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.create_with_http_info(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param OntologyCreateDto body: (required) + :return: OntologyDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method create" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `create`") # noqa: E501 + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/ontology', 'POST', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='OntologyDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def delete(self, id, **kwargs): # noqa: E501 + """Delete an ontology # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.delete(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: None + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.delete_with_http_info(id, **kwargs) # noqa: E501 + else: + (data) = self.delete_with_http_info(id, **kwargs) # noqa: E501 + return data + + def delete_with_http_info(self, id, **kwargs): # noqa: E501 + """Delete an ontology # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.delete_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: None + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method delete" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `delete`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/ontology/{id}', 'DELETE', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type=None, # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def find(self, id, **kwargs): # noqa: E501 + """Find one ontology # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: OntologyDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.find_with_http_info(id, **kwargs) # noqa: E501 + else: + (data) = self.find_with_http_info(id, **kwargs) # noqa: E501 + return data + + def find_with_http_info(self, id, **kwargs): # noqa: E501 + """Find one ontology # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: OntologyDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method find" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `find`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/ontology/{id}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='OntologyDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def find_all(self, **kwargs): # noqa: E501 + """List all ontologies # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find_all(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[OntologyDto] + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.find_all_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.find_all_with_http_info(**kwargs) # noqa: E501 + return data + + def find_all_with_http_info(self, **kwargs): # noqa: E501 + """List all ontologies # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find_all_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[OntologyDto] + If the method is called asynchronously, + returns the request thread. + """ + + all_params = [] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method find_all" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/ontology', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='list[OntologyDto]', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def update(self, body, id, **kwargs): # noqa: E501 + """Update an ontology # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param OntologyModifyDto body: (required) + :param int id: (required) + :return: OntologyDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.update_with_http_info(body, id, **kwargs) # noqa: E501 + else: + (data) = self.update_with_http_info(body, id, **kwargs) # noqa: E501 + return data + + def update_with_http_info(self, body, id, **kwargs): # noqa: E501 + """Update an ontology # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_with_http_info(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param OntologyModifyDto body: (required) + :param int id: (required) + :return: OntologyDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body', 'id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method update" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `update`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/ontology/{id}', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='OntologyDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) diff --git a/swagger/api/api_semantics/api/query_endpoint_api.py b/swagger/api/api_semantics/api/query_endpoint_api.py new file mode 100644 index 0000000..9f301df --- /dev/null +++ b/swagger/api/api_semantics/api/query_endpoint_api.py @@ -0,0 +1,134 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import re # noqa: F401 + +# python 2 and python 3 compatibility library +import six + +from api_semantics.api_client import ApiClient + + +class QueryEndpointApi(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + Ref: https://github.com/swagger-api/swagger-codegen + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def find1(self, id, **kwargs): # noqa: E501 + """Find entities # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find1(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :param str label: + :param str uri: + :return: list[EntityDto] + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.find1_with_http_info(id, **kwargs) # noqa: E501 + else: + (data) = self.find1_with_http_info(id, **kwargs) # noqa: E501 + return data + + def find1_with_http_info(self, id, **kwargs): # noqa: E501 + """Find entities # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find1_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :param str label: + :param str uri: + :return: list[EntityDto] + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id', 'label', 'uri'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method find1" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `find1`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + if 'label' in params: + query_params.append(('label', params['label'])) # noqa: E501 + if 'uri' in params: + query_params.append(('uri', params['uri'])) # noqa: E501 + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/ontology/{id}/entity', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='list[EntityDto]', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) diff --git a/swagger/api/api_semantics/api/semantics_endpoint_api.py b/swagger/api/api_semantics/api/semantics_endpoint_api.py new file mode 100644 index 0000000..90b0583 --- /dev/null +++ b/swagger/api/api_semantics/api/semantics_endpoint_api.py @@ -0,0 +1,397 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import re # noqa: F401 + +# python 2 and python 3 compatibility library +import six + +from api_semantics.api_client import ApiClient + + +class SemanticsEndpointApi(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + Ref: https://github.com/swagger-api/swagger-codegen + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def find_all_concepts(self, **kwargs): # noqa: E501 + """List semantic concepts # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find_all_concepts(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[ConceptDto] + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.find_all_concepts_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.find_all_concepts_with_http_info(**kwargs) # noqa: E501 + return data + + def find_all_concepts_with_http_info(self, **kwargs): # noqa: E501 + """List semantic concepts # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find_all_concepts_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[ConceptDto] + If the method is called asynchronously, + returns the request thread. + """ + + all_params = [] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method find_all_concepts" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/concept', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='list[ConceptDto]', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def find_all_units(self, **kwargs): # noqa: E501 + """List semantic units # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find_all_units(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[UnitDto] + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.find_all_units_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.find_all_units_with_http_info(**kwargs) # noqa: E501 + return data + + def find_all_units_with_http_info(self, **kwargs): # noqa: E501 + """List semantic units # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find_all_units_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[UnitDto] + If the method is called asynchronously, + returns the request thread. + """ + + all_params = [] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method find_all_units" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/unit', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='list[UnitDto]', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def save_unit(self, body, **kwargs): # noqa: E501 + """Save a semantic unit # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.save_unit(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UnitSaveDto body: (required) + :return: UnitDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.save_unit_with_http_info(body, **kwargs) # noqa: E501 + else: + (data) = self.save_unit_with_http_info(body, **kwargs) # noqa: E501 + return data + + def save_unit_with_http_info(self, body, **kwargs): # noqa: E501 + """Save a semantic unit # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.save_unit_with_http_info(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UnitSaveDto body: (required) + :return: UnitDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method save_unit" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `save_unit`") # noqa: E501 + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/unit', 'POST', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='UnitDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def save_unit1(self, body, **kwargs): # noqa: E501 + """Create or update a semantic concept # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.save_unit1(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param ConceptSaveDto body: (required) + :return: ConceptDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.save_unit1_with_http_info(body, **kwargs) # noqa: E501 + else: + (data) = self.save_unit1_with_http_info(body, **kwargs) # noqa: E501 + return data + + def save_unit1_with_http_info(self, body, **kwargs): # noqa: E501 + """Create or update a semantic concept # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.save_unit1_with_http_info(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param ConceptSaveDto body: (required) + :return: ConceptDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method save_unit1" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `save_unit1`") # noqa: E501 + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/concept', 'POST', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='ConceptDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) diff --git a/swagger/api/api_semantics/api/table_endpoint_api.py b/swagger/api/api_semantics/api/table_endpoint_api.py new file mode 100644 index 0000000..09777ca --- /dev/null +++ b/swagger/api/api_semantics/api/table_endpoint_api.py @@ -0,0 +1,243 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import re # noqa: F401 + +# python 2 and python 3 compatibility library +import six + +from api_semantics.api_client import ApiClient + + +class TableEndpointApi(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + Ref: https://github.com/swagger-api/swagger-codegen + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def analyse_table(self, database_id, table_id, **kwargs): # noqa: E501 + """Suggest table semantics # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.analyse_table(database_id, table_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int database_id: (required) + :param int table_id: (required) + :return: list[TableColumnEntityDto] + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.analyse_table_with_http_info(database_id, table_id, **kwargs) # noqa: E501 + else: + (data) = self.analyse_table_with_http_info(database_id, table_id, **kwargs) # noqa: E501 + return data + + def analyse_table_with_http_info(self, database_id, table_id, **kwargs): # noqa: E501 + """Suggest table semantics # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.analyse_table_with_http_info(database_id, table_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int database_id: (required) + :param int table_id: (required) + :return: list[TableColumnEntityDto] + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['database_id', 'table_id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method analyse_table" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'database_id' is set + if ('database_id' not in params or + params['database_id'] is None): + raise ValueError("Missing the required parameter `database_id` when calling `analyse_table`") # noqa: E501 + # verify the required parameter 'table_id' is set + if ('table_id' not in params or + params['table_id'] is None): + raise ValueError("Missing the required parameter `table_id` when calling `analyse_table`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'database_id' in params: + path_params['databaseId'] = params['database_id'] # noqa: E501 + if 'table_id' in params: + path_params['tableId'] = params['table_id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/database/{databaseId}/table/{tableId}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='list[TableColumnEntityDto]', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def analyse_table_column(self, database_id, table_id, column_id, **kwargs): # noqa: E501 + """Suggest table column semantics # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.analyse_table_column(database_id, table_id, column_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int database_id: (required) + :param int table_id: (required) + :param int column_id: (required) + :return: list[TableColumnEntityDto] + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.analyse_table_column_with_http_info(database_id, table_id, column_id, **kwargs) # noqa: E501 + else: + (data) = self.analyse_table_column_with_http_info(database_id, table_id, column_id, **kwargs) # noqa: E501 + return data + + def analyse_table_column_with_http_info(self, database_id, table_id, column_id, **kwargs): # noqa: E501 + """Suggest table column semantics # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.analyse_table_column_with_http_info(database_id, table_id, column_id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int database_id: (required) + :param int table_id: (required) + :param int column_id: (required) + :return: list[TableColumnEntityDto] + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['database_id', 'table_id', 'column_id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method analyse_table_column" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'database_id' is set + if ('database_id' not in params or + params['database_id'] is None): + raise ValueError("Missing the required parameter `database_id` when calling `analyse_table_column`") # noqa: E501 + # verify the required parameter 'table_id' is set + if ('table_id' not in params or + params['table_id'] is None): + raise ValueError("Missing the required parameter `table_id` when calling `analyse_table_column`") # noqa: E501 + # verify the required parameter 'column_id' is set + if ('column_id' not in params or + params['column_id'] is None): + raise ValueError("Missing the required parameter `column_id` when calling `analyse_table_column`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'database_id' in params: + path_params['databaseId'] = params['database_id'] # noqa: E501 + if 'table_id' in params: + path_params['tableId'] = params['table_id'] # noqa: E501 + if 'column_id' in params: + path_params['columnId'] = params['column_id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/semantic/database/{databaseId}/table/{tableId}/column/{columnId}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='list[TableColumnEntityDto]', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) diff --git a/swagger/api/api_semantics/api_client.py b/swagger/api/api_semantics/api_client.py index 4f23132..646d0f6 100644 --- a/swagger/api/api_semantics/api_client.py +++ b/swagger/api/api_semantics/api_client.py @@ -1,8 +1,8 @@ # coding: utf-8 """ - Database Repository Unit / Ontology Service API + Database Repository Semantic Service API - Service for assigning concepts to database tables and columns. # noqa: E501 + Service that manages the tables # noqa: E501 OpenAPI spec version: 1.2.0 Contact: andreas.rauber@tuwien.ac.at diff --git a/swagger/api/api_semantics/configuration.py b/swagger/api/api_semantics/configuration.py index a700f08..df6f84b 100644 --- a/swagger/api/api_semantics/configuration.py +++ b/swagger/api/api_semantics/configuration.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - Database Repository Unit / Ontology Service API + Database Repository Semantic Service API - Service for assigning concepts to database tables and columns. # noqa: E501 + Service that manages the tables # noqa: E501 OpenAPI spec version: 1.2.0 Contact: andreas.rauber@tuwien.ac.at diff --git a/swagger/api/api_semantics/models/__init__.py b/swagger/api/api_semantics/models/__init__.py index ffeabe9..b2b4d6b 100644 --- a/swagger/api/api_semantics/models/__init__.py +++ b/swagger/api/api_semantics/models/__init__.py @@ -2,9 +2,9 @@ # flake8: noqa """ - Database Repository Unit / Ontology Service API + Database Repository Semantic Service API - Service for assigning concepts to database tables and columns. # noqa: E501 + Service that manages the tables # noqa: E501 OpenAPI spec version: 1.2.0 Contact: andreas.rauber@tuwien.ac.at @@ -14,7 +14,15 @@ from __future__ import absolute_import # import models into model package -from api_semantics.models.semantics_concept_body import SemanticsConceptBody -from api_semantics.models.semantics_concept_body1 import SemanticsConceptBody1 -from api_semantics.models.semantics_unit_body import SemanticsUnitBody -from api_semantics.models.semantics_unit_body1 import SemanticsUnitBody1 +from api_semantics.models.api_error_dto import ApiErrorDto +from api_semantics.models.column_brief_dto import ColumnBriefDto +from api_semantics.models.concept_dto import ConceptDto +from api_semantics.models.concept_save_dto import ConceptSaveDto +from api_semantics.models.entity_dto import EntityDto +from api_semantics.models.ontology_create_dto import OntologyCreateDto +from api_semantics.models.ontology_dto import OntologyDto +from api_semantics.models.ontology_modify_dto import OntologyModifyDto +from api_semantics.models.table_column_entity_dto import TableColumnEntityDto +from api_semantics.models.unit_dto import UnitDto +from api_semantics.models.unit_save_dto import UnitSaveDto +from api_semantics.models.user_brief_dto import UserBriefDto diff --git a/swagger/api/api_semantics/models/api_error_dto.py b/swagger/api/api_semantics/models/api_error_dto.py new file mode 100644 index 0000000..64089fc --- /dev/null +++ b/swagger/api/api_semantics/models/api_error_dto.py @@ -0,0 +1,171 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class ApiErrorDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'status': 'str', + 'message': 'str', + 'code': 'str' + } + + attribute_map = { + 'status': 'status', + 'message': 'message', + 'code': 'code' + } + + def __init__(self, status=None, message=None, code=None): # noqa: E501 + """ApiErrorDto - a model defined in Swagger""" # noqa: E501 + self._status = None + self._message = None + self._code = None + self.discriminator = None + self.status = status + self.message = message + self.code = code + + @property + def status(self): + """Gets the status of this ApiErrorDto. # noqa: E501 + + + :return: The status of this ApiErrorDto. # noqa: E501 + :rtype: str + """ + return self._status + + @status.setter + def status(self, status): + """Sets the status of this ApiErrorDto. + + + :param status: The status of this ApiErrorDto. # noqa: E501 + :type: str + """ + if status is None: + raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501 + allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 EARLY_HINTS", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 + if status not in allowed_values: + raise ValueError( + "Invalid value for `status` ({0}), must be one of {1}" # noqa: E501 + .format(status, allowed_values) + ) + + self._status = status + + @property + def message(self): + """Gets the message of this ApiErrorDto. # noqa: E501 + + + :return: The message of this ApiErrorDto. # noqa: E501 + :rtype: str + """ + return self._message + + @message.setter + def message(self, message): + """Sets the message of this ApiErrorDto. + + + :param message: The message of this ApiErrorDto. # noqa: E501 + :type: str + """ + if message is None: + raise ValueError("Invalid value for `message`, must not be `None`") # noqa: E501 + + self._message = message + + @property + def code(self): + """Gets the code of this ApiErrorDto. # noqa: E501 + + + :return: The code of this ApiErrorDto. # noqa: E501 + :rtype: str + """ + return self._code + + @code.setter + def code(self, code): + """Sets the code of this ApiErrorDto. + + + :param code: The code of this ApiErrorDto. # noqa: E501 + :type: str + """ + if code is None: + raise ValueError("Invalid value for `code`, must not be `None`") # noqa: E501 + + self._code = code + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(ApiErrorDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, ApiErrorDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/column_brief_dto.py b/swagger/api/api_semantics/models/column_brief_dto.py new file mode 100644 index 0000000..72fc190 --- /dev/null +++ b/swagger/api/api_semantics/models/column_brief_dto.py @@ -0,0 +1,252 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class ColumnBriefDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'name': 'str', + 'database_id': 'int', + 'table_id': 'int', + 'internal_name': 'str', + 'column_type': 'str' + } + + attribute_map = { + 'id': 'id', + 'name': 'name', + 'database_id': 'database_id', + 'table_id': 'table_id', + 'internal_name': 'internal_name', + 'column_type': 'column_type' + } + + def __init__(self, id=None, name=None, database_id=None, table_id=None, internal_name=None, column_type=None): # noqa: E501 + """ColumnBriefDto - a model defined in Swagger""" # noqa: E501 + self._id = None + self._name = None + self._database_id = None + self._table_id = None + self._internal_name = None + self._column_type = None + self.discriminator = None + self.id = id + self.name = name + self.database_id = database_id + self.table_id = table_id + self.internal_name = internal_name + self.column_type = column_type + + @property + def id(self): + """Gets the id of this ColumnBriefDto. # noqa: E501 + + + :return: The id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this ColumnBriefDto. + + + :param id: The id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if id is None: + raise ValueError("Invalid value for `id`, must not be `None`") # noqa: E501 + + self._id = id + + @property + def name(self): + """Gets the name of this ColumnBriefDto. # noqa: E501 + + + :return: The name of this ColumnBriefDto. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this ColumnBriefDto. + + + :param name: The name of this ColumnBriefDto. # noqa: E501 + :type: str + """ + if name is None: + raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 + + self._name = name + + @property + def database_id(self): + """Gets the database_id of this ColumnBriefDto. # noqa: E501 + + + :return: The database_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._database_id + + @database_id.setter + def database_id(self, database_id): + """Sets the database_id of this ColumnBriefDto. + + + :param database_id: The database_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if database_id is None: + raise ValueError("Invalid value for `database_id`, must not be `None`") # noqa: E501 + + self._database_id = database_id + + @property + def table_id(self): + """Gets the table_id of this ColumnBriefDto. # noqa: E501 + + + :return: The table_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._table_id + + @table_id.setter + def table_id(self, table_id): + """Sets the table_id of this ColumnBriefDto. + + + :param table_id: The table_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if table_id is None: + raise ValueError("Invalid value for `table_id`, must not be `None`") # noqa: E501 + + self._table_id = table_id + + @property + def internal_name(self): + """Gets the internal_name of this ColumnBriefDto. # noqa: E501 + + + :return: The internal_name of this ColumnBriefDto. # noqa: E501 + :rtype: str + """ + return self._internal_name + + @internal_name.setter + def internal_name(self, internal_name): + """Sets the internal_name of this ColumnBriefDto. + + + :param internal_name: The internal_name of this ColumnBriefDto. # noqa: E501 + :type: str + """ + if internal_name is None: + raise ValueError("Invalid value for `internal_name`, must not be `None`") # noqa: E501 + + self._internal_name = internal_name + + @property + def column_type(self): + """Gets the column_type of this ColumnBriefDto. # noqa: E501 + + + :return: The column_type of this ColumnBriefDto. # noqa: E501 + :rtype: str + """ + return self._column_type + + @column_type.setter + def column_type(self, column_type): + """Sets the column_type of this ColumnBriefDto. + + + :param column_type: The column_type of this ColumnBriefDto. # noqa: E501 + :type: str + """ + if column_type is None: + raise ValueError("Invalid value for `column_type`, must not be `None`") # noqa: E501 + allowed_values = ["enum", "number", "decimal", "string", "text", "boolean", "date", "timestamp", "blob"] # noqa: E501 + if column_type not in allowed_values: + raise ValueError( + "Invalid value for `column_type` ({0}), must be one of {1}" # noqa: E501 + .format(column_type, allowed_values) + ) + + self._column_type = column_type + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(ColumnBriefDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, ColumnBriefDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/concept_dto.py b/swagger/api/api_semantics/models/concept_dto.py new file mode 100644 index 0000000..205d6cf --- /dev/null +++ b/swagger/api/api_semantics/models/concept_dto.py @@ -0,0 +1,217 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class ConceptDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uri': 'str', + 'name': 'str', + 'description': 'str', + 'created': 'datetime', + 'columns': 'list[ColumnBriefDto]' + } + + attribute_map = { + 'uri': 'uri', + 'name': 'name', + 'description': 'description', + 'created': 'created', + 'columns': 'columns' + } + + def __init__(self, uri=None, name=None, description=None, created=None, columns=None): # noqa: E501 + """ConceptDto - a model defined in Swagger""" # noqa: E501 + self._uri = None + self._name = None + self._description = None + self._created = None + self._columns = None + self.discriminator = None + self.uri = uri + if name is not None: + self.name = name + if description is not None: + self.description = description + self.created = created + self.columns = columns + + @property + def uri(self): + """Gets the uri of this ConceptDto. # noqa: E501 + + + :return: The uri of this ConceptDto. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this ConceptDto. + + + :param uri: The uri of this ConceptDto. # noqa: E501 + :type: str + """ + if uri is None: + raise ValueError("Invalid value for `uri`, must not be `None`") # noqa: E501 + + self._uri = uri + + @property + def name(self): + """Gets the name of this ConceptDto. # noqa: E501 + + + :return: The name of this ConceptDto. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this ConceptDto. + + + :param name: The name of this ConceptDto. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def description(self): + """Gets the description of this ConceptDto. # noqa: E501 + + + :return: The description of this ConceptDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this ConceptDto. + + + :param description: The description of this ConceptDto. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def created(self): + """Gets the created of this ConceptDto. # noqa: E501 + + + :return: The created of this ConceptDto. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this ConceptDto. + + + :param created: The created of this ConceptDto. # noqa: E501 + :type: datetime + """ + if created is None: + raise ValueError("Invalid value for `created`, must not be `None`") # noqa: E501 + + self._created = created + + @property + def columns(self): + """Gets the columns of this ConceptDto. # noqa: E501 + + + :return: The columns of this ConceptDto. # noqa: E501 + :rtype: list[ColumnBriefDto] + """ + return self._columns + + @columns.setter + def columns(self, columns): + """Sets the columns of this ConceptDto. + + + :param columns: The columns of this ConceptDto. # noqa: E501 + :type: list[ColumnBriefDto] + """ + if columns is None: + raise ValueError("Invalid value for `columns`, must not be `None`") # noqa: E501 + + self._columns = columns + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(ConceptDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, ConceptDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/concept_save_dto.py b/swagger/api/api_semantics/models/concept_save_dto.py new file mode 100644 index 0000000..68ce0d7 --- /dev/null +++ b/swagger/api/api_semantics/models/concept_save_dto.py @@ -0,0 +1,165 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class ConceptSaveDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uri': 'str', + 'name': 'str', + 'description': 'str' + } + + attribute_map = { + 'uri': 'uri', + 'name': 'name', + 'description': 'description' + } + + def __init__(self, uri=None, name=None, description=None): # noqa: E501 + """ConceptSaveDto - a model defined in Swagger""" # noqa: E501 + self._uri = None + self._name = None + self._description = None + self.discriminator = None + self.uri = uri + self.name = name + self.description = description + + @property + def uri(self): + """Gets the uri of this ConceptSaveDto. # noqa: E501 + + + :return: The uri of this ConceptSaveDto. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this ConceptSaveDto. + + + :param uri: The uri of this ConceptSaveDto. # noqa: E501 + :type: str + """ + if uri is None: + raise ValueError("Invalid value for `uri`, must not be `None`") # noqa: E501 + + self._uri = uri + + @property + def name(self): + """Gets the name of this ConceptSaveDto. # noqa: E501 + + + :return: The name of this ConceptSaveDto. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this ConceptSaveDto. + + + :param name: The name of this ConceptSaveDto. # noqa: E501 + :type: str + """ + if name is None: + raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 + + self._name = name + + @property + def description(self): + """Gets the description of this ConceptSaveDto. # noqa: E501 + + + :return: The description of this ConceptSaveDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this ConceptSaveDto. + + + :param description: The description of this ConceptSaveDto. # noqa: E501 + :type: str + """ + if description is None: + raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 + + self._description = description + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(ConceptSaveDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, ConceptSaveDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/entity_dto.py b/swagger/api/api_semantics/models/entity_dto.py new file mode 100644 index 0000000..0139494 --- /dev/null +++ b/swagger/api/api_semantics/models/entity_dto.py @@ -0,0 +1,164 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class EntityDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uri': 'str', + 'label': 'str', + 'description': 'str' + } + + attribute_map = { + 'uri': 'uri', + 'label': 'label', + 'description': 'description' + } + + def __init__(self, uri=None, label=None, description=None): # noqa: E501 + """EntityDto - a model defined in Swagger""" # noqa: E501 + self._uri = None + self._label = None + self._description = None + self.discriminator = None + self.uri = uri + self.label = label + if description is not None: + self.description = description + + @property + def uri(self): + """Gets the uri of this EntityDto. # noqa: E501 + + + :return: The uri of this EntityDto. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this EntityDto. + + + :param uri: The uri of this EntityDto. # noqa: E501 + :type: str + """ + if uri is None: + raise ValueError("Invalid value for `uri`, must not be `None`") # noqa: E501 + + self._uri = uri + + @property + def label(self): + """Gets the label of this EntityDto. # noqa: E501 + + + :return: The label of this EntityDto. # noqa: E501 + :rtype: str + """ + return self._label + + @label.setter + def label(self, label): + """Sets the label of this EntityDto. + + + :param label: The label of this EntityDto. # noqa: E501 + :type: str + """ + if label is None: + raise ValueError("Invalid value for `label`, must not be `None`") # noqa: E501 + + self._label = label + + @property + def description(self): + """Gets the description of this EntityDto. # noqa: E501 + + + :return: The description of this EntityDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this EntityDto. + + + :param description: The description of this EntityDto. # noqa: E501 + :type: str + """ + + self._description = description + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(EntityDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, EntityDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/ontology_create_dto.py b/swagger/api/api_semantics/models/ontology_create_dto.py new file mode 100644 index 0000000..5114c2e --- /dev/null +++ b/swagger/api/api_semantics/models/ontology_create_dto.py @@ -0,0 +1,164 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class OntologyCreateDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uri': 'str', + 'prefix': 'str', + 'sparql_endpoint': 'str' + } + + attribute_map = { + 'uri': 'uri', + 'prefix': 'prefix', + 'sparql_endpoint': 'sparql_endpoint' + } + + def __init__(self, uri=None, prefix=None, sparql_endpoint=None): # noqa: E501 + """OntologyCreateDto - a model defined in Swagger""" # noqa: E501 + self._uri = None + self._prefix = None + self._sparql_endpoint = None + self.discriminator = None + self.uri = uri + self.prefix = prefix + if sparql_endpoint is not None: + self.sparql_endpoint = sparql_endpoint + + @property + def uri(self): + """Gets the uri of this OntologyCreateDto. # noqa: E501 + + + :return: The uri of this OntologyCreateDto. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this OntologyCreateDto. + + + :param uri: The uri of this OntologyCreateDto. # noqa: E501 + :type: str + """ + if uri is None: + raise ValueError("Invalid value for `uri`, must not be `None`") # noqa: E501 + + self._uri = uri + + @property + def prefix(self): + """Gets the prefix of this OntologyCreateDto. # noqa: E501 + + + :return: The prefix of this OntologyCreateDto. # noqa: E501 + :rtype: str + """ + return self._prefix + + @prefix.setter + def prefix(self, prefix): + """Sets the prefix of this OntologyCreateDto. + + + :param prefix: The prefix of this OntologyCreateDto. # noqa: E501 + :type: str + """ + if prefix is None: + raise ValueError("Invalid value for `prefix`, must not be `None`") # noqa: E501 + + self._prefix = prefix + + @property + def sparql_endpoint(self): + """Gets the sparql_endpoint of this OntologyCreateDto. # noqa: E501 + + + :return: The sparql_endpoint of this OntologyCreateDto. # noqa: E501 + :rtype: str + """ + return self._sparql_endpoint + + @sparql_endpoint.setter + def sparql_endpoint(self, sparql_endpoint): + """Sets the sparql_endpoint of this OntologyCreateDto. + + + :param sparql_endpoint: The sparql_endpoint of this OntologyCreateDto. # noqa: E501 + :type: str + """ + + self._sparql_endpoint = sparql_endpoint + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(OntologyCreateDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, OntologyCreateDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/ontology_dto.py b/swagger/api/api_semantics/models/ontology_dto.py new file mode 100644 index 0000000..a4abd18 --- /dev/null +++ b/swagger/api/api_semantics/models/ontology_dto.py @@ -0,0 +1,298 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class OntologyDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'uri': 'str', + 'prefix': 'str', + 'sparql': 'bool', + 'rdf': 'bool', + 'creator': 'UserBriefDto', + 'created': 'datetime', + 'sparql_endpoint': 'str' + } + + attribute_map = { + 'id': 'id', + 'uri': 'uri', + 'prefix': 'prefix', + 'sparql': 'sparql', + 'rdf': 'rdf', + 'creator': 'creator', + 'created': 'created', + 'sparql_endpoint': 'sparql_endpoint' + } + + def __init__(self, id=None, uri=None, prefix=None, sparql=None, rdf=None, creator=None, created=None, sparql_endpoint=None): # noqa: E501 + """OntologyDto - a model defined in Swagger""" # noqa: E501 + self._id = None + self._uri = None + self._prefix = None + self._sparql = None + self._rdf = None + self._creator = None + self._created = None + self._sparql_endpoint = None + self.discriminator = None + self.id = id + self.uri = uri + self.prefix = prefix + self.sparql = sparql + self.rdf = rdf + if creator is not None: + self.creator = creator + self.created = created + if sparql_endpoint is not None: + self.sparql_endpoint = sparql_endpoint + + @property + def id(self): + """Gets the id of this OntologyDto. # noqa: E501 + + + :return: The id of this OntologyDto. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this OntologyDto. + + + :param id: The id of this OntologyDto. # noqa: E501 + :type: int + """ + if id is None: + raise ValueError("Invalid value for `id`, must not be `None`") # noqa: E501 + + self._id = id + + @property + def uri(self): + """Gets the uri of this OntologyDto. # noqa: E501 + + + :return: The uri of this OntologyDto. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this OntologyDto. + + + :param uri: The uri of this OntologyDto. # noqa: E501 + :type: str + """ + if uri is None: + raise ValueError("Invalid value for `uri`, must not be `None`") # noqa: E501 + + self._uri = uri + + @property + def prefix(self): + """Gets the prefix of this OntologyDto. # noqa: E501 + + + :return: The prefix of this OntologyDto. # noqa: E501 + :rtype: str + """ + return self._prefix + + @prefix.setter + def prefix(self, prefix): + """Sets the prefix of this OntologyDto. + + + :param prefix: The prefix of this OntologyDto. # noqa: E501 + :type: str + """ + if prefix is None: + raise ValueError("Invalid value for `prefix`, must not be `None`") # noqa: E501 + + self._prefix = prefix + + @property + def sparql(self): + """Gets the sparql of this OntologyDto. # noqa: E501 + + + :return: The sparql of this OntologyDto. # noqa: E501 + :rtype: bool + """ + return self._sparql + + @sparql.setter + def sparql(self, sparql): + """Sets the sparql of this OntologyDto. + + + :param sparql: The sparql of this OntologyDto. # noqa: E501 + :type: bool + """ + if sparql is None: + raise ValueError("Invalid value for `sparql`, must not be `None`") # noqa: E501 + + self._sparql = sparql + + @property + def rdf(self): + """Gets the rdf of this OntologyDto. # noqa: E501 + + + :return: The rdf of this OntologyDto. # noqa: E501 + :rtype: bool + """ + return self._rdf + + @rdf.setter + def rdf(self, rdf): + """Sets the rdf of this OntologyDto. + + + :param rdf: The rdf of this OntologyDto. # noqa: E501 + :type: bool + """ + if rdf is None: + raise ValueError("Invalid value for `rdf`, must not be `None`") # noqa: E501 + + self._rdf = rdf + + @property + def creator(self): + """Gets the creator of this OntologyDto. # noqa: E501 + + + :return: The creator of this OntologyDto. # noqa: E501 + :rtype: UserBriefDto + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this OntologyDto. + + + :param creator: The creator of this OntologyDto. # noqa: E501 + :type: UserBriefDto + """ + + self._creator = creator + + @property + def created(self): + """Gets the created of this OntologyDto. # noqa: E501 + + + :return: The created of this OntologyDto. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this OntologyDto. + + + :param created: The created of this OntologyDto. # noqa: E501 + :type: datetime + """ + if created is None: + raise ValueError("Invalid value for `created`, must not be `None`") # noqa: E501 + + self._created = created + + @property + def sparql_endpoint(self): + """Gets the sparql_endpoint of this OntologyDto. # noqa: E501 + + + :return: The sparql_endpoint of this OntologyDto. # noqa: E501 + :rtype: str + """ + return self._sparql_endpoint + + @sparql_endpoint.setter + def sparql_endpoint(self, sparql_endpoint): + """Sets the sparql_endpoint of this OntologyDto. + + + :param sparql_endpoint: The sparql_endpoint of this OntologyDto. # noqa: E501 + :type: str + """ + + self._sparql_endpoint = sparql_endpoint + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(OntologyDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, OntologyDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/ontology_modify_dto.py b/swagger/api/api_semantics/models/ontology_modify_dto.py new file mode 100644 index 0000000..69bdb87 --- /dev/null +++ b/swagger/api/api_semantics/models/ontology_modify_dto.py @@ -0,0 +1,164 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class OntologyModifyDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uri': 'str', + 'prefix': 'str', + 'sparql_endpoint': 'str' + } + + attribute_map = { + 'uri': 'uri', + 'prefix': 'prefix', + 'sparql_endpoint': 'sparql_endpoint' + } + + def __init__(self, uri=None, prefix=None, sparql_endpoint=None): # noqa: E501 + """OntologyModifyDto - a model defined in Swagger""" # noqa: E501 + self._uri = None + self._prefix = None + self._sparql_endpoint = None + self.discriminator = None + self.uri = uri + self.prefix = prefix + if sparql_endpoint is not None: + self.sparql_endpoint = sparql_endpoint + + @property + def uri(self): + """Gets the uri of this OntologyModifyDto. # noqa: E501 + + + :return: The uri of this OntologyModifyDto. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this OntologyModifyDto. + + + :param uri: The uri of this OntologyModifyDto. # noqa: E501 + :type: str + """ + if uri is None: + raise ValueError("Invalid value for `uri`, must not be `None`") # noqa: E501 + + self._uri = uri + + @property + def prefix(self): + """Gets the prefix of this OntologyModifyDto. # noqa: E501 + + + :return: The prefix of this OntologyModifyDto. # noqa: E501 + :rtype: str + """ + return self._prefix + + @prefix.setter + def prefix(self, prefix): + """Sets the prefix of this OntologyModifyDto. + + + :param prefix: The prefix of this OntologyModifyDto. # noqa: E501 + :type: str + """ + if prefix is None: + raise ValueError("Invalid value for `prefix`, must not be `None`") # noqa: E501 + + self._prefix = prefix + + @property + def sparql_endpoint(self): + """Gets the sparql_endpoint of this OntologyModifyDto. # noqa: E501 + + + :return: The sparql_endpoint of this OntologyModifyDto. # noqa: E501 + :rtype: str + """ + return self._sparql_endpoint + + @sparql_endpoint.setter + def sparql_endpoint(self, sparql_endpoint): + """Sets the sparql_endpoint of this OntologyModifyDto. + + + :param sparql_endpoint: The sparql_endpoint of this OntologyModifyDto. # noqa: E501 + :type: str + """ + + self._sparql_endpoint = sparql_endpoint + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(OntologyModifyDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, OntologyModifyDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/table_column_entity_dto.py b/swagger/api/api_semantics/models/table_column_entity_dto.py new file mode 100644 index 0000000..e063aa0 --- /dev/null +++ b/swagger/api/api_semantics/models/table_column_entity_dto.py @@ -0,0 +1,244 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class TableColumnEntityDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'database_id': 'int', + 'table_id': 'int', + 'column_id': 'int', + 'uri': 'str', + 'label': 'str', + 'description': 'str' + } + + attribute_map = { + 'database_id': 'databaseId', + 'table_id': 'tableId', + 'column_id': 'columnId', + 'uri': 'uri', + 'label': 'label', + 'description': 'description' + } + + def __init__(self, database_id=None, table_id=None, column_id=None, uri=None, label=None, description=None): # noqa: E501 + """TableColumnEntityDto - a model defined in Swagger""" # noqa: E501 + self._database_id = None + self._table_id = None + self._column_id = None + self._uri = None + self._label = None + self._description = None + self.discriminator = None + self.database_id = database_id + self.table_id = table_id + self.column_id = column_id + self.uri = uri + if label is not None: + self.label = label + if description is not None: + self.description = description + + @property + def database_id(self): + """Gets the database_id of this TableColumnEntityDto. # noqa: E501 + + + :return: The database_id of this TableColumnEntityDto. # noqa: E501 + :rtype: int + """ + return self._database_id + + @database_id.setter + def database_id(self, database_id): + """Sets the database_id of this TableColumnEntityDto. + + + :param database_id: The database_id of this TableColumnEntityDto. # noqa: E501 + :type: int + """ + if database_id is None: + raise ValueError("Invalid value for `database_id`, must not be `None`") # noqa: E501 + + self._database_id = database_id + + @property + def table_id(self): + """Gets the table_id of this TableColumnEntityDto. # noqa: E501 + + + :return: The table_id of this TableColumnEntityDto. # noqa: E501 + :rtype: int + """ + return self._table_id + + @table_id.setter + def table_id(self, table_id): + """Sets the table_id of this TableColumnEntityDto. + + + :param table_id: The table_id of this TableColumnEntityDto. # noqa: E501 + :type: int + """ + if table_id is None: + raise ValueError("Invalid value for `table_id`, must not be `None`") # noqa: E501 + + self._table_id = table_id + + @property + def column_id(self): + """Gets the column_id of this TableColumnEntityDto. # noqa: E501 + + + :return: The column_id of this TableColumnEntityDto. # noqa: E501 + :rtype: int + """ + return self._column_id + + @column_id.setter + def column_id(self, column_id): + """Sets the column_id of this TableColumnEntityDto. + + + :param column_id: The column_id of this TableColumnEntityDto. # noqa: E501 + :type: int + """ + if column_id is None: + raise ValueError("Invalid value for `column_id`, must not be `None`") # noqa: E501 + + self._column_id = column_id + + @property + def uri(self): + """Gets the uri of this TableColumnEntityDto. # noqa: E501 + + + :return: The uri of this TableColumnEntityDto. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this TableColumnEntityDto. + + + :param uri: The uri of this TableColumnEntityDto. # noqa: E501 + :type: str + """ + if uri is None: + raise ValueError("Invalid value for `uri`, must not be `None`") # noqa: E501 + + self._uri = uri + + @property + def label(self): + """Gets the label of this TableColumnEntityDto. # noqa: E501 + + + :return: The label of this TableColumnEntityDto. # noqa: E501 + :rtype: str + """ + return self._label + + @label.setter + def label(self, label): + """Sets the label of this TableColumnEntityDto. + + + :param label: The label of this TableColumnEntityDto. # noqa: E501 + :type: str + """ + + self._label = label + + @property + def description(self): + """Gets the description of this TableColumnEntityDto. # noqa: E501 + + + :return: The description of this TableColumnEntityDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this TableColumnEntityDto. + + + :param description: The description of this TableColumnEntityDto. # noqa: E501 + :type: str + """ + + self._description = description + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(TableColumnEntityDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, TableColumnEntityDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/unit_dto.py b/swagger/api/api_semantics/models/unit_dto.py new file mode 100644 index 0000000..1d45a31 --- /dev/null +++ b/swagger/api/api_semantics/models/unit_dto.py @@ -0,0 +1,217 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class UnitDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uri': 'str', + 'name': 'str', + 'description': 'str', + 'created': 'datetime', + 'columns': 'list[ColumnBriefDto]' + } + + attribute_map = { + 'uri': 'uri', + 'name': 'name', + 'description': 'description', + 'created': 'created', + 'columns': 'columns' + } + + def __init__(self, uri=None, name=None, description=None, created=None, columns=None): # noqa: E501 + """UnitDto - a model defined in Swagger""" # noqa: E501 + self._uri = None + self._name = None + self._description = None + self._created = None + self._columns = None + self.discriminator = None + self.uri = uri + if name is not None: + self.name = name + if description is not None: + self.description = description + self.created = created + self.columns = columns + + @property + def uri(self): + """Gets the uri of this UnitDto. # noqa: E501 + + + :return: The uri of this UnitDto. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this UnitDto. + + + :param uri: The uri of this UnitDto. # noqa: E501 + :type: str + """ + if uri is None: + raise ValueError("Invalid value for `uri`, must not be `None`") # noqa: E501 + + self._uri = uri + + @property + def name(self): + """Gets the name of this UnitDto. # noqa: E501 + + + :return: The name of this UnitDto. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this UnitDto. + + + :param name: The name of this UnitDto. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def description(self): + """Gets the description of this UnitDto. # noqa: E501 + + + :return: The description of this UnitDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this UnitDto. + + + :param description: The description of this UnitDto. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def created(self): + """Gets the created of this UnitDto. # noqa: E501 + + + :return: The created of this UnitDto. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this UnitDto. + + + :param created: The created of this UnitDto. # noqa: E501 + :type: datetime + """ + if created is None: + raise ValueError("Invalid value for `created`, must not be `None`") # noqa: E501 + + self._created = created + + @property + def columns(self): + """Gets the columns of this UnitDto. # noqa: E501 + + + :return: The columns of this UnitDto. # noqa: E501 + :rtype: list[ColumnBriefDto] + """ + return self._columns + + @columns.setter + def columns(self, columns): + """Sets the columns of this UnitDto. + + + :param columns: The columns of this UnitDto. # noqa: E501 + :type: list[ColumnBriefDto] + """ + if columns is None: + raise ValueError("Invalid value for `columns`, must not be `None`") # noqa: E501 + + self._columns = columns + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(UnitDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, UnitDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/unit_save_dto.py b/swagger/api/api_semantics/models/unit_save_dto.py new file mode 100644 index 0000000..1aa0a46 --- /dev/null +++ b/swagger/api/api_semantics/models/unit_save_dto.py @@ -0,0 +1,165 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class UnitSaveDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'uri': 'str', + 'name': 'str', + 'description': 'str' + } + + attribute_map = { + 'uri': 'uri', + 'name': 'name', + 'description': 'description' + } + + def __init__(self, uri=None, name=None, description=None): # noqa: E501 + """UnitSaveDto - a model defined in Swagger""" # noqa: E501 + self._uri = None + self._name = None + self._description = None + self.discriminator = None + self.uri = uri + self.name = name + self.description = description + + @property + def uri(self): + """Gets the uri of this UnitSaveDto. # noqa: E501 + + + :return: The uri of this UnitSaveDto. # noqa: E501 + :rtype: str + """ + return self._uri + + @uri.setter + def uri(self, uri): + """Sets the uri of this UnitSaveDto. + + + :param uri: The uri of this UnitSaveDto. # noqa: E501 + :type: str + """ + if uri is None: + raise ValueError("Invalid value for `uri`, must not be `None`") # noqa: E501 + + self._uri = uri + + @property + def name(self): + """Gets the name of this UnitSaveDto. # noqa: E501 + + + :return: The name of this UnitSaveDto. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this UnitSaveDto. + + + :param name: The name of this UnitSaveDto. # noqa: E501 + :type: str + """ + if name is None: + raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 + + self._name = name + + @property + def description(self): + """Gets the description of this UnitSaveDto. # noqa: E501 + + + :return: The description of this UnitSaveDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this UnitSaveDto. + + + :param description: The description of this UnitSaveDto. # noqa: E501 + :type: str + """ + if description is None: + raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 + + self._description = description + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(UnitSaveDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, UnitSaveDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/models/user_brief_dto.py b/swagger/api/api_semantics/models/user_brief_dto.py new file mode 100644 index 0000000..41e66f3 --- /dev/null +++ b/swagger/api/api_semantics/models/user_brief_dto.py @@ -0,0 +1,270 @@ +# coding: utf-8 + +""" + Database Repository Semantic Service API + + Service that manages the tables # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class UserBriefDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'str', + 'username': 'str', + 'name': 'str', + 'orcid': 'str', + 'given_name': 'str', + 'family_name': 'str', + 'email_verified': 'bool' + } + + attribute_map = { + 'id': 'id', + 'username': 'username', + 'name': 'name', + 'orcid': 'orcid', + 'given_name': 'given_name', + 'family_name': 'family_name', + 'email_verified': 'email_verified' + } + + def __init__(self, id=None, username=None, name=None, orcid=None, given_name=None, family_name=None, email_verified=None): # noqa: E501 + """UserBriefDto - a model defined in Swagger""" # noqa: E501 + self._id = None + self._username = None + self._name = None + self._orcid = None + self._given_name = None + self._family_name = None + self._email_verified = None + self.discriminator = None + self.id = id + self.username = username + if name is not None: + self.name = name + if orcid is not None: + self.orcid = orcid + if given_name is not None: + self.given_name = given_name + if family_name is not None: + self.family_name = family_name + if email_verified is not None: + self.email_verified = email_verified + + @property + def id(self): + """Gets the id of this UserBriefDto. # noqa: E501 + + + :return: The id of this UserBriefDto. # noqa: E501 + :rtype: str + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this UserBriefDto. + + + :param id: The id of this UserBriefDto. # noqa: E501 + :type: str + """ + if id is None: + raise ValueError("Invalid value for `id`, must not be `None`") # noqa: E501 + + self._id = id + + @property + def username(self): + """Gets the username of this UserBriefDto. # noqa: E501 + + Only contains lowercase characters # noqa: E501 + + :return: The username of this UserBriefDto. # noqa: E501 + :rtype: str + """ + return self._username + + @username.setter + def username(self, username): + """Sets the username of this UserBriefDto. + + Only contains lowercase characters # noqa: E501 + + :param username: The username of this UserBriefDto. # noqa: E501 + :type: str + """ + if username is None: + raise ValueError("Invalid value for `username`, must not be `None`") # noqa: E501 + + self._username = username + + @property + def name(self): + """Gets the name of this UserBriefDto. # noqa: E501 + + + :return: The name of this UserBriefDto. # noqa: E501 + :rtype: str + """ + return self._name + + @name.setter + def name(self, name): + """Sets the name of this UserBriefDto. + + + :param name: The name of this UserBriefDto. # noqa: E501 + :type: str + """ + + self._name = name + + @property + def orcid(self): + """Gets the orcid of this UserBriefDto. # noqa: E501 + + + :return: The orcid of this UserBriefDto. # noqa: E501 + :rtype: str + """ + return self._orcid + + @orcid.setter + def orcid(self, orcid): + """Sets the orcid of this UserBriefDto. + + + :param orcid: The orcid of this UserBriefDto. # noqa: E501 + :type: str + """ + + self._orcid = orcid + + @property + def given_name(self): + """Gets the given_name of this UserBriefDto. # noqa: E501 + + + :return: The given_name of this UserBriefDto. # noqa: E501 + :rtype: str + """ + return self._given_name + + @given_name.setter + def given_name(self, given_name): + """Sets the given_name of this UserBriefDto. + + + :param given_name: The given_name of this UserBriefDto. # noqa: E501 + :type: str + """ + + self._given_name = given_name + + @property + def family_name(self): + """Gets the family_name of this UserBriefDto. # noqa: E501 + + + :return: The family_name of this UserBriefDto. # noqa: E501 + :rtype: str + """ + return self._family_name + + @family_name.setter + def family_name(self, family_name): + """Sets the family_name of this UserBriefDto. + + + :param family_name: The family_name of this UserBriefDto. # noqa: E501 + :type: str + """ + + self._family_name = family_name + + @property + def email_verified(self): + """Gets the email_verified of this UserBriefDto. # noqa: E501 + + + :return: The email_verified of this UserBriefDto. # noqa: E501 + :rtype: bool + """ + return self._email_verified + + @email_verified.setter + def email_verified(self, email_verified): + """Sets the email_verified of this UserBriefDto. + + + :param email_verified: The email_verified of this UserBriefDto. # noqa: E501 + :type: bool + """ + + self._email_verified = email_verified + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(UserBriefDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, UserBriefDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_semantics/rest.py b/swagger/api/api_semantics/rest.py index a954c50..0a8073c 100644 --- a/swagger/api/api_semantics/rest.py +++ b/swagger/api/api_semantics/rest.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - Database Repository Unit / Ontology Service API + Database Repository Semantic Service API - Service for assigning concepts to database tables and columns. # noqa: E501 + Service that manages the tables # noqa: E501 OpenAPI spec version: 1.2.0 Contact: andreas.rauber@tuwien.ac.at diff --git a/swagger/api/api_table/api/table_column_endpoint_api.py b/swagger/api/api_table/api/table_column_endpoint_api.py index 1b045e3..1ca8644 100644 --- a/swagger/api/api_table/api/table_column_endpoint_api.py +++ b/swagger/api/api_table/api/table_column_endpoint_api.py @@ -32,16 +32,17 @@ class TableColumnEndpointApi(object): api_client = ApiClient() self.api_client = api_client - def update(self, body, id, database_id, table_id, column_id, **kwargs): # noqa: E501 + def update(self, body, authorization, id, database_id, table_id, column_id, **kwargs): # noqa: E501 """Update a table column semantic mapping # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update(body, id, database_id, table_id, column_id, async_req=True) + >>> thread = api.update(body, authorization, id, database_id, table_id, column_id, async_req=True) >>> result = thread.get() :param async_req bool :param ColumnSemanticsUpdateDto body: (required) + :param str authorization: (required) :param int id: (required) :param int database_id: (required) :param int table_id: (required) @@ -52,21 +53,22 @@ class TableColumnEndpointApi(object): """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.update_with_http_info(body, id, database_id, table_id, column_id, **kwargs) # noqa: E501 + return self.update_with_http_info(body, authorization, id, database_id, table_id, column_id, **kwargs) # noqa: E501 else: - (data) = self.update_with_http_info(body, id, database_id, table_id, column_id, **kwargs) # noqa: E501 + (data) = self.update_with_http_info(body, authorization, id, database_id, table_id, column_id, **kwargs) # noqa: E501 return data - def update_with_http_info(self, body, id, database_id, table_id, column_id, **kwargs): # noqa: E501 + def update_with_http_info(self, body, authorization, id, database_id, table_id, column_id, **kwargs): # noqa: E501 """Update a table column semantic mapping # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.update_with_http_info(body, id, database_id, table_id, column_id, async_req=True) + >>> thread = api.update_with_http_info(body, authorization, id, database_id, table_id, column_id, async_req=True) >>> result = thread.get() :param async_req bool :param ColumnSemanticsUpdateDto body: (required) + :param str authorization: (required) :param int id: (required) :param int database_id: (required) :param int table_id: (required) @@ -76,7 +78,7 @@ class TableColumnEndpointApi(object): returns the request thread. """ - all_params = ['body', 'id', 'database_id', 'table_id', 'column_id'] # noqa: E501 + all_params = ['body', 'authorization', 'id', 'database_id', 'table_id', 'column_id'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -95,6 +97,10 @@ class TableColumnEndpointApi(object): if ('body' not in params or params['body'] is None): raise ValueError("Missing the required parameter `body` when calling `update`") # noqa: E501 + # verify the required parameter 'authorization' is set + if ('authorization' not in params or + params['authorization'] is None): + raise ValueError("Missing the required parameter `authorization` when calling `update`") # noqa: E501 # verify the required parameter 'id' is set if ('id' not in params or params['id'] is None): @@ -127,6 +133,8 @@ class TableColumnEndpointApi(object): query_params = [] header_params = {} + if 'authorization' in params: + header_params['Authorization'] = params['authorization'] # noqa: E501 form_params = [] local_var_files = {} diff --git a/swagger/api/api_table/api/table_endpoint_api.py b/swagger/api/api_table/api/table_endpoint_api.py index d5e6988..751023a 100644 --- a/swagger/api/api_table/api/table_endpoint_api.py +++ b/swagger/api/api_table/api/table_endpoint_api.py @@ -374,7 +374,7 @@ class TableEndpointApi(object): :param async_req bool :param int id: (required) :param int database_id: (required) - :return: str + :return: list[TableBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -396,7 +396,7 @@ class TableEndpointApi(object): :param async_req bool :param int id: (required) :param int database_id: (required) - :return: str + :return: list[TableBriefDto] If the method is called asynchronously, returns the request thread. """ @@ -456,7 +456,7 @@ class TableEndpointApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='str', # noqa: E501 + response_type='list[TableBriefDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/swagger/api/api_table/models/api_error_dto.py b/swagger/api/api_table/models/api_error_dto.py index 827e161..cbcdab8 100644 --- a/swagger/api/api_table/models/api_error_dto.py +++ b/swagger/api/api_table/models/api_error_dto.py @@ -69,7 +69,7 @@ class ApiErrorDto(object): """ if status is None: raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501 - allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 + allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 EARLY_HINTS", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 if status not in allowed_values: raise ValueError( "Invalid value for `status` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_table/models/column_brief_dto.py b/swagger/api/api_table/models/column_brief_dto.py index 3aa752b..1913967 100644 --- a/swagger/api/api_table/models/column_brief_dto.py +++ b/swagger/api/api_table/models/column_brief_dto.py @@ -30,6 +30,8 @@ class ColumnBriefDto(object): swagger_types = { 'id': 'int', 'name': 'str', + 'database_id': 'int', + 'table_id': 'int', 'internal_name': 'str', 'column_type': 'str' } @@ -37,19 +39,25 @@ class ColumnBriefDto(object): attribute_map = { 'id': 'id', 'name': 'name', + 'database_id': 'database_id', + 'table_id': 'table_id', 'internal_name': 'internal_name', 'column_type': 'column_type' } - def __init__(self, id=None, name=None, internal_name=None, column_type=None): # noqa: E501 + def __init__(self, id=None, name=None, database_id=None, table_id=None, internal_name=None, column_type=None): # noqa: E501 """ColumnBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None + self._database_id = None + self._table_id = None self._internal_name = None self._column_type = None self.discriminator = None self.id = id self.name = name + self.database_id = database_id + self.table_id = table_id self.internal_name = internal_name self.column_type = column_type @@ -99,6 +107,52 @@ class ColumnBriefDto(object): self._name = name + @property + def database_id(self): + """Gets the database_id of this ColumnBriefDto. # noqa: E501 + + + :return: The database_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._database_id + + @database_id.setter + def database_id(self, database_id): + """Sets the database_id of this ColumnBriefDto. + + + :param database_id: The database_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if database_id is None: + raise ValueError("Invalid value for `database_id`, must not be `None`") # noqa: E501 + + self._database_id = database_id + + @property + def table_id(self): + """Gets the table_id of this ColumnBriefDto. # noqa: E501 + + + :return: The table_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._table_id + + @table_id.setter + def table_id(self, table_id): + """Sets the table_id of this ColumnBriefDto. + + + :param table_id: The table_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if table_id is None: + raise ValueError("Invalid value for `table_id`, must not be `None`") # noqa: E501 + + self._table_id = table_id + @property def internal_name(self): """Gets the internal_name of this ColumnBriefDto. # noqa: E501 diff --git a/swagger/api/api_table/models/concept_dto.py b/swagger/api/api_table/models/concept_dto.py index dd7c9b1..0231b37 100644 --- a/swagger/api/api_table/models/concept_dto.py +++ b/swagger/api/api_table/models/concept_dto.py @@ -30,24 +30,34 @@ class ConceptDto(object): swagger_types = { 'uri': 'str', 'name': 'str', - 'created': 'datetime' + 'description': 'str', + 'created': 'datetime', + 'columns': 'list[ColumnBriefDto]' } attribute_map = { 'uri': 'uri', 'name': 'name', - 'created': 'created' + 'description': 'description', + 'created': 'created', + 'columns': 'columns' } - def __init__(self, uri=None, name=None, created=None): # noqa: E501 + def __init__(self, uri=None, name=None, description=None, created=None, columns=None): # noqa: E501 """ConceptDto - a model defined in Swagger""" # noqa: E501 self._uri = None self._name = None + self._description = None self._created = None + self._columns = None self.discriminator = None self.uri = uri - self.name = name + if name is not None: + self.name = name + if description is not None: + self.description = description self.created = created + self.columns = columns @property def uri(self): @@ -90,11 +100,30 @@ class ConceptDto(object): :param name: The name of this ConceptDto. # noqa: E501 :type: str """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 self._name = name + @property + def description(self): + """Gets the description of this ConceptDto. # noqa: E501 + + + :return: The description of this ConceptDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this ConceptDto. + + + :param description: The description of this ConceptDto. # noqa: E501 + :type: str + """ + + self._description = description + @property def created(self): """Gets the created of this ConceptDto. # noqa: E501 @@ -118,6 +147,29 @@ class ConceptDto(object): self._created = created + @property + def columns(self): + """Gets the columns of this ConceptDto. # noqa: E501 + + + :return: The columns of this ConceptDto. # noqa: E501 + :rtype: list[ColumnBriefDto] + """ + return self._columns + + @columns.setter + def columns(self, columns): + """Sets the columns of this ConceptDto. + + + :param columns: The columns of this ConceptDto. # noqa: E501 + :type: list[ColumnBriefDto] + """ + if columns is None: + raise ValueError("Invalid value for `columns`, must not be `None`") # noqa: E501 + + self._columns = columns + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/api/api_table/models/table_brief_dto.py b/swagger/api/api_table/models/table_brief_dto.py index 5a21163..1bd6d77 100644 --- a/swagger/api/api_table/models/table_brief_dto.py +++ b/swagger/api/api_table/models/table_brief_dto.py @@ -31,7 +31,7 @@ class TableBriefDto(object): 'id': 'int', 'name': 'str', 'description': 'str', - 'creator': 'UserBriefDto', + 'owner': 'UserBriefDto', 'columns': 'list[ColumnBriefDto]', 'internal_name': 'str' } @@ -40,24 +40,24 @@ class TableBriefDto(object): 'id': 'id', 'name': 'name', 'description': 'description', - 'creator': 'creator', + 'owner': 'owner', 'columns': 'columns', 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, description=None, creator=None, columns=None, internal_name=None): # noqa: E501 + def __init__(self, id=None, name=None, description=None, owner=None, columns=None, internal_name=None): # noqa: E501 """TableBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._description = None - self._creator = None + self._owner = None self._columns = None self._internal_name = None self.discriminator = None self.id = id self.name = name self.description = description - self.creator = creator + self.owner = owner self.columns = columns self.internal_name = internal_name @@ -131,27 +131,27 @@ class TableBriefDto(object): self._description = description @property - def creator(self): - """Gets the creator of this TableBriefDto. # noqa: E501 + def owner(self): + """Gets the owner of this TableBriefDto. # noqa: E501 - :return: The creator of this TableBriefDto. # noqa: E501 + :return: The owner of this TableBriefDto. # noqa: E501 :rtype: UserBriefDto """ - return self._creator + return self._owner - @creator.setter - def creator(self, creator): - """Sets the creator of this TableBriefDto. + @owner.setter + def owner(self, owner): + """Sets the owner of this TableBriefDto. - :param creator: The creator of this TableBriefDto. # noqa: E501 + :param owner: The owner of this TableBriefDto. # noqa: E501 :type: UserBriefDto """ - if creator is None: - raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + if owner is None: + raise ValueError("Invalid value for `owner`, must not be `None`") # noqa: E501 - self._creator = creator + self._owner = owner @property def columns(self): diff --git a/swagger/api/api_table/models/table_dto.py b/swagger/api/api_table/models/table_dto.py index 355dfd6..ba08ec6 100644 --- a/swagger/api/api_table/models/table_dto.py +++ b/swagger/api/api_table/models/table_dto.py @@ -31,6 +31,7 @@ class TableDto(object): 'id': 'int', 'name': 'str', 'creator': 'UserBriefDto', + 'owner': 'UserBriefDto', 'description': 'str', 'created': 'datetime', 'columns': 'list[ColumnDto]', @@ -45,6 +46,7 @@ class TableDto(object): 'id': 'id', 'name': 'name', 'creator': 'creator', + 'owner': 'owner', 'description': 'description', 'created': 'created', 'columns': 'columns', @@ -55,11 +57,12 @@ class TableDto(object): 'is_public': 'is_public' } - def __init__(self, id=None, name=None, creator=None, description=None, created=None, columns=None, constraints=None, internal_name=None, queue_name=None, routing_key=None, is_public=None): # noqa: E501 + def __init__(self, id=None, name=None, creator=None, owner=None, description=None, created=None, columns=None, constraints=None, internal_name=None, queue_name=None, routing_key=None, is_public=None): # noqa: E501 """TableDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._creator = None + self._owner = None self._description = None self._created = None self._columns = None @@ -72,6 +75,7 @@ class TableDto(object): self.id = id self.name = name self.creator = creator + self.owner = owner self.description = description if created is not None: self.created = created @@ -152,6 +156,29 @@ class TableDto(object): self._creator = creator + @property + def owner(self): + """Gets the owner of this TableDto. # noqa: E501 + + + :return: The owner of this TableDto. # noqa: E501 + :rtype: UserBriefDto + """ + return self._owner + + @owner.setter + def owner(self, owner): + """Sets the owner of this TableDto. + + + :param owner: The owner of this TableDto. # noqa: E501 + :type: UserBriefDto + """ + if owner is None: + raise ValueError("Invalid value for `owner`, must not be `None`") # noqa: E501 + + self._owner = owner + @property def description(self): """Gets the description of this TableDto. # noqa: E501 diff --git a/swagger/api/api_table/models/unit_dto.py b/swagger/api/api_table/models/unit_dto.py index 3bab178..64df3ba 100644 --- a/swagger/api/api_table/models/unit_dto.py +++ b/swagger/api/api_table/models/unit_dto.py @@ -30,24 +30,34 @@ class UnitDto(object): swagger_types = { 'uri': 'str', 'name': 'str', - 'created': 'datetime' + 'description': 'str', + 'created': 'datetime', + 'columns': 'list[ColumnBriefDto]' } attribute_map = { 'uri': 'uri', 'name': 'name', - 'created': 'created' + 'description': 'description', + 'created': 'created', + 'columns': 'columns' } - def __init__(self, uri=None, name=None, created=None): # noqa: E501 + def __init__(self, uri=None, name=None, description=None, created=None, columns=None): # noqa: E501 """UnitDto - a model defined in Swagger""" # noqa: E501 self._uri = None self._name = None + self._description = None self._created = None + self._columns = None self.discriminator = None self.uri = uri - self.name = name + if name is not None: + self.name = name + if description is not None: + self.description = description self.created = created + self.columns = columns @property def uri(self): @@ -90,11 +100,30 @@ class UnitDto(object): :param name: The name of this UnitDto. # noqa: E501 :type: str """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 self._name = name + @property + def description(self): + """Gets the description of this UnitDto. # noqa: E501 + + + :return: The description of this UnitDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this UnitDto. + + + :param description: The description of this UnitDto. # noqa: E501 + :type: str + """ + + self._description = description + @property def created(self): """Gets the created of this UnitDto. # noqa: E501 @@ -118,6 +147,29 @@ class UnitDto(object): self._created = created + @property + def columns(self): + """Gets the columns of this UnitDto. # noqa: E501 + + + :return: The columns of this UnitDto. # noqa: E501 + :rtype: list[ColumnBriefDto] + """ + return self._columns + + @columns.setter + def columns(self, columns): + """Sets the columns of this UnitDto. + + + :param columns: The columns of this UnitDto. # noqa: E501 + :type: list[ColumnBriefDto] + """ + if columns is None: + raise ValueError("Invalid value for `columns`, must not be `None`") # noqa: E501 + + self._columns = columns + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/api/api_user/__init__.py b/swagger/api/api_user/__init__.py index 1f3469a..78cbb9a 100644 --- a/swagger/api/api_user/__init__.py +++ b/swagger/api/api_user/__init__.py @@ -15,12 +15,21 @@ from __future__ import absolute_import # import apis into sdk package +from api_user.api.maintenance_endpoint_api import MaintenanceEndpointApi from api_user.api.user_endpoint_api import UserEndpointApi # import ApiClient from api_user.api_client import ApiClient from api_user.configuration import Configuration # import models into sdk package from api_user.models.api_error_dto import ApiErrorDto +from api_user.models.banner_message_brief_dto import BannerMessageBriefDto +from api_user.models.banner_message_create_dto import BannerMessageCreateDto +from api_user.models.banner_message_dto import BannerMessageDto +from api_user.models.banner_message_not_found_exception import BannerMessageNotFoundException +from api_user.models.banner_message_not_found_exception_cause import BannerMessageNotFoundExceptionCause +from api_user.models.banner_message_not_found_exception_cause_stack_trace import BannerMessageNotFoundExceptionCauseStackTrace +from api_user.models.banner_message_not_found_exception_cause_suppressed import BannerMessageNotFoundExceptionCauseSuppressed +from api_user.models.banner_message_update_dto import BannerMessageUpdateDto from api_user.models.column_brief_dto import ColumnBriefDto from api_user.models.container_dto import ContainerDto from api_user.models.creator_dto import CreatorDto diff --git a/swagger/api/api_user/api/__init__.py b/swagger/api/api_user/api/__init__.py index 37c8c03..a5f47db 100644 --- a/swagger/api/api_user/api/__init__.py +++ b/swagger/api/api_user/api/__init__.py @@ -3,4 +3,5 @@ from __future__ import absolute_import # flake8: noqa # import apis into api package +from api_user.api.maintenance_endpoint_api import MaintenanceEndpointApi from api_user.api.user_endpoint_api import UserEndpointApi diff --git a/swagger/api/api_user/api/maintenance_endpoint_api.py b/swagger/api/api_user/api/maintenance_endpoint_api.py new file mode 100644 index 0000000..a254195 --- /dev/null +++ b/swagger/api/api_user/api/maintenance_endpoint_api.py @@ -0,0 +1,591 @@ +# coding: utf-8 + +""" + Database Repository User Service API + + Service that manages the users # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import re # noqa: F401 + +# python 2 and python 3 compatibility library +import six + +from api_user.api_client import ApiClient + + +class MaintenanceEndpointApi(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + Ref: https://github.com/swagger-api/swagger-codegen + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + + def active(self, **kwargs): # noqa: E501 + """Find active maintenance messages # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.active(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[BannerMessageBriefDto] + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.active_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.active_with_http_info(**kwargs) # noqa: E501 + return data + + def active_with_http_info(self, **kwargs): # noqa: E501 + """Find active maintenance messages # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.active_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[BannerMessageBriefDto] + If the method is called asynchronously, + returns the request thread. + """ + + all_params = [] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method active" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/maintenance/message/active', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='list[BannerMessageBriefDto]', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def create1(self, body, **kwargs): # noqa: E501 + """Create maintenance message # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.create1(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param BannerMessageCreateDto body: (required) + :return: BannerMessageBriefDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.create1_with_http_info(body, **kwargs) # noqa: E501 + else: + (data) = self.create1_with_http_info(body, **kwargs) # noqa: E501 + return data + + def create1_with_http_info(self, body, **kwargs): # noqa: E501 + """Create maintenance message # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.create1_with_http_info(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param BannerMessageCreateDto body: (required) + :return: BannerMessageBriefDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method create1" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `create1`") # noqa: E501 + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/maintenance/message', 'POST', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='BannerMessageBriefDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def delete(self, id, **kwargs): # noqa: E501 + """Delete maintenance message # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.delete(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: None + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.delete_with_http_info(id, **kwargs) # noqa: E501 + else: + (data) = self.delete_with_http_info(id, **kwargs) # noqa: E501 + return data + + def delete_with_http_info(self, id, **kwargs): # noqa: E501 + """Delete maintenance message # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.delete_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: None + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method delete" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `delete`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/maintenance/message/{id}', 'DELETE', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type=None, # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def find1(self, id, **kwargs): # noqa: E501 + """Find one maintenance message # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find1(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: BannerMessageDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.find1_with_http_info(id, **kwargs) # noqa: E501 + else: + (data) = self.find1_with_http_info(id, **kwargs) # noqa: E501 + return data + + def find1_with_http_info(self, id, **kwargs): # noqa: E501 + """Find one maintenance message # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find1_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: BannerMessageDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method find1" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `find1`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/maintenance/message/{id}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='BannerMessageDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def list(self, **kwargs): # noqa: E501 + """Find maintenance messages # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[BannerMessageDto] + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.list_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.list_with_http_info(**kwargs) # noqa: E501 + return data + + def list_with_http_info(self, **kwargs): # noqa: E501 + """Find maintenance messages # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.list_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :return: list[BannerMessageDto] + If the method is called asynchronously, + returns the request thread. + """ + + all_params = [] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method list" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/maintenance/message', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='list[BannerMessageDto]', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def update(self, body, id, **kwargs): # noqa: E501 + """Update maintenance message # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param BannerMessageUpdateDto body: (required) + :param int id: (required) + :return: BannerMessageBriefDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.update_with_http_info(body, id, **kwargs) # noqa: E501 + else: + (data) = self.update_with_http_info(body, id, **kwargs) # noqa: E501 + return data + + def update_with_http_info(self, body, id, **kwargs): # noqa: E501 + """Update maintenance message # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_with_http_info(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param BannerMessageUpdateDto body: (required) + :param int id: (required) + :return: BannerMessageBriefDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body', 'id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method update" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `update`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/maintenance/message/{id}', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='BannerMessageBriefDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) diff --git a/swagger/api/api_user/api/user_endpoint_api.py b/swagger/api/api_user/api/user_endpoint_api.py index 8bb1659..00c0293 100644 --- a/swagger/api/api_user/api/user_endpoint_api.py +++ b/swagger/api/api_user/api/user_endpoint_api.py @@ -104,7 +104,7 @@ class UserEndpointApi(object): body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( - ['*/*']) # noqa: E501 + ['application/json']) # noqa: E501 # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 @@ -201,7 +201,7 @@ class UserEndpointApi(object): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( - ['*/*']) # noqa: E501 + ['application/json']) # noqa: E501 # Authentication setting auth_settings = ['bearerAuth'] # noqa: E501 @@ -286,7 +286,7 @@ class UserEndpointApi(object): body_params = None # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( - ['*/*']) # noqa: E501 + ['application/json']) # noqa: E501 # Authentication setting auth_settings = [] # noqa: E501 @@ -387,7 +387,7 @@ class UserEndpointApi(object): body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( - ['*/*']) # noqa: E501 + ['application/json']) # noqa: E501 # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 @@ -492,7 +492,7 @@ class UserEndpointApi(object): body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( - ['*/*']) # noqa: E501 + ['application/json']) # noqa: E501 # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 @@ -597,7 +597,7 @@ class UserEndpointApi(object): body_params = params['body'] # HTTP header `Accept` header_params['Accept'] = self.api_client.select_header_accept( - ['*/*']) # noqa: E501 + ['application/json']) # noqa: E501 # HTTP header `Content-Type` header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 diff --git a/swagger/api/api_user/models/__init__.py b/swagger/api/api_user/models/__init__.py index 233fa30..983301c 100644 --- a/swagger/api/api_user/models/__init__.py +++ b/swagger/api/api_user/models/__init__.py @@ -15,6 +15,14 @@ from __future__ import absolute_import # import models into model package from api_user.models.api_error_dto import ApiErrorDto +from api_user.models.banner_message_brief_dto import BannerMessageBriefDto +from api_user.models.banner_message_create_dto import BannerMessageCreateDto +from api_user.models.banner_message_dto import BannerMessageDto +from api_user.models.banner_message_not_found_exception import BannerMessageNotFoundException +from api_user.models.banner_message_not_found_exception_cause import BannerMessageNotFoundExceptionCause +from api_user.models.banner_message_not_found_exception_cause_stack_trace import BannerMessageNotFoundExceptionCauseStackTrace +from api_user.models.banner_message_not_found_exception_cause_suppressed import BannerMessageNotFoundExceptionCauseSuppressed +from api_user.models.banner_message_update_dto import BannerMessageUpdateDto from api_user.models.column_brief_dto import ColumnBriefDto from api_user.models.container_dto import ContainerDto from api_user.models.creator_dto import CreatorDto diff --git a/swagger/api/api_user/models/api_error_dto.py b/swagger/api/api_user/models/api_error_dto.py index 9ecd4fb..af0ee18 100644 --- a/swagger/api/api_user/models/api_error_dto.py +++ b/swagger/api/api_user/models/api_error_dto.py @@ -69,7 +69,7 @@ class ApiErrorDto(object): """ if status is None: raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501 - allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 + allowed_values = ["100 CONTINUE", "101 SWITCHING_PROTOCOLS", "102 PROCESSING", "103 EARLY_HINTS", "103 CHECKPOINT", "200 OK", "201 CREATED", "202 ACCEPTED", "203 NON_AUTHORITATIVE_INFORMATION", "204 NO_CONTENT", "205 RESET_CONTENT", "206 PARTIAL_CONTENT", "207 MULTI_STATUS", "208 ALREADY_REPORTED", "226 IM_USED", "300 MULTIPLE_CHOICES", "301 MOVED_PERMANENTLY", "302 FOUND", "302 MOVED_TEMPORARILY", "303 SEE_OTHER", "304 NOT_MODIFIED", "305 USE_PROXY", "307 TEMPORARY_REDIRECT", "308 PERMANENT_REDIRECT", "400 BAD_REQUEST", "401 UNAUTHORIZED", "402 PAYMENT_REQUIRED", "403 FORBIDDEN", "404 NOT_FOUND", "405 METHOD_NOT_ALLOWED", "406 NOT_ACCEPTABLE", "407 PROXY_AUTHENTICATION_REQUIRED", "408 REQUEST_TIMEOUT", "409 CONFLICT", "410 GONE", "411 LENGTH_REQUIRED", "412 PRECONDITION_FAILED", "413 PAYLOAD_TOO_LARGE", "413 REQUEST_ENTITY_TOO_LARGE", "414 URI_TOO_LONG", "414 REQUEST_URI_TOO_LONG", "415 UNSUPPORTED_MEDIA_TYPE", "416 REQUESTED_RANGE_NOT_SATISFIABLE", "417 EXPECTATION_FAILED", "418 I_AM_A_TEAPOT", "419 INSUFFICIENT_SPACE_ON_RESOURCE", "420 METHOD_FAILURE", "421 DESTINATION_LOCKED", "422 UNPROCESSABLE_ENTITY", "423 LOCKED", "424 FAILED_DEPENDENCY", "425 TOO_EARLY", "426 UPGRADE_REQUIRED", "428 PRECONDITION_REQUIRED", "429 TOO_MANY_REQUESTS", "431 REQUEST_HEADER_FIELDS_TOO_LARGE", "451 UNAVAILABLE_FOR_LEGAL_REASONS", "500 INTERNAL_SERVER_ERROR", "501 NOT_IMPLEMENTED", "502 BAD_GATEWAY", "503 SERVICE_UNAVAILABLE", "504 GATEWAY_TIMEOUT", "505 HTTP_VERSION_NOT_SUPPORTED", "506 VARIANT_ALSO_NEGOTIATES", "507 INSUFFICIENT_STORAGE", "508 LOOP_DETECTED", "509 BANDWIDTH_LIMIT_EXCEEDED", "510 NOT_EXTENDED", "511 NETWORK_AUTHENTICATION_REQUIRED"] # noqa: E501 if status not in allowed_values: raise ValueError( "Invalid value for `status` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_user/models/banner_message_brief_dto.py b/swagger/api/api_user/models/banner_message_brief_dto.py new file mode 100644 index 0000000..222bd0c --- /dev/null +++ b/swagger/api/api_user/models/banner_message_brief_dto.py @@ -0,0 +1,196 @@ +# coding: utf-8 + +""" + Database Repository User Service API + + Service that manages the users # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class BannerMessageBriefDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'type': 'str', + 'message': 'str', + 'link': 'str', + 'link_text': 'str' + } + + attribute_map = { + 'type': 'type', + 'message': 'message', + 'link': 'link', + 'link_text': 'link_text' + } + + def __init__(self, type=None, message=None, link=None, link_text=None): # noqa: E501 + """BannerMessageBriefDto - a model defined in Swagger""" # noqa: E501 + self._type = None + self._message = None + self._link = None + self._link_text = None + self.discriminator = None + self.type = type + self.message = message + if link is not None: + self.link = link + if link_text is not None: + self.link_text = link_text + + @property + def type(self): + """Gets the type of this BannerMessageBriefDto. # noqa: E501 + + + :return: The type of this BannerMessageBriefDto. # noqa: E501 + :rtype: str + """ + return self._type + + @type.setter + def type(self, type): + """Sets the type of this BannerMessageBriefDto. + + + :param type: The type of this BannerMessageBriefDto. # noqa: E501 + :type: str + """ + if type is None: + raise ValueError("Invalid value for `type`, must not be `None`") # noqa: E501 + allowed_values = ["error", "warning", "info"] # noqa: E501 + if type not in allowed_values: + raise ValueError( + "Invalid value for `type` ({0}), must be one of {1}" # noqa: E501 + .format(type, allowed_values) + ) + + self._type = type + + @property + def message(self): + """Gets the message of this BannerMessageBriefDto. # noqa: E501 + + + :return: The message of this BannerMessageBriefDto. # noqa: E501 + :rtype: str + """ + return self._message + + @message.setter + def message(self, message): + """Sets the message of this BannerMessageBriefDto. + + + :param message: The message of this BannerMessageBriefDto. # noqa: E501 + :type: str + """ + if message is None: + raise ValueError("Invalid value for `message`, must not be `None`") # noqa: E501 + + self._message = message + + @property + def link(self): + """Gets the link of this BannerMessageBriefDto. # noqa: E501 + + + :return: The link of this BannerMessageBriefDto. # noqa: E501 + :rtype: str + """ + return self._link + + @link.setter + def link(self, link): + """Sets the link of this BannerMessageBriefDto. + + + :param link: The link of this BannerMessageBriefDto. # noqa: E501 + :type: str + """ + + self._link = link + + @property + def link_text(self): + """Gets the link_text of this BannerMessageBriefDto. # noqa: E501 + + + :return: The link_text of this BannerMessageBriefDto. # noqa: E501 + :rtype: str + """ + return self._link_text + + @link_text.setter + def link_text(self, link_text): + """Sets the link_text of this BannerMessageBriefDto. + + + :param link_text: The link_text of this BannerMessageBriefDto. # noqa: E501 + :type: str + """ + + self._link_text = link_text + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(BannerMessageBriefDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, BannerMessageBriefDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_user/models/banner_message_create_dto.py b/swagger/api/api_user/models/banner_message_create_dto.py new file mode 100644 index 0000000..ed5102b --- /dev/null +++ b/swagger/api/api_user/models/banner_message_create_dto.py @@ -0,0 +1,248 @@ +# coding: utf-8 + +""" + Database Repository User Service API + + Service that manages the users # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class BannerMessageCreateDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'type': 'str', + 'message': 'str', + 'link': 'str', + 'link_text': 'str', + 'display_start': 'datetime', + 'display_end': 'datetime' + } + + attribute_map = { + 'type': 'type', + 'message': 'message', + 'link': 'link', + 'link_text': 'link_text', + 'display_start': 'display_start', + 'display_end': 'display_end' + } + + def __init__(self, type=None, message=None, link=None, link_text=None, display_start=None, display_end=None): # noqa: E501 + """BannerMessageCreateDto - a model defined in Swagger""" # noqa: E501 + self._type = None + self._message = None + self._link = None + self._link_text = None + self._display_start = None + self._display_end = None + self.discriminator = None + self.type = type + self.message = message + if link is not None: + self.link = link + if link_text is not None: + self.link_text = link_text + if display_start is not None: + self.display_start = display_start + if display_end is not None: + self.display_end = display_end + + @property + def type(self): + """Gets the type of this BannerMessageCreateDto. # noqa: E501 + + + :return: The type of this BannerMessageCreateDto. # noqa: E501 + :rtype: str + """ + return self._type + + @type.setter + def type(self, type): + """Sets the type of this BannerMessageCreateDto. + + + :param type: The type of this BannerMessageCreateDto. # noqa: E501 + :type: str + """ + if type is None: + raise ValueError("Invalid value for `type`, must not be `None`") # noqa: E501 + allowed_values = ["error", "warning", "info"] # noqa: E501 + if type not in allowed_values: + raise ValueError( + "Invalid value for `type` ({0}), must be one of {1}" # noqa: E501 + .format(type, allowed_values) + ) + + self._type = type + + @property + def message(self): + """Gets the message of this BannerMessageCreateDto. # noqa: E501 + + + :return: The message of this BannerMessageCreateDto. # noqa: E501 + :rtype: str + """ + return self._message + + @message.setter + def message(self, message): + """Sets the message of this BannerMessageCreateDto. + + + :param message: The message of this BannerMessageCreateDto. # noqa: E501 + :type: str + """ + if message is None: + raise ValueError("Invalid value for `message`, must not be `None`") # noqa: E501 + + self._message = message + + @property + def link(self): + """Gets the link of this BannerMessageCreateDto. # noqa: E501 + + + :return: The link of this BannerMessageCreateDto. # noqa: E501 + :rtype: str + """ + return self._link + + @link.setter + def link(self, link): + """Sets the link of this BannerMessageCreateDto. + + + :param link: The link of this BannerMessageCreateDto. # noqa: E501 + :type: str + """ + + self._link = link + + @property + def link_text(self): + """Gets the link_text of this BannerMessageCreateDto. # noqa: E501 + + + :return: The link_text of this BannerMessageCreateDto. # noqa: E501 + :rtype: str + """ + return self._link_text + + @link_text.setter + def link_text(self, link_text): + """Sets the link_text of this BannerMessageCreateDto. + + + :param link_text: The link_text of this BannerMessageCreateDto. # noqa: E501 + :type: str + """ + + self._link_text = link_text + + @property + def display_start(self): + """Gets the display_start of this BannerMessageCreateDto. # noqa: E501 + + + :return: The display_start of this BannerMessageCreateDto. # noqa: E501 + :rtype: datetime + """ + return self._display_start + + @display_start.setter + def display_start(self, display_start): + """Sets the display_start of this BannerMessageCreateDto. + + + :param display_start: The display_start of this BannerMessageCreateDto. # noqa: E501 + :type: datetime + """ + + self._display_start = display_start + + @property + def display_end(self): + """Gets the display_end of this BannerMessageCreateDto. # noqa: E501 + + + :return: The display_end of this BannerMessageCreateDto. # noqa: E501 + :rtype: datetime + """ + return self._display_end + + @display_end.setter + def display_end(self, display_end): + """Sets the display_end of this BannerMessageCreateDto. + + + :param display_end: The display_end of this BannerMessageCreateDto. # noqa: E501 + :type: datetime + """ + + self._display_end = display_end + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(BannerMessageCreateDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, BannerMessageCreateDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_user/models/banner_message_dto.py b/swagger/api/api_user/models/banner_message_dto.py new file mode 100644 index 0000000..b155e55 --- /dev/null +++ b/swagger/api/api_user/models/banner_message_dto.py @@ -0,0 +1,275 @@ +# coding: utf-8 + +""" + Database Repository User Service API + + Service that manages the users # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class BannerMessageDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'id': 'int', + 'type': 'str', + 'message': 'str', + 'link': 'str', + 'link_text': 'str', + 'display_start': 'datetime', + 'display_end': 'datetime' + } + + attribute_map = { + 'id': 'id', + 'type': 'type', + 'message': 'message', + 'link': 'link', + 'link_text': 'link_text', + 'display_start': 'display_start', + 'display_end': 'display_end' + } + + def __init__(self, id=None, type=None, message=None, link=None, link_text=None, display_start=None, display_end=None): # noqa: E501 + """BannerMessageDto - a model defined in Swagger""" # noqa: E501 + self._id = None + self._type = None + self._message = None + self._link = None + self._link_text = None + self._display_start = None + self._display_end = None + self.discriminator = None + self.id = id + self.type = type + self.message = message + if link is not None: + self.link = link + if link_text is not None: + self.link_text = link_text + if display_start is not None: + self.display_start = display_start + if display_end is not None: + self.display_end = display_end + + @property + def id(self): + """Gets the id of this BannerMessageDto. # noqa: E501 + + + :return: The id of this BannerMessageDto. # noqa: E501 + :rtype: int + """ + return self._id + + @id.setter + def id(self, id): + """Sets the id of this BannerMessageDto. + + + :param id: The id of this BannerMessageDto. # noqa: E501 + :type: int + """ + if id is None: + raise ValueError("Invalid value for `id`, must not be `None`") # noqa: E501 + + self._id = id + + @property + def type(self): + """Gets the type of this BannerMessageDto. # noqa: E501 + + + :return: The type of this BannerMessageDto. # noqa: E501 + :rtype: str + """ + return self._type + + @type.setter + def type(self, type): + """Sets the type of this BannerMessageDto. + + + :param type: The type of this BannerMessageDto. # noqa: E501 + :type: str + """ + if type is None: + raise ValueError("Invalid value for `type`, must not be `None`") # noqa: E501 + allowed_values = ["error", "warning", "info"] # noqa: E501 + if type not in allowed_values: + raise ValueError( + "Invalid value for `type` ({0}), must be one of {1}" # noqa: E501 + .format(type, allowed_values) + ) + + self._type = type + + @property + def message(self): + """Gets the message of this BannerMessageDto. # noqa: E501 + + + :return: The message of this BannerMessageDto. # noqa: E501 + :rtype: str + """ + return self._message + + @message.setter + def message(self, message): + """Sets the message of this BannerMessageDto. + + + :param message: The message of this BannerMessageDto. # noqa: E501 + :type: str + """ + if message is None: + raise ValueError("Invalid value for `message`, must not be `None`") # noqa: E501 + + self._message = message + + @property + def link(self): + """Gets the link of this BannerMessageDto. # noqa: E501 + + + :return: The link of this BannerMessageDto. # noqa: E501 + :rtype: str + """ + return self._link + + @link.setter + def link(self, link): + """Sets the link of this BannerMessageDto. + + + :param link: The link of this BannerMessageDto. # noqa: E501 + :type: str + """ + + self._link = link + + @property + def link_text(self): + """Gets the link_text of this BannerMessageDto. # noqa: E501 + + + :return: The link_text of this BannerMessageDto. # noqa: E501 + :rtype: str + """ + return self._link_text + + @link_text.setter + def link_text(self, link_text): + """Sets the link_text of this BannerMessageDto. + + + :param link_text: The link_text of this BannerMessageDto. # noqa: E501 + :type: str + """ + + self._link_text = link_text + + @property + def display_start(self): + """Gets the display_start of this BannerMessageDto. # noqa: E501 + + + :return: The display_start of this BannerMessageDto. # noqa: E501 + :rtype: datetime + """ + return self._display_start + + @display_start.setter + def display_start(self, display_start): + """Sets the display_start of this BannerMessageDto. + + + :param display_start: The display_start of this BannerMessageDto. # noqa: E501 + :type: datetime + """ + + self._display_start = display_start + + @property + def display_end(self): + """Gets the display_end of this BannerMessageDto. # noqa: E501 + + + :return: The display_end of this BannerMessageDto. # noqa: E501 + :rtype: datetime + """ + return self._display_end + + @display_end.setter + def display_end(self, display_end): + """Sets the display_end of this BannerMessageDto. + + + :param display_end: The display_end of this BannerMessageDto. # noqa: E501 + :type: datetime + """ + + self._display_end = display_end + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(BannerMessageDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, BannerMessageDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_user/models/banner_message_not_found_exception.py b/swagger/api/api_user/models/banner_message_not_found_exception.py new file mode 100644 index 0000000..952f747 --- /dev/null +++ b/swagger/api/api_user/models/banner_message_not_found_exception.py @@ -0,0 +1,214 @@ +# coding: utf-8 + +""" + Database Repository User Service API + + Service that manages the users # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class BannerMessageNotFoundException(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'cause': 'BannerMessageNotFoundExceptionCause', + 'stack_trace': 'list[BannerMessageNotFoundExceptionCauseStackTrace]', + 'message': 'str', + 'suppressed': 'list[BannerMessageNotFoundExceptionCauseSuppressed]', + 'localized_message': 'str' + } + + attribute_map = { + 'cause': 'cause', + 'stack_trace': 'stackTrace', + 'message': 'message', + 'suppressed': 'suppressed', + 'localized_message': 'localizedMessage' + } + + def __init__(self, cause=None, stack_trace=None, message=None, suppressed=None, localized_message=None): # noqa: E501 + """BannerMessageNotFoundException - a model defined in Swagger""" # noqa: E501 + self._cause = None + self._stack_trace = None + self._message = None + self._suppressed = None + self._localized_message = None + self.discriminator = None + if cause is not None: + self.cause = cause + if stack_trace is not None: + self.stack_trace = stack_trace + if message is not None: + self.message = message + if suppressed is not None: + self.suppressed = suppressed + if localized_message is not None: + self.localized_message = localized_message + + @property + def cause(self): + """Gets the cause of this BannerMessageNotFoundException. # noqa: E501 + + + :return: The cause of this BannerMessageNotFoundException. # noqa: E501 + :rtype: BannerMessageNotFoundExceptionCause + """ + return self._cause + + @cause.setter + def cause(self, cause): + """Sets the cause of this BannerMessageNotFoundException. + + + :param cause: The cause of this BannerMessageNotFoundException. # noqa: E501 + :type: BannerMessageNotFoundExceptionCause + """ + + self._cause = cause + + @property + def stack_trace(self): + """Gets the stack_trace of this BannerMessageNotFoundException. # noqa: E501 + + + :return: The stack_trace of this BannerMessageNotFoundException. # noqa: E501 + :rtype: list[BannerMessageNotFoundExceptionCauseStackTrace] + """ + return self._stack_trace + + @stack_trace.setter + def stack_trace(self, stack_trace): + """Sets the stack_trace of this BannerMessageNotFoundException. + + + :param stack_trace: The stack_trace of this BannerMessageNotFoundException. # noqa: E501 + :type: list[BannerMessageNotFoundExceptionCauseStackTrace] + """ + + self._stack_trace = stack_trace + + @property + def message(self): + """Gets the message of this BannerMessageNotFoundException. # noqa: E501 + + + :return: The message of this BannerMessageNotFoundException. # noqa: E501 + :rtype: str + """ + return self._message + + @message.setter + def message(self, message): + """Sets the message of this BannerMessageNotFoundException. + + + :param message: The message of this BannerMessageNotFoundException. # noqa: E501 + :type: str + """ + + self._message = message + + @property + def suppressed(self): + """Gets the suppressed of this BannerMessageNotFoundException. # noqa: E501 + + + :return: The suppressed of this BannerMessageNotFoundException. # noqa: E501 + :rtype: list[BannerMessageNotFoundExceptionCauseSuppressed] + """ + return self._suppressed + + @suppressed.setter + def suppressed(self, suppressed): + """Sets the suppressed of this BannerMessageNotFoundException. + + + :param suppressed: The suppressed of this BannerMessageNotFoundException. # noqa: E501 + :type: list[BannerMessageNotFoundExceptionCauseSuppressed] + """ + + self._suppressed = suppressed + + @property + def localized_message(self): + """Gets the localized_message of this BannerMessageNotFoundException. # noqa: E501 + + + :return: The localized_message of this BannerMessageNotFoundException. # noqa: E501 + :rtype: str + """ + return self._localized_message + + @localized_message.setter + def localized_message(self, localized_message): + """Sets the localized_message of this BannerMessageNotFoundException. + + + :param localized_message: The localized_message of this BannerMessageNotFoundException. # noqa: E501 + :type: str + """ + + self._localized_message = localized_message + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(BannerMessageNotFoundException, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, BannerMessageNotFoundException): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_user/models/banner_message_not_found_exception_cause.py b/swagger/api/api_user/models/banner_message_not_found_exception_cause.py new file mode 100644 index 0000000..9684ec9 --- /dev/null +++ b/swagger/api/api_user/models/banner_message_not_found_exception_cause.py @@ -0,0 +1,188 @@ +# coding: utf-8 + +""" + Database Repository User Service API + + Service that manages the users # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class BannerMessageNotFoundExceptionCause(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'stack_trace': 'list[BannerMessageNotFoundExceptionCauseStackTrace]', + 'message': 'str', + 'suppressed': 'list[BannerMessageNotFoundExceptionCauseSuppressed]', + 'localized_message': 'str' + } + + attribute_map = { + 'stack_trace': 'stackTrace', + 'message': 'message', + 'suppressed': 'suppressed', + 'localized_message': 'localizedMessage' + } + + def __init__(self, stack_trace=None, message=None, suppressed=None, localized_message=None): # noqa: E501 + """BannerMessageNotFoundExceptionCause - a model defined in Swagger""" # noqa: E501 + self._stack_trace = None + self._message = None + self._suppressed = None + self._localized_message = None + self.discriminator = None + if stack_trace is not None: + self.stack_trace = stack_trace + if message is not None: + self.message = message + if suppressed is not None: + self.suppressed = suppressed + if localized_message is not None: + self.localized_message = localized_message + + @property + def stack_trace(self): + """Gets the stack_trace of this BannerMessageNotFoundExceptionCause. # noqa: E501 + + + :return: The stack_trace of this BannerMessageNotFoundExceptionCause. # noqa: E501 + :rtype: list[BannerMessageNotFoundExceptionCauseStackTrace] + """ + return self._stack_trace + + @stack_trace.setter + def stack_trace(self, stack_trace): + """Sets the stack_trace of this BannerMessageNotFoundExceptionCause. + + + :param stack_trace: The stack_trace of this BannerMessageNotFoundExceptionCause. # noqa: E501 + :type: list[BannerMessageNotFoundExceptionCauseStackTrace] + """ + + self._stack_trace = stack_trace + + @property + def message(self): + """Gets the message of this BannerMessageNotFoundExceptionCause. # noqa: E501 + + + :return: The message of this BannerMessageNotFoundExceptionCause. # noqa: E501 + :rtype: str + """ + return self._message + + @message.setter + def message(self, message): + """Sets the message of this BannerMessageNotFoundExceptionCause. + + + :param message: The message of this BannerMessageNotFoundExceptionCause. # noqa: E501 + :type: str + """ + + self._message = message + + @property + def suppressed(self): + """Gets the suppressed of this BannerMessageNotFoundExceptionCause. # noqa: E501 + + + :return: The suppressed of this BannerMessageNotFoundExceptionCause. # noqa: E501 + :rtype: list[BannerMessageNotFoundExceptionCauseSuppressed] + """ + return self._suppressed + + @suppressed.setter + def suppressed(self, suppressed): + """Sets the suppressed of this BannerMessageNotFoundExceptionCause. + + + :param suppressed: The suppressed of this BannerMessageNotFoundExceptionCause. # noqa: E501 + :type: list[BannerMessageNotFoundExceptionCauseSuppressed] + """ + + self._suppressed = suppressed + + @property + def localized_message(self): + """Gets the localized_message of this BannerMessageNotFoundExceptionCause. # noqa: E501 + + + :return: The localized_message of this BannerMessageNotFoundExceptionCause. # noqa: E501 + :rtype: str + """ + return self._localized_message + + @localized_message.setter + def localized_message(self, localized_message): + """Sets the localized_message of this BannerMessageNotFoundExceptionCause. + + + :param localized_message: The localized_message of this BannerMessageNotFoundExceptionCause. # noqa: E501 + :type: str + """ + + self._localized_message = localized_message + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(BannerMessageNotFoundExceptionCause, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, BannerMessageNotFoundExceptionCause): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_user/models/banner_message_not_found_exception_cause_stack_trace.py b/swagger/api/api_user/models/banner_message_not_found_exception_cause_stack_trace.py new file mode 100644 index 0000000..8013cd3 --- /dev/null +++ b/swagger/api/api_user/models/banner_message_not_found_exception_cause_stack_trace.py @@ -0,0 +1,292 @@ +# coding: utf-8 + +""" + Database Repository User Service API + + Service that manages the users # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class BannerMessageNotFoundExceptionCauseStackTrace(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'class_loader_name': 'str', + 'module_name': 'str', + 'module_version': 'str', + 'method_name': 'str', + 'file_name': 'str', + 'line_number': 'int', + 'native_method': 'bool', + 'class_name': 'str' + } + + attribute_map = { + 'class_loader_name': 'classLoaderName', + 'module_name': 'moduleName', + 'module_version': 'moduleVersion', + 'method_name': 'methodName', + 'file_name': 'fileName', + 'line_number': 'lineNumber', + 'native_method': 'nativeMethod', + 'class_name': 'className' + } + + def __init__(self, class_loader_name=None, module_name=None, module_version=None, method_name=None, file_name=None, line_number=None, native_method=None, class_name=None): # noqa: E501 + """BannerMessageNotFoundExceptionCauseStackTrace - a model defined in Swagger""" # noqa: E501 + self._class_loader_name = None + self._module_name = None + self._module_version = None + self._method_name = None + self._file_name = None + self._line_number = None + self._native_method = None + self._class_name = None + self.discriminator = None + if class_loader_name is not None: + self.class_loader_name = class_loader_name + if module_name is not None: + self.module_name = module_name + if module_version is not None: + self.module_version = module_version + if method_name is not None: + self.method_name = method_name + if file_name is not None: + self.file_name = file_name + if line_number is not None: + self.line_number = line_number + if native_method is not None: + self.native_method = native_method + if class_name is not None: + self.class_name = class_name + + @property + def class_loader_name(self): + """Gets the class_loader_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + + + :return: The class_loader_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :rtype: str + """ + return self._class_loader_name + + @class_loader_name.setter + def class_loader_name(self, class_loader_name): + """Sets the class_loader_name of this BannerMessageNotFoundExceptionCauseStackTrace. + + + :param class_loader_name: The class_loader_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :type: str + """ + + self._class_loader_name = class_loader_name + + @property + def module_name(self): + """Gets the module_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + + + :return: The module_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :rtype: str + """ + return self._module_name + + @module_name.setter + def module_name(self, module_name): + """Sets the module_name of this BannerMessageNotFoundExceptionCauseStackTrace. + + + :param module_name: The module_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :type: str + """ + + self._module_name = module_name + + @property + def module_version(self): + """Gets the module_version of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + + + :return: The module_version of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :rtype: str + """ + return self._module_version + + @module_version.setter + def module_version(self, module_version): + """Sets the module_version of this BannerMessageNotFoundExceptionCauseStackTrace. + + + :param module_version: The module_version of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :type: str + """ + + self._module_version = module_version + + @property + def method_name(self): + """Gets the method_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + + + :return: The method_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :rtype: str + """ + return self._method_name + + @method_name.setter + def method_name(self, method_name): + """Sets the method_name of this BannerMessageNotFoundExceptionCauseStackTrace. + + + :param method_name: The method_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :type: str + """ + + self._method_name = method_name + + @property + def file_name(self): + """Gets the file_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + + + :return: The file_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :rtype: str + """ + return self._file_name + + @file_name.setter + def file_name(self, file_name): + """Sets the file_name of this BannerMessageNotFoundExceptionCauseStackTrace. + + + :param file_name: The file_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :type: str + """ + + self._file_name = file_name + + @property + def line_number(self): + """Gets the line_number of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + + + :return: The line_number of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :rtype: int + """ + return self._line_number + + @line_number.setter + def line_number(self, line_number): + """Sets the line_number of this BannerMessageNotFoundExceptionCauseStackTrace. + + + :param line_number: The line_number of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :type: int + """ + + self._line_number = line_number + + @property + def native_method(self): + """Gets the native_method of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + + + :return: The native_method of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :rtype: bool + """ + return self._native_method + + @native_method.setter + def native_method(self, native_method): + """Sets the native_method of this BannerMessageNotFoundExceptionCauseStackTrace. + + + :param native_method: The native_method of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :type: bool + """ + + self._native_method = native_method + + @property + def class_name(self): + """Gets the class_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + + + :return: The class_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :rtype: str + """ + return self._class_name + + @class_name.setter + def class_name(self, class_name): + """Sets the class_name of this BannerMessageNotFoundExceptionCauseStackTrace. + + + :param class_name: The class_name of this BannerMessageNotFoundExceptionCauseStackTrace. # noqa: E501 + :type: str + """ + + self._class_name = class_name + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(BannerMessageNotFoundExceptionCauseStackTrace, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, BannerMessageNotFoundExceptionCauseStackTrace): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_user/models/banner_message_not_found_exception_cause_suppressed.py b/swagger/api/api_user/models/banner_message_not_found_exception_cause_suppressed.py new file mode 100644 index 0000000..88913aa --- /dev/null +++ b/swagger/api/api_user/models/banner_message_not_found_exception_cause_suppressed.py @@ -0,0 +1,162 @@ +# coding: utf-8 + +""" + Database Repository User Service API + + Service that manages the users # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class BannerMessageNotFoundExceptionCauseSuppressed(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'stack_trace': 'list[BannerMessageNotFoundExceptionCauseStackTrace]', + 'message': 'str', + 'localized_message': 'str' + } + + attribute_map = { + 'stack_trace': 'stackTrace', + 'message': 'message', + 'localized_message': 'localizedMessage' + } + + def __init__(self, stack_trace=None, message=None, localized_message=None): # noqa: E501 + """BannerMessageNotFoundExceptionCauseSuppressed - a model defined in Swagger""" # noqa: E501 + self._stack_trace = None + self._message = None + self._localized_message = None + self.discriminator = None + if stack_trace is not None: + self.stack_trace = stack_trace + if message is not None: + self.message = message + if localized_message is not None: + self.localized_message = localized_message + + @property + def stack_trace(self): + """Gets the stack_trace of this BannerMessageNotFoundExceptionCauseSuppressed. # noqa: E501 + + + :return: The stack_trace of this BannerMessageNotFoundExceptionCauseSuppressed. # noqa: E501 + :rtype: list[BannerMessageNotFoundExceptionCauseStackTrace] + """ + return self._stack_trace + + @stack_trace.setter + def stack_trace(self, stack_trace): + """Sets the stack_trace of this BannerMessageNotFoundExceptionCauseSuppressed. + + + :param stack_trace: The stack_trace of this BannerMessageNotFoundExceptionCauseSuppressed. # noqa: E501 + :type: list[BannerMessageNotFoundExceptionCauseStackTrace] + """ + + self._stack_trace = stack_trace + + @property + def message(self): + """Gets the message of this BannerMessageNotFoundExceptionCauseSuppressed. # noqa: E501 + + + :return: The message of this BannerMessageNotFoundExceptionCauseSuppressed. # noqa: E501 + :rtype: str + """ + return self._message + + @message.setter + def message(self, message): + """Sets the message of this BannerMessageNotFoundExceptionCauseSuppressed. + + + :param message: The message of this BannerMessageNotFoundExceptionCauseSuppressed. # noqa: E501 + :type: str + """ + + self._message = message + + @property + def localized_message(self): + """Gets the localized_message of this BannerMessageNotFoundExceptionCauseSuppressed. # noqa: E501 + + + :return: The localized_message of this BannerMessageNotFoundExceptionCauseSuppressed. # noqa: E501 + :rtype: str + """ + return self._localized_message + + @localized_message.setter + def localized_message(self, localized_message): + """Sets the localized_message of this BannerMessageNotFoundExceptionCauseSuppressed. + + + :param localized_message: The localized_message of this BannerMessageNotFoundExceptionCauseSuppressed. # noqa: E501 + :type: str + """ + + self._localized_message = localized_message + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(BannerMessageNotFoundExceptionCauseSuppressed, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, BannerMessageNotFoundExceptionCauseSuppressed): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_user/models/banner_message_update_dto.py b/swagger/api/api_user/models/banner_message_update_dto.py new file mode 100644 index 0000000..54d7865 --- /dev/null +++ b/swagger/api/api_user/models/banner_message_update_dto.py @@ -0,0 +1,248 @@ +# coding: utf-8 + +""" + Database Repository User Service API + + Service that manages the users # noqa: E501 + + OpenAPI spec version: 1.2.0 + Contact: andreas.rauber@tuwien.ac.at + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class BannerMessageUpdateDto(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'type': 'str', + 'message': 'str', + 'link': 'str', + 'link_text': 'str', + 'display_start': 'datetime', + 'display_end': 'datetime' + } + + attribute_map = { + 'type': 'type', + 'message': 'message', + 'link': 'link', + 'link_text': 'link_text', + 'display_start': 'display_start', + 'display_end': 'display_end' + } + + def __init__(self, type=None, message=None, link=None, link_text=None, display_start=None, display_end=None): # noqa: E501 + """BannerMessageUpdateDto - a model defined in Swagger""" # noqa: E501 + self._type = None + self._message = None + self._link = None + self._link_text = None + self._display_start = None + self._display_end = None + self.discriminator = None + self.type = type + self.message = message + if link is not None: + self.link = link + if link_text is not None: + self.link_text = link_text + if display_start is not None: + self.display_start = display_start + if display_end is not None: + self.display_end = display_end + + @property + def type(self): + """Gets the type of this BannerMessageUpdateDto. # noqa: E501 + + + :return: The type of this BannerMessageUpdateDto. # noqa: E501 + :rtype: str + """ + return self._type + + @type.setter + def type(self, type): + """Sets the type of this BannerMessageUpdateDto. + + + :param type: The type of this BannerMessageUpdateDto. # noqa: E501 + :type: str + """ + if type is None: + raise ValueError("Invalid value for `type`, must not be `None`") # noqa: E501 + allowed_values = ["error", "warning", "info"] # noqa: E501 + if type not in allowed_values: + raise ValueError( + "Invalid value for `type` ({0}), must be one of {1}" # noqa: E501 + .format(type, allowed_values) + ) + + self._type = type + + @property + def message(self): + """Gets the message of this BannerMessageUpdateDto. # noqa: E501 + + + :return: The message of this BannerMessageUpdateDto. # noqa: E501 + :rtype: str + """ + return self._message + + @message.setter + def message(self, message): + """Sets the message of this BannerMessageUpdateDto. + + + :param message: The message of this BannerMessageUpdateDto. # noqa: E501 + :type: str + """ + if message is None: + raise ValueError("Invalid value for `message`, must not be `None`") # noqa: E501 + + self._message = message + + @property + def link(self): + """Gets the link of this BannerMessageUpdateDto. # noqa: E501 + + + :return: The link of this BannerMessageUpdateDto. # noqa: E501 + :rtype: str + """ + return self._link + + @link.setter + def link(self, link): + """Sets the link of this BannerMessageUpdateDto. + + + :param link: The link of this BannerMessageUpdateDto. # noqa: E501 + :type: str + """ + + self._link = link + + @property + def link_text(self): + """Gets the link_text of this BannerMessageUpdateDto. # noqa: E501 + + + :return: The link_text of this BannerMessageUpdateDto. # noqa: E501 + :rtype: str + """ + return self._link_text + + @link_text.setter + def link_text(self, link_text): + """Sets the link_text of this BannerMessageUpdateDto. + + + :param link_text: The link_text of this BannerMessageUpdateDto. # noqa: E501 + :type: str + """ + + self._link_text = link_text + + @property + def display_start(self): + """Gets the display_start of this BannerMessageUpdateDto. # noqa: E501 + + + :return: The display_start of this BannerMessageUpdateDto. # noqa: E501 + :rtype: datetime + """ + return self._display_start + + @display_start.setter + def display_start(self, display_start): + """Sets the display_start of this BannerMessageUpdateDto. + + + :param display_start: The display_start of this BannerMessageUpdateDto. # noqa: E501 + :type: datetime + """ + + self._display_start = display_start + + @property + def display_end(self): + """Gets the display_end of this BannerMessageUpdateDto. # noqa: E501 + + + :return: The display_end of this BannerMessageUpdateDto. # noqa: E501 + :rtype: datetime + """ + return self._display_end + + @display_end.setter + def display_end(self, display_end): + """Sets the display_end of this BannerMessageUpdateDto. + + + :param display_end: The display_end of this BannerMessageUpdateDto. # noqa: E501 + :type: datetime + """ + + self._display_end = display_end + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(BannerMessageUpdateDto, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, BannerMessageUpdateDto): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/swagger/api/api_user/models/column_brief_dto.py b/swagger/api/api_user/models/column_brief_dto.py index 8a70563..2abec82 100644 --- a/swagger/api/api_user/models/column_brief_dto.py +++ b/swagger/api/api_user/models/column_brief_dto.py @@ -30,6 +30,8 @@ class ColumnBriefDto(object): swagger_types = { 'id': 'int', 'name': 'str', + 'database_id': 'int', + 'table_id': 'int', 'internal_name': 'str', 'column_type': 'str' } @@ -37,19 +39,25 @@ class ColumnBriefDto(object): attribute_map = { 'id': 'id', 'name': 'name', + 'database_id': 'database_id', + 'table_id': 'table_id', 'internal_name': 'internal_name', 'column_type': 'column_type' } - def __init__(self, id=None, name=None, internal_name=None, column_type=None): # noqa: E501 + def __init__(self, id=None, name=None, database_id=None, table_id=None, internal_name=None, column_type=None): # noqa: E501 """ColumnBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None + self._database_id = None + self._table_id = None self._internal_name = None self._column_type = None self.discriminator = None self.id = id self.name = name + self.database_id = database_id + self.table_id = table_id self.internal_name = internal_name self.column_type = column_type @@ -99,6 +107,52 @@ class ColumnBriefDto(object): self._name = name + @property + def database_id(self): + """Gets the database_id of this ColumnBriefDto. # noqa: E501 + + + :return: The database_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._database_id + + @database_id.setter + def database_id(self, database_id): + """Sets the database_id of this ColumnBriefDto. + + + :param database_id: The database_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if database_id is None: + raise ValueError("Invalid value for `database_id`, must not be `None`") # noqa: E501 + + self._database_id = database_id + + @property + def table_id(self): + """Gets the table_id of this ColumnBriefDto. # noqa: E501 + + + :return: The table_id of this ColumnBriefDto. # noqa: E501 + :rtype: int + """ + return self._table_id + + @table_id.setter + def table_id(self, table_id): + """Sets the table_id of this ColumnBriefDto. + + + :param table_id: The table_id of this ColumnBriefDto. # noqa: E501 + :type: int + """ + if table_id is None: + raise ValueError("Invalid value for `table_id`, must not be `None`") # noqa: E501 + + self._table_id = table_id + @property def internal_name(self): """Gets the internal_name of this ColumnBriefDto. # noqa: E501 diff --git a/swagger/api/api_user/models/creator_dto.py b/swagger/api/api_user/models/creator_dto.py index c73997b..1e2c22d 100644 --- a/swagger/api/api_user/models/creator_dto.py +++ b/swagger/api/api_user/models/creator_dto.py @@ -32,9 +32,7 @@ class CreatorDto(object): 'firstname': 'str', 'lastname': 'str', 'affiliation': 'str', - 'orcid': 'str', - 'created': 'datetime', - 'last_modified': 'datetime' + 'orcid': 'str' } attribute_map = { @@ -42,20 +40,16 @@ class CreatorDto(object): 'firstname': 'firstname', 'lastname': 'lastname', 'affiliation': 'affiliation', - 'orcid': 'orcid', - 'created': 'created', - 'last_modified': 'lastModified' + 'orcid': 'orcid' } - def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None, created=None, last_modified=None): # noqa: E501 + def __init__(self, id=None, firstname=None, lastname=None, affiliation=None, orcid=None): # noqa: E501 """CreatorDto - a model defined in Swagger""" # noqa: E501 self._id = None self._firstname = None self._lastname = None self._affiliation = None self._orcid = None - self._created = None - self._last_modified = None self.discriminator = None self.id = id self.firstname = firstname @@ -64,10 +58,6 @@ class CreatorDto(object): self.affiliation = affiliation if orcid is not None: self.orcid = orcid - if created is not None: - self.created = created - if last_modified is not None: - self.last_modified = last_modified @property def id(self): @@ -180,48 +170,6 @@ class CreatorDto(object): self._orcid = orcid - @property - def created(self): - """Gets the created of this CreatorDto. # noqa: E501 - - - :return: The created of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._created - - @created.setter - def created(self, created): - """Sets the created of this CreatorDto. - - - :param created: The created of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._created = created - - @property - def last_modified(self): - """Gets the last_modified of this CreatorDto. # noqa: E501 - - - :return: The last_modified of this CreatorDto. # noqa: E501 - :rtype: datetime - """ - return self._last_modified - - @last_modified.setter - def last_modified(self, last_modified): - """Sets the last_modified of this CreatorDto. - - - :param last_modified: The last_modified of this CreatorDto. # noqa: E501 - :type: datetime - """ - - self._last_modified = last_modified - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/api/api_user/models/identifier_dto.py b/swagger/api/api_user/models/identifier_dto.py index 0bde2bc..fef15d9 100644 --- a/swagger/api/api_user/models/identifier_dto.py +++ b/swagger/api/api_user/models/identifier_dto.py @@ -309,7 +309,7 @@ class IdentifierDto(object): """ if visibility is None: raise ValueError("Invalid value for `visibility`, must not be `None`") # noqa: E501 - allowed_values = ["everyone", "trusted", "self"] # noqa: E501 + allowed_values = ["everyone", "self"] # noqa: E501 if visibility not in allowed_values: raise ValueError( "Invalid value for `visibility` ({0}), must be one of {1}" # noqa: E501 diff --git a/swagger/api/api_user/models/image_brief_dto.py b/swagger/api/api_user/models/image_brief_dto.py index 38f8afc..ad702ef 100644 --- a/swagger/api/api_user/models/image_brief_dto.py +++ b/swagger/api/api_user/models/image_brief_dto.py @@ -29,23 +29,27 @@ class ImageBriefDto(object): """ swagger_types = { 'id': 'int', + 'registry': 'str', 'repository': 'str', 'tag': 'str' } attribute_map = { 'id': 'id', + 'registry': 'registry', 'repository': 'repository', 'tag': 'tag' } - def __init__(self, id=None, repository=None, tag=None): # noqa: E501 + def __init__(self, id=None, registry=None, repository=None, tag=None): # noqa: E501 """ImageBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None + self._registry = None self._repository = None self._tag = None self.discriminator = None self.id = id + self.registry = registry self.repository = repository self.tag = tag @@ -72,6 +76,29 @@ class ImageBriefDto(object): self._id = id + @property + def registry(self): + """Gets the registry of this ImageBriefDto. # noqa: E501 + + + :return: The registry of this ImageBriefDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageBriefDto. + + + :param registry: The registry of this ImageBriefDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def repository(self): """Gets the repository of this ImageBriefDto. # noqa: E501 diff --git a/swagger/api/api_user/models/image_dto.py b/swagger/api/api_user/models/image_dto.py index d22578c..3e0d809 100644 --- a/swagger/api/api_user/models/image_dto.py +++ b/swagger/api/api_user/models/image_dto.py @@ -29,6 +29,7 @@ class ImageDto(object): """ swagger_types = { 'id': 'int', + 'registry': 'str', 'repository': 'str', 'tag': 'str', 'dialect': 'str', @@ -43,6 +44,7 @@ class ImageDto(object): attribute_map = { 'id': 'id', + 'registry': 'registry', 'repository': 'repository', 'tag': 'tag', 'dialect': 'dialect', @@ -55,9 +57,10 @@ class ImageDto(object): 'default_port': 'default_port' } - def __init__(self, id=None, repository=None, tag=None, dialect=None, hash=None, compiled=None, size=None, driver_class=None, date_formats=None, jdbc_method=None, default_port=None): # noqa: E501 + def __init__(self, id=None, registry=None, repository=None, tag=None, dialect=None, hash=None, compiled=None, size=None, driver_class=None, date_formats=None, jdbc_method=None, default_port=None): # noqa: E501 """ImageDto - a model defined in Swagger""" # noqa: E501 self._id = None + self._registry = None self._repository = None self._tag = None self._dialect = None @@ -70,6 +73,7 @@ class ImageDto(object): self._default_port = None self.discriminator = None self.id = id + self.registry = registry self.repository = repository self.tag = tag self.dialect = dialect @@ -108,6 +112,29 @@ class ImageDto(object): self._id = id + @property + def registry(self): + """Gets the registry of this ImageDto. # noqa: E501 + + + :return: The registry of this ImageDto. # noqa: E501 + :rtype: str + """ + return self._registry + + @registry.setter + def registry(self, registry): + """Sets the registry of this ImageDto. + + + :param registry: The registry of this ImageDto. # noqa: E501 + :type: str + """ + if registry is None: + raise ValueError("Invalid value for `registry`, must not be `None`") # noqa: E501 + + self._registry = registry + @property def repository(self): """Gets the repository of this ImageDto. # noqa: E501 diff --git a/swagger/api/api_user/models/table_brief_dto.py b/swagger/api/api_user/models/table_brief_dto.py index 2f9438d..04ad24f 100644 --- a/swagger/api/api_user/models/table_brief_dto.py +++ b/swagger/api/api_user/models/table_brief_dto.py @@ -31,7 +31,7 @@ class TableBriefDto(object): 'id': 'int', 'name': 'str', 'description': 'str', - 'creator': 'UserBriefDto', + 'owner': 'UserBriefDto', 'columns': 'list[ColumnBriefDto]', 'internal_name': 'str' } @@ -40,24 +40,24 @@ class TableBriefDto(object): 'id': 'id', 'name': 'name', 'description': 'description', - 'creator': 'creator', + 'owner': 'owner', 'columns': 'columns', 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, description=None, creator=None, columns=None, internal_name=None): # noqa: E501 + def __init__(self, id=None, name=None, description=None, owner=None, columns=None, internal_name=None): # noqa: E501 """TableBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._description = None - self._creator = None + self._owner = None self._columns = None self._internal_name = None self.discriminator = None self.id = id self.name = name self.description = description - self.creator = creator + self.owner = owner self.columns = columns self.internal_name = internal_name @@ -131,27 +131,27 @@ class TableBriefDto(object): self._description = description @property - def creator(self): - """Gets the creator of this TableBriefDto. # noqa: E501 + def owner(self): + """Gets the owner of this TableBriefDto. # noqa: E501 - :return: The creator of this TableBriefDto. # noqa: E501 + :return: The owner of this TableBriefDto. # noqa: E501 :rtype: UserBriefDto """ - return self._creator + return self._owner - @creator.setter - def creator(self, creator): - """Sets the creator of this TableBriefDto. + @owner.setter + def owner(self, owner): + """Sets the owner of this TableBriefDto. - :param creator: The creator of this TableBriefDto. # noqa: E501 + :param owner: The owner of this TableBriefDto. # noqa: E501 :type: UserBriefDto """ - if creator is None: - raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + if owner is None: + raise ValueError("Invalid value for `owner`, must not be `None`") # noqa: E501 - self._creator = creator + self._owner = owner @property def columns(self): diff --git a/swagger/api/api_user/models/user_update_dto.py b/swagger/api/api_user/models/user_update_dto.py index 1c73608..13f8126 100644 --- a/swagger/api/api_user/models/user_update_dto.py +++ b/swagger/api/api_user/models/user_update_dto.py @@ -31,28 +31,22 @@ class UserUpdateDto(object): 'firstname': 'str', 'lastname': 'str', 'affiliation': 'str', - 'orcid': 'str', - 'titles_before': 'str', - 'titles_after': 'str' + 'orcid': 'str' } attribute_map = { 'firstname': 'firstname', 'lastname': 'lastname', 'affiliation': 'affiliation', - 'orcid': 'orcid', - 'titles_before': 'titles_before', - 'titles_after': 'titles_after' + 'orcid': 'orcid' } - def __init__(self, firstname=None, lastname=None, affiliation=None, orcid=None, titles_before=None, titles_after=None): # noqa: E501 + def __init__(self, firstname=None, lastname=None, affiliation=None, orcid=None): # noqa: E501 """UserUpdateDto - a model defined in Swagger""" # noqa: E501 self._firstname = None self._lastname = None self._affiliation = None self._orcid = None - self._titles_before = None - self._titles_after = None self.discriminator = None if firstname is not None: self.firstname = firstname @@ -62,10 +56,6 @@ class UserUpdateDto(object): self.affiliation = affiliation if orcid is not None: self.orcid = orcid - if titles_before is not None: - self.titles_before = titles_before - if titles_after is not None: - self.titles_after = titles_after @property def firstname(self): @@ -151,48 +141,6 @@ class UserUpdateDto(object): self._orcid = orcid - @property - def titles_before(self): - """Gets the titles_before of this UserUpdateDto. # noqa: E501 - - - :return: The titles_before of this UserUpdateDto. # noqa: E501 - :rtype: str - """ - return self._titles_before - - @titles_before.setter - def titles_before(self, titles_before): - """Sets the titles_before of this UserUpdateDto. - - - :param titles_before: The titles_before of this UserUpdateDto. # noqa: E501 - :type: str - """ - - self._titles_before = titles_before - - @property - def titles_after(self): - """Gets the titles_after of this UserUpdateDto. # noqa: E501 - - - :return: The titles_after of this UserUpdateDto. # noqa: E501 - :rtype: str - """ - return self._titles_after - - @titles_after.setter - def titles_after(self, titles_after): - """Sets the titles_after of this UserUpdateDto. - - - :param titles_after: The titles_after of this UserUpdateDto. # noqa: E501 - :type: str - """ - - self._titles_after = titles_after - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/swagger/container/api.yaml b/swagger/container/api.yaml index bd8f5e7..2102e2f 100644 --- a/swagger/container/api.yaml +++ b/swagger/container/api.yaml @@ -32,18 +32,18 @@ paths: type: integer format: int64 responses: - "404": - description: Image could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Found image content: application/json: schema: $ref: '#/components/schemas/ImageDto' + "404": + description: Image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' put: tags: - image-endpoint @@ -63,18 +63,18 @@ paths: $ref: '#/components/schemas/ImageChangeDto' required: true responses: - "404": - description: Image could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "202": description: Updated image successfully content: application/json: schema: $ref: '#/components/schemas/ImageDto' + "404": + description: Image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] delete: @@ -83,21 +83,21 @@ paths: summary: Delete some image operationId: delete parameters: - - name: imageId + - name: id in: path required: true schema: type: integer format: int64 responses: + "202": + description: Deleted image successfully "404": description: Image could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Deleted image successfully security: - bearerAuth: [] /api/container/{id}: @@ -114,18 +114,18 @@ paths: type: integer format: int64 responses: - "200": - description: Found container + "502": + description: Docker client failed to connect content: application/json: schema: - $ref: '#/components/schemas/ContainerDto' - "502": - description: Connection to the container failed + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Found container content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/ContainerDto' "404": description: Container image could not be found content: @@ -151,20 +151,20 @@ paths: $ref: '#/components/schemas/ContainerChangeDto' required: true responses: - "404": - description: Container or user could not be found + "409": + description: Container is already started/stopped content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Modification of container state is not permitted + "404": + description: Container or user could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Container is already started/stopped + "405": + description: Modification of container state is not permitted content: application/json: schema: @@ -196,14 +196,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "202": - description: Deleted container successfully "409": description: Container is still running content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Deleted container successfully security: - bearerAuth: [] /api/image: @@ -218,7 +218,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/ContainerImage' post: tags: - image-endpoint @@ -231,6 +233,12 @@ paths: $ref: '#/components/schemas/ImageCreateDto' required: true responses: + "201": + description: Created image + content: + application/json: + schema: + $ref: '#/components/schemas/ImageDto' "404": description: User could not be found content: @@ -255,12 +263,6 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Created image - content: - application/json: - schema: - $ref: '#/components/schemas/ImageDto' security: - bearerAuth: [] /api/container: @@ -282,7 +284,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/ContainerBriefDto' post: tags: - container-endpoint @@ -295,12 +299,6 @@ paths: $ref: '#/components/schemas/ContainerCreateRequestDto' required: true responses: - "502": - description: Docker client failed to connect - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "201": description: Created a new container content: @@ -319,6 +317,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "502": + description: Docker client failed to connect + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] components: @@ -328,8 +332,12 @@ components: - dialect - driver_class - jdbc_method + - registry type: object properties: + registry: + type: string + example: docker.io/library defaultPort: maximum: 65535 minimum: 1024 @@ -370,6 +378,84 @@ components: - password - privileged_username - privileged_password + ImageDateDto: + required: + - database_format + - example + - has_time + - id + - unix_format + type: object + properties: + id: + type: integer + format: int64 + example: + type: string + example: 30.01.2022 + database_format: + type: string + example: '%d.%c.%Y' + unix_format: + type: string + example: dd.MM.YYYY + has_time: + type: boolean + example: false + created_at: + type: string + format: date-time + ImageDto: + required: + - default_port + - dialect + - driver_class + - id + - jdbc_method + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + dialect: + type: string + example: org.hibernate.dialect.MariaDBDialect + hash: + type: string + example: sha256:c5ec7353d87dfc35067e7bffeb25d6a0d52dad41e8b7357213e3b12d6e7ff78e + compiled: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + size: + type: integer + example: 314295447 + driver_class: + type: string + example: org.mariadb.jdbc.Driver + date_formats: + type: array + items: + $ref: '#/components/schemas/ImageDateDto' + jdbc_method: + type: string + example: mariadb + default_port: + type: integer + format: int32 + example: 3306 ApiErrorDto: required: - code @@ -384,6 +470,7 @@ components: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS - 102 PROCESSING + - 103 EARLY_HINTS - 103 CHECKPOINT - 200 OK - 201 CREATED @@ -455,80 +542,6 @@ components: code: type: string example: error.service.code - ImageDateDto: - required: - - database_format - - example - - has_time - - id - - unix_format - type: object - properties: - id: - type: integer - format: int64 - example: - type: string - example: 30.01.2022 - database_format: - type: string - example: '%d.%c.%Y' - unix_format: - type: string - example: dd.MM.YYYY - has_time: - type: boolean - example: false - created_at: - type: string - format: date-time - ImageDto: - required: - - default_port - - dialect - - driver_class - - id - - jdbc_method - - repository - - tag - type: object - properties: - id: - type: integer - format: int64 - repository: - type: string - example: mariadb - tag: - type: string - example: "10.5" - dialect: - type: string - example: org.hibernate.dialect.MariaDBDialect - hash: - type: string - example: sha256:c5ec7353d87dfc35067e7bffeb25d6a0d52dad41e8b7357213e3b12d6e7ff78e - compiled: - type: string - format: date-time - example: 2021-03-12T15:26:21.678396092Z - size: - type: integer - example: 314295447 - driver_class: - type: string - example: org.mariadb.jdbc.Driver - date_formats: - type: array - items: - $ref: '#/components/schemas/ImageDateDto' - jdbc_method: - type: string - example: mariadb - default_port: - type: integer - format: int32 - example: 3306 ContainerChangeDto: required: - action @@ -570,188 +583,1125 @@ components: format: date-time internal_name: type: string - example: air-quality - CreatorBriefDto: - required: - - firstname - - lastname + example: air-quality + CreatorBriefDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + DatabaseBriefDto: + required: + - id + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + identifier: + $ref: '#/components/schemas/IdentifierBriefDto' + engine: + type: string + example: mariadb:10.5 + owner: + $ref: '#/components/schemas/UserBriefDto' + container: + $ref: '#/components/schemas/ContainerBriefDto' + creator: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + is_public: + type: boolean + example: true + IdentifierBriefDto: + required: + - container id + - creators + - database id + - id + - publication_year + - title + - type + type: object + properties: + id: + type: integer + format: int64 + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + type: + type: string + enum: + - database + - subset + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + creators: + type: array + items: + $ref: '#/components/schemas/CreatorBriefDto' + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + publication_year: + type: integer + format: int32 + example: 2022 + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ImageCreateDto: + required: + - default_port + - dialect + - driver_class + - jdbc_method + - registry + - repository + - tag + type: object + properties: + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + dialect: + type: string + environment: + type: array + items: + $ref: '#/components/schemas/ImageEnvItemDto' + driver_class: + type: string + jdbc_method: + type: string + default_port: + maximum: 65535 + minimum: 1024 + type: integer + format: int32 + ContainerCreateRequestDto: + required: + - name + - repository + - tag + type: object + properties: + name: + type: string + example: Air Quality + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + Constraints: + type: object + properties: + uniques: + type: array + items: + $ref: '#/components/schemas/Unique' + foreignKeys: + type: array + items: + $ref: '#/components/schemas/ForeignKey' + checks: + uniqueItems: true + type: array + items: + type: string + Container: + type: object + properties: + id: + type: integer + format: int64 + createdBy: + type: string + format: uuid + creator: + $ref: '#/components/schemas/User' + ownedBy: + type: string + format: uuid + owner: + $ref: '#/components/schemas/User' + name: + type: string + internalName: + type: string + hash: + type: string + imageId: + type: integer + format: int64 + port: + type: integer + format: int32 + database: + $ref: '#/components/schemas/Database' + image: + $ref: '#/components/schemas/ContainerImage' + ipAddress: + type: string + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ContainerImage: + type: object + properties: + id: + type: integer + format: int64 + repository: + type: string + registry: + type: string + tag: + type: string + driverClass: + type: string + dialect: + type: string + jdbcMethod: + type: string + hash: + type: string + compiled: + type: string + format: date-time + size: + type: integer + format: int64 + defaultPort: + type: integer + format: int32 + environment: + type: array + items: + $ref: '#/components/schemas/ContainerImageEnvironmentItem' + dateFormats: + type: array + items: + $ref: '#/components/schemas/ContainerImageDate' + containers: + type: array + items: + $ref: '#/components/schemas/Container' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ContainerImageDate: + type: object + properties: + id: + type: integer + format: int64 + iid: + type: integer + format: int64 + image: + $ref: '#/components/schemas/ContainerImage' + example: + type: string + hasTime: + type: boolean + databaseFormat: + type: string + unixFormat: + type: string + createdAt: + type: string + format: date-time + ContainerImageEnvironmentItem: + type: object + properties: + id: + type: integer + format: int64 + iid: + type: integer + format: int64 + key: + type: string + value: + type: string + type: + type: string + enum: + - USERNAME + - PASSWORD + - PRIVILEGED_USERNAME + - PRIVILEGED_PASSWORD + image: + $ref: '#/components/schemas/ContainerImage' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + Creator: + type: object + properties: + id: + type: integer + format: int64 + pid: + type: integer + format: int64 + firstname: + type: string + lastname: + type: string + affiliation: + type: string + orcid: + type: string + identifier: + $ref: '#/components/schemas/Identifier' + created: + type: string + format: date-time + creator: + $ref: '#/components/schemas/User' + lastModified: + type: string + format: date-time + Credential: + type: object + properties: + id: + type: string + format: uuid + type: + type: string + userId: + type: string + format: uuid + createdDate: + type: integer + format: int64 + secretData: + type: string + credentialData: + type: string + priority: + type: integer + format: int32 + user: + $ref: '#/components/schemas/User' + Database: + type: object + properties: + id: + type: integer + format: int64 + createdBy: + type: string + format: uuid + creator: + $ref: '#/components/schemas/User' + ownedBy: + type: string + format: uuid + owner: + $ref: '#/components/schemas/User' + container: + $ref: '#/components/schemas/Container' + name: + type: string + internalName: + type: string + exchangeName: + type: string + description: + type: string + contactPerson: + type: string + format: uuid + contact: + $ref: '#/components/schemas/User' + identifier: + $ref: '#/components/schemas/Identifier' + tables: + type: array + items: + $ref: '#/components/schemas/Table' + views: + type: array + items: + $ref: '#/components/schemas/View' + isPublic: + type: boolean + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ForeignKey: + type: object + properties: + fkid: + type: integer + format: int64 + tid: + type: integer + format: int64 + tdbid: + type: integer + format: int64 + table: + $ref: '#/components/schemas/Table' + rtid: + type: integer + format: int64 + rtdbid: + type: integer + format: int64 + referencedTable: + $ref: '#/components/schemas/Table' + references: + type: array + items: + $ref: '#/components/schemas/ForeignKeyReference' + onUpdate: + type: string + enum: + - ReferenceType.RESTRICT + - ReferenceType.CASCADE + - ReferenceType.SET_NULL + - ReferenceType.NO_ACTION + - ReferenceType.SET_DEFAULT + onDelete: + type: string + enum: + - ReferenceType.RESTRICT + - ReferenceType.CASCADE + - ReferenceType.SET_NULL + - ReferenceType.NO_ACTION + - ReferenceType.SET_DEFAULT + ForeignKeyReference: + type: object + properties: + id: + type: integer + format: int64 + foreignKey: + $ref: '#/components/schemas/ForeignKey' + column: + $ref: '#/components/schemas/TableColumn' + referencedColumn: + $ref: '#/components/schemas/TableColumn' + Identifier: + required: + - publisher + type: object + properties: + id: + type: integer + format: int64 + containerId: + type: integer + format: int64 + databaseId: + type: integer + format: int64 + queryId: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/User' + title: + type: string + description: + type: string + publisher: + type: string + language: + type: string + enum: + - LanguageType.AB + - LanguageType.AA + - LanguageType.AF + - LanguageType.AK + - LanguageType.SQ + - LanguageType.AM + - LanguageType.AR + - LanguageType.AN + - LanguageType.HY + - LanguageType.AS + - LanguageType.AV + - LanguageType.AE + - LanguageType.AY + - LanguageType.AZ + - LanguageType.BM + - LanguageType.BA + - LanguageType.EU + - LanguageType.BE + - LanguageType.BN + - LanguageType.BH + - LanguageType.BI + - LanguageType.BS + - LanguageType.BR + - LanguageType.BG + - LanguageType.MY + - LanguageType.CA + - LanguageType.KM + - LanguageType.CH + - LanguageType.CE + - LanguageType.NY + - LanguageType.ZH + - LanguageType.CU + - LanguageType.CV + - LanguageType.KW + - LanguageType.CO + - LanguageType.CR + - LanguageType.HR + - LanguageType.CS + - LanguageType.DA + - LanguageType.DV + - LanguageType.NL + - LanguageType.DZ + - LanguageType.EN + - LanguageType.EO + - LanguageType.ET + - LanguageType.EE + - LanguageType.FO + - LanguageType.FJ + - LanguageType.FI + - LanguageType.FR + - LanguageType.FF + - LanguageType.GD + - LanguageType.GL + - LanguageType.LG + - LanguageType.KA + - LanguageType.DE + - LanguageType.KI + - LanguageType.EL + - LanguageType.KL + - LanguageType.GN + - LanguageType.GU + - LanguageType.HT + - LanguageType.HA + - LanguageType.HE + - LanguageType.HZ + - LanguageType.HI + - LanguageType.HO + - LanguageType.HU + - LanguageType.IS + - LanguageType.IO + - LanguageType.IG + - LanguageType.ID + - LanguageType.IA + - LanguageType.IE + - LanguageType.IU + - LanguageType.IK + - LanguageType.GA + - LanguageType.IT + - LanguageType.JA + - LanguageType.JV + - LanguageType.KN + - LanguageType.KR + - LanguageType.KS + - LanguageType.KK + - LanguageType.RW + - LanguageType.KV + - LanguageType.KG + - LanguageType.KO + - LanguageType.KJ + - LanguageType.KU + - LanguageType.KY + - LanguageType.LO + - LanguageType.LA + - LanguageType.LV + - LanguageType.LB + - LanguageType.LI + - LanguageType.LN + - LanguageType.LT + - LanguageType.LU + - LanguageType.MK + - LanguageType.MG + - LanguageType.MS + - LanguageType.ML + - LanguageType.MT + - LanguageType.GV + - LanguageType.MI + - LanguageType.MR + - LanguageType.MH + - LanguageType.RO + - LanguageType.MN + - LanguageType.NA + - LanguageType.NV + - LanguageType.ND + - LanguageType.NG + - LanguageType.NE + - LanguageType.SE + - LanguageType.NO + - LanguageType.NB + - LanguageType.NN + - LanguageType.II + - LanguageType.OC + - LanguageType.OJ + - LanguageType.OR + - LanguageType.OM + - LanguageType.OS + - LanguageType.PI + - LanguageType.PA + - LanguageType.PS + - LanguageType.FA + - LanguageType.PL + - LanguageType.PT + - LanguageType.QU + - LanguageType.RM + - LanguageType.RN + - LanguageType.RU + - LanguageType.SM + - LanguageType.SG + - LanguageType.SA + - LanguageType.SC + - LanguageType.SR + - LanguageType.SN + - LanguageType.SD + - LanguageType.SI + - LanguageType.SK + - LanguageType.SL + - LanguageType.SO + - LanguageType.ST + - LanguageType.NR + - LanguageType.ES + - LanguageType.SU + - LanguageType.SW + - LanguageType.SS + - LanguageType.SV + - LanguageType.TL + - LanguageType.TY + - LanguageType.TG + - LanguageType.TA + - LanguageType.TT + - LanguageType.TE + - LanguageType.TH + - LanguageType.BO + - LanguageType.TI + - LanguageType.TO + - LanguageType.TS + - LanguageType.TN + - LanguageType.TR + - LanguageType.TK + - LanguageType.TW + - LanguageType.UG + - LanguageType.UK + - LanguageType.UR + - LanguageType.UZ + - LanguageType.VE + - LanguageType.VI + - LanguageType.VO + - LanguageType.WA + - LanguageType.CY + - LanguageType.FY + - LanguageType.WO + - LanguageType.XH + - LanguageType.YI + - LanguageType.YO + - LanguageType.ZA + - LanguageType.ZU + license: + $ref: '#/components/schemas/License' + type: + type: string + enum: + - DATABASE + - SUBSET + query: + type: string + queryNormalized: + type: string + queryHash: + type: string + resultHash: + type: string + execution: + type: string + format: date-time + resultNumber: + type: integer + format: int64 + publicationYear: + type: integer + format: int32 + publicationMonth: + type: integer + format: int32 + publicationDay: + type: integer + format: int32 + visibility: + type: string + enum: + - VisibilityType.EVERYONE + - VisibilityType.SELF + database: + $ref: '#/components/schemas/Database' + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifier' + doi: + type: string + creators: + type: array + items: + $ref: '#/components/schemas/Creator' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + License: + type: object + properties: + identifier: + type: string + uri: + type: string + RelatedIdentifier: + type: object + properties: + id: + type: integer + format: int64 + iid: + type: integer + format: int64 + value: + type: string + type: + type: string + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + creator: + $ref: '#/components/schemas/User' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + Role: type: object properties: - firstname: + id: type: string - example: Josiah - lastname: + format: uuid + name: type: string - example: Carberry - affiliation: + realmId: type: string - example: Wesleyan University - DatabaseBriefDto: - required: - - id - - name - - owner + format: uuid + users: + type: array + items: + $ref: '#/components/schemas/User' + Table: type: object properties: id: type: integer format: int64 + tdbid: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/User' + owner: + $ref: '#/components/schemas/User' name: type: string - example: Air Quality - description: + internalName: type: string - example: Air Quality in Austria - identifier: - $ref: '#/components/schemas/IdentifierBriefDto' - engine: + queueName: type: string - example: mariadb:10.5 - owner: - $ref: '#/components/schemas/UserBriefDto' - container: - $ref: '#/components/schemas/ContainerBriefDto' - creator: - $ref: '#/components/schemas/UserBriefDto' + routingKey: + type: string + description: + type: string + database: + $ref: '#/components/schemas/Database' + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + constraints: + $ref: '#/components/schemas/Constraints' created: type: string format: date-time - is_public: - type: boolean - example: true - IdentifierBriefDto: - required: - - container id - - creators - - database id - - id - - publication_year - - title - - type + lastModified: + type: string + format: date-time + TableColumn: type: object properties: id: type: integer format: int64 - title: + tid: + type: integer + format: int64 + cdbid: + type: integer + format: int64 + dfid: + type: integer + format: int64 + dateFormat: + $ref: '#/components/schemas/ContainerImageDate' + table: + $ref: '#/components/schemas/Table' + view: + $ref: '#/components/schemas/View' + creator: + $ref: '#/components/schemas/User' + name: type: string - example: "Airquality Stephansplatz, Vienna, Austria" - type: + autoGenerated: + type: boolean + internalName: type: string - enum: - - database - - subset - doi: + isPrimaryKey: + type: boolean + indexLength: + type: integer + format: int32 + alias: type: string - example: 10.1038/nphys1170 - publisher: + columnType: type: string - example: TU Wien - creators: + enum: + - TableColumnType.ENUM + - TableColumnType.NUMBER + - TableColumnType.DECIMAL + - TableColumnType.STRING + - TableColumnType.TEXT + - TableColumnType.BOOLEAN + - TableColumnType.DATE + - TableColumnType.TIMESTAMP + - TableColumnType.BLOB + length: + type: integer + format: int32 + isNullAllowed: + type: boolean + enumValues: type: array items: - $ref: '#/components/schemas/CreatorBriefDto' + type: string + ordinalPosition: + type: integer + format: int32 created: type: string format: date-time + concept: + $ref: '#/components/schemas/TableColumnConcept' + unit: + $ref: '#/components/schemas/TableColumnUnit' lastModified: type: string format: date-time - container id: + TableColumnConcept: + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + TableColumnUnit: + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + Unique: + type: object + properties: + uid: type: integer format: int64 - example: 1 - database id: + tid: type: integer format: int64 - example: 1 - query id: + tdbid: type: integer format: int64 - example: 1 - publication_year: - type: integer - format: int32 - example: 2022 - UserBriefDto: - required: - - id - - username + table: + $ref: '#/components/schemas/Table' + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + User: type: object properties: id: type: string format: uuid - example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 username: type: string - description: Only contains lowercase characters - example: jcarberry - name: + firstname: type: string - example: Josiah Carberry - orcid: + lastname: type: string - example: 0000-0002-1825-0097 - given_name: + realmId: type: string - example: Josiah - family_name: + format: uuid + email: type: string - example: Carberry - email_verified: + emailVerified: type: boolean - example: true - ImageCreateDto: - required: - - default_port - - dialect - - driver_class - - jdbc_method - - repository - - tag + enabled: + type: boolean + createdTimestamp: + type: integer + format: int64 + databasePassword: + type: string + attributes: + type: array + items: + $ref: '#/components/schemas/UserAttribute' + credentials: + type: array + items: + $ref: '#/components/schemas/Credential' + containers: + type: array + items: + $ref: '#/components/schemas/Container' + databases: + type: array + items: + $ref: '#/components/schemas/Database' + identifiers: + type: array + items: + $ref: '#/components/schemas/Identifier' + roles: + type: array + items: + $ref: '#/components/schemas/Role' + tables: + type: array + items: + $ref: '#/components/schemas/Table' + UserAttribute: type: object properties: - repository: - type: string - example: mariadb - tag: + id: type: string - dialect: + format: uuid + userId: type: string - environment: - type: array - items: - $ref: '#/components/schemas/ImageEnvItemDto' - driver_class: + format: uuid + name: type: string - jdbc_method: + value: type: string - default_port: - type: integer - format: int32 - ContainerCreateRequestDto: - required: - - name - - repository - - tag + user: + $ref: '#/components/schemas/User' + View: type: object properties: + id: + type: integer + format: int64 + vcid: + type: integer + format: int64 + vdbid: + type: integer + format: int64 + createdBy: + type: string + format: uuid + creator: + $ref: '#/components/schemas/User' + database: + $ref: '#/components/schemas/Database' name: type: string - example: Air Quality - repository: + internalName: type: string - example: mariadb - tag: + isPublic: + type: boolean + isInitialView: + type: boolean + query: type: string - example: "10.5" + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time ColumnBriefDto: required: - column_type + - database_id - id - internal_name - name + - table_id type: object properties: id: @@ -760,6 +1710,12 @@ components: name: type: string example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 internal_name: type: string example: mdb_date @@ -848,12 +1804,6 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time DatabaseAccessDto: required: - type @@ -967,7 +1917,6 @@ components: example: everyone enum: - everyone - - trusted - self doi: type: string @@ -1218,6 +2167,7 @@ components: ImageBriefDto: required: - id + - registry - repository - tag type: object @@ -1225,6 +2175,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1325,11 +2278,11 @@ components: TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -1341,7 +2294,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array diff --git a/swagger/database/api.yaml b/swagger/database/api.yaml index a9f5bff..40b7699 100644 --- a/swagger/database/api.yaml +++ b/swagger/database/api.yaml @@ -50,18 +50,18 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Visibility modification is not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "202": description: Visibility modified successfully content: application/json: schema: $ref: '#/components/schemas/DatabaseDto' + "405": + description: Visibility modification is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/container/{id}/database/{databaseId}/transfer: @@ -90,18 +90,18 @@ paths: $ref: '#/components/schemas/DatabaseTransferDto' required: true responses: - "404": - description: Database or user could not be found - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "202": description: Transfer of ownership was successful content: application/json: schema: $ref: '#/components/schemas/DatabaseDto' + "404": + description: Database or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "405": description: Transfer of ownership is not permitted content: @@ -141,20 +141,20 @@ paths: $ref: '#/components/schemas/DatabaseModifyAccessDto' required: true responses: - "202": - description: Modify access succeeded - "400": - description: Modify access query or database connection is malformed + "404": + description: Database or user not found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Database or user not found + "400": + description: Modify access query or database connection is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Modify access succeeded "403": description: Modify access not permitted when no access is granted in the first place @@ -188,32 +188,32 @@ paths: schema: type: string responses: - "202": - description: Revoked access successfully - "400": - description: Modify access query or database connection is malformed + "404": + description: User with access was not found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Revoke of access not permitted as no access was found + "400": + description: Modify access query or database connection is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: User with access was not found + "405": + description: Revoke of access not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Revoke of access not permitted + "403": + description: Revoke of access not permitted as no access was found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Revoked access successfully security: - bearerAuth: [] /api/container/{id}/database: @@ -235,7 +235,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/DatabaseBriefDto' post: tags: - database-endpoint @@ -255,26 +257,21 @@ paths: $ref: '#/components/schemas/DatabaseCreateDto' required: true responses: - "501": - description: Container image is not supported - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "201": description: Created a new database content: application/json: schema: $ref: '#/components/schemas/DatabaseBriefDto' - "502": - description: Connection to the container failed + "404": + description: "Container, user or database could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Database create query is malformed + "406": + description: Failed to create user at broker service or virtual host could + not be reached at broker service content: application/json: schema: @@ -286,27 +283,32 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Container, user or database could not be found" + "501": + description: Container image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Failed to create user at broker service or virtual host could - not be reached at broker service + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Database name already exist or query store could not be created + "502": + description: Connection to the container failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "400": + description: Database create query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Database name already exist or query store could not be created content: application/json: schema: @@ -333,18 +335,18 @@ paths: type: integer format: int64 responses: - "200": - description: Found database access - content: - application/json: - schema: - $ref: '#/components/schemas/DatabaseAccessDto' "403": description: No access to this database content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Found database access + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseAccessDto' "405": description: Check access is not permitted content: @@ -380,14 +382,14 @@ paths: responses: "202": description: Granting access succeeded - "400": - description: Granting access query or database connection is malformed + "405": + description: Granting access not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Granting access not permitted + "400": + description: Granting access query or database connection is malformed content: application/json: schema: @@ -420,12 +422,6 @@ paths: type: integer format: int64 responses: - "200": - description: Database found successfully - content: - application/json: - schema: - $ref: '#/components/schemas/DatabaseDto' "405": description: Database information is not permitted content: @@ -433,11 +429,17 @@ paths: schema: $ref: '#/components/schemas/ApiErrorDto' "404": - description: Database could not be found + description: Database or container could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Database found successfully + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseDto' security: - bearerAuth: [] delete: @@ -459,39 +461,33 @@ paths: type: integer format: int64 responses: - "201": - description: Deleted a database - content: - application/json: - schema: - $ref: '#/components/schemas/DatabaseBriefDto' - "405": - description: Database delete permission is missing or revoke permissions - at broker service failed + "400": + description: Database delete query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Container image is not supported + "404": + description: Container or database could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "502": - description: Connection to the container failed + "405": + description: Database delete permission is missing or revoke permissions + at broker service failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Database delete query is malformed + "501": + description: Container image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Container or database could not be found + "503": + description: Connection to the database failed content: application/json: schema: @@ -503,12 +499,18 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "502": + description: Connection to the container failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "201": + description: Deleted a database + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseBriefDto' security: - bearerAuth: [] /api/container/{id}/database/license: @@ -530,7 +532,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DatabaseBriefDto' + type: array + items: + $ref: '#/components/schemas/LicenseDto' components: schemas: DatabaseModifyVisibilityDto: @@ -555,6 +559,7 @@ components: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS - 102 PROCESSING + - 103 EARLY_HINTS - 103 CHECKPOINT - 200 OK - 201 CREATED @@ -629,9 +634,11 @@ components: ColumnBriefDto: required: - column_type + - database_id - id - internal_name - name + - table_id type: object properties: id: @@ -640,6 +647,12 @@ components: name: type: string example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 internal_name: type: string example: mdb_date @@ -728,12 +741,6 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time DatabaseAccessDto: required: - type @@ -847,7 +854,6 @@ components: example: everyone enum: - everyone - - trusted - self doi: type: string @@ -1098,6 +1104,7 @@ components: ImageBriefDto: required: - id + - registry - repository - tag type: object @@ -1105,6 +1112,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1145,6 +1155,7 @@ components: - driver_class - id - jdbc_method + - registry - repository - tag type: object @@ -1152,6 +1163,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1279,11 +1293,11 @@ components: TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -1295,7 +1309,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array @@ -1575,12 +1589,6 @@ components: type: array items: $ref: '#/components/schemas/CreatorBriefDto' - created: - type: string - format: date-time - lastModified: - type: string - format: date-time container id: type: integer format: int64 diff --git a/swagger/generate.sh b/swagger/generate.sh index 0b71390..a5ca801 100755 --- a/swagger/generate.sh +++ b/swagger/generate.sh @@ -2,20 +2,21 @@ declare -A services services[5000]=analyse -services[5010]=semantics services[9091]=container services[9092]=database services[9093]=query services[9094]=table services[9096]=identifier +services[9097]=semantics services[9098]=user services[9099]=metadata function retrieve () { - echo "... retrieve api" - if [[ "$2" == semantics ]] || [[ "$2" == analyse ]]; then + if [[ "$2" == analyse ]]; then + echo "... retrieve json api from localhost:$1" wget "http://localhost:$1/api-$2.json" -O "./api-$2.yaml" -q else + echo "... retrieve yaml api from localhost:$1" wget "http://localhost:$1/v3/api-docs.yaml" -O "./api-$2.yaml" -q fi } diff --git a/swagger/identifier/api.yaml b/swagger/identifier/api.yaml index a3326c7..002b392 100644 --- a/swagger/identifier/api.yaml +++ b/swagger/identifier/api.yaml @@ -18,10 +18,10 @@ servers: - url: https://dbrepo2.tuwien.ac.at description: Sandbox paths: - /api/identifier/{id}: + /api/pid/{id}: put: tags: - - identifier-endpoint + - persistence-endpoint summary: Update some identifier operationId: update parameters: @@ -35,11 +35,11 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/IdentifierDto' + $ref: '#/components/schemas/IdentifierUpdateDto' required: true responses: - "404": - description: Identifier could not be found + "405": + description: Updating identifier not permitted content: application/json: schema: @@ -50,6 +50,18 @@ paths: application/json: schema: $ref: '#/components/schemas/IdentifierDto' + "404": + description: Identifier or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Identifier data is not valid to the form + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "406": description: Updating identifier not allowed content: @@ -60,7 +72,7 @@ paths: - bearerAuth: [] delete: tags: - - identifier-endpoint + - persistence-endpoint summary: Delete some identifier operationId: delete parameters: @@ -77,6 +89,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Deleting identifier not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "202": description: Deleted identifier security: @@ -114,7 +132,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/IdentifierDto' post: tags: - identifier-endpoint @@ -133,20 +153,14 @@ paths: $ref: '#/components/schemas/IdentifierCreateDto' required: true responses: - "201": - description: Created identifier - content: - application/json: - schema: - $ref: '#/components/schemas/IdentifierDto' - "404": - description: "Query, database or user could not be found" + "406": + description: Creating identifier not allowed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Identifier for this resource already exists + "400": + description: Identifier form contains invalid request data content: application/json: schema: @@ -157,14 +171,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Creating identifier not allowed + "201": + description: Created identifier content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Identifier form contains invalid request data + $ref: '#/components/schemas/IdentifierDto' + "403": + description: Insufficient access rights or authorities content: application/json: schema: @@ -175,6 +189,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Identifier for this resource already exists + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/pid/{pid}: @@ -208,6 +228,13 @@ paths: text/bibliography; style=apa: {} text/bibliography; style=ieee: {} text/bibliography; style=bibtex: {} + "404": + description: Identifier could not be exported from database as the resource + was not found + content: + text/csv: + schema: + $ref: '#/components/schemas/ApiErrorDto' "400": description: "Identifier could not be exported, the requested style is not\ \ known" @@ -221,13 +248,6 @@ paths: text/csv: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Identifier could not be exported from database as the resource - was not found - content: - text/csv: - schema: - $ref: '#/components/schemas/ApiErrorDto' components: schemas: CreatorDto: @@ -252,32 +272,29 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time - IdentifierDto: + IdentifierUpdateDto: required: - - container id + - cid - creators - - database id - - execution + - dbid - publication_year - - query - - query_hash - - query_normalized - - result_hash - - result_number - title - type - visibility type: object properties: - id: + cid: + type: integer + format: int64 + dbid: type: integer format: int64 + qid: + type: integer + format: int64 + doi: + type: string + example: 10.1038/nphys1170 type: type: string enum: @@ -289,23 +306,12 @@ components: description: type: string example: "Air quality reports at Stephansplatz, Vienna" - query: - type: string - example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ - \ = \"09:STEF\"" - execution: - type: string - format: date-time visibility: type: string example: everyone enum: - everyone - - trusted - self - doi: - type: string - example: 10.1038/nphys1170 publisher: type: string example: TU Wien @@ -502,38 +508,6 @@ components: type: array items: $ref: '#/components/schemas/CreatorDto' - created: - type: string - format: date-time - container id: - type: integer - format: int64 - example: 1 - database id: - type: integer - format: int64 - example: 1 - query id: - type: integer - format: int64 - example: 1 - query_normalized: - type: string - example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ - \ = \"09:STEF\"" - related: - type: array - items: - $ref: '#/components/schemas/RelatedIdentifierDto' - query_hash: - type: string - description: query hash in sha512 - result_hash: - type: string - result_number: - type: integer - format: int64 - example: 1 publication_day: type: integer format: int32 @@ -546,9 +520,10 @@ components: type: integer format: int32 example: 2022 - last_modified: - type: string - format: date-time + related_identifiers: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierCreateDto' LicenseDto: required: - identifier @@ -561,16 +536,11 @@ components: uri: type: string example: https://opensource.org/licenses/MIT - RelatedIdentifierDto: + RelatedIdentifierCreateDto: required: - - created - - id - value type: object properties: - id: - type: integer - format: int64 value: type: string example: 10.70124/dc4zh-9ce78 @@ -634,12 +604,6 @@ components: - Requires - IsObsoletedBy - Obsoletes - created: - type: string - format: date-time - last_modified: - type: string - format: date-time ApiErrorDto: required: - code @@ -654,6 +618,7 @@ components: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS - 102 PROCESSING + - 103 EARLY_HINTS - 103 CHECKPOINT - 200 OK - 201 CREATED @@ -725,41 +690,24 @@ components: code: type: string example: error.service.code - CreatorCreateDto: - required: - - firstname - - lastname - type: object - properties: - firstname: - type: string - example: Josiah - lastname: - type: string - example: Carberry - affiliation: - type: string - example: Wesleyan University - orcid: - type: string - example: 0000-0002-1825-0097 - IdentifierCreateDto: + IdentifierDto: required: - - cid + - container id - creators - - dbid + - database id + - execution - publication_year + - query + - query_hash + - query_normalized + - result_hash + - result_number - title - type + - visibility type: object properties: - cid: - type: integer - format: int64 - dbid: - type: integer - format: int64 - qid: + id: type: integer format: int64 type: @@ -773,6 +721,22 @@ components: description: type: string example: "Air quality reports at Stephansplatz, Vienna" + query: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + execution: + type: string + format: date-time + visibility: + type: string + example: everyone + enum: + - everyone + - self + doi: + type: string + example: 10.1038/nphys1170 publisher: type: string example: TU Wien @@ -968,7 +932,39 @@ components: creators: type: array items: - $ref: '#/components/schemas/CreatorCreateDto' + $ref: '#/components/schemas/CreatorDto' + created: + type: string + format: date-time + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + query_normalized: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierDto' + query_hash: + type: string + description: query hash in sha512 + result_hash: + type: string + result_number: + type: integer + format: int64 + example: 1 publication_day: type: integer format: int32 @@ -981,15 +977,19 @@ components: type: integer format: int32 example: 2022 - related_identifiers: - type: array - items: - $ref: '#/components/schemas/RelatedIdentifierCreateDto' - RelatedIdentifierCreateDto: + last_modified: + type: string + format: date-time + RelatedIdentifierDto: required: + - created + - id - value type: object properties: + id: + type: integer + format: int64 value: type: string example: 10.70124/dc4zh-9ce78 @@ -1053,6 +1053,279 @@ components: - Requires - IsObsoletedBy - Obsoletes + created: + type: string + format: date-time + last_modified: + type: string + format: date-time + CreatorCreateDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + orcid: + type: string + example: 0000-0002-1825-0097 + IdentifierCreateDto: + required: + - cid + - creators + - dbid + - publication_year + - title + - type + - visibility + type: object + properties: + cid: + type: integer + format: int64 + dbid: + type: integer + format: int64 + qid: + type: integer + format: int64 + type: + type: string + enum: + - database + - subset + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + visibility: + type: string + example: everyone + enum: + - everyone + - self + publisher: + type: string + example: TU Wien + language: + type: string + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + license: + $ref: '#/components/schemas/LicenseDto' + creators: + type: array + items: + $ref: '#/components/schemas/CreatorCreateDto' + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + related_identifiers: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierCreateDto' securitySchemes: bearerAuth: type: http diff --git a/swagger/metadata/api.yaml b/swagger/metadata/api.yaml index 6ce0126..bc1c717 100644 --- a/swagger/metadata/api.yaml +++ b/swagger/metadata/api.yaml @@ -52,11 +52,11 @@ components: type: string resumptionToken: type: string - parametersString: - type: string fromDate: type: string format: date-time untilDate: type: string format: date-time + parametersString: + type: string diff --git a/swagger/query/api.yaml b/swagger/query/api.yaml index a40d3d7..16168d9 100644 --- a/swagger/query/api.yaml +++ b/swagger/query/api.yaml @@ -23,7 +23,7 @@ paths: tags: - table-history-endpoint summary: Find all history - operationId: getAll_1 + operationId: getAll parameters: - name: id in: path @@ -44,38 +44,40 @@ paths: type: integer format: int64 responses: - "504": - description: Query store failed to query table history + "405": + description: Find table history is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Table history query is malformed + "200": + description: Find table history successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + type: array + items: + $ref: '#/components/schemas/TableHistoryDto' + "404": + description: "Table, database or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find table history successfully + "504": + description: Query store failed to query table history content: application/json: schema: - type: string - "404": - description: "Table, database or user could not be found" + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find table history is not permitted + "400": + description: Table history query is malformed content: application/json: schema: @@ -86,7 +88,7 @@ paths: tags: - table-history-endpoint summary: Find all history - operationId: getAll + operationId: getAll_1 parameters: - name: id in: path @@ -107,38 +109,40 @@ paths: type: integer format: int64 responses: - "504": - description: Query store failed to query table history + "405": + description: Find table history is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Table history query is malformed + "200": + description: Find table history successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + type: array + items: + $ref: '#/components/schemas/TableHistoryDto' + "404": + description: "Table, database or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find table history successfully + "504": + description: Query store failed to query table history content: application/json: schema: - type: string - "404": - description: "Table, database or user could not be found" + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find table history is not permitted + "400": + description: Table history query is malformed content: application/json: schema: @@ -150,7 +154,7 @@ paths: tags: - table-data-endpoint summary: Find data - operationId: getAll_3 + operationId: getAll_2 parameters: - name: id in: path @@ -320,7 +324,7 @@ paths: tags: - table-data-endpoint summary: Find data - operationId: getAll_2 + operationId: getAll_3 parameters: - name: id in: path @@ -406,26 +410,20 @@ paths: type: integer format: int64 responses: - "405": - description: Find query is not permitted + "200": + description: List queries content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/QueryDto' "404": description: "Database, query or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: List queries - content: - application/json: - schema: - $ref: '#/components/schemas/QueryDto' - "503": - description: Connection to the database failed + "405": + description: Find query is not permitted content: application/json: schema: @@ -442,6 +440,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] put: @@ -475,6 +479,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' "200": description: Persist query successful content: @@ -487,8 +497,8 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "504": + description: Query store failed to persist query content: application/json: schema: @@ -499,12 +509,6 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Query store failed to persist query - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/container/{id}/database/{databaseId}/view: @@ -544,7 +548,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/ViewBriefDto' security: - bearerAuth: [] post: @@ -578,20 +584,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Create view is not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "404": + description: Database or user could not be found content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Create view query is malformed + "405": + description: Create view is not permitted content: application/json: schema: @@ -602,24 +602,30 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Database or user could not be found + "201": + description: Create view successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/ViewBriefDto' "423": description: Create view resulted in an invalid query statement content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Create view successfully + "400": + description: Create view query is malformed content: application/json: schema: - $ref: '#/components/schemas/ViewBriefDto' + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] /api/container/{id}/database/{databaseId}/table/{tableId}/data/import: @@ -683,49 +689,51 @@ paths: schema: type: boolean responses: - "200": - description: List queries + "405": + description: Find all queries is not permitted content: application/json: schema: - type: string - "503": - description: Connection to the database failed + $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find all queries is not permitted + "504": + description: Query store failed to select query content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Selection of time-versioned query resulted in an invalid query - statement + "404": + description: "Database, container or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "423": + description: Selection of time-versioned query resulted in an invalid query + statement content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Database, container or user could not be found" + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Query store failed to select query + "200": + description: List queries content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + type: array + items: + $ref: '#/components/schemas/QueryBriefDto' security: - bearerAuth: [] post: @@ -812,12 +820,6 @@ paths: type: integer format: int64 responses: - "405": - description: Find view is not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "200": description: Find view successfully content: @@ -830,6 +832,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Find view is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] delete: @@ -863,40 +871,40 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "403": + description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Credentials missing + "404": + description: "Database, view or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Delete view is not permitted + "400": + description: Delete view query is malformed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "200": description: Delete view successfully - "404": - description: "Database, view or user could not be found" + "423": + description: Delete view resulted in an invalid query statement content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Delete view query is malformed + "503": + description: Connection to the database failed content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Delete view resulted in an invalid query statement + "405": + description: Delete view is not permitted content: application/json: schema: @@ -941,14 +949,14 @@ paths: type: integer format: int64 responses: - "401": - description: Credentials missing + "200": + description: Find data successfully content: application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Query store failed to query view data + $ref: '#/components/schemas/QueryResultDto' + "401": + description: Credentials missing content: application/json: schema: @@ -959,26 +967,26 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "503": - description: Connection to the database failed + "403": + description: Credentials missing content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: Find data successfully + "417": + description: Parsing of resulting columns failed content: application/json: schema: - $ref: '#/components/schemas/QueryResultDto' - "403": - description: Credentials missing + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Query store failed to query view data content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "404": + description: "Database, view, container or user could not be found" content: application/json: schema: @@ -989,20 +997,20 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Database, view, container or user could not be found" + "501": + description: Image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Parsing of resulting columns failed + "405": + description: Find data is not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Find data is not permitted + "503": + description: Connection to the database failed content: application/json: schema: @@ -1275,6 +1283,7 @@ components: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS - 102 PROCESSING + - 103 EARLY_HINTS - 103 CHECKPOINT - 200 OK - 201 CREATED @@ -1346,6 +1355,22 @@ components: code: type: string example: error.service.code + TableHistoryDto: + required: + - event + - timestamp + - total + type: object + properties: + timestamp: + type: string + format: date-time + event: + type: string + total: + type: integer + format: int64 + example: 1 QueryResultDto: required: - id @@ -1382,9 +1407,11 @@ components: ColumnBriefDto: required: - column_type + - database_id - id - internal_name - name + - table_id type: object properties: id: @@ -1393,6 +1420,12 @@ components: name: type: string example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 internal_name: type: string example: mdb_date @@ -1481,12 +1514,6 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time DatabaseAccessDto: required: - type @@ -1600,7 +1627,6 @@ components: example: everyone enum: - everyone - - trusted - self doi: type: string @@ -1851,6 +1877,7 @@ components: ImageBriefDto: required: - id + - registry - repository - tag type: object @@ -1858,6 +1885,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1898,6 +1928,7 @@ components: - driver_class - id - jdbc_method + - registry - repository - tag type: object @@ -1905,6 +1936,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -2091,11 +2125,11 @@ components: TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -2107,7 +2141,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array @@ -2352,6 +2386,124 @@ components: last_modified: type: string format: date-time + CreatorBriefDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + IdentifierBriefDto: + required: + - container id + - creators + - database id + - id + - publication_year + - title + - type + type: object + properties: + id: + type: integer + format: int64 + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + type: + type: string + enum: + - database + - subset + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + creators: + type: array + items: + $ref: '#/components/schemas/CreatorBriefDto' + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + publication_year: + type: integer + format: int32 + example: 2022 + QueryBriefDto: + required: + - cid + - created + - creator + - dbid + - id + - query + - query_hash + type: object + properties: + id: + type: integer + format: int64 + cid: + type: integer + format: int64 + dbid: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/UserDto' + execution: + type: string + format: date-time + query: + type: string + example: SELECT `id` FROM `air_quality` + type: + type: string + example: query + enum: + - query + - view + identifier: + $ref: '#/components/schemas/IdentifierBriefDto' + created: + type: string + format: date-time + query_normalized: + type: string + example: SELECT `id` FROM `air_quality` + query_hash: + type: string + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + result_hash: + type: string + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + result_number: + type: integer + format: int64 + example: 1 + last_modified: + type: string + format: date-time TableCsvDeleteDto: required: - keys diff --git a/swagger/semantics/api.yaml b/swagger/semantics/api.yaml index 20727fd..c001c6d 100644 --- a/swagger/semantics/api.yaml +++ b/swagger/semantics/api.yaml @@ -1 +1,685 @@ -{"definitions":{},"externalDocs":{"description":"Sourcecode Documentation","url":"https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services"},"info":{"contact":{"email":"andreas.rauber@tuwien.ac.at","name":"Prof. Andreas Rauber"},"description":"Service for assigning concepts to database tables and columns.","license":{"name":"Apache 2.0","url":"https://www.apache.org/licenses/LICENSE-2.0"},"title":"Database Repository Unit / Ontology Service API","version":"1.2.0"},"openapi":"3.0.0","paths":{"/api/semantics/concept":{"get":{"consumes":["application/json"],"description":"This is a simple API which returns a list of suggested concepts.","parameters":[{"description":"The query to retrieve a fitting concept","in":"query","name":"q","schema":{"type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Suggest a concept","tags":["concepts-endpoint"]},"post":{"consumes":["application/json"],"description":"This is a simple API for saving concept","produces":["application/json"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"name":{"example":"metre","type":"string"},"uri":{"example":"http://www.ontology-of-units-of-measure.org/resource/om-2/metre","type":"string"}},"required":["uri","name"],"type":"object"}}}},"responses":{"200":{"description":"OK"},"201":{"description":"Created"},"405":{"description":"Invalid input"},"409":{"description":"Concept already present"}},"summary":"Save concept to MDB","tags":["concepts-endpoint"]},"put":{"consumes":["application/json"],"description":"This is a simple API for retrieving label from concepts","produces":["application/json"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"uri":{"example":"http://www.wikidata.org/entity/Q35120","type":"string"}},"required":["uri","name"],"type":"object"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid URI"},"500":{"description":"Server error"}},"summary":"Retrieve label from URI","tags":["concepts-endpoint"]}},"/api/semantics/concept/{concept}/validate":{"get":{"consumes":["application/json"],"description":"This is a simple API for validating concepts.","parameters":[{"description":"Validates concepts against om-2.","in":"path","name":"unit","required":true,"schema":{"example":"distance","type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Validate concepts","tags":["concepts-endpoint"]}},"/api/semantics/ontology":{"get":{"consumes":["application/json"],"description":"This is a simple API for listing all ontologies (.nt, .ttl files) used in DB-Repo.","produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"List ontologies","tags":["ontologies-endpoint"]}},"/api/semantics/ontology/{name}":{"get":{"consumes":["application/json"],"description":"This is a simple API for getting a certain ontologies (.nt, .ttl files) stored in DB-Repo.","parameters":[{"in":"path","name":"o_name","required":true,"schema":{"example":"VOCAB_QUDT-UNITS-ALL-v2.1","type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"404":{"description":"Not found"},"405":{"description":"Invalid input"}},"summary":"Get ontology","tags":["ontologies-endpoint"]}},"/api/semantics/unit":{"get":{"consumes":["application/json"],"description":"This is a simple API which returns a list of suggested units.","parameters":[{"description":"The query to retrieve a fitting unit","in":"query","name":"q","schema":{"type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Suggest a unit","tags":["units-endpoint"]},"post":{"consumes":["application/json"],"description":"This is a simple API for saving units","produces":["application/json"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"name":{"example":"second","type":"string"},"uri":{"example":"http://www.ontology-of-units-of-measure.org/resource/om-2/second-Time","type":"string"}},"required":["uri","name"],"type":"object"}}}},"responses":{"200":{"description":"OK"},"201":{"description":"Created"},"405":{"description":"Invalid input"},"409":{"description":"Concept already present"}},"summary":"Save unit to MDB","tags":["units-endpoint"]},"put":{"consumes":["application/json"],"description":"This is a simple API for retrieving label from units","produces":["application/json"],"requestBody":{"content":{"application/json":{"schema":{"properties":{"uri":{"example":"http://www.ontology-of-units-of-measure.org/resource/om-2/second-Time","type":"string"}},"required":["uri","name"],"type":"object"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid URI"},"404":{"description":"Unit not found"},"500":{"description":"Server error"}},"summary":"Retrieve label from URI","tags":["units-endpoint"]}},"/api/semantics/unit/{unit}/validate":{"get":{"consumes":["application/json"],"description":"This is a simple API for validating units.","parameters":[{"description":"Validates unit against om-2.","in":"path","name":"unit","required":true,"schema":{"example":"metre","type":"string"}}],"produces":["application/json"],"responses":{"200":{"description":"OK"},"405":{"description":"Invalid input"}},"summary":"Validate units","tags":["units-endpoint"]}}},"servers":[{"description":"Generated server url","url":"http://localhost:5010"},{"description":"Sandbox","url":"https://dbrepo2.ec.tuwien.ac.at"}]} +openapi: 3.0.1 +info: + title: Database Repository Semantic Service API + description: Service that manages the tables + contact: + name: Prof. Andreas Rauber + email: andreas.rauber@tuwien.ac.at + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + version: 1.2.0 +externalDocs: + description: Sourcecode Documentation + url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +servers: +- url: http://localhost:9097 + description: Generated server url +- url: https://dbrepo2.tuwien.ac.at + description: Sandbox +paths: + /api/semantic/ontology/{id}: + get: + tags: + - ontology-endpoint + summary: Find one ontology + operationId: find + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: Find one ontology + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + put: + tags: + - ontology-endpoint + summary: Update an ontology + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyModifyDto' + required: true + responses: + "202": + description: Updated ontology successfully + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + delete: + tags: + - ontology-endpoint + summary: Delete an ontology + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "202": + description: Deleted ontology successfully + content: + application/json: {} + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/semantic/unit: + get: + tags: + - semantics-endpoint + summary: List semantic units + operationId: findAllUnits + responses: + "200": + description: Find all semantic units + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UnitDto' + post: + tags: + - semantics-endpoint + summary: Save a semantic unit + operationId: saveUnit + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UnitSaveDto' + required: true + responses: + "202": + description: Saved a semantic unit + content: + application/json: + schema: + $ref: '#/components/schemas/UnitDto' + security: + - bearerAuth: [] + /api/semantic/ontology: + get: + tags: + - ontology-endpoint + summary: List all ontologies + operationId: findAll + responses: + "200": + description: List all ontologies + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/OntologyDto' + post: + tags: + - ontology-endpoint + summary: Register a new ontology + operationId: create + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyCreateDto' + required: true + responses: + "201": + description: Registered ontology successfully + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyDto' + security: + - bearerAuth: [] + /api/semantic/concept: + get: + tags: + - semantics-endpoint + summary: List semantic concepts + operationId: findAllConcepts + responses: + "200": + description: Find all semantic concepts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ConceptDto' + post: + tags: + - semantics-endpoint + summary: Create or update a semantic concept + operationId: saveUnit_1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConceptSaveDto' + required: true + responses: + "202": + description: Saved a semantic concept + content: + application/json: + schema: + $ref: '#/components/schemas/ConceptDto' + security: + - bearerAuth: [] + /api/semantic/ontology/{id}/entity: + get: + tags: + - query-endpoint + summary: Find entities + operationId: find_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: label + in: query + required: false + schema: + type: string + - name: uri + in: query + required: false + schema: + type: string + responses: + "200": + description: Found entities + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/EntityDto' + "417": + description: Generated query or uri is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Filter params are invalid + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/semantic/database/{databaseId}/table/{tableId}: + get: + tags: + - table-endpoint + summary: Suggest table semantics + operationId: analyseTable + parameters: + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "417": + description: Generated query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Could not find the table + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Suggested table semantics successfully + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TableColumnEntityDto' + security: + - bearerAuth: [] + /api/semantic/database/{databaseId}/table/{tableId}/column/{columnId}: + get: + tags: + - table-endpoint + summary: Suggest table column semantics + operationId: analyseTableColumn + parameters: + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + - name: columnId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "417": + description: Generated query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Suggested table column semantics successfully + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TableColumnEntityDto' + "404": + description: Could not find the table column + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] +components: + schemas: + OntologyModifyDto: + required: + - prefix + - uri + type: object + properties: + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + OntologyDto: + required: + - created + - id + - prefix + - rdf + - sparql + - uri + type: object + properties: + id: + type: integer + format: int64 + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql: + type: boolean + example: true + rdf: + type: boolean + example: true + creator: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + UnitSaveDto: + required: + - description + - name + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + UnitDto: + required: + - columns + - created + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + OntologyCreateDto: + required: + - prefix + - uri + type: object + properties: + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + ConceptSaveDto: + required: + - description + - name + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + ConceptDto: + required: + - columns + - created + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + EntityDto: + required: + - label + - uri + type: object + properties: + uri: + type: string + example: https://www.wikidata.org/entity/Q1686799 + label: + type: string + example: Apache Jena + description: + type: string + example: open source semantic web framework for Java + TableColumnEntityDto: + required: + - columnId + - databaseId + - tableId + - uri + type: object + properties: + databaseId: + type: integer + format: int64 + example: 1 + tableId: + type: integer + format: int64 + example: 1 + columnId: + type: integer + format: int64 + example: 1 + uri: + type: string + example: https://www.wikidata.org/entity/Q1686799 + label: + type: string + example: Apache Jena + description: + type: string + example: open source semantic web framework for Java + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/swagger/table/api.yaml b/swagger/table/api.yaml index f0807a9..9639c5f 100644 --- a/swagger/table/api.yaml +++ b/swagger/table/api.yaml @@ -49,6 +49,11 @@ paths: schema: type: integer format: int64 + - name: Authorization + in: header + required: true + schema: + type: string requestBody: content: application/json: @@ -56,19 +61,6 @@ paths: $ref: '#/components/schemas/ColumnSemanticsUpdateDto' required: true responses: - "405": - description: Update column semantics not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ColumnDto' - "400": - description: Update semantic concept query is malformed or update unit of - measurement query is malformed - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' "404": description: "Table, database, semantic concept, unit of measurement or\ \ container could not be found" @@ -88,6 +80,19 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Update semantic concept query is malformed or update unit of + measurement query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Update column semantics not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ColumnDto' security: - bearerAuth: [] /api/container/{id}/database/{databaseId}/table: @@ -127,7 +132,9 @@ paths: content: application/json: schema: - type: string + type: array + items: + $ref: '#/components/schemas/TableBriefDto' security: - bearerAuth: [] post: @@ -155,32 +162,26 @@ paths: $ref: '#/components/schemas/TableCreateDto' required: true responses: - "409": - description: Create table conflicts with existing table name + "501": + description: Image is not supported content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Database, container or user could not be found" + "504": + description: Broker service failed to create queue content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "404": + description: "Database, container or user could not be found" content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "201": - description: Created a new table - content: - application/json: - schema: - $ref: '#/components/schemas/TableBriefDto' - "400": - description: Create table query is malformed + "409": + description: Create table conflicts with existing table name content: application/json: schema: @@ -191,8 +192,14 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "504": - description: Broker service failed to create queue + "201": + description: Created a new table + content: + application/json: + schema: + $ref: '#/components/schemas/TableBriefDto' + "400": + description: Create table query is malformed content: application/json: schema: @@ -237,14 +244,14 @@ paths: application/json: schema: $ref: '#/components/schemas/TableDto' - "404": - description: "Table, database or container could not be found" + "403": + description: Access to the database is forbidden content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "403": - description: Access to the database is forbidden + "404": + description: "Table, database or container could not be found" content: application/json: schema: @@ -276,14 +283,8 @@ paths: type: integer format: int64 responses: - "405": - description: Delete table not permitted - content: - application/json: - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Delete table resulted in an invalid state + "501": + description: Image is not supported content: application/json: schema: @@ -294,20 +295,20 @@ paths: application/json: schema: $ref: '#/components/schemas/TableDto' - "400": - description: Delete table query resulted in an invalid query statement + "405": + description: Delete table not permitted content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "501": - description: Image is not supported + "423": + description: Delete table resulted in an invalid state content: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "404": - description: "Table, database or container could not be found" + "400": + description: Delete table query resulted in an invalid query statement content: application/json: schema: @@ -318,6 +319,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + "404": + description: "Table, database or container could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' security: - bearerAuth: [] components: @@ -329,6 +336,130 @@ components: type: string unit_uri: type: string + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob ColumnDto: required: - auto_generated @@ -394,8 +525,8 @@ components: type: string ConceptDto: required: + - columns - created - - name - uri type: object properties: @@ -403,9 +534,15 @@ components: type: string name: type: string + description: + type: string created: type: string format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' ImageDateDto: required: - database_format @@ -435,8 +572,8 @@ components: format: date-time UnitDto: required: + - columns - created - - name - uri type: object properties: @@ -444,94 +581,15 @@ components: type: string name: type: string + description: + type: string created: type: string format: date-time - ApiErrorDto: - required: - - code - - message - - status - type: object - properties: - status: - type: string - example: STATUS - enum: - - 100 CONTINUE - - 101 SWITCHING_PROTOCOLS - - 102 PROCESSING - - 103 CHECKPOINT - - 200 OK - - 201 CREATED - - 202 ACCEPTED - - 203 NON_AUTHORITATIVE_INFORMATION - - 204 NO_CONTENT - - 205 RESET_CONTENT - - 206 PARTIAL_CONTENT - - 207 MULTI_STATUS - - 208 ALREADY_REPORTED - - 226 IM_USED - - 300 MULTIPLE_CHOICES - - 301 MOVED_PERMANENTLY - - 302 FOUND - - 302 MOVED_TEMPORARILY - - 303 SEE_OTHER - - 304 NOT_MODIFIED - - 305 USE_PROXY - - 307 TEMPORARY_REDIRECT - - 308 PERMANENT_REDIRECT - - 400 BAD_REQUEST - - 401 UNAUTHORIZED - - 402 PAYMENT_REQUIRED - - 403 FORBIDDEN - - 404 NOT_FOUND - - 405 METHOD_NOT_ALLOWED - - 406 NOT_ACCEPTABLE - - 407 PROXY_AUTHENTICATION_REQUIRED - - 408 REQUEST_TIMEOUT - - 409 CONFLICT - - 410 GONE - - 411 LENGTH_REQUIRED - - 412 PRECONDITION_FAILED - - 413 PAYLOAD_TOO_LARGE - - 413 REQUEST_ENTITY_TOO_LARGE - - 414 URI_TOO_LONG - - 414 REQUEST_URI_TOO_LONG - - 415 UNSUPPORTED_MEDIA_TYPE - - 416 REQUESTED_RANGE_NOT_SATISFIABLE - - 417 EXPECTATION_FAILED - - 418 I_AM_A_TEAPOT - - 419 INSUFFICIENT_SPACE_ON_RESOURCE - - 420 METHOD_FAILURE - - 421 DESTINATION_LOCKED - - 422 UNPROCESSABLE_ENTITY - - 423 LOCKED - - 424 FAILED_DEPENDENCY - - 425 TOO_EARLY - - 426 UPGRADE_REQUIRED - - 428 PRECONDITION_REQUIRED - - 429 TOO_MANY_REQUESTS - - 431 REQUEST_HEADER_FIELDS_TOO_LARGE - - 451 UNAVAILABLE_FOR_LEGAL_REASONS - - 500 INTERNAL_SERVER_ERROR - - 501 NOT_IMPLEMENTED - - 502 BAD_GATEWAY - - 503 SERVICE_UNAVAILABLE - - 504 GATEWAY_TIMEOUT - - 505 HTTP_VERSION_NOT_SUPPORTED - - 506 VARIANT_ALSO_NEGOTIATES - - 507 INSUFFICIENT_STORAGE - - 508 LOOP_DETECTED - - 509 BANDWIDTH_LIMIT_EXCEEDED - - 510 NOT_EXTENDED - - 511 NETWORK_AUTHENTICATION_REQUIRED - message: - type: string - example: Error message - code: - type: string - example: error.service.code + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' ColumnCreateDto: required: - name @@ -644,44 +702,14 @@ components: $ref: '#/components/schemas/ColumnCreateDto' constraints: $ref: '#/components/schemas/ConstraintsCreateDto' - ColumnBriefDto: - required: - - column_type - - id - - internal_name - - name - type: object - properties: - id: - type: integer - format: int64 - name: - type: string - example: date - internal_name: - type: string - example: mdb_date - column_type: - type: string - example: date - enum: - - enum - - number - - decimal - - string - - text - - boolean - - date - - timestamp - - blob TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -693,7 +721,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array @@ -786,6 +814,7 @@ components: - internal_name - is_public - name + - owner - queue_name - routing_key type: object @@ -798,6 +827,8 @@ components: example: Air Quality creator: $ref: '#/components/schemas/UserBriefDto' + owner: + $ref: '#/components/schemas/UserBriefDto' description: type: string example: Air Quality in Austria diff --git a/swagger/user/api.yaml b/swagger/user/api.yaml index eb32257..56bd25f 100644 --- a/swagger/user/api.yaml +++ b/swagger/user/api.yaml @@ -29,58 +29,22 @@ paths: schema: type: string responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' "404": - description: Not Found + description: User was not found content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict - content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "405": - description: Method Not Allowed - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + description: Find user is not permitted content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable - content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "200": - description: OK + description: Found user content: - '*/*': + application/json: schema: $ref: '#/components/schemas/UserDto' security: @@ -103,60 +67,24 @@ paths: $ref: '#/components/schemas/UserUpdateDto' required: true responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Not Found + "202": + description: Modified user information content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/UserDto' "405": - description: Method Not Allowed + description: Modify user is not permitted content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + "404": + description: User attribute was not found content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: OK - content: - '*/*': - schema: - $ref: '#/components/schemas/UserDto' security: - bearerAuth: [] /api/user/{id}/theme: @@ -178,58 +106,22 @@ paths: $ref: '#/components/schemas/UserThemeSetDto' required: true responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "404": - description: Not Found - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' "405": - description: Method Not Allowed - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + description: Modify user is not permitted content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + "404": + description: User or user attribute was not found content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "200": - description: OK + "202": + description: Modified user theme content: - '*/*': + application/json: schema: $ref: '#/components/schemas/UserDto' security: @@ -253,121 +145,111 @@ paths: $ref: '#/components/schemas/UserPasswordDto' required: true responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' "404": - description: Not Found + description: User was not found content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict - content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "405": - description: Method Not Allowed - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + description: Modify user is not permitted content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + "202": + description: Modified user password content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "200": - description: OK - content: - '*/*': + application/json: schema: $ref: '#/components/schemas/UserDto' security: - bearerAuth: [] - /api/user: + /api/maintenance/message/{id}: get: tags: - - user-endpoint - summary: Find all users - operationId: findAll + - maintenance-endpoint + summary: Find one maintenance message + operationId: find_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked + "200": + description: Get messages content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/BannerMessageDto' + put: + tags: + - maintenance-endpoint + summary: Update maintenance message + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageUpdateDto' + required: true + responses: "404": - description: Not Found - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict + description: Could not find message content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Method Not Allowed + $ref: '#/components/schemas/BannerMessageNotFoundException' + "202": + description: Updated message content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + $ref: '#/components/schemas/BannerMessageBriefDto' + delete: + tags: + - maintenance-endpoint + summary: Delete maintenance message + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "202": + description: Deleted message content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + application/json: {} + "404": + description: Could not find message content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/BannerMessageNotFoundException' + /api/user: + get: + tags: + - user-endpoint + summary: Find all users + operationId: findAll + responses: "200": - description: OK + description: List users content: - '*/*': + application/json: schema: type: array items: @@ -384,147 +266,80 @@ paths: $ref: '#/components/schemas/SignupRequestDto' required: true responses: - "504": - description: Gateway Timeout - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "400": - description: Bad Request - content: - '*/*': - schema: - $ref: '#/components/schemas/ApiErrorDto' - "423": - description: Locked + "409": + description: User with username already exists content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' "404": - description: Not Found + description: Realm or default role not found content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "409": - description: Conflict + "201": + description: Created user content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "405": - description: Method Not Allowed + $ref: '#/components/schemas/UserBriefDto' + "417": + description: User with e-mail already exists content: - '*/*': + application/json: schema: $ref: '#/components/schemas/ApiErrorDto' - "417": - description: Expectation Failed + /api/maintenance/message: + get: + tags: + - maintenance-endpoint + summary: Find maintenance messages + operationId: list + responses: + "200": + description: List messages content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' - "406": - description: Not Acceptable + type: array + items: + $ref: '#/components/schemas/BannerMessageDto' + post: + tags: + - maintenance-endpoint + summary: Create maintenance message + operationId: create_1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageCreateDto' + required: true + responses: + "201": + description: Created message content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/ApiErrorDto' + $ref: '#/components/schemas/BannerMessageBriefDto' + /api/maintenance/message/active: + get: + tags: + - maintenance-endpoint + summary: Find active maintenance messages + operationId: active + responses: "200": - description: OK + description: List messages content: - '*/*': + application/json: schema: - $ref: '#/components/schemas/UserBriefDto' + type: array + items: + $ref: '#/components/schemas/BannerMessageBriefDto' components: schemas: - ApiErrorDto: - required: - - code - - message - - status - type: object - properties: - status: - type: string - example: STATUS - enum: - - 100 CONTINUE - - 101 SWITCHING_PROTOCOLS - - 102 PROCESSING - - 103 CHECKPOINT - - 200 OK - - 201 CREATED - - 202 ACCEPTED - - 203 NON_AUTHORITATIVE_INFORMATION - - 204 NO_CONTENT - - 205 RESET_CONTENT - - 206 PARTIAL_CONTENT - - 207 MULTI_STATUS - - 208 ALREADY_REPORTED - - 226 IM_USED - - 300 MULTIPLE_CHOICES - - 301 MOVED_PERMANENTLY - - 302 FOUND - - 302 MOVED_TEMPORARILY - - 303 SEE_OTHER - - 304 NOT_MODIFIED - - 305 USE_PROXY - - 307 TEMPORARY_REDIRECT - - 308 PERMANENT_REDIRECT - - 400 BAD_REQUEST - - 401 UNAUTHORIZED - - 402 PAYMENT_REQUIRED - - 403 FORBIDDEN - - 404 NOT_FOUND - - 405 METHOD_NOT_ALLOWED - - 406 NOT_ACCEPTABLE - - 407 PROXY_AUTHENTICATION_REQUIRED - - 408 REQUEST_TIMEOUT - - 409 CONFLICT - - 410 GONE - - 411 LENGTH_REQUIRED - - 412 PRECONDITION_FAILED - - 413 PAYLOAD_TOO_LARGE - - 413 REQUEST_ENTITY_TOO_LARGE - - 414 URI_TOO_LONG - - 414 REQUEST_URI_TOO_LONG - - 415 UNSUPPORTED_MEDIA_TYPE - - 416 REQUESTED_RANGE_NOT_SATISFIABLE - - 417 EXPECTATION_FAILED - - 418 I_AM_A_TEAPOT - - 419 INSUFFICIENT_SPACE_ON_RESOURCE - - 420 METHOD_FAILURE - - 421 DESTINATION_LOCKED - - 422 UNPROCESSABLE_ENTITY - - 423 LOCKED - - 424 FAILED_DEPENDENCY - - 425 TOO_EARLY - - 426 UPGRADE_REQUIRED - - 428 PRECONDITION_REQUIRED - - 429 TOO_MANY_REQUESTS - - 431 REQUEST_HEADER_FIELDS_TOO_LARGE - - 451 UNAVAILABLE_FOR_LEGAL_REASONS - - 500 INTERNAL_SERVER_ERROR - - 501 NOT_IMPLEMENTED - - 502 BAD_GATEWAY - - 503 SERVICE_UNAVAILABLE - - 504 GATEWAY_TIMEOUT - - 505 HTTP_VERSION_NOT_SUPPORTED - - 506 VARIANT_ALSO_NEGOTIATES - - 507 INSUFFICIENT_STORAGE - - 508 LOOP_DETECTED - - 509 BANDWIDTH_LIMIT_EXCEEDED - - 510 NOT_EXTENDED - - 511 NETWORK_AUTHENTICATION_REQUIRED - message: - type: string - example: Error message - code: - type: string - example: error.service.code UserUpdateDto: type: object properties: @@ -540,17 +355,14 @@ components: orcid: type: string example: 0000-0002-1825-0097 - titles_before: - type: string - example: Prof. - titles_after: - type: string ColumnBriefDto: required: - column_type + - database_id - id - internal_name - name + - table_id type: object properties: id: @@ -559,6 +371,12 @@ components: name: type: string example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 internal_name: type: string example: mdb_date @@ -647,12 +465,6 @@ components: orcid: type: string example: 0000-0002-1825-0097 - created: - type: string - format: date-time - lastModified: - type: string - format: date-time DatabaseAccessDto: required: - type @@ -766,7 +578,6 @@ components: example: everyone enum: - everyone - - trusted - self doi: type: string @@ -1017,6 +828,7 @@ components: ImageBriefDto: required: - id + - registry - repository - tag type: object @@ -1024,6 +836,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1064,6 +879,7 @@ components: - driver_class - id - jdbc_method + - registry - repository - tag type: object @@ -1071,6 +887,9 @@ components: id: type: integer format: int64 + registry: + type: string + example: docker.io/library repository: type: string example: mariadb @@ -1198,11 +1017,11 @@ components: TableBriefDto: required: - columns - - creator - description - id - internal_name - name + - owner type: object properties: id: @@ -1214,7 +1033,7 @@ components: description: type: string example: Air Quality in Austria - creator: + owner: $ref: '#/components/schemas/UserBriefDto' columns: type: array @@ -1352,6 +1171,92 @@ components: last_modified: type: string format: date-time + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code UserThemeSetDto: required: - theme_dark @@ -1367,6 +1272,174 @@ components: properties: password: type: string + BannerMessageUpdateDto: + required: + - message + - type + type: object + properties: + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + display_start: + type: string + format: date-time + display_end: + type: string + format: date-time + BannerMessageNotFoundException: + type: object + properties: + cause: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + suppressed: + type: array + items: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + localizedMessage: + type: string + localizedMessage: + type: string + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + suppressed: + type: array + items: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + localizedMessage: + type: string + localizedMessage: + type: string + BannerMessageBriefDto: + required: + - message + - type + type: object + properties: + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More SignupRequestDto: required: - email @@ -1383,6 +1456,64 @@ components: example: user@example.com password: type: string + BannerMessageCreateDto: + required: + - message + - type + type: object + properties: + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + display_start: + type: string + format: date-time + display_end: + type: string + format: date-time + BannerMessageDto: + required: + - id + - message + - type + type: object + properties: + id: + type: integer + format: int64 + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + display_start: + type: string + format: date-time + display_end: + type: string + format: date-time securitySchemes: bearerAuth: type: http -- GitLab