diff --git a/.docker/.env b/.docker/.env new file mode 100644 index 0000000000000000000000000000000000000000..6e598a8d0adf7f76559845e3d88b1bc80f314aff --- /dev/null +++ b/.docker/.env @@ -0,0 +1,12 @@ +# UNCOMMENT THE LINES BELOW TO OVERRIDE +#BASE_URL=http://example.com +#ADMIN_EMAIL=noreply@example.com +#LOG_LEVEL=debug +#IDENTITY_SERVICE_ADMIN_PASSWORD=admin +#AUTH_SERVICE_ADMIN_PASSWORD=admin +#METADATA_DB_PASSWORD=dbrepo +#DATA_DB_PASSWORD=dbrepo +#AUTH_DB_PASSWORD=dbrepo +#S3_ACCESS_KEY_ID=seaweedfsadmin +#S3_SECRET_ACCESS_KEY=seaweedfsadmin +#SYSTEM_PASSWORD=admin diff --git a/.docker/config/1_setup-schema.sql b/.docker/config/1_setup-schema.sql new file mode 100644 index 0000000000000000000000000000000000000000..47ee3a95e2b88a62d4a2405f9c0f4d088167d748 --- /dev/null +++ b/.docker/config/1_setup-schema.sql @@ -0,0 +1,564 @@ +BEGIN; + +CREATE TABLE IF NOT EXISTS `mdb_users` +( + id character varying(36) NOT NULL, + username character varying(255) NOT NULL, + firstname character varying(255), + lastname character varying(255), + email character varying(255) NOT NULL, + orcid character varying(255), + affiliation character varying(255), + mariadb_password character varying(255) NOT NULL, + theme character varying(255) NOT NULL default ('light'), + language character varying(3) NOT NULL default ('en'), + PRIMARY KEY (id), + UNIQUE (username), + UNIQUE (email) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_images` +( + id bigint NOT NULL AUTO_INCREMENT, + registry character varying(255) NOT NULL DEFAULT 'docker.io', + name character varying(255) NOT NULL, + version character varying(255) NOT NULL, + default_port integer NOT NULL, + dialect character varying(255) NOT NULL, + driver_class character varying(255) NOT NULL, + jdbc_method character varying(255) NOT NULL, + is_default BOOLEAN NOT NULL DEFAULT FALSE, + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + PRIMARY KEY (id), + UNIQUE (name, version), + UNIQUE (is_default) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_images_date` +( + id bigint NOT NULL AUTO_INCREMENT, + iid bigint NOT NULL, + database_format character varying(255) NOT NULL, + unix_format character varying(255) NOT NULL, + example character varying(255) NOT NULL, + has_time boolean NOT NULL, + created_at timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id), + FOREIGN KEY (iid) REFERENCES mdb_images (id), + UNIQUE (database_format, unix_format, example) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_containers` +( + id bigint NOT NULL AUTO_INCREMENT, + internal_name character varying(255) NOT NULL, + name character varying(255) NOT NULL, + host character varying(255) NOT NULL, + port integer NOT NULL default 3306, + ui_host character varying(255) NOT NULL default host, + ui_port integer NOT NULL default port, + ui_additional_flags text, + sidecar_host character varying(255), + sidecar_port integer, + image_id bigint NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + privileged_username character varying(255) NOT NULL, + privileged_password character varying(255) NOT NULL, + quota integer NOT NULL DEFAULT 50, + PRIMARY KEY (id), + FOREIGN KEY (image_id) REFERENCES mdb_images (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_data` +( + ID bigint NOT NULL AUTO_INCREMENT, + PROVENANCE text, + FileEncoding text, + FileType character varying(100), + Version text, + Seperator text, + PRIMARY KEY (ID) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_licenses` +( + identifier character varying(255) NOT NULL, + uri text NOT NULL, + description text NOT NULL, + PRIMARY KEY (identifier), + UNIQUE (uri(200)) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_databases` +( + id bigint NOT NULL AUTO_INCREMENT, + cid bigint NOT NULL, + name character varying(255) NOT NULL, + internal_name character varying(255) NOT NULL, + exchange_name character varying(255) NOT NULL, + description text, + engine character varying(20), + is_public boolean NOT NULL DEFAULT TRUE, + image longblob, + created_by character varying(36), + owned_by character varying(36), + contact_person character varying(36), + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + PRIMARY KEY (id), + FOREIGN KEY (cid) REFERENCES mdb_containers (id) /* currently we only support one-to-one */, + FOREIGN KEY (created_by) REFERENCES mdb_users (id), + FOREIGN KEY (owned_by) REFERENCES mdb_users (id), + FOREIGN KEY (contact_person) REFERENCES mdb_users (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_databases_subjects` +( + dbid BIGINT NOT NULL, + subjects character varying(255) NOT NULL, + PRIMARY KEY (dbid, subjects) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_tables` +( + ID bigint NOT NULL AUTO_INCREMENT, + tDBID bigint NOT NULL, + tName VARCHAR(64) NOT NULL, + internal_name VARCHAR(64) NOT NULL, + queue_name VARCHAR(255) NOT NULL, + routing_key VARCHAR(255), + tDescription VARCHAR(2048), + num_rows BIGINT, + data_length BIGINT, + max_data_length BIGINT, + avg_row_length BIGINT, + `separator` CHAR(1), + quote CHAR(1), + element_null VARCHAR(50), + skip_lines BIGINT, + element_true VARCHAR(50), + element_false VARCHAR(50), + Version TEXT, + created timestamp NOT NULL DEFAULT NOW(), + versioned boolean not null default true, + created_by character varying(36) NOT NULL, + owned_by character varying(36) NOT NULL, + last_modified timestamp, + PRIMARY KEY (ID), + UNIQUE (tDBID, internal_name), + FOREIGN KEY (tDBID) REFERENCES mdb_databases (id), + FOREIGN KEY (created_by) REFERENCES mdb_users (id), + FOREIGN KEY (owned_by) REFERENCES mdb_users (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_columns` +( + ID BIGINT NOT NULL AUTO_INCREMENT, + tID BIGINT NOT NULL, + dfID BIGINT, + cName VARCHAR(64), + internal_name VARCHAR(64) NOT NULL, + Datatype ENUM ('CHAR','VARCHAR','BINARY','VARBINARY','TINYBLOB','TINYTEXT','TEXT','BLOB','MEDIUMTEXT','MEDIUMBLOB','LONGTEXT','LONGBLOB','ENUM','SET','BIT','TINYINT','BOOL','SMALLINT','MEDIUMINT','INT','BIGINT','FLOAT','DOUBLE','DECIMAL','DATE','DATETIME','TIMESTAMP','TIME','YEAR'), + length BIGINT NULL, + ordinal_position INTEGER NOT NULL, + index_length BIGINT NULL, + description VARCHAR(2048), + size BIGINT, + d BIGINT, + auto_generated BOOLEAN DEFAULT false, + is_null_allowed BOOLEAN NOT NULL DEFAULT true, + val_min NUMERIC NULL, + val_max NUMERIC NULL, + mean NUMERIC NULL, + median NUMERIC NULL, + std_dev Numeric NULL, + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + FOREIGN KEY (tID) REFERENCES mdb_tables (ID) ON DELETE CASCADE, + PRIMARY KEY (ID) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_columns_enums` +( + id bigint NOT NULL AUTO_INCREMENT, + column_id bigint NOT NULL, + value CHARACTER VARYING(255) NOT NULL, + FOREIGN KEY (column_id) REFERENCES mdb_columns (ID) ON DELETE CASCADE, + PRIMARY KEY (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_columns_sets` +( + id bigint NOT NULL AUTO_INCREMENT, + column_id bigint NOT NULL, + value CHARACTER VARYING(255) NOT NULL, + FOREIGN KEY (column_id) REFERENCES mdb_columns (ID) ON DELETE CASCADE, + PRIMARY KEY (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_columns_nom` +( + tID bigint, + cID bigint, + maxlength INTEGER, + last_modified timestamp, + created timestamp NOT NULL DEFAULT NOW(), + FOREIGN KEY (tID, cID) REFERENCES mdb_columns (tID, ID), + PRIMARY KEY (tID, cID) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_columns_cat` +( + tID bigint, + cID bigint, + num_cat INTEGER, + -- cat_array TEXT[], + last_modified timestamp, + created timestamp NOT NULL DEFAULT NOW(), + FOREIGN KEY (tID, cID) REFERENCES mdb_columns (tID, ID), + PRIMARY KEY (tID, cID) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_constraints_foreign_key` +( + fkid BIGINT NOT NULL AUTO_INCREMENT, + tid BIGINT NOT NULL, + rtid BIGINT NOT NULL, + name VARCHAR(255) NOT NULL, + on_update VARCHAR(50) NULL, + on_delete VARCHAR(50) NULL, + position INT NULL, + PRIMARY KEY (fkid), + FOREIGN KEY (tid) REFERENCES mdb_tables (id) ON DELETE CASCADE, + FOREIGN KEY (rtid) REFERENCES mdb_tables (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_constraints_primary_key` +( + pkid BIGINT NOT NULL AUTO_INCREMENT, + tID BIGINT NOT NULL, + cid BIGINT NOT NULL, + PRIMARY KEY (pkid), + FOREIGN KEY (tID) REFERENCES mdb_tables (id) ON DELETE CASCADE, + FOREIGN KEY (cid) REFERENCES mdb_columns (id) ON DELETE CASCADE +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_constraints_foreign_key_reference` +( + id BIGINT NOT NULL AUTO_INCREMENT, + fkid BIGINT NOT NULL, + cid BIGINT NOT NULL, + rcid BIGINT NOT NULL, + PRIMARY KEY (id), + UNIQUE (fkid, cid, rcid), + FOREIGN KEY (fkid) REFERENCES mdb_constraints_foreign_key (fkid) ON UPDATE CASCADE, + FOREIGN KEY (cid) REFERENCES mdb_columns (id), + FOREIGN KEY (rcid) REFERENCES mdb_columns (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_constraints_unique` +( + uid BIGINT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NOT NULL, + tid BIGINT NOT NULL, + position INT NULL, + PRIMARY KEY (uid), + FOREIGN KEY (tid) REFERENCES mdb_tables (id) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS `mdb_constraints_unique_columns` +( + id BIGINT NOT NULL AUTO_INCREMENT, + uid BIGINT NOT NULL, + cid BIGINT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (uid) REFERENCES mdb_constraints_unique (uid), + FOREIGN KEY (cid) REFERENCES mdb_columns (id) ON DELETE CASCADE +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_constraints_checks` +( + id BIGINT NOT NULL AUTO_INCREMENT, + tid BIGINT NOT NULL, + checks VARCHAR(255) NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (tid) REFERENCES mdb_tables (id) ON DELETE CASCADE +) WITH SYSTEM VERSIONING; + + +CREATE TABLE IF NOT EXISTS `mdb_concepts` +( + id bigint NOT NULL AUTO_INCREMENT, + uri text not null, + name VARCHAR(255) null, + description TEXT null, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id), + UNIQUE (uri(200)) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_units` +( + id bigint NOT NULL AUTO_INCREMENT, + uri text not null, + name VARCHAR(255) null, + description TEXT null, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id), + UNIQUE (uri(200)) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_columns_concepts` +( + id bigint NOT NULL, + cID bigint NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id, cid), + FOREIGN KEY (cID) REFERENCES mdb_columns (ID) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_columns_units` +( + id bigint NOT NULL, + cID bigint NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id, cID), + FOREIGN KEY (cID) REFERENCES mdb_columns (ID) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_view` +( + id bigint NOT NULL AUTO_INCREMENT, + vdbid bigint NOT NULL, + vName VARCHAR(64) NOT NULL, + internal_name VARCHAR(64) NOT NULL, + Query TEXT NOT NULL, + query_hash VARCHAR(255) NOT NULL, + Public BOOLEAN NOT NULL, + InitialView BOOLEAN NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + created_by character varying(36) NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (vdbid) REFERENCES mdb_databases (id), + FOREIGN KEY (created_by) REFERENCES mdb_users (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_banner_messages` +( + id bigint NOT NULL AUTO_INCREMENT, + type ENUM ('ERROR', 'WARNING', 'INFO') NOT NULL default 'INFO', + message TEXT NOT NULL, + link TEXT NULL, + link_text VARCHAR(255) NULL, + display_start timestamp NULL, + display_end timestamp NULL, + PRIMARY KEY (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_ontologies` +( + id bigint NOT NULL AUTO_INCREMENT, + prefix VARCHAR(8) NOT NULL, + uri TEXT NOT NULL, + uri_pattern TEXT, + sparql_endpoint TEXT NULL, + rdf_path TEXT NULL, + last_modified timestamp, + created timestamp NOT NULL DEFAULT NOW(), + UNIQUE (prefix), + UNIQUE (uri(200)), + PRIMARY KEY (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_view_columns` +( + id BIGINT NOT NULL AUTO_INCREMENT, + view_id BIGINT NOT NULL, + dfID BIGINT, + name VARCHAR(64), + internal_name VARCHAR(64) NOT NULL, + column_type ENUM ('CHAR','VARCHAR','BINARY','VARBINARY','TINYBLOB','TINYTEXT','TEXT','BLOB','MEDIUMTEXT','MEDIUMBLOB','LONGTEXT','LONGBLOB','ENUM','SET','BIT','TINYINT','BOOL','SMALLINT','MEDIUMINT','INT','BIGINT','FLOAT','DOUBLE','DECIMAL','DATE','DATETIME','TIMESTAMP','TIME','YEAR'), + ordinal_position INTEGER NOT NULL, + size BIGINT, + d BIGINT, + auto_generated BOOLEAN DEFAULT false, + is_null_allowed BOOLEAN NOT NULL DEFAULT true, + PRIMARY KEY (id), + FOREIGN KEY (view_id) REFERENCES mdb_view (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_identifiers` +( + id BIGINT NOT NULL AUTO_INCREMENT, + dbid BIGINT NOT NULL, + qid BIGINT, + vid BIGINT, + tid BIGINT, + publisher VARCHAR(255) NOT NULL, + language VARCHAR(2), + publication_year INTEGER NOT NULL, + publication_month INTEGER, + publication_day INTEGER, + identifier_type ENUM ('DATABASE', 'SUBSET', 'VIEW', 'TABLE') NOT NULL, + status ENUM ('DRAFT', 'PUBLISHED') NOT NULL DEFAULT ('PUBLISHED'), + query TEXT, + query_normalized TEXT, + query_hash VARCHAR(255), + execution TIMESTAMP, + result_hash VARCHAR(255), + result_number BIGINT, + doi VARCHAR(255), + created TIMESTAMP NOT NULL DEFAULT NOW(), + created_by VARCHAR(36) NOT NULL, + last_modified TIMESTAMP, + PRIMARY KEY (id), /* must be a single id from persistent identifier concept */ + FOREIGN KEY (dbid) REFERENCES mdb_databases (id), + FOREIGN KEY (created_by) REFERENCES mdb_users (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_identifier_licenses` +( + pid bigint NOT NULL, + license_id VARCHAR(255) NOT NULL, + PRIMARY KEY (pid, license_id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id), + FOREIGN KEY (license_id) REFERENCES mdb_licenses (identifier) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_identifier_titles` +( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + title text NOT NULL, + title_type ENUM ('ALTERNATIVE_TITLE', 'SUBTITLE', 'TRANSLATED_TITLE', 'OTHER'), + language VARCHAR(2), + PRIMARY KEY (id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_identifier_funders` +( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + funder_name VARCHAR(255) NOT NULL, + funder_identifier TEXT, + funder_identifier_type ENUM ('CROSSREF_FUNDER_ID', 'GRID', 'ISNI', 'ROR', 'OTHER'), + scheme_uri text, + award_number VARCHAR(255), + award_title text, + language VARCHAR(255), + PRIMARY KEY (id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_identifier_descriptions` +( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + description text NOT NULL, + description_type ENUM ('ABSTRACT', 'METHODS', 'SERIES_INFORMATION', 'TABLE_OF_CONTENTS', 'TECHNICAL_INFO', 'OTHER'), + language VARCHAR(2), + PRIMARY KEY (id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_related_identifiers` +( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + value varchar(255) NOT NULL, + type varchar(255) NOT NULL, + relation varchar(255) NOT NULL, + PRIMARY KEY (id), /* must be a single id from persistent identifier concept */ + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id), + UNIQUE (pid, value) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_identifier_creators` +( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + given_names text, + family_name text, + creator_name VARCHAR(255) NOT NULL, + name_type ENUM ('PERSONAL', 'ORGANIZATIONAL') default 'PERSONAL', + name_identifier text, + name_identifier_scheme ENUM ('ROR', 'GRID', 'ISNI', 'ORCID'), + name_identifier_scheme_uri text, + affiliation VARCHAR(255), + affiliation_identifier text, + affiliation_identifier_scheme ENUM ('ROR', 'GRID', 'ISNI'), + affiliation_identifier_scheme_uri text, + PRIMARY KEY (id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_update` +( + uUserID character varying(255) NOT NULL, + uDBID bigint NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (uUserID, uDBID), + FOREIGN KEY (uDBID) REFERENCES mdb_databases (id) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_access` +( + aUserID character varying(255) NOT NULL, + aDBID bigint REFERENCES mdb_databases (id), + attime TIMESTAMP, + download BOOLEAN, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (aUserID, aDBID) +) WITH SYSTEM VERSIONING; + +CREATE TABLE IF NOT EXISTS `mdb_have_access` +( + user_id character varying(36) NOT NULL, + database_id bigint REFERENCES mdb_databases (id), + access_type ENUM ('READ', 'WRITE_OWN', 'WRITE_ALL') NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (user_id, database_id), + FOREIGN KEY (user_id) REFERENCES mdb_users (id) +) WITH SYSTEM VERSIONING; + +COMMIT; +BEGIN; + +INSERT INTO `mdb_licenses` (identifier, uri, description) +VALUES ('CC0-1.0', 'https://creativecommons.org/publicdomain/zero/1.0/legalcode', + 'CC0 waives copyright interest in a work you''ve created and dedicates it to the world-wide public domain. Use CC0 to opt out of copyright entirely and ensure your work has the widest reach.'), + ('CC-BY-4.0', 'https://creativecommons.org/licenses/by/4.0/legalcode', + 'The Creative Commons Attribution license allows re-distribution and re-use of a licensed work on the condition that the creator is appropriately credited.'); + +INSERT INTO `mdb_images` (name, registry, version, default_port, dialect, driver_class, jdbc_method) +VALUES ('mariadb', 'docker.io', '11.1.3', 3306, 'org.hibernate.dialect.MariaDBDialect', 'org.mariadb.jdbc.Driver', + 'mariadb'); + +INSERT INTO `mdb_images_date` (iid, database_format, unix_format, example, has_time) +VALUES (1, '%Y-%c-%d %H:%i:%S.%f', 'yyyy-MM-dd HH:mm:ss.SSSSSS', '2022-01-30 13:44:25.499', true), + (1, '%Y-%c-%d %H:%i:%S', 'yyyy-MM-dd HH:mm:ss', '2022-01-30 13:44:25', true), + (1, '%Y-%c-%d', 'yyyy-MM-dd', '2022-01-30', false), + (1, '%H:%i:%S', 'HH:mm:ss', '13:44:25', true), + (1, '%d.%c.%Y', 'dd.MM.yyyy', '30.01.2022', false); + +INSERT INTO `mdb_ontologies` (prefix, uri, uri_pattern, sparql_endpoint, rdf_path) +VALUES ('om', 'http://www.ontology-of-units-of-measure.org/resource/om-2/', + 'http://www.ontology-of-units-of-measure.org/resource/om-2/.*', null, 'rdf/om-2.0.rdf'), + ('wd', 'http://www.wikidata.org/', 'http://www.wikidata.org/entity/.*', 'https://query.wikidata.org/sparql', + null), + ('mo', 'http://purl.org/ontology/mo/', 'http://purl.org/ontology/mo/.*', null, null), + ('dc', 'http://purl.org/dc/elements/1.1/', null, null, null), + ('xsd', 'http://www.w3.org/2001/XMLSchema#', null, null, null), + ('tl', 'http://purl.org/NET/c4dm/timeline.owl#', null, null, null), + ('foaf', 'http://xmlns.com/foaf/0.1/', null, null, null), + ('schema', 'http://schema.org/', null, null, null), + ('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', null, null, null), + ('rdfs', 'http://www.w3.org/2000/01/rdf-schema#', null, null, null), + ('owl', 'http://www.w3.org/2002/07/owl#', null, null, null), + ('prov', 'http://www.w3.org/ns/prov#', null, null, null), + ('db', 'http://dbpedia.org', 'http://dbpedia.org/ontology/.*', 'http://dbpedia.org/sparql', null); +COMMIT; diff --git a/.docker/config/2_setup-data.sql b/.docker/config/2_setup-data.sql new file mode 100644 index 0000000000000000000000000000000000000000..e806e1e181dbdcc3f0e4e29f837bffac7123317c --- /dev/null +++ b/.docker/config/2_setup-data.sql @@ -0,0 +1,8 @@ +BEGIN; + +INSERT INTO `mdb_containers` (name, internal_name, image_id, host, port, ui_host, ui_port, sidecar_host, sidecar_port, + privileged_username, privileged_password) +VALUES ('mariadb:11.1.3-debian-11-r6', 'mariadb_11_1_3', 1, 'data-db', 3306, 'localhost', 3306, 'data-db-sidecar', 8080, + 'root', 'dbrepo'); + +COMMIT; diff --git a/.docker/config/advanced.config b/.docker/config/advanced.config new file mode 100644 index 0000000000000000000000000000000000000000..4445ea601954e5c93c32edeba1638135c5af5e59 --- /dev/null +++ b/.docker/config/advanced.config @@ -0,0 +1,17 @@ +[ + { + rabbitmq_auth_backend_ldap, + [ + { + tag_queries, [ + { + administrator, {in_group_nested, "cn=system,ou=users,dc=dbrepo,dc=at", "member"} + }, + { + management, {constant, true} + } + ] + } + ] + } +]. \ No newline at end of file diff --git a/.docker/config/dbrepo.conf b/.docker/config/dbrepo.conf new file mode 100644 index 0000000000000000000000000000000000000000..8ac239d464398ec381b98d71c91192ea6ba061ab --- /dev/null +++ b/.docker/config/dbrepo.conf @@ -0,0 +1,167 @@ +client_max_body_size 20G; + +resolver 127.0.0.11 valid=30s; # docker dns + +upstream auth { + server auth-service:8080; +} + +upstream broker { + server broker-service:15672; +} + +upstream analyse { + server analyse-service:8080; +} + +upstream data { + server data-service:8080; +} + +upstream metadata { + server metadata-service:8080; +} + +upstream search { + server search-service:8080; +} + +upstream ui { + server ui:3000; +} + +upstream upload { + server upload-service:8080; +} + +server { + listen 80 default_server; + server_name _; + + location /admin/broker { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://broker; + proxy_read_timeout 90; + } + + location /api/search { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://search; + proxy_read_timeout 90; + } + + location /api/broker { + rewrite /api/broker/(.*) /admin/broker/api/$1 break; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://broker; + proxy_read_timeout 90; + } + + location /api/upload { +# allow 128.130.0.0/16; +# deny all; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $host; + proxy_pass http://upload; + proxy_read_timeout 90; + # Disable request and response buffering + proxy_request_buffering off; + proxy_buffering off; + proxy_http_version 1.1; + } + + location /api/analyse { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://analyse; + proxy_read_timeout 90; + } + + location /api/auth { + rewrite /api/auth/(.*) /$1 break; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://auth; + proxy_read_timeout 90; + } + + location ~ /api/database/([0-9]+)/table/([0-9]+)/(data|history|export|statistic) { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://data; + proxy_read_timeout 90; + } + + location ~ /api/database/([0-9]+)/view/([0-9]+)/data { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://data; + proxy_read_timeout 90; + } + + location ~ /api/database/([0-9]+)/view { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://metadata; + proxy_read_timeout 90; + } + + location ~ /api/database/([0-9]+)/subset { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://data; + proxy_read_timeout 600; + } + + location ~ /api/(database|concept|container|identifier|image|message|license|oai|ontology|unit|user) { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://metadata; + proxy_read_timeout 90; + } + + location ~ /pid/([0-9]+) { + rewrite /pid/(.*) /api/identifier/$1 break; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://metadata; + proxy_read_timeout 90; + } + + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://ui; + proxy_read_timeout 90; + } +} diff --git a/.docker/config/definitions.json b/.docker/config/definitions.json new file mode 100644 index 0000000000000000000000000000000000000000..a3b70c989de5cb287e37588860e664afb6b7d6ec --- /dev/null +++ b/.docker/config/definitions.json @@ -0,0 +1,52 @@ +{ + "bindings": [ + { + "arguments": {}, + "destination": "dbrepo", + "destination_type": "queue", + "routing_key": "dbrepo.#", + "source": "dbrepo", + "vhost": "dbrepo" + } + ], + "exchanges": [ + { + "arguments": {}, + "auto_delete": false, + "durable": true, + "name": "dbrepo", + "type": "topic", + "vhost": "dbrepo" + } + ], + "global_parameters": [], + "parameters": [], + "permissions": [], + "policies": [], + "queues": [ + { + "arguments": { + "x-queue-type": "quorum" + }, + "auto_delete": false, + "durable": true, + "name": "dbrepo", + "type": "quorum", + "vhost": "dbrepo" + } + ], + "rabbit_version": "3.10.25", + "rabbitmq_version": "3.10.25", + "topic_permissions": [], + "users": [], + "vhosts": [ + { + "limits": [], + "metadata": { + "description": "Default virtual host", + "tags": [] + }, + "name": "dbrepo" + } + ] +} \ No newline at end of file diff --git a/.docker/config/enabled_plugins b/.docker/config/enabled_plugins new file mode 100644 index 0000000000000000000000000000000000000000..95f1c0014dd4ee232580adea29176756a25274ed --- /dev/null +++ b/.docker/config/enabled_plugins @@ -0,0 +1 @@ +[rabbitmq_prometheus,rabbitmq_auth_backend_ldap,rabbitmq_auth_mechanism_ssl,rabbitmq_management]. \ No newline at end of file diff --git a/.docker/config/rabbitmq.conf b/.docker/config/rabbitmq.conf new file mode 100644 index 0000000000000000000000000000000000000000..ff592bb3ecd4b003d180dbb44d8bd9acc5a70394 --- /dev/null +++ b/.docker/config/rabbitmq.conf @@ -0,0 +1,30 @@ +# user +default_vhost = dbrepo +default_user_tags.administrator = false + +# enable http outside localhost +listeners.tcp.1 = 0.0.0.0:5672 + +# management prefix (https://www.rabbitmq.com/management.html#path-prefix) +management.path_prefix = /admin/broker +management.load_definitions = /app/definitions.json + +# logging +log.console = true +log.console.level = warning +auth_ldap.log = true + +# Obviously your authentication server cannot vouch for itself, so you'll need another backend with at least one user in +# it. You should probably use the internal database +auth_backends.1.authn = ldap +auth_backends.1.authz = ldap +auth_backends.2 = internal + +# LDAP +auth_ldap.servers.1 = identity-service +auth_ldap.port = 1389 +auth_ldap.user_dn_pattern = ${username} +auth_ldap.dn_lookup_base = dc=dbrepo,dc=at +auth_ldap.dn_lookup_attribute = uid +auth_ldap.dn_lookup_bind.user_dn = cn=admin,dc=dbrepo,dc=at +auth_ldap.dn_lookup_bind.password = admin diff --git a/.docker/config/s3_config.json b/.docker/config/s3_config.json new file mode 100644 index 0000000000000000000000000000000000000000..f270753cdc96278a039e483966ea864a16781cfe --- /dev/null +++ b/.docker/config/s3_config.json @@ -0,0 +1,20 @@ +{ + "identities": [ + { + "name": "admin", + "credentials": [ + { + "accessKey": "seaweedfsadmin", + "secretKey": "seaweedfsadmin" + } + ], + "actions": [ + "Read", + "Write", + "List", + "Tagging", + "Admin" + ] + } + ] +} \ No newline at end of file diff --git a/.docker/dist.tar.gz b/.docker/dist.tar.gz index 411c92f64cd600841b98f1375c32b920895df2e0..1cfc5411b1b8082ebb9fa45c9f8af3bc1504671d 100644 Binary files a/.docker/dist.tar.gz and b/.docker/dist.tar.gz differ diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 54b7b8edbbe0652379fc74c5a81a58ada8a57e3a..8c01cf618d18d247c66875257579e9088413ac16 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -75,7 +75,7 @@ services: restart: "no" container_name: dbrepo-auth-service hostname: auth-service - image: registry.datalab.tuwien.ac.at/dbrepo/auth-service:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/auth-service:1.4.6 healthcheck: test: curl -sSL 'http://0.0.0.0:8080/realms/dbrepo' | grep "dbrepo" || exit 1 interval: 15s @@ -99,7 +99,7 @@ services: restart: "no" container_name: dbrepo-metadata-service hostname: metadata-service - image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.4.6 volumes: - "${SHARED_VOLUME:-/tmp}:/tmp" environment: @@ -162,7 +162,7 @@ services: restart: "no" container_name: dbrepo-analyse-service hostname: analyse-service - image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.4.6 environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -212,7 +212,7 @@ services: restart: "no" container_name: dbrepo-search-db hostname: search-db - image: registry.datalab.tuwien.ac.at/dbrepo/search-db:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/search-db:1.4.6 healthcheck: test: curl -sSL localhost:9200/_plugins/_security/health | jq .status | grep UP interval: 10s @@ -236,7 +236,7 @@ services: restart: "no" container_name: dbrepo-search-service hostname: search-service - image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.4.6 environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -253,7 +253,7 @@ services: restart: "no" container_name: dbrepo-data-db-sidecar hostname: data-db-sidecar - image: registry.datalab.tuwien.ac.at/dbrepo/data-db-sidecar:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/data-db-sidecar:1.4.6 environment: S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID:-seaweedfsadmin}" S3_BUCKET: "${S3_BUCKET:-dbrepo}" @@ -274,7 +274,7 @@ services: restart: "no" container_name: dbrepo-ui hostname: ui - image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.4.6 environment: NUXT_PUBLIC_API_CLIENT: "${BASE_URL:-http://localhost}" NUXT_PUBLIC_API_SERVER: "${BASE_URL:-http://localhost}" @@ -343,7 +343,7 @@ services: restart: "no" container_name: dbrepo-search-service-init hostname: search-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.4.6 environment: METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} OPENSEARCH_HOST: ${OPENSEARCH_HOST:-search-db} @@ -353,6 +353,8 @@ services: depends_on: dbrepo-search-db: condition: service_healthy + dbrepo-metadata-service: + condition: service_healthy logging: driver: json-file @@ -379,7 +381,7 @@ services: restart: "no" container_name: dbrepo-storage-service-init hostname: storage-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.4.6 environment: WEED_CLUSTER_SW_MASTER: "${STORAGE_SERVICE_MASTER_ENDPOINT:-storage-service:9333}" S3_BUCKET: "${S3_BUCKET:-dbrepo}" @@ -419,7 +421,7 @@ services: restart: "no" container_name: dbrepo-data-service hostname: data-service - image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.4.6 volumes: - "${SHARED_VOLUME:-/tmp}:/tmp" environment: diff --git a/.docs/.swagger/api.yaml b/.docs/.swagger/api.yaml index c5c2b5ee8dccd425d7fb5bf570c7f3379b52e210..1495e398e358d0a78bc7306b71726bd2e092efe4 100644 --- a/.docs/.swagger/api.yaml +++ b/.docs/.swagger/api.yaml @@ -1021,7 +1021,7 @@ paths: summary: Create subset description: >- Creates a subset in the query store of the data database. Requires role - `execute-query` + `execute-query` for private databases. operationId: create parameters: - name: databaseId @@ -1223,7 +1223,7 @@ paths: Gets data from table with id as downloadable file. For tables in private databases, the user needs to have at least *READ* access to the associated database. - operationId: exportData + operationId: exportDataset parameters: - name: databaseId in: path @@ -1431,6 +1431,12 @@ paths: application/json: schema: $ref: '#/components/schemas/ApiErrorDto' + '423': + description: Database quota exceeded + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' '502': description: Connection to search service failed content: @@ -3030,6 +3036,12 @@ paths: summary: List users description: Lists users known to the metadata database. operationId: findAll + parameters: + - name: username + in: query + required: false + schema: + type: string responses: '200': description: List users @@ -5952,12 +5964,14 @@ components: $ref: '#/components/schemas/PrimaryKeyDto' ContainerDto: required: + - count - created - host - id - image - internal_name - name + - quota - sidecar_host - sidecar_port type: object @@ -5975,6 +5989,14 @@ components: format: int32 image: $ref: '#/components/schemas/ImageDto' + quota: + type: integer + format: int64 + example: 50 + count: + type: integer + format: int64 + example: 10 created: type: string format: date-time @@ -6169,6 +6191,7 @@ components: example: '2021-03-12T15:26:21.000Z' ImageDto: required: + - default - default_port - dialect - driver_class @@ -6204,6 +6227,9 @@ components: jdbc_method: type: string example: mariadb + default: + type: boolean + example: false default_port: type: integer format: int32 @@ -7742,6 +7768,7 @@ components: - default_port - dialect - driver_class + - is_default - jdbc_method - name - registry @@ -7758,6 +7785,9 @@ components: type: string dialect: type: string + is_default: + type: boolean + example: false driver_class: type: string jdbc_method: @@ -8284,6 +8314,7 @@ components: - name - privileged_password - privileged_username + - quota - sidecar_host - sidecar_port type: object @@ -8298,6 +8329,10 @@ components: type: integer description: Port of container format: int32 + quota: + type: integer + format: int64 + example: 50 image_id: type: integer description: Image ID @@ -8374,10 +8409,10 @@ components: type: string resumptionToken: type: string - untilDate: + fromDate: type: string format: date-time - fromDate: + untilDate: type: string format: date-time parametersString: @@ -8417,6 +8452,7 @@ components: example: '2021-03-12T15:26:21.000Z' ImageBriefDto: required: + - default - id - jdbc_method - name @@ -8435,6 +8471,9 @@ components: jdbc_method: type: string example: mariadb + default: + type: boolean + example: false LdCreatorDto: required: - '@type' @@ -8528,13 +8567,14 @@ components: example: 1 ContainerBriefDto: required: + - count - created - hash - id - image - internal_name - name - - running + - quota type: object properties: id: @@ -8548,9 +8588,14 @@ components: example: Air Quality image: $ref: '#/components/schemas/ImageBriefDto' - running: - type: boolean - example: true + quota: + type: integer + format: int32 + example: 50 + count: + type: integer + format: int32 + example: 10 created: type: string format: date-time @@ -8603,6 +8648,9 @@ components: uiPort: type: integer format: int32 + quota: + type: integer + format: int32 uiAdditionalFlags: type: string databases: @@ -8642,6 +8690,8 @@ components: defaultPort: type: integer format: int32 + isDefault: + type: boolean dateFormats: type: array items: diff --git a/.docs/api/ui.md b/.docs/api/ui.md index cfffcebc0f733e6569b88f8dc3a31b867cc745e5..3e53ab2c376d6cde6c582e352171ad0836882864 100644 --- a/.docs/api/ui.md +++ b/.docs/api/ui.md @@ -6,7 +6,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`registry.datalab.tuwien.ac.at/dbrepo/ui:1.4.5`](https://hub.docker.com/r/dbrepo/ui) + Image: [`registry.datalab.tuwien.ac.at/dbrepo/ui:1.4.6`](https://hub.docker.com/r/dbrepo/ui) * Ports: 3000/tcp @@ -37,7 +37,7 @@ image as well, in this example we want to mount a custom logo `my_logo.png` into ```yaml title="docker-compose.yml" services: dbrepo-ui: - image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.4.6 volumes: - ./my_logo.png:/app/.output/public/my_logo.png - ./favicon.ico:/app/.output/public/favicon.ico diff --git a/.docs/index.md b/.docs/index.md index 995c279be152578b789eea664883cbb696cc8cd9..aea045c43c69da1013fc7884ccaa967ea743a95a 100644 --- a/.docs/index.md +++ b/.docs/index.md @@ -8,7 +8,7 @@ author: Martin Weise [](https://hub.docker.com/u/dbrepo){ tabindex=-1 } [](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services){ tabindex=-1 } -Documentation for version: [v1.4.5](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/releases). +Documentation for version: [v1.4.6](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/releases). DBRepo is a repository for data in databases that are used from the beginning until the end of a research project supporting data evolution, -citation and -versioning. It implements the query store of the diff --git a/.docs/installation.md b/.docs/installation.md index 9c864ead4686a1b4c417147ad564740aeb5b8c8e..5f9a45199a50b579c1255b8362bf0e40ca0b995d 100644 --- a/.docs/installation.md +++ b/.docs/installation.md @@ -11,7 +11,7 @@ author: Martin Weise If you have [Docker](https://docs.docker.com/engine/install/) already installed on your system, you can install DBRepo with: ```shell -curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-1.4.5/install.sh | bash +curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-1.4.6/install.sh | bash ``` !!! bug "Default installation security disclaimer" @@ -39,7 +39,7 @@ SSL/TLS certificate is recommended. Follow the [secure install](#secure-install) Execute the install script to download only the environment and save it to `dist`. ```shell -curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-1.4.5/install.sh | DOWNLOAD_ONLY=1 bash +curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-1.4.6/install.sh | DOWNLOAD_ONLY=1 bash ``` ### Static Configuration @@ -81,7 +81,7 @@ the variable `IDENTITY_SERVICE_ADMIN_PASSWORD` in `.env`. Update the client secret of the `dbrepo-client`: ```bash -curl -sSL "https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-1.4.5/.scripts/reg-client-secret.sh" | bash +curl -sSL "https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-1.4.6/.scripts/reg-client-secret.sh" | bash ``` Also, update the JWT key according to the diff --git a/.docs/kubernetes.md b/.docs/kubernetes.md index 04799b4edf3425f5ba46a7b0a1f140e092414ae0..d6689058d6896b2e8449ff482a60a35a7d99b9cf 100644 --- a/.docs/kubernetes.md +++ b/.docs/kubernetes.md @@ -7,7 +7,7 @@ author: Martin Weise ## TL;DR To install DBRepo in your existing cluster, download the -sample [`values.yaml`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/blob/release-1.4.5/helm/dbrepo/values.yaml) +sample [`values.yaml`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/blob/release-1.4.6/helm/dbrepo/values.yaml) for your deployment and update the variables, especially `hostname`. ```shell @@ -15,7 +15,7 @@ helm upgrade --install dbrepo \ -n dbrepo \ "oci://registry.datalab.tuwien.ac.at/dbrepo/helm/dbrepo" \ --values ./values.yaml \ - --version "1.4.5" \ + --version "1.4.6" \ --create-namespace \ --cleanup-on-fail ``` @@ -36,7 +36,7 @@ brokerservice: The `brokerservice.auth.passwordHash` field is the RabbitMQ SHA512-hash of the `brokerservice.auth.password` field and can be obtained with -the [`generate-rabbitmq-pw.sh`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/blob/release-1.4.5/helm/dbrepo/hack/generate-rabbitmq-pw.sh) +the [`generate-rabbitmq-pw.sh`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/blob/release-1.4.6/helm/dbrepo/hack/generate-rabbitmq-pw.sh) script: ```console diff --git a/.docs/redirect.html b/.docs/redirect.html index 4e513b2170628796d31b592b0e5b3190cfb0fe09..035de3cbfe860773c99ac3f7ebd072f4cca66c40 100644 --- a/.docs/redirect.html +++ b/.docs/redirect.html @@ -5,16 +5,16 @@ <head> <meta charset="UTF-8"> <title>Redirect Notice</title> - <meta http-equiv="Refresh" content="0; url='/infrastructures/dbrepo/1.4.5/'" /> + <meta http-equiv="Refresh" content="0; url='/infrastructures/dbrepo/1.4.6/'" /> </head> <body> <h1>Redirect Notice</h1> <p> - This page should automatically open the documentation for version <code>1.4.5</code>. In case this page does not load the site is + This page should automatically open the documentation for version <code>1.4.6</code>. In case this page does not load the site is available at: </p> <p> - <a href="/infrastructures/dbrepo/1.4.5/">/infrastructures/dbrepo/1.4.5/</a> + <a href="/infrastructures/dbrepo/1.4.6/">/infrastructures/dbrepo/1.4.6/</a> </p> </body> </html> \ No newline at end of file diff --git a/.env.unix.example b/.env.unix.example deleted file mode 100644 index cc42c2445172e19016c48e55a5a599df5961de38..0000000000000000000000000000000000000000 --- a/.env.unix.example +++ /dev/null @@ -1 +0,0 @@ -LOG_LEVEL=trace # error, warning, info, debug, trace \ No newline at end of file diff --git a/.gitignore b/.gitignore index e552ece0ec2f4b90e55a0973c942ce3fdc850473..4d7b82f6e6aac7adad8b9865fc2482f7c065e8f2 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,6 @@ build/ tmp.yaml .docs/.swagger/api-* .scannerwork/ -.docker/config/* # docs .docs/.swagger/dist/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0bf1bc925538e7a74c85f2b6f12e290eaf8d10a0..5d4d611ea76255f0cc7613dcdb0174c81b534ede 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,8 +3,8 @@ variables: DOCKER_HOST: "unix:///var/run/dind/docker.sock" TESTCONTAINERS_RYUK_DISABLED: "false" PYTHON_VERSION: "3.11" - APP_VERSION: "1.4.5" - CHART_VERSION: "1.4.5" + APP_VERSION: "1.4.6" + CHART_VERSION: "1.4.6" CACHE_FALLBACK_KEY: ${CI_DEFAULT_BRANCH} # This will supress any download for dependencies and plugins or upload messages which would clutter the console log. # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work. @@ -139,7 +139,6 @@ build-docker: before_script: - echo "$CI_REGISTRY_PASSWORD" | docker login --username "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY_URL script: - - "cp .env.unix.example .env" - "docker build -t dbrepo-metadata-service:build --target build dbrepo-metadata-service" - "docker build -t dbrepo-data-service:build --target build dbrepo-data-service" - "docker compose build --parallel" diff --git a/.scripts/check-helm.sh b/.scripts/check-helm.sh new file mode 100755 index 0000000000000000000000000000000000000000..2233434029da0f89a672b9796317ac261bfa476a --- /dev/null +++ b/.scripts/check-helm.sh @@ -0,0 +1,6 @@ +#!/bin/bash +helm schema > /dev/null +if [ $? -ne 0 ]; then + echo "!!! Please install the Helm values schema plugin first\n" + echo " https://github.com/losisin/helm-values-schema-json" +fi diff --git a/Makefile b/Makefile index b279097f827becd26e3e39da0bbf866fd513516f..027fac1b00fb33b0d94f4e3b3b90f241d792dba9 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: all -APP_VERSION ?= 1.4.5 -CHART_VERSION ?= 1.4.5 +APP_VERSION ?= 1.4.6 +CHART_VERSION ?= 1.4.6 REPOSITORY_URL ?= registry.datalab.tuwien.ac.at/dbrepo .PHONY: all diff --git a/README.md b/README.md index e4f843507c43232f4817dbd562b49594d75d9385..1c51793eb99fd9eae99ad98f4ba8686e9ad506a5 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ If you have [Docker](https://docs.docker.com/engine/install/) already installed with: ```bash -curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-1.4.5/install.sh | bash +curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-1.4.6/install.sh | bash ``` ## Documentation diff --git a/dbrepo-analyse-service/Pipfile b/dbrepo-analyse-service/Pipfile index a0fb0bfd7be1fdb83dfacbcf42dc1bc557f83d82..158a03e2d175cc9d8a421adb0441b4c832f20622 100644 --- a/dbrepo-analyse-service/Pipfile +++ b/dbrepo-analyse-service/Pipfile @@ -21,7 +21,7 @@ numpy = "*" pandas = "*" minio = "*" pydantic = "*" -dbrepo = {path = "./lib/dbrepo-1.4.5.tar.gz"} +dbrepo = {path = "./lib/dbrepo-1.4.6.tar.gz"} opensearch-py = "*" [dev-packages] diff --git a/dbrepo-analyse-service/Pipfile.lock b/dbrepo-analyse-service/Pipfile.lock index 4f4ae8faa7e2f6ab1a61630101bfa1a710c8ec98..8dd1014dd04aa0ce09ec9cec6d6cd0cceb3c4e7a 100644 --- a/dbrepo-analyse-service/Pipfile.lock +++ b/dbrepo-analyse-service/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "81259bb4fb1f303f1bfc9f643c6210d3b5f8de902725e4134cdab680d3fdfbb3" + "sha256": "77d9a73a8fbe7ffd566a4207e762dfacf0c4d8c474c937d481811567482fb708" }, "pipfile-spec": 6, "requires": { @@ -190,20 +190,20 @@ }, "boto3": { "hashes": [ - "sha256:7bc78d7140c353b10a637927fe4bc4c4d95a464d1b8f515d5844def2ee52cbd5", - "sha256:c3e138e9041d59cd34cdc28a587dfdc899dba02ea26ebc3e10fb4bc88e5cf31b" + "sha256:71e237d3997cf93425947854d7b121c577944f391ba633afb0659e1015364704", + "sha256:fd130308f1f49d748a5fc63de92de79a995b51c79af3947ddde8815fcf0684fe" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==1.35.14" + "version": "==1.35.18" }, "botocore": { "hashes": [ - "sha256:24823135232f88266b66ae8e1d0f3d40872c14cd976781f7fe52b8f0d79035a0", - "sha256:8515a2fc7ca5bcf0b10016ba05ccf2d642b7cb77d8773026ff2fa5aa3bf38d2e" + "sha256:1027083aeb1fe74057273410fd768e018e22f85adfbd717b5a69f578f7812b80", + "sha256:e59da8b91ab06683d2725b6cbbb0383b30c68a241c3c63363f4c5bff59b3c0c0" ], "markers": "python_version >= '3.8'", - "version": "==1.35.14" + "version": "==1.35.18" }, "certifi": { "hashes": [ @@ -425,11 +425,10 @@ }, "dbrepo": { "hashes": [ - "sha256:0a04b67204de6dc969ec68fb21aaead898156077e8a5b6f1e03bb5ab0e124a61", - "sha256:454a182b772cb777d27a22bb334bf059ce68d4e6b5fecae802678fabfdf3f934" + "sha256:d5e248e25fb3787d085e3d27c81108408f963ca662d7778bc98288ca0d747940" ], "markers": "python_version >= '3.11'", - "path": "./lib/dbrepo-1.4.5.tar.gz" + "path": "./lib/dbrepo-1.4.6.tar.gz" }, "events": { "hashes": [ @@ -620,68 +619,76 @@ }, "greenlet": { "hashes": [ - "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67", - "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6", - "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257", - "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4", - "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676", - "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61", - "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc", - "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca", - "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7", - "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728", - "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305", - "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6", - "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379", - "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414", - "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04", - "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a", - "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf", - "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491", - "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559", - "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e", - "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274", - "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb", - "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b", - "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9", - "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b", - "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be", - "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506", - "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405", - "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113", - "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f", - "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5", - "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230", - "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d", - "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f", - "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a", - "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e", - "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61", - "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6", - "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d", - "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71", - "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22", - "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2", - "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3", - "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067", - "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc", - "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881", - "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3", - "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e", - "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac", - "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53", - "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0", - "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b", - "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83", - "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41", - "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c", - "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf", - "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da", - "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33" + "sha256:01059afb9b178606b4b6e92c3e710ea1635597c3537e44da69f4531e111dd5e9", + "sha256:037d9ac99540ace9424cb9ea89f0accfaff4316f149520b4ae293eebc5bded17", + "sha256:0e49a65d25d7350cca2da15aac31b6f67a43d867448babf997fe83c7505f57bc", + "sha256:13ff8c8e54a10472ce3b2a2da007f915175192f18e6495bad50486e87c7f6637", + "sha256:1544b8dd090b494c55e60c4ff46e238be44fdc472d2589e943c241e0169bcea2", + "sha256:184258372ae9e1e9bddce6f187967f2e08ecd16906557c4320e3ba88a93438c3", + "sha256:1ddc7bcedeb47187be74208bc652d63d6b20cb24f4e596bd356092d8000da6d6", + "sha256:221169d31cada333a0c7fd087b957c8f431c1dba202c3a58cf5a3583ed973e9b", + "sha256:243a223c96a4246f8a30ea470c440fe9db1f5e444941ee3c3cd79df119b8eebf", + "sha256:24fc216ec7c8be9becba8b64a98a78f9cd057fd2dc75ae952ca94ed8a893bf27", + "sha256:2651dfb006f391bcb240635079a68a261b227a10a08af6349cba834a2141efa1", + "sha256:26811df4dc81271033a7836bc20d12cd30938e6bd2e9437f56fa03da81b0f8fc", + "sha256:26d9c1c4f1748ccac0bae1dbb465fb1a795a75aba8af8ca871503019f4285e2a", + "sha256:28fe80a3eb673b2d5cc3b12eea468a5e5f4603c26aa34d88bf61bba82ceb2f9b", + "sha256:2cd8518eade968bc52262d8c46727cfc0826ff4d552cf0430b8d65aaf50bb91d", + "sha256:2d004db911ed7b6218ec5c5bfe4cf70ae8aa2223dffbb5b3c69e342bb253cb28", + "sha256:3d07c28b85b350564bdff9f51c1c5007dfb2f389385d1bc23288de51134ca303", + "sha256:3e7e6ef1737a819819b1163116ad4b48d06cfdd40352d813bb14436024fcda99", + "sha256:44151d7b81b9391ed759a2f2865bbe623ef00d648fed59363be2bbbd5154656f", + "sha256:44cd313629ded43bb3b98737bba2f3e2c2c8679b55ea29ed73daea6b755fe8e7", + "sha256:4a3dae7492d16e85ea6045fd11cb8e782b63eac8c8d520c3a92c02ac4573b0a6", + "sha256:4b5ea3664eed571779403858d7cd0a9b0ebf50d57d2cdeafc7748e09ef8cd81a", + "sha256:4c3446937be153718250fe421da548f973124189f18fe4575a0510b5c928f0cc", + "sha256:5415b9494ff6240b09af06b91a375731febe0090218e2898d2b85f9b92abcda0", + "sha256:5fd6e94593f6f9714dbad1aaba734b5ec04593374fa6638df61592055868f8b8", + "sha256:619935a44f414274a2c08c9e74611965650b730eb4efe4b2270f91df5e4adf9a", + "sha256:655b21ffd37a96b1e78cc48bf254f5ea4b5b85efaf9e9e2a526b3c9309d660ca", + "sha256:665b21e95bc0fce5cab03b2e1d90ba9c66c510f1bb5fdc864f3a377d0f553f6b", + "sha256:6a4bf607f690f7987ab3291406e012cd8591a4f77aa54f29b890f9c331e84989", + "sha256:6cea1cca3be76c9483282dc7760ea1cc08a6ecec1f0b6ca0a94ea0d17432da19", + "sha256:713d450cf8e61854de9420fb7eea8ad228df4e27e7d4ed465de98c955d2b3fa6", + "sha256:726377bd60081172685c0ff46afbc600d064f01053190e4450857483c4d44484", + "sha256:76b3e3976d2a452cba7aa9e453498ac72240d43030fdc6d538a72b87eaff52fd", + "sha256:76dc19e660baea5c38e949455c1181bc018893f25372d10ffe24b3ed7341fb25", + "sha256:76e5064fd8e94c3f74d9fd69b02d99e3cdb8fc286ed49a1f10b256e59d0d3a0b", + "sha256:7f346d24d74c00b6730440f5eb8ec3fe5774ca8d1c9574e8e57c8671bb51b910", + "sha256:81eeec4403a7d7684b5812a8aaa626fa23b7d0848edb3a28d2eb3220daddcbd0", + "sha256:90b5bbf05fe3d3ef697103850c2ce3374558f6fe40fd57c9fac1bf14903f50a5", + "sha256:9730929375021ec90f6447bff4f7f5508faef1c02f399a1953870cdb78e0c345", + "sha256:9eb4a1d7399b9f3c7ac68ae6baa6be5f9195d1d08c9ddc45ad559aa6b556bce6", + "sha256:a0409bc18a9f85321399c29baf93545152d74a49d92f2f55302f122007cfda00", + "sha256:a22f4e26400f7f48faef2d69c20dc055a1f3043d330923f9abe08ea0aecc44df", + "sha256:a53dfe8f82b715319e9953330fa5c8708b610d48b5c59f1316337302af5c0811", + "sha256:a771dc64fa44ebe58d65768d869fcfb9060169d203446c1d446e844b62bdfdca", + "sha256:a814dc3100e8a046ff48faeaa909e80cdb358411a3d6dd5293158425c684eda8", + "sha256:a8870983af660798dc1b529e1fd6f1cefd94e45135a32e58bd70edd694540f33", + "sha256:ac0adfdb3a21dc2a24ed728b61e72440d297d0fd3a577389df566651fcd08f97", + "sha256:b395121e9bbe8d02a750886f108d540abe66075e61e22f7353d9acb0b81be0f0", + "sha256:b9505a0c8579899057cbefd4ec34d865ab99852baf1ff33a9481eb3924e2da0b", + "sha256:c0a5b1c22c82831f56f2f7ad9bbe4948879762fe0d59833a4a71f16e5fa0f682", + "sha256:c3967dcc1cd2ea61b08b0b276659242cbce5caca39e7cbc02408222fb9e6ff39", + "sha256:c6f4c2027689093775fd58ca2388d58789009116844432d920e9147f91acbe64", + "sha256:c9d86401550b09a55410f32ceb5fe7efcd998bd2dad9e82521713cb148a4a15f", + "sha256:cd468ec62257bb4544989402b19d795d2305eccb06cde5da0eb739b63dc04665", + "sha256:cfcfb73aed40f550a57ea904629bdaf2e562c68fa1164fa4588e752af6efdc3f", + "sha256:d0dd943282231480aad5f50f89bdf26690c995e8ff555f26d8a5b9887b559bcc", + "sha256:d3c59a06c2c28a81a026ff11fbf012081ea34fb9b7052f2ed0366e14896f0a1d", + "sha256:d45b75b0f3fd8d99f62eb7908cfa6d727b7ed190737dec7fe46d993da550b81a", + "sha256:d46d5069e2eeda111d6f71970e341f4bd9aeeee92074e649ae263b834286ecc0", + "sha256:d58ec349e0c2c0bc6669bf2cd4982d2f93bf067860d23a0ea1fe677b0f0b1e09", + "sha256:db1b3ccb93488328c74e97ff888604a8b95ae4f35f4f56677ca57a4fc3a4220b", + "sha256:dd65695a8df1233309b701dec2539cc4b11e97d4fcc0f4185b4a12ce54db0491", + "sha256:f9482c2ed414781c0af0b35d9d575226da6b728bd1a720668fa05837184965b7", + "sha256:f9671e7282d8c6fcabc32c0fb8d7c0ea8894ae85cee89c9aadc2d7129e1a9954", + "sha256:fad7a051e07f64e297e6e8399b4d6a3bdcad3d7297409e9a06ef8cbccff4f501", + "sha256:ffb08f2a1e59d38c7b8b9ac8083c9c8b9875f0955b1e9b9b9a965607a51f8e54" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==3.0.3" + "version": "==3.1.0" }, "gunicorn": { "hashes": [ @@ -833,99 +840,101 @@ }, "multidict": { "hashes": [ - "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556", - "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c", - "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29", - "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b", - "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8", - "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7", - "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd", - "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40", - "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6", - "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3", - "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c", - "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9", - "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5", - "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae", - "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442", - "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9", - "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc", - "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c", - "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea", - "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5", - "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50", - "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182", - "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453", - "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e", - "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600", - "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733", - "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda", - "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241", - "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461", - "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e", - "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e", - "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b", - "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e", - "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7", - "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386", - "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd", - "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9", - "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf", - "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee", - "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5", - "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a", - "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271", - "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54", - "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4", - "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496", - "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb", - "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319", - "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3", - "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f", - "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527", - "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed", - "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604", - "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef", - "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8", - "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5", - "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5", - "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626", - "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c", - "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d", - "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c", - "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc", - "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc", - "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b", - "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38", - "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450", - "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1", - "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f", - "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3", - "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755", - "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226", - "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a", - "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046", - "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf", - "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479", - "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e", - "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1", - "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a", - "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83", - "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929", - "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93", - "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a", - "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c", - "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44", - "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89", - "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba", - "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e", - "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da", - "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24", - "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423", - "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef" + "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f", + "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056", + "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761", + "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3", + "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b", + "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6", + "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748", + "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966", + "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f", + "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1", + "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6", + "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada", + "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305", + "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2", + "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d", + "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a", + "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef", + "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c", + "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb", + "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60", + "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6", + "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4", + "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478", + "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81", + "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7", + "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56", + "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3", + "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6", + "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30", + "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb", + "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506", + "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0", + "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925", + "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c", + "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6", + "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e", + "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95", + "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2", + "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133", + "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2", + "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa", + "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3", + "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3", + "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436", + "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657", + "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581", + "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492", + "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43", + "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2", + "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2", + "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926", + "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057", + "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc", + "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80", + "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255", + "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1", + "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972", + "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53", + "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1", + "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423", + "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a", + "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160", + "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c", + "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd", + "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa", + "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5", + "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b", + "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa", + "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef", + "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44", + "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4", + "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156", + "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753", + "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28", + "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d", + "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a", + "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304", + "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008", + "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429", + "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72", + "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399", + "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3", + "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392", + "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167", + "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c", + "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774", + "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351", + "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76", + "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875", + "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd", + "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28", + "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db" ], - "markers": "python_version >= '3.7'", - "version": "==6.0.5" + "markers": "python_version >= '3.8'", + "version": "==6.1.0" }, "numpy": { "hashes": [ @@ -1112,107 +1121,107 @@ }, "pydantic": { "hashes": [ - "sha256:c7a8a9fdf7d100afa49647eae340e2d23efa382466a8d177efcd1381e9be5598", - "sha256:f66a7073abd93214a20c5f7b32d56843137a7a2e70d02111f3be287035c45370" + "sha256:1363c7d975c7036df0db2b4a61f2e062fbc0aa5ab5f2772e0ffc7191a4f4bce2", + "sha256:7aff4db5fdf3cf573d4b3c30926a510a10e19a0774d38fc4967f78beb6deb612" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.9.0" + "version": "==2.9.1" }, "pydantic-core": { "hashes": [ - "sha256:0102e49ac7d2df3379ef8d658d3bc59d3d769b0bdb17da189b75efa861fc07b4", - "sha256:0123655fedacf035ab10c23450163c2f65a4174f2bb034b188240a6cf06bb123", - "sha256:043ef8469f72609c4c3a5e06a07a1f713d53df4d53112c6d49207c0bd3c3bd9b", - "sha256:0448b81c3dfcde439551bb04a9f41d7627f676b12701865c8a2574bcea034437", - "sha256:05b366fb8fe3d8683b11ac35fa08947d7b92be78ec64e3277d03bd7f9b7cda79", - "sha256:07049ec9306ec64e955b2e7c40c8d77dd78ea89adb97a2013d0b6e055c5ee4c5", - "sha256:084414ffe9a85a52940b49631321d636dadf3576c30259607b75516d131fecd0", - "sha256:086c5db95157dc84c63ff9d96ebb8856f47ce113c86b61065a066f8efbe80acf", - "sha256:12625e69b1199e94b0ae1c9a95d000484ce9f0182f9965a26572f054b1537e44", - "sha256:16b25a4a120a2bb7dab51b81e3d9f3cde4f9a4456566c403ed29ac81bf49744f", - "sha256:19f1352fe4b248cae22a89268720fc74e83f008057a652894f08fa931e77dced", - "sha256:1a2ab4f410f4b886de53b6bddf5dd6f337915a29dd9f22f20f3099659536b2f6", - "sha256:1c7b81beaf7c7ebde978377dc53679c6cba0e946426fc7ade54251dfe24a7604", - "sha256:1cf842265a3a820ebc6388b963ead065f5ce8f2068ac4e1c713ef77a67b71f7c", - "sha256:1eb37f7d6a8001c0f86dc8ff2ee8d08291a536d76e49e78cda8587bb54d8b329", - "sha256:23af245b8f2f4ee9e2c99cb3f93d0e22fb5c16df3f2f643f5a8da5caff12a653", - "sha256:257d6a410a0d8aeb50b4283dea39bb79b14303e0fab0f2b9d617701331ed1515", - "sha256:276ae78153a94b664e700ac362587c73b84399bd1145e135287513442e7dfbc7", - "sha256:2b1a195efd347ede8bcf723e932300292eb13a9d2a3c1f84eb8f37cbbc905b7f", - "sha256:329a721253c7e4cbd7aad4a377745fbcc0607f9d72a3cc2102dd40519be75ed2", - "sha256:358331e21a897151e54d58e08d0219acf98ebb14c567267a87e971f3d2a3be59", - "sha256:3649bd3ae6a8ebea7dc381afb7f3c6db237fc7cebd05c8ac36ca8a4187b03b30", - "sha256:3713dc093d5048bfaedbba7a8dbc53e74c44a140d45ede020dc347dda18daf3f", - "sha256:3ef71ec876fcc4d3bbf2ae81961959e8d62f8d74a83d116668409c224012e3af", - "sha256:41ae8537ad371ec018e3c5da0eb3f3e40ee1011eb9be1da7f965357c4623c501", - "sha256:4a801c5e1e13272e0909c520708122496647d1279d252c9e6e07dac216accc41", - "sha256:4c83c64d05ffbbe12d4e8498ab72bdb05bcc1026340a4a597dc647a13c1605ec", - "sha256:4cebb9794f67266d65e7e4cbe5dcf063e29fc7b81c79dc9475bd476d9534150e", - "sha256:5668b3173bb0b2e65020b60d83f5910a7224027232c9f5dc05a71a1deac9f960", - "sha256:56e6a12ec8d7679f41b3750ffa426d22b44ef97be226a9bab00a03365f217b2b", - "sha256:582871902e1902b3c8e9b2c347f32a792a07094110c1bca6c2ea89b90150caac", - "sha256:5c8aa40f6ca803f95b1c1c5aeaee6237b9e879e4dfb46ad713229a63651a95fb", - "sha256:5d813fd871b3d5c3005157622ee102e8908ad6011ec915a18bd8fde673c4360e", - "sha256:5dd0ec5f514ed40e49bf961d49cf1bc2c72e9b50f29a163b2cc9030c6742aa73", - "sha256:5f3cf3721eaf8741cffaf092487f1ca80831202ce91672776b02b875580e174a", - "sha256:6294907eaaccf71c076abdd1c7954e272efa39bb043161b4b8aa1cd76a16ce43", - "sha256:64d094ea1aa97c6ded4748d40886076a931a8bf6f61b6e43e4a1041769c39dd2", - "sha256:6650a7bbe17a2717167e3e23c186849bae5cef35d38949549f1c116031b2b3aa", - "sha256:67b6655311b00581914aba481729971b88bb8bc7996206590700a3ac85e457b8", - "sha256:6b06c5d4e8701ac2ba99a2ef835e4e1b187d41095a9c619c5b185c9068ed2a49", - "sha256:6ce883906810b4c3bd90e0ada1f9e808d9ecf1c5f0b60c6b8831d6100bcc7dd6", - "sha256:6db09153d8438425e98cdc9a289c5fade04a5d2128faff8f227c459da21b9703", - "sha256:6f80fba4af0cb1d2344869d56430e304a51396b70d46b91a55ed4959993c0589", - "sha256:743e5811b0c377eb830150d675b0847a74a44d4ad5ab8845923d5b3a756d8100", - "sha256:753294d42fb072aa1775bfe1a2ba1012427376718fa4c72de52005a3d2a22178", - "sha256:7568f682c06f10f30ef643a1e8eec4afeecdafde5c4af1b574c6df079e96f96c", - "sha256:7706e15cdbf42f8fab1e6425247dfa98f4a6f8c63746c995d6a2017f78e619ae", - "sha256:785e7f517ebb9890813d31cb5d328fa5eda825bb205065cde760b3150e4de1f7", - "sha256:7a05c0240f6c711eb381ac392de987ee974fa9336071fb697768dfdb151345ce", - "sha256:7ce7eaf9a98680b4312b7cebcdd9352531c43db00fca586115845df388f3c465", - "sha256:7ce8e26b86a91e305858e018afc7a6e932f17428b1eaa60154bd1f7ee888b5f8", - "sha256:7d0324a35ab436c9d768753cbc3c47a865a2cbc0757066cb864747baa61f6ece", - "sha256:7e9b24cca4037a561422bf5dc52b38d390fb61f7bfff64053ce1b72f6938e6b2", - "sha256:810ca06cca91de9107718dc83d9ac4d2e86efd6c02cba49a190abcaf33fb0472", - "sha256:820f6ee5c06bc868335e3b6e42d7ef41f50dfb3ea32fbd523ab679d10d8741c0", - "sha256:82764c0bd697159fe9947ad59b6db6d7329e88505c8f98990eb07e84cc0a5d81", - "sha256:8ae65fdfb8a841556b52935dfd4c3f79132dc5253b12c0061b96415208f4d622", - "sha256:8d5b0ff3218858859910295df6953d7bafac3a48d5cd18f4e3ed9999efd2245f", - "sha256:95d6bf449a1ac81de562d65d180af5d8c19672793c81877a2eda8fde5d08f2fd", - "sha256:964c7aa318da542cdcc60d4a648377ffe1a2ef0eb1e996026c7f74507b720a78", - "sha256:96ef39add33ff58cd4c112cbac076726b96b98bb8f1e7f7595288dcfb2f10b57", - "sha256:a6612c2a844043e4d10a8324c54cdff0042c558eef30bd705770793d70b224aa", - "sha256:a8031074a397a5925d06b590121f8339d34a5a74cfe6970f8a1124eb8b83f4ac", - "sha256:aab9e522efff3993a9e98ab14263d4e20211e62da088298089a03056980a3e69", - "sha256:ae579143826c6f05a361d9546446c432a165ecf1c0b720bbfd81152645cb897d", - "sha256:ae90b9e50fe1bd115b24785e962b51130340408156d34d67b5f8f3fa6540938e", - "sha256:b18cf68255a476b927910c6873d9ed00da692bb293c5b10b282bd48a0afe3ae2", - "sha256:b7efb12e5071ad8d5b547487bdad489fbd4a5a35a0fc36a1941517a6ad7f23e0", - "sha256:c4d9f15ffe68bcd3898b0ad7233af01b15c57d91cd1667f8d868e0eacbfe3f87", - "sha256:c53100c8ee5a1e102766abde2158077d8c374bee0639201f11d3032e3555dfbc", - "sha256:c57e493a0faea1e4c38f860d6862ba6832723396c884fbf938ff5e9b224200e2", - "sha256:c8319e0bd6a7b45ad76166cc3d5d6a36c97d0c82a196f478c3ee5346566eebfd", - "sha256:caffda619099cfd4f63d48462f6aadbecee3ad9603b4b88b60cb821c1b258576", - "sha256:cc0c316fba3ce72ac3ab7902a888b9dc4979162d320823679da270c2d9ad0cad", - "sha256:cdd02a08205dc90238669f082747612cb3c82bd2c717adc60f9b9ecadb540f80", - "sha256:d50ac34835c6a4a0d456b5db559b82047403c4317b3bc73b3455fefdbdc54b0a", - "sha256:d6b9dd6aa03c812017411734e496c44fef29b43dba1e3dd1fa7361bbacfc1354", - "sha256:da3131ef2b940b99106f29dfbc30d9505643f766704e14c5d5e504e6a480c35e", - "sha256:da43cbe593e3c87d07108d0ebd73771dc414488f1f91ed2e204b0370b94b37ac", - "sha256:dd59638025160056687d598b054b64a79183f8065eae0d3f5ca523cde9943940", - "sha256:e1895e949f8849bc2757c0dbac28422a04be031204df46a56ab34bcf98507342", - "sha256:e1a79ad49f346aa1a2921f31e8dbbab4d64484823e813a002679eaa46cba39e1", - "sha256:e460475719721d59cd54a350c1f71c797c763212c836bf48585478c5514d2854", - "sha256:e64ffaf8f6e17ca15eb48344d86a7a741454526f3a3fa56bc493ad9d7ec63936", - "sha256:e6e3ccebdbd6e53474b0bb7ab8b88e83c0cfe91484b25e058e581348ee5a01a5", - "sha256:e758d271ed0286d146cf7c04c539a5169a888dd0b57026be621547e756af55bc", - "sha256:f087879f1ffde024dd2788a30d55acd67959dcf6c431e9d3682d1c491a0eb474", - "sha256:f477d26183e94eaafc60b983ab25af2a809a1b48ce4debb57b343f671b7a90b6", - "sha256:fc535cb898ef88333cf317777ecdfe0faac1c2a3187ef7eb061b6f7ecf7e6bae" + "sha256:01491d8b4d8db9f3391d93b0df60701e644ff0894352947f31fff3e52bd5c801", + "sha256:03667cec5daf43ac4995cefa8aaf58f99de036204a37b889c24a80927b629cec", + "sha256:03795b9e8a5d7fda05f3873efc3f59105e2dcff14231680296b87b80bb327295", + "sha256:047531242f8e9c2db733599f1c612925de095e93c9cc0e599e96cf536aaf56ba", + "sha256:04b07490bc2f6f2717b10c3969e1b830f5720b632f8ae2f3b8b1542394c47a8e", + "sha256:09e926397f392059ce0afdcac920df29d9c833256354d0c55f1584b0b70cf07e", + "sha256:0a0137ddf462575d9bce863c4c95bac3493ba8e22f8c28ca94634b4a1d3e2bb4", + "sha256:0dda0290a6f608504882d9f7650975b4651ff91c85673341789a476b1159f211", + "sha256:13dd45ba2561603681a2676ca56006d6dee94493f03d5cadc055d2055615c3ea", + "sha256:1c3980f2843de5184656aab58698011b42763ccba11c4a8c35936c8dd6c7068c", + "sha256:1eba2f7ce3e30ee2170410e2171867ea73dbd692433b81a93758ab2de6c64835", + "sha256:203171e48946c3164fe7691fc349c79241ff8f28306abd4cad5f4f75ed80bc8d", + "sha256:255ec6dcb899c115f1e2a64bc9ebc24cc0e3ab097775755244f77360d1f3c06c", + "sha256:2718443bc671c7ac331de4eef9b673063b10af32a0bb385019ad61dcf2cc8f6c", + "sha256:2b2b55b0448e9da68f56b696f313949cda1039e8ec7b5d294285335b53104b61", + "sha256:2b603cde285322758a0279995b5796d64b63060bfbe214b50a3ca23b5cee3e83", + "sha256:2b676583fc459c64146debea14ba3af54e540b61762dfc0613dc4e98c3f66eeb", + "sha256:37ba321ac2a46100c578a92e9a6aa33afe9ec99ffa084424291d84e456f490c1", + "sha256:3c09a7885dd33ee8c65266e5aa7fb7e2f23d49d8043f089989726391dd7350c5", + "sha256:3cb0f65d8b4121c1b015c60104a685feb929a29d7cf204387c7f2688c7974690", + "sha256:40b8441be16c1e940abebed83cd006ddb9e3737a279e339dbd6d31578b802f7b", + "sha256:40d9bd259538dba2f40963286009bf7caf18b5112b19d2b55b09c14dde6db6a7", + "sha256:4b259fd8409ab84b4041b7b3f24dcc41e4696f180b775961ca8142b5b21d0e70", + "sha256:4f62c1c953d7ee375df5eb2e44ad50ce2f5aff931723b398b8bc6f0ac159791a", + "sha256:50e4661f3337977740fdbfbae084ae5693e505ca2b3130a6d4eb0f2281dc43b8", + "sha256:510b7fb0a86dc8f10a8bb43bd2f97beb63cffad1203071dc434dac26453955cd", + "sha256:5499798317fff7f25dbef9347f4451b91ac2a4330c6669821c8202fd354c7bee", + "sha256:560e32f0df04ac69b3dd818f71339983f6d1f70eb99d4d1f8e9705fb6c34a5c1", + "sha256:59d52cf01854cb26c46958552a21acb10dd78a52aa34c86f284e66b209db8cab", + "sha256:5a8cd3074a98ee70173a8633ad3c10e00dcb991ecec57263aacb4095c5efb958", + "sha256:5b01a078dd4f9a52494370af21aa52964e0a96d4862ac64ff7cea06e0f12d2c5", + "sha256:6470b5a1ec4d1c2e9afe928c6cb37eb33381cab99292a708b8cb9aa89e62429b", + "sha256:65b6e5da855e9c55a0c67f4db8a492bf13d8d3316a59999cfbaf98cc6e401961", + "sha256:67a5def279309f2e23014b608c4150b0c2d323bd7bccd27ff07b001c12c2415c", + "sha256:68f4cf373f0de6abfe599a38307f4417c1c867ca381c03df27c873a9069cda25", + "sha256:6b5547d098c76e1694ba85f05b595720d7c60d342f24d5aad32c3049131fa5c4", + "sha256:6cb968da9a0746a0cf521b2b5ef25fc5a0bee9b9a1a8214e0a1cfaea5be7e8a4", + "sha256:6daaf5b1ba1369a22c8b050b643250e3e5efc6a78366d323294aee54953a4d5f", + "sha256:7200fd561fb3be06827340da066df4311d0b6b8eb0c2116a110be5245dceb326", + "sha256:748bdf985014c6dd3e1e4cc3db90f1c3ecc7246ff5a3cd4ddab20c768b2f1dab", + "sha256:76bdab0de4acb3f119c2a4bff740e0c7dc2e6de7692774620f7452ce11ca76c8", + "sha256:7e6f33503c5495059148cc486867e1d24ca35df5fc064686e631e314d959ad5b", + "sha256:7f10a5d1b9281392f1bf507d16ac720e78285dfd635b05737c3911637601bae6", + "sha256:82da2f4703894134a9f000e24965df73cc103e31e8c31906cc1ee89fde72cbd8", + "sha256:86fc6c762ca7ac8fbbdff80d61b2c59fb6b7d144aa46e2d54d9e1b7b0e780e01", + "sha256:87cfa0ed6b8c5bd6ae8b66de941cece179281239d482f363814d2b986b79cedc", + "sha256:89b731f25c80830c76fdb13705c68fef6a2b6dc494402987c7ea9584fe189f5d", + "sha256:8b2682038e255e94baf2c473dca914a7460069171ff5cdd4080be18ab8a7fd6e", + "sha256:8b5b3ed73abb147704a6e9f556d8c5cb078f8c095be4588e669d315e0d11893b", + "sha256:8e22b477bf90db71c156f89a55bfe4d25177b81fce4aa09294d9e805eec13855", + "sha256:9172d2088e27d9a185ea0a6c8cebe227a9139fd90295221d7d495944d2367700", + "sha256:94f85614f2cba13f62c3c6481716e4adeae48e1eaa7e8bac379b9d177d93947a", + "sha256:98ccd69edcf49f0875d86942f4418a4e83eb3047f20eb897bffa62a5d419c8fa", + "sha256:a0d90e08b2727c5d01af1b5ef4121d2f0c99fbee692c762f4d9d0409c9da6541", + "sha256:a3fc572d9b5b5cfe13f8e8a6e26271d5d13f80173724b738557a8c7f3a8a3791", + "sha256:a678c1ac5c5ec5685af0133262103defb427114e62eafeda12f1357a12140162", + "sha256:a7f7f72f721223f33d3dc98a791666ebc6a91fa023ce63733709f4894a7dc611", + "sha256:bb68b41c3fa64587412b104294b9cbb027509dc2f6958446c502638d481525ef", + "sha256:bbb5e45eab7624440516ee3722a3044b83fff4c0372efe183fd6ba678ff681fe", + "sha256:c24574c7e92e2c56379706b9a3f07c1e0c7f2f87a41b6ee86653100c4ce343e5", + "sha256:c483dab0f14b8d3f0df0c6c18d70b21b086f74c87ab03c59250dbf6d3c89baba", + "sha256:c6de1ec30c4bb94f3a69c9f5f2182baeda5b809f806676675e9ef6b8dc936f28", + "sha256:c744fa100fdea0d000d8bcddee95213d2de2e95b9c12be083370b2072333a0fa", + "sha256:c889fd87e1f1bbeb877c2ee56b63bb297de4636661cc9bbfcf4b34e5e925bc27", + "sha256:cbaaf2ef20d282659093913da9d402108203f7cb5955020bd8d1ae5a2325d1c4", + "sha256:ce3317d155628301d649fe5e16a99528d5680af4ec7aa70b90b8dacd2d725c9b", + "sha256:d015e63b985a78a3d4ccffd3bdf22b7c20b3bbd4b8227809b3e8e75bc37f9cb2", + "sha256:d063c6b9fed7d992bcbebfc9133f4c24b7a7f215d6b102f3e082b1117cddb72c", + "sha256:d965e8b325f443ed3196db890d85dfebbb09f7384486a77461347f4adb1fa7f8", + "sha256:db6e6afcb95edbe6b357786684b71008499836e91f2a4a1e55b840955b341dbb", + "sha256:dc1636770a809dee2bd44dd74b89cc80eb41172bcad8af75dd0bc182c2666d4c", + "sha256:dd9be0a42de08f4b58a3cc73a123f124f65c24698b95a54c1543065baca8cf0e", + "sha256:e0ec50663feedf64d21bad0809f5857bac1ce91deded203efc4a84b31b2e4305", + "sha256:e2c409ce1c219c091e47cb03feb3c4ed8c2b8e004efc940da0166aaee8f9d6c8", + "sha256:e61328920154b6a44d98cabcb709f10e8b74276bc709c9a513a8c37a18786cc4", + "sha256:e89513f014c6be0d17b00a9a7c81b1c426f4eb9224b15433f3d98c1a071f8433", + "sha256:ea85bda3189fb27503af4c45273735bcde3dd31c1ab17d11f37b04877859ef45", + "sha256:edbefe079a520c5984e30e1f1f29325054b59534729c25b874a16a5048028d16", + "sha256:f0cb80fd5c2df4898693aa841425ea1727b1b6d2167448253077d2a49003e0ed", + "sha256:f2b05e6ccbee333a8f4b8f4d7c244fdb7a979e90977ad9c51ea31261e2085ce0", + "sha256:f399e8657c67313476a121a6944311fab377085ca7f490648c9af97fc732732d", + "sha256:f4a57db8966b3a1d1a350012839c6a0099f0898c56512dfade8a1fe5fb278710", + "sha256:f56af3a420fb1ffaf43ece3ea09c2d27c444e7c40dcb7c6e7cf57aae764f2b48", + "sha256:f6bd91345b5163ee7448bee201ed7dd601ca24f43f439109b0212e296eb5b423", + "sha256:fb539d7e5dc4aac345846f290cf504d2fd3c1be26ac4e8b5e4c2b688069ff4cf", + "sha256:fbdce4b47592f9e296e19ac31667daed8753c8367ebb34b9a9bd89dacaa299c9", + "sha256:fc379c73fd66606628b866f661e8785088afe2adaba78e6bbe80796baf708a63", + "sha256:fc3cf31edf405a161a0adad83246568647c54404739b614b1ff43dad2b02e6d5", + "sha256:fcf31facf2796a2d3b7fe338fe8640aa0166e4e55b4cb108dbfd1058049bf4cb" ], "markers": "python_version >= '3.8'", - "version": "==2.23.2" + "version": "==2.23.3" }, "pyjwt": { "hashes": [ @@ -1232,10 +1241,10 @@ }, "pytz": { "hashes": [ - "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", - "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319" + "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", + "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725" ], - "version": "==2024.1" + "version": "==2024.2" }, "pyyaml": { "hashes": [ @@ -1475,16 +1484,16 @@ "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd", "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252" ], - "markers": "python_version >= '3.9'", + "markers": "python_version >= '2'", "version": "==2024.1" }, "urllib3": { "hashes": [ - "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", - "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168" + "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" ], - "markers": "python_version >= '3.8'", - "version": "==2.2.2" + "markers": "python_version >= '3.10'", + "version": "==2.2.3" }, "werkzeug": { "hashes": [ @@ -1496,101 +1505,101 @@ }, "yarl": { "hashes": [ - "sha256:012c506b2c23be4500fb97509aa7e6a575996fb317b80667fa26899d456e2aaf", - "sha256:030d41d48217b180c5a176e59c49d212d54d89f6f53640fa4c1a1766492aec27", - "sha256:044b76d069e69c6b0246f071ebac0576f89c772f806d66ef51e662bd015d03c7", - "sha256:05b07e6e0f715eaae9d927a302d9220724392f3c0b4e7f8dfa174bf2e1b8433e", - "sha256:0b3bf343b4ef9ec600d75363eb9b48ab3bd53b53d4e1c5a9fbf0cfe7ba73a47f", - "sha256:0e0aea8319fdc1ac340236e58b0b7dc763621bce6ce98124a9d58104cafd0aaa", - "sha256:11f7f8a72b3e26c533fa7ffa7a8068f4e3aad7b67c5cf7b17ea8c79fc81d9830", - "sha256:1718c0bca5a61edac7a57dcc11856cb01bde13a9360a3cb6baf384b89cfc0b40", - "sha256:179b1df5e9cd99234ea65e63d5bfc6dd524b2c3b6cf68a14b94ccbe01ab37ddd", - "sha256:1824bfb932d8100e5c94f4f98c078f23ebc6f6fa93acc3d95408762089c54a06", - "sha256:183136dc5d5411872e7529c924189a2e26fac5a7f9769cf13ef854d1d653ad36", - "sha256:183dd37bb5471e8017ab8a998c1ea070b4a0b08a97a7c4e20e0c7ccbe8ebb999", - "sha256:18b7ce6d8c35da8e16dcc8de124a80e250fc8c73f8c02663acf2485c874f1972", - "sha256:18bc4600eed1907762c1816bb16ac63bc52912e53b5e9a353eb0935a78e95496", - "sha256:190e70d2f9f16f1c9d666c103d635c9ed4bf8de7803e9fa0495eec405a3e96a8", - "sha256:1ea30675fbf0ad6795c100da677ef6a8960a7db05ac5293f02a23c2230203c89", - "sha256:1eafa7317063de4bc310716cdd9026c13f00b1629e649079a6908c3aafdf5046", - "sha256:23057a004bc9735008eb2a04b6ce94c6c06219cdf2b193997fd3ae6039eb3196", - "sha256:273baee8a8af5989d5aab51c740e65bc2b1fc6619b9dd192cd16a3fae51100be", - "sha256:293f7c2b30d015de3f1441c4ee764963b86636fde881b4d6093498d1e8711f69", - "sha256:2b922c32a1cff62bc43d408d1a8745abeed0a705793f2253c622bf3521922198", - "sha256:308d1cce071b5b500e3d95636bbf15dfdb8e87ed081b893555658a7f9869a156", - "sha256:30dde3a8b88c80a4f049eb4dd240d2a02e89174da6be2525541f949bf9fa38ab", - "sha256:315e8853d0ea46aabdce01f1f248fff7b9743de89b555c5f0487f54ac84beae8", - "sha256:32d2e46848dea122484317485129f080220aa84aeb6a9572ad9015107cebeb07", - "sha256:32e79d5ae975f7c2cc29f7104691fc9be5ee3724f24e1a7254d72f6219672108", - "sha256:3352c69dc235850d6bf8ddad915931f00dcab208ac4248b9af46175204c2f5f9", - "sha256:347011ad09a8f9be3d41fe2d7d611c3a4de4d49aa77bcb9a8c03c7a82fc45248", - "sha256:348ad53acd41caa489df7db352d620c982ab069855d9635dda73d685bbbc3636", - "sha256:3576ed2c51f8525d4ff5c3279247aacff9540bb43b292c4a37a8e6c6e1691adb", - "sha256:36d12d78b8b0d46099d413c8689b5510ad9ce5e443363d1c37b6ac5b3d7cbdfb", - "sha256:3bf10a395adac62177ba8ea738617e8de6cbb1cea6aa5d5dd2accde704fc8195", - "sha256:48a48261f8d610b0e15fed033e74798763bc2f8f2c0d769a2a0732511af71f1e", - "sha256:493ad061ee025c5ed3a60893cd70204eead1b3f60ccc90682e752f95b845bd46", - "sha256:4c46454fafa31f7241083a0dd21814f63e0fcb4ae49662dc7e286fd6a5160ea1", - "sha256:4cca9ba00be4bb8a051c4007b60fc91d6c9728c8b70c86cee4c24be9d641002f", - "sha256:4f6ac063a4e9bbd4f6cc88cc621516a44d6aec66862ea8399ba063374e4b12c7", - "sha256:52d1ae09b0764017e330bb5bf9af760c0168c564225085bb806f687bccffda8a", - "sha256:534b8bc181dca1691cf491c263e084af678a8fb6b6181687c788027d8c317026", - "sha256:54a4b5e6a060d46cad6a3cf340f4cb268e6fbc89c589d82a2da58f7db47c47c8", - "sha256:5b46c603bee1f2dd407b8358c2afc9b0472a22ccca528f114e1f4cd30dfecd22", - "sha256:5cece693380c1c4a606cdcaa0c54eda8f72cfe1ba83f5149b9023bb955e8fa8e", - "sha256:5d0c9e1dcc92d46ca89608fe4763fc2362f1e81c19a922c67dbc0f20951466e4", - "sha256:5f3372f9ae1d1f001826b77d0b29d4220e84f6c5f53915e71a825cdd02600065", - "sha256:5f769c2708c31227c5349c3e4c668c8b4b2e25af3e7263723f2ef33e8e3906a0", - "sha256:6026a6ef14d038a38ca9d81422db4b6bb7d5da94f9d08f21e0ad9ebd9c4bc3bb", - "sha256:637dd0f55d1781d4634c23994101c509e455b5ab61af9086b5763b7eca9359aa", - "sha256:687131ee4d045f3d58128ca28f5047ec902f7760545c39bbe003cc737c5a02b5", - "sha256:6bc602c7413e1b5223bc988947125998cb54d6184de45a871985daacc23e6c8c", - "sha256:6e91ed5f6818e1e3806eaeb7b14d9e17b90340f23089451ea59a89a29499d760", - "sha256:6eec21d8c3aa932c5a89480b58fa877e9c48092ab838ccc76788cbc917ceec0d", - "sha256:6f4f43ba30d604ba391bc7fe2dd104d6b87b62b0de4bbde79e362524b8a1eb75", - "sha256:6f64f8681671624f539eea5564518bc924524c25eb90ab24a7eddc2d872e668e", - "sha256:762a196612c2aba4197cd271da65fe08308f7ddf130dc63842c7a76d774b6a2c", - "sha256:88173836a25b7e5dce989eeee3b92d8ef5cdf512830d4155c6212de98e616f70", - "sha256:8c6214071f653d21bb7b43f7ee519afcbf7084263bb43408f4939d14558290db", - "sha256:8d7bd531d7eec4aa7ef8a99fef91962eeea5158a53af0ec507c476ddf8ebc29c", - "sha256:8e69b55965a47dd6c79e578abd7d85637b1bb4a7565436630826bdb28aa9b7ad", - "sha256:90fd64ce00f594db02f603efa502521c440fa1afcf6266be82eb31f19d2d9561", - "sha256:96422a3322b4d954f4c52403a2fc129ad118c151ee60a717847fb46a8480d1e1", - "sha256:99e7459ee86a3b81e57777afd3825b8b1acaac8a99f9c0bd02415d80eb3c371b", - "sha256:99eaa7d53f509ba1c2fea8fdfec15ba3cd36caca31d57ec6665073b148b5f260", - "sha256:9a8d6a0e2b5617b5c15c59db25f20ba429f1fea810f2c09fbf93067cb21ab085", - "sha256:9b6d0d7522b514f054b359409817af4c5ed76fa4fe42d8bd1ed12956804cf595", - "sha256:9ef7ce61958b3c7b2e2e0927c52d35cf367c5ee410e06e1337ecc83a90c23b95", - "sha256:a162cf04fd1e8d81025ec651d14cac4f6e0ca73a3c0a9482de8691b944e3098a", - "sha256:a80cdb3c15c15b33ecdb080546dcb022789b0084ca66ad41ffa0fe09857fca11", - "sha256:a9d8c4be5658834dc688072239d220631ad4b71ff79a5f3d17fb653f16d10759", - "sha256:aa1aeb99408be0ca774c5126977eb085fedda6dd7d9198ce4ceb2d06a44325c7", - "sha256:af5b52bfbbd5eb208cf1afe23c5ada443929e9b9d79e9fbc66cacc07e4e39748", - "sha256:b453b3dbc1ed4c2907632d05b378123f3fb411cad05d8d96de7d95104ef11c70", - "sha256:b80246bdee036381636e73ef0f19b032912064622b0e5ee44f6960fd11df12aa", - "sha256:bc544248b5263e1c0f61332ccf35e37404b54213f77ed17457f857f40af51452", - "sha256:bc66927f6362ed613a483c22618f88f014994ccbd0b7a25ec1ebc8c472d4b40a", - "sha256:be199fed28861d72df917e355287ad6835555d8210e7f8203060561f24d7d842", - "sha256:beda87b63c08fb4df8cc5353eeefe68efe12aa4f5284958bd1466b14c85e508e", - "sha256:bf733c835ebbd52bd78a52b919205e0f06d8571f71976a0259e5bcc20d0a2f44", - "sha256:c1bf63ba496cd4f12d30e916d9a52daa6c91433fedd9cd0d99fef3e13232836f", - "sha256:c382e189af10070bcb39caa9406b9cc47b26c1d2257979f11fe03a38be09fea9", - "sha256:c4d13071c5b99974cfe2f94c749ecc4baf882f7c4b6e4c40ca3d15d1b7e81f24", - "sha256:c5527d32506c11150ca87f33820057dc284e2a01a87f0238555cada247a8b278", - "sha256:c77a3c10af4aaf8891578fe492ef0990c65cf7005dd371f5ea8007b420958bf6", - "sha256:ca42a9281807fdf8fba86e671d8fdd76f92e9302a6d332957f2bae51c774f8a7", - "sha256:cd65588273d19f8483bc8f32a6fcf602e94a9a7ba287a1725977bd9527cd6c0c", - "sha256:d2366e2f987f69752f0588d2035321aaf24272693d75f7f6bb7e8a0f48f7ccdd", - "sha256:dff84623e7098cf9bfbb5187f9883051af652b0ce08b9f7084cc8630b87b6457", - "sha256:e4657fd290d556a5f3018d07c7b7deadcb622760c0125277d10a11471c340054", - "sha256:e8da33665ecc64cd3e593098adb449f9c65b4e3bc6338e75ad592da15453d898", - "sha256:eeb6a40c5ae2616fd38c1e039c6dd50031bbfbc2acacfd7b70a5d64fafc70901", - "sha256:f8e24b9a4afdffab399191a9f0b0e80eabc7b7fdb9f2dbccdeb8e4d28e5c57bb", - "sha256:ff45a655ca51e1cb778abbb586083fddb7d896332f47bb3b03bc75e30c25649f", - "sha256:ff8e803d8ca170e632fb3b4df1bfd29ba29be8edc3e9306c5ffa5fadea234a4f" + "sha256:01a8697ec24f17c349c4f655763c4db70eebc56a5f82995e5e26e837c6eb0e49", + "sha256:02da8759b47d964f9173c8675710720b468aa1c1693be0c9c64abb9d8d9a4867", + "sha256:04293941646647b3bfb1719d1d11ff1028e9c30199509a844da3c0f5919dc520", + "sha256:067b961853c8e62725ff2893226fef3d0da060656a9827f3f520fb1d19b2b68a", + "sha256:077da604852be488c9a05a524068cdae1e972b7dc02438161c32420fb4ec5e14", + "sha256:09696438cb43ea6f9492ef237761b043f9179f455f405279e609f2bc9100212a", + "sha256:0b8486f322d8f6a38539136a22c55f94d269addb24db5cb6f61adc61eabc9d93", + "sha256:0ea9682124fc062e3d931c6911934a678cb28453f957ddccf51f568c2f2b5e05", + "sha256:0f351fa31234699d6084ff98283cb1e852270fe9e250a3b3bf7804eb493bd937", + "sha256:14438dfc5015661f75f85bc5adad0743678eefee266ff0c9a8e32969d5d69f74", + "sha256:15061ce6584ece023457fb8b7a7a69ec40bf7114d781a8c4f5dcd68e28b5c53b", + "sha256:15439f3c5c72686b6c3ff235279630d08936ace67d0fe5c8d5bbc3ef06f5a420", + "sha256:17b5a386d0d36fb828e2fb3ef08c8829c1ebf977eef88e5367d1c8c94b454639", + "sha256:18ac56c9dd70941ecad42b5a906820824ca72ff84ad6fa18db33c2537ae2e089", + "sha256:1bb2d9e212fb7449b8fb73bc461b51eaa17cc8430b4a87d87be7b25052d92f53", + "sha256:1e969fa4c1e0b1a391f3fcbcb9ec31e84440253325b534519be0d28f4b6b533e", + "sha256:1fa2e7a406fbd45b61b4433e3aa254a2c3e14c4b3186f6e952d08a730807fa0c", + "sha256:2164cd9725092761fed26f299e3f276bb4b537ca58e6ff6b252eae9631b5c96e", + "sha256:21a7c12321436b066c11ec19c7e3cb9aec18884fe0d5b25d03d756a9e654edfe", + "sha256:238a21849dd7554cb4d25a14ffbfa0ef380bb7ba201f45b144a14454a72ffa5a", + "sha256:250e888fa62d73e721f3041e3a9abf427788a1934b426b45e1b92f62c1f68366", + "sha256:25861303e0be76b60fddc1250ec5986c42f0a5c0c50ff57cc30b1be199c00e63", + "sha256:267b24f891e74eccbdff42241c5fb4f974de2d6271dcc7d7e0c9ae1079a560d9", + "sha256:27fcb271a41b746bd0e2a92182df507e1c204759f460ff784ca614e12dd85145", + "sha256:2909fa3a7d249ef64eeb2faa04b7957e34fefb6ec9966506312349ed8a7e77bf", + "sha256:3257978c870728a52dcce8c2902bf01f6c53b65094b457bf87b2644ee6238ddc", + "sha256:327c724b01b8641a1bf1ab3b232fb638706e50f76c0b5bf16051ab65c868fac5", + "sha256:3de5292f9f0ee285e6bd168b2a77b2a00d74cbcfa420ed078456d3023d2f6dff", + "sha256:3fce4da3703ee6048ad4138fe74619c50874afe98b1ad87b2698ef95bf92c96d", + "sha256:3ff6b1617aa39279fe18a76c8d165469c48b159931d9b48239065767ee455b2b", + "sha256:400cd42185f92de559d29eeb529e71d80dfbd2f45c36844914a4a34297ca6f00", + "sha256:4179522dc0305c3fc9782549175c8e8849252fefeb077c92a73889ccbcd508ad", + "sha256:4307d9a3417eea87715c9736d050c83e8c1904e9b7aada6ce61b46361b733d92", + "sha256:476e20c433b356e16e9a141449f25161e6b69984fb4cdbd7cd4bd54c17844998", + "sha256:489fa8bde4f1244ad6c5f6d11bb33e09cf0d1d0367edb197619c3e3fc06f3d91", + "sha256:48a28bed68ab8fb7e380775f0029a079f08a17799cb3387a65d14ace16c12e2b", + "sha256:48dfd117ab93f0129084577a07287376cc69c08138694396f305636e229caa1a", + "sha256:4973eac1e2ff63cf187073cd4e1f1148dcd119314ab79b88e1b3fad74a18c9d5", + "sha256:498442e3af2a860a663baa14fbf23fb04b0dd758039c0e7c8f91cb9279799bff", + "sha256:501c503eed2bb306638ccb60c174f856cc3246c861829ff40eaa80e2f0330367", + "sha256:504cf0d4c5e4579a51261d6091267f9fd997ef58558c4ffa7a3e1460bd2336fa", + "sha256:61a5f2c14d0a1adfdd82258f756b23a550c13ba4c86c84106be4c111a3a4e413", + "sha256:637c7ddb585a62d4469f843dac221f23eec3cbad31693b23abbc2c366ad41ff4", + "sha256:66b63c504d2ca43bf7221a1f72fbe981ff56ecb39004c70a94485d13e37ebf45", + "sha256:67459cf8cf31da0e2cbdb4b040507e535d25cfbb1604ca76396a3a66b8ba37a6", + "sha256:688654f8507464745ab563b041d1fb7dab5d9912ca6b06e61d1c4708366832f5", + "sha256:6907daa4b9d7a688063ed098c472f96e8181733c525e03e866fb5db480a424df", + "sha256:69721b8effdb588cb055cc22f7c5105ca6fdaa5aeb3ea09021d517882c4a904c", + "sha256:6d23754b9939cbab02c63434776df1170e43b09c6a517585c7ce2b3d449b7318", + "sha256:7175a87ab8f7fbde37160a15e58e138ba3b2b0e05492d7351314a250d61b1591", + "sha256:72bf26f66456baa0584eff63e44545c9f0eaed9b73cb6601b647c91f14c11f38", + "sha256:74db2ef03b442276d25951749a803ddb6e270d02dda1d1c556f6ae595a0d76a8", + "sha256:750f656832d7d3cb0c76be137ee79405cc17e792f31e0a01eee390e383b2936e", + "sha256:75e0ae31fb5ccab6eda09ba1494e87eb226dcbd2372dae96b87800e1dcc98804", + "sha256:768ecc550096b028754ea28bf90fde071c379c62c43afa574edc6f33ee5daaec", + "sha256:7d51324a04fc4b0e097ff8a153e9276c2593106a811704025bbc1d6916f45ca6", + "sha256:7e975a2211952a8a083d1b9d9ba26472981ae338e720b419eb50535de3c02870", + "sha256:8215f6f21394d1f46e222abeb06316e77ef328d628f593502d8fc2a9117bde83", + "sha256:8258c86f47e080a258993eed877d579c71da7bda26af86ce6c2d2d072c11320d", + "sha256:8418c053aeb236b20b0ab8fa6bacfc2feaaf7d4683dd96528610989c99723d5f", + "sha256:87f020d010ba80a247c4abc335fc13421037800ca20b42af5ae40e5fd75e7909", + "sha256:884eab2ce97cbaf89f264372eae58388862c33c4f551c15680dd80f53c89a269", + "sha256:8a336eaa7ee7e87cdece3cedb395c9657d227bfceb6781295cf56abcd3386a26", + "sha256:8aef1b64da41d18026632d99a06b3fefe1d08e85dd81d849fa7c96301ed22f1b", + "sha256:8aef97ba1dd2138112890ef848e17d8526fe80b21f743b4ee65947ea184f07a2", + "sha256:8ed653638ef669e0efc6fe2acb792275cb419bf9cb5c5049399f3556995f23c7", + "sha256:9361628f28f48dcf8b2f528420d4d68102f593f9c2e592bfc842f5fb337e44fd", + "sha256:946eedc12895873891aaceb39bceb484b4977f70373e0122da483f6c38faaa68", + "sha256:94d0caaa912bfcdc702a4204cd5e2bb01eb917fc4f5ea2315aa23962549561b0", + "sha256:964a428132227edff96d6f3cf261573cb0f1a60c9a764ce28cda9525f18f7786", + "sha256:999bfee0a5b7385a0af5ffb606393509cfde70ecca4f01c36985be6d33e336da", + "sha256:a08ea567c16f140af8ddc7cb58e27e9138a1386e3e6e53982abaa6f2377b38cc", + "sha256:a28b70c9e2213de425d9cba5ab2e7f7a1c8ca23a99c4b5159bf77b9c31251447", + "sha256:a34e1e30f1774fa35d37202bbeae62423e9a79d78d0874e5556a593479fdf239", + "sha256:a4264515f9117be204935cd230fb2a052dd3792789cc94c101c535d349b3dab0", + "sha256:a7915ea49b0c113641dc4d9338efa9bd66b6a9a485ffe75b9907e8573ca94b84", + "sha256:aac44097d838dda26526cffb63bdd8737a2dbdf5f2c68efb72ad83aec6673c7e", + "sha256:b91044952da03b6f95fdba398d7993dd983b64d3c31c358a4c89e3c19b6f7aef", + "sha256:ba444bdd4caa2a94456ef67a2f383710928820dd0117aae6650a4d17029fa25e", + "sha256:c2dc4250fe94d8cd864d66018f8344d4af50e3758e9d725e94fecfa27588ff82", + "sha256:c35f493b867912f6fda721a59cc7c4766d382040bdf1ddaeeaa7fa4d072f4675", + "sha256:c92261eb2ad367629dc437536463dc934030c9e7caca861cc51990fe6c565f26", + "sha256:ce928c9c6409c79e10f39604a7e214b3cb69552952fbda8d836c052832e6a979", + "sha256:d95b52fbef190ca87d8c42f49e314eace4fc52070f3dfa5f87a6594b0c1c6e46", + "sha256:dae7bd0daeb33aa3e79e72877d3d51052e8b19c9025ecf0374f542ea8ec120e4", + "sha256:e286580b6511aac7c3268a78cdb861ec739d3e5a2a53b4809faef6b49778eaff", + "sha256:e4b53f73077e839b3f89c992223f15b1d2ab314bdbdf502afdc7bb18e95eae27", + "sha256:e8f63904df26d1a66aabc141bfd258bf738b9bc7bc6bdef22713b4f5ef789a4c", + "sha256:f3a6d90cab0bdf07df8f176eae3a07127daafcf7457b997b2bf46776da2c7eb7", + "sha256:f41fa79114a1d2eddb5eea7b912d6160508f57440bd302ce96eaa384914cd265", + "sha256:f46f81501160c28d0c0b7333b4f7be8983dbbc161983b6fb814024d1b4952f79", + "sha256:f61db3b7e870914dbd9434b560075e0366771eecbe6d2b5561f5bc7485f39efd" ], "markers": "python_version >= '3.8'", - "version": "==1.10.0" + "version": "==1.11.1" }, "zope.event": { "hashes": [ @@ -2045,12 +2054,12 @@ }, "pytest": { "hashes": [ - "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5", - "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce" + "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", + "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==8.3.2" + "version": "==8.3.3" }, "python-dateutil": { "hashes": [ @@ -2119,11 +2128,11 @@ }, "urllib3": { "hashes": [ - "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", - "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168" + "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" ], - "markers": "python_version >= '3.8'", - "version": "==2.2.2" + "markers": "python_version >= '3.10'", + "version": "==2.2.3" }, "wrapt": { "hashes": [ diff --git a/dbrepo-analyse-service/app.py b/dbrepo-analyse-service/app.py index def401c0e28e5c16c264d5fd280e5435fc44c45e..651826558103cf1f9f0829663c24935995c4a6d1 100644 --- a/dbrepo-analyse-service/app.py +++ b/dbrepo-analyse-service/app.py @@ -188,7 +188,7 @@ template = { "info": { "title": "Database Repository Analyse Service API", "description": "Service that analyses data structures", - "version": "1.4.5", + "version": "1.4.6", "contact": { "name": "Prof. Andreas Rauber", "email": "andreas.rauber@tuwien.ac.at" @@ -200,7 +200,7 @@ template = { }, "externalDocs": { "description": "Sourcecode Documentation", - "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/" + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/" }, "servers": [ { diff --git a/dbrepo-analyse-service/lib/dbrepo-1.4.6.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.4.6.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..958287917e7f2b38a0286c3e91c2d471462bceee Binary files /dev/null and b/dbrepo-analyse-service/lib/dbrepo-1.4.6.tar.gz differ diff --git a/dbrepo-auth-service/dbrepo-realm.json b/dbrepo-auth-service/dbrepo-realm.json index 2c6effa792933ab8d68cf8286a6d5417e5119bfe..e057f778d4796aa1fd90c94c920a4abcec720de2 100644 --- a/dbrepo-auth-service/dbrepo-realm.json +++ b/dbrepo-auth-service/dbrepo-realm.json @@ -530,7 +530,7 @@ "description" : "${default-container-handling}", "composite" : true, "composites" : { - "realm" : [ "find-container", "list-containers" ] + "realm" : [ "find-container" ] }, "clientRole" : false, "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", @@ -2143,7 +2143,7 @@ "subType" : "anonymous", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "oidc-usermodel-attribute-mapper", "saml-user-attribute-mapper", "oidc-usermodel-property-mapper", "saml-role-list-mapper", "oidc-address-mapper", "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-user-property-mapper" ] + "allowed-protocol-mapper-types" : [ "saml-user-attribute-mapper", "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-address-mapper", "saml-user-property-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "saml-role-list-mapper" ] } }, { "id" : "1849e52a-b8c9-44a8-af3d-ee19376a1ed1", @@ -2169,7 +2169,7 @@ "subType" : "authenticated", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "oidc-sha256-pairwise-sub-mapper", "oidc-full-name-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper", "saml-role-list-mapper", "oidc-usermodel-attribute-mapper", "oidc-usermodel-property-mapper", "oidc-address-mapper" ] + "allowed-protocol-mapper-types" : [ "saml-role-list-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-full-name-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper", "oidc-address-mapper" ] } } ], "org.keycloak.storage.UserStorageProvider" : [ { @@ -2185,8 +2185,8 @@ "config" : { "ldap.attribute" : [ "createTimestamp" ], "is.mandatory.in.ldap" : [ "false" ], - "always.read.value.from.ldap" : [ "true" ], "read.only" : [ "true" ], + "always.read.value.from.ldap" : [ "true" ], "user.model.attribute" : [ "createTimestamp" ] } }, { @@ -2221,8 +2221,8 @@ "config" : { "ldap.attribute" : [ "mail" ], "is.mandatory.in.ldap" : [ "false" ], - "read.only" : [ "false" ], "always.read.value.from.ldap" : [ "false" ], + "read.only" : [ "false" ], "user.model.attribute" : [ "email" ] } }, { @@ -2233,17 +2233,17 @@ "config" : { "membership.attribute.type" : [ "DN" ], "group.name.ldap.attribute" : [ "cn" ], - "membership.user.ldap.attribute" : [ "uid" ], "preserve.group.inheritance" : [ "false" ], + "membership.user.ldap.attribute" : [ "uid" ], "groups.dn" : [ "ou=users,dc=dbrepo,dc=at" ], "mode" : [ "LDAP_ONLY" ], "user.roles.retrieve.strategy" : [ "LOAD_GROUPS_BY_MEMBER_ATTRIBUTE" ], "ignore.missing.groups" : [ "false" ], "membership.ldap.attribute" : [ "member" ], - "group.object.classes" : [ "groupOfNames" ], "memberof.ldap.attribute" : [ "memberOf" ], - "drop.non.existing.groups.during.sync" : [ "false" ], - "groups.path" : [ "/" ] + "group.object.classes" : [ "groupOfNames" ], + "groups.path" : [ "/" ], + "drop.non.existing.groups.during.sync" : [ "false" ] } }, { "id" : "b6ff3285-35af-4e86-8bb4-d94b8e0d70bb", @@ -2253,8 +2253,8 @@ "config" : { "ldap.attribute" : [ "modifyTimestamp" ], "is.mandatory.in.ldap" : [ "false" ], - "always.read.value.from.ldap" : [ "true" ], "read.only" : [ "true" ], + "always.read.value.from.ldap" : [ "true" ], "user.model.attribute" : [ "modifyTimestamp" ] } }, { @@ -2277,21 +2277,21 @@ "fullSyncPeriod" : [ "-1" ], "pagination" : [ "false" ], "startTls" : [ "false" ], - "connectionPooling" : [ "true" ], "usersDn" : [ "ou=users,dc=dbrepo,dc=at" ], + "connectionPooling" : [ "true" ], "cachePolicy" : [ "DEFAULT" ], "useKerberosForPasswordAuthentication" : [ "false" ], "importEnabled" : [ "true" ], "enabled" : [ "true" ], - "changedSyncPeriod" : [ "-1" ], - "usernameLDAPAttribute" : [ "uid" ], "bindDn" : [ "cn=admin,dc=dbrepo,dc=at" ], "bindCredential" : [ "admin" ], + "usernameLDAPAttribute" : [ "uid" ], + "changedSyncPeriod" : [ "-1" ], "lastSync" : [ "1719252666" ], "vendor" : [ "other" ], "uuidLDAPAttribute" : [ "entryUUID" ], - "allowKerberosAuthentication" : [ "false" ], "connectionUrl" : [ "ldap://identity-service:1389" ], + "allowKerberosAuthentication" : [ "false" ], "syncRegistrations" : [ "true" ], "authType" : [ "simple" ], "useTruststoreSpi" : [ "always" ], diff --git a/dbrepo-data-service/pom.xml b/dbrepo-data-service/pom.xml index fa6f32a02f94b182dbbe3b50ed6385521bcd03cb..4495ec2f073ef2a92c014604d3bfee90de6707fb 100644 --- a/dbrepo-data-service/pom.xml +++ b/dbrepo-data-service/pom.xml @@ -11,7 +11,7 @@ <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> <name>dbrepo-data-service</name> - <version>1.4.5</version> + <version>1.4.6</version> <description>Service that manages the data</description> diff --git a/dbrepo-data-service/querystore/pom.xml b/dbrepo-data-service/querystore/pom.xml index 57bb5dd76ca4f08668eab02c0391ef54a7ea5fa5..3d301be50f460d547e635cf27d9bbd64e17c3261 100644 --- a/dbrepo-data-service/querystore/pom.xml +++ b/dbrepo-data-service/querystore/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>dbrepo-data-service-querystore</artifactId> <name>dbrepo-data-service-querystore</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies/> diff --git a/dbrepo-data-service/report/pom.xml b/dbrepo-data-service/report/pom.xml index 10663ef86dfa470e69a0254308d00761af5f7a44..76bce1e9290ecf4a74283c0f1f95d9575617f67e 100644 --- a/dbrepo-data-service/report/pom.xml +++ b/dbrepo-data-service/report/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>report</artifactId> <name>dbrepo-data-service-report</name> - <version>1.4.5</version> + <version>1.4.6</version> <description> This module is only intended for the pipeline coverage report. See the detailed report in the respective modules diff --git a/dbrepo-data-service/rest-service/pom.xml b/dbrepo-data-service/rest-service/pom.xml index 9eb7ec933b8a66a8984d900f2382b838e2c6b2d5..214912d816594f01618f0d631b224e1246be29bf 100644 --- a/dbrepo-data-service/rest-service/pom.xml +++ b/dbrepo-data-service/rest-service/pom.xml @@ -6,18 +6,18 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>rest-service</artifactId> <name>dbrepo-data-service-rest-service</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>services</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </dependency> </dependencies> diff --git a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java index b15254702a491908482663163defb530e5cbcf6a..6aa48b157082afe6686fccca36b375723cc3b44b 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java @@ -94,6 +94,13 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler { return generic_handle(e.getClass(), e.getLocalizedMessage()); } + @Hidden + @ResponseStatus(code = HttpStatus.LOCKED) + @ExceptionHandler(ContainerQuotaException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerQuotaException e) { + return generic_handle(e.getClass(), e.getLocalizedMessage()); + } + @Hidden @ResponseStatus(code = HttpStatus.FORBIDDEN) @ExceptionHandler(CredentialsInvalidException.class) diff --git a/dbrepo-data-service/services/pom.xml b/dbrepo-data-service/services/pom.xml index 0b57ceef9d0e575cdedd03c769ecc24aacf682e5..ccb8ca4360458a9db0797a7f833703dc1d7dc4ca 100644 --- a/dbrepo-data-service/services/pom.xml +++ b/dbrepo-data-service/services/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>services</artifactId> <name>dbrepo-data-service-services</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies> <dependency> @@ -22,7 +22,7 @@ <dependency> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service-querystore</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </dependency> </dependencies> diff --git a/dbrepo-metadata-db/1_setup-schema.sql b/dbrepo-metadata-db/1_setup-schema.sql index 62dc5c3095529d74349a88725724c02c95c15710..47ee3a95e2b88a62d4a2405f9c0f4d088167d748 100644 --- a/dbrepo-metadata-db/1_setup-schema.sql +++ b/dbrepo-metadata-db/1_setup-schema.sql @@ -27,10 +27,12 @@ CREATE TABLE IF NOT EXISTS `mdb_images` dialect character varying(255) NOT NULL, driver_class character varying(255) NOT NULL, jdbc_method character varying(255) NOT NULL, + is_default BOOLEAN NOT NULL DEFAULT FALSE, created timestamp NOT NULL DEFAULT NOW(), last_modified timestamp, PRIMARY KEY (id), - UNIQUE (name, version) + UNIQUE (name, version), + UNIQUE (is_default) ) WITH SYSTEM VERSIONING; CREATE TABLE IF NOT EXISTS `mdb_images_date` @@ -64,6 +66,7 @@ CREATE TABLE IF NOT EXISTS `mdb_containers` last_modified timestamp, privileged_username character varying(255) NOT NULL, privileged_password character varying(255) NOT NULL, + quota integer NOT NULL DEFAULT 50, PRIMARY KEY (id), FOREIGN KEY (image_id) REFERENCES mdb_images (id) ) WITH SYSTEM VERSIONING; diff --git a/dbrepo-metadata-db/2_setup-data.sql b/dbrepo-metadata-db/2_setup-data.sql index 24e587fc50cb9beb6363c6bc562c7120a9d9a714..e806e1e181dbdcc3f0e4e29f837bffac7123317c 100644 --- a/dbrepo-metadata-db/2_setup-data.sql +++ b/dbrepo-metadata-db/2_setup-data.sql @@ -2,7 +2,7 @@ BEGIN; INSERT INTO `mdb_containers` (name, internal_name, image_id, host, port, ui_host, ui_port, sidecar_host, sidecar_port, privileged_username, privileged_password) -VALUES ('MariaDB 11.1.3', 'mariadb_11_1_3', 1, 'data-db', 3306, 'localhost', 3306, 'data-db-sidecar', 8080, +VALUES ('mariadb:11.1.3-debian-11-r6', 'mariadb_11_1_3', 1, 'data-db', 3306, 'localhost', 3306, 'data-db-sidecar', 8080, 'root', 'dbrepo'); COMMIT; diff --git a/dbrepo-metadata-service/api/pom.xml b/dbrepo-metadata-service/api/pom.xml index b62bfdc94ad922ffa7b1c8f44e3f1e54d89a2d87..4722e9c3c91fbc07e86af58622d2e3d0cc53de0b 100644 --- a/dbrepo-metadata-service/api/pom.xml +++ b/dbrepo-metadata-service/api/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>dbrepo-metadata-service-api</artifactId> <name>dbrepo-metadata-service-api</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies/> diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java index aa3b1ad91ff5fb8608885a2a41a3f2656969dd66..7acd4fc3ce7d225eb38de8a369dc34c60d185c49 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java @@ -40,8 +40,12 @@ public class ContainerBriefDto { private ImageBriefDto image; @NotNull - @Schema(example = "true") - private Boolean running; + @Schema(example = "50") + private Integer quota; + + @NotNull + @Schema(example = "10") + private Integer count; @NotNull @Schema(example = "2021-03-12T15:26:21Z") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerCreateDto.java index d5b8f827c2e95a531961f6e48a862e8457229795..7080d2b5d96e2763a8ebf750eea27f9b08fa4a50 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerCreateDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerCreateDto.java @@ -46,6 +46,10 @@ public class ContainerCreateDto { @JsonProperty("ui_port") private Integer uiPort; + @NotNull + @Schema(example = "50") + private Long quota; + @NotBlank @JsonProperty("privileged_username") @Schema(description = "Username of privileged user", example = "root") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java index d7c6727be71331d51e967d04d008f7b7ba70ad99..7e46b80c1cfc745b158f6bffffd02bdd617a1987 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/ContainerDto.java @@ -54,6 +54,14 @@ public class ContainerDto { @NotNull private ImageDto image; + @NotNull + @Schema(example = "50") + private Long quota; + + @NotNull + @Schema(example = "10") + private Long count; + @NotNull @Schema(example = "2021-03-12T15:26:21Z") @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java index e336f3d47a9444aace3e2c66acffe825c1bae128..38adbd6f0d6592a0e802d2bf33147916bbd9f139 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java @@ -32,4 +32,9 @@ public class ImageBriefDto { @Schema(example = "mariadb") private String jdbcMethod; + @NotNull + @JsonProperty("default") + @Schema(example = "false") + private Boolean isDefault; + } diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java index 2031ee15aa6ed44d60682315604a726fe7af03c6..4e9fea5b7cbada74155ad2760ccdc99fb2e23490 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java @@ -27,6 +27,11 @@ public class ImageCreateDto { @Schema(example = "mariadb") private String name; + @NotNull + @JsonProperty("is_default") + @Schema(example = "false") + private Boolean isDefault; + @NotBlank @Parameter(example = "10.5") private String version; diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDto.java index 3d766e3abae3379636e6c541d094a89f354dfce3..c0cf7f3bceebc8aefa73c267e422d0cb7e9fa3d0 100644 --- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDto.java +++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/container/image/ImageDto.java @@ -50,6 +50,11 @@ public class ImageDto { @Schema(example = "mariadb") private String jdbcMethod; + @NotNull + @JsonProperty("default") + @Schema(example = "false") + private Boolean isDefault; + @NotNull @JsonProperty("default_port") @Schema(example = "3306") diff --git a/dbrepo-metadata-service/entities/pom.xml b/dbrepo-metadata-service/entities/pom.xml index 2fb8efa9e9f07076e4891377c876658dbb04d146..5fc5626e5fb2b3edf42a1c17f1811454a2fc0fdf 100644 --- a/dbrepo-metadata-service/entities/pom.xml +++ b/dbrepo-metadata-service/entities/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>dbrepo-metadata-service-entities</artifactId> <name>dbrepo-metadata-service-entity</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies/> diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java index 302046d035813aa42f43fe211bcafb6a4ca18eed..7545260ce1a83f2a39b7900e9b29de5e0a4bedde 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/Container.java @@ -55,6 +55,9 @@ public class Container { @Column private Integer uiPort; + @Column(nullable = false, columnDefinition = "INT DEFAULT 50") + private Integer quota = 50; + @Column private String uiAdditionalFlags; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java index 568e16e4749c810ef8eae67872d4b2be9e29ddf3..8250b6ae4350c48eca7c5dc1d0ec0a08935e9196 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.OnDelete; -import org.hibernate.annotations.OnDeleteAction; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @@ -56,6 +54,9 @@ public class ContainerImage { @Column(nullable = false) private Integer defaultPort; + @Column(nullable = false, unique = true, columnDefinition = "BOOLEAN DEFAULT FALSE") + private Boolean isDefault = false; + @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL, CascadeType.PERSIST}, mappedBy = "image") private List<ContainerImageDate> dateFormats; diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java index eb9b352095bfd1c875cde9fac6db5d45ad8d5e6d..ff18c0137d06964bcc49c02367f95eb49a3b4033 100644 --- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java +++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/ViewColumn.java @@ -15,9 +15,7 @@ import jakarta.persistence.*; @AllArgsConstructor @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) -@jakarta.persistence.Table(name = "mdb_view_columns", uniqueConstraints = { - @UniqueConstraint(columnNames = {"view_id", "internalName"}) -}) +@jakarta.persistence.Table(name = "mdb_view_columns") public class ViewColumn implements Comparable<ViewColumn> { @Id diff --git a/dbrepo-metadata-service/oai/pom.xml b/dbrepo-metadata-service/oai/pom.xml index 5b37750134eb43f3c077ac3c719c94fcad8d6d77..c49ff844e9cb921e6eb861e6bfd10f4a25ed822b 100644 --- a/dbrepo-metadata-service/oai/pom.xml +++ b/dbrepo-metadata-service/oai/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>dbrepo-metadata-service-oai</artifactId> <name>dbrepo-metadata-service-oai</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies/> diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml index 0fdc80b428c3120888362bed339edbd9097f0ac4..fd44e71dd94659ac965b5819202e7844ffb02291 100644 --- a/dbrepo-metadata-service/pom.xml +++ b/dbrepo-metadata-service/pom.xml @@ -11,7 +11,7 @@ <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> <name>dbrepo-metadata-service</name> - <version>1.4.5</version> + <version>1.4.6</version> <description>Service that manages the metadata</description> diff --git a/dbrepo-metadata-service/report/pom.xml b/dbrepo-metadata-service/report/pom.xml index 6a7874d4e9352a783ca03711ab1e8efe4eabadea..b1f3d406e814127927acf3ad675467d615bb453b 100644 --- a/dbrepo-metadata-service/report/pom.xml +++ b/dbrepo-metadata-service/report/pom.xml @@ -6,12 +6,12 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>dbrepo-metadata-service-report</artifactId> <name>dbrepo-metadata-service-report</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/repositories/pom.xml b/dbrepo-metadata-service/repositories/pom.xml index b67917715a5c2e1200e3e14884e45cd1ff60c055..e80d722a109155e6e78cf4a9e222b11522cf1627 100644 --- a/dbrepo-metadata-service/repositories/pom.xml +++ b/dbrepo-metadata-service/repositories/pom.xml @@ -6,12 +6,12 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>dbrepo-metadata-service-repositories</artifactId> <name>dbrepo-metadata-service-repositories</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerQuotaException.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerQuotaException.java new file mode 100644 index 0000000000000000000000000000000000000000..6679775f00473632a2e2e28cd17f3d3303edd0a6 --- /dev/null +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/exception/ContainerQuotaException.java @@ -0,0 +1,21 @@ +package at.tuwien.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.LOCKED, reason = "error.container.quota") +public class ContainerQuotaException extends Exception { + + public ContainerQuotaException(String message) { + super(message); + } + + public ContainerQuotaException(String message, Throwable thr) { + super(message, thr); + } + + public ContainerQuotaException(Throwable thr) { + super(thr); + } + +} diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java index fe267fe35ab4c1b7f2cd7e658baa4b765d4d28e2..a9b04058e2373f6cb98f8f9cbedb11ba980fdcfc 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/MetadataMapper.java @@ -104,7 +104,8 @@ public interface MetadataMapper { ContainerDto containerToContainerDto(Container data); @Mappings({ - @Mapping(target = "id", source = "id") + @Mapping(target = "id", source = "id"), + @Mapping(target = "count", expression = "java(data.getDatabases().size())"), }) ContainerBriefDto containerToDatabaseContainerBriefDto(Container data); @@ -415,6 +416,9 @@ public interface MetadataMapper { }; } + @Mappings({ + @Mapping(target = "isDefault", source = "isDefault") + }) ContainerImage createImageDtoToContainerImage(ImageCreateDto data); ImageBriefDto containerImageToImageBriefDto(ContainerImage data); diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ImageRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ImageRepository.java index 593a4727180d55b4bc0cb1971c0aecf49313f8cb..23fa40c5be1fd3a6e9e430fafcaccc896e37970d 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ImageRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/ImageRepository.java @@ -10,8 +10,8 @@ import java.util.Optional; @Repository public interface ImageRepository extends JpaRepository<ContainerImage, Long> { - List<ContainerImage> findAll(); - Optional<ContainerImage> findByNameAndVersion(String name, String version); + Optional<ContainerImage> findByIsDefault(Boolean isDefault); + } diff --git a/dbrepo-metadata-service/rest-service/pom.xml b/dbrepo-metadata-service/rest-service/pom.xml index ab556f9c4521be25c046a5777200ce9ab59cfc6b..c06be275269fbedd04aeea33fe9926abaae09edb 100644 --- a/dbrepo-metadata-service/rest-service/pom.xml +++ b/dbrepo-metadata-service/rest-service/pom.xml @@ -6,12 +6,12 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>dbrepo-metadata-service-rest-service</artifactId> <name>dbrepo-metadata-service-rest</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java index 294d471e8fefe4ccafcf06f5aac47e23fce6f757..62319662e24b78f9e456d1d0cabd8fd79639c85f 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java @@ -27,7 +27,6 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.security.core.Authentication; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -66,11 +65,11 @@ public class ContainerEndpoint { }) public ResponseEntity<List<ContainerBriefDto>> findAll(@RequestParam(required = false) Integer limit) { log.debug("endpoint find all containers, limit={}", limit); - final List<Container> containers = containerService.getAll(limit); - final List<ContainerBriefDto> dtos = containers.stream() + final List<ContainerBriefDto> dtos = containerService.getAll(limit) + .stream() .map(metadataMapper::containerToDatabaseContainerBriefDto) .collect(Collectors.toList()); - log.trace("find all containers resulted in containers {}", dtos); + log.debug("find all containers resulted in {} container(s)", dtos.size()); return ResponseEntity.ok() .body(dtos); } diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java index 8be62ea5c400719b31764b0b931a329481b75018..e89a38b6f6fbc9a021bc62b5a31be44fa0d86040 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java @@ -2,6 +2,7 @@ package at.tuwien.endpoints; import at.tuwien.api.database.*; import at.tuwien.api.error.ApiErrorDto; +import at.tuwien.entities.container.Container; import at.tuwien.entities.database.Database; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.user.User; @@ -45,15 +46,18 @@ public class DatabaseEndpoint { private final MetadataMapper databaseMapper; private final StorageService storageService; private final DatabaseService databaseService; + private final ContainerService containerService; @Autowired public DatabaseEndpoint(UserService userService, AccessService accessService, MetadataMapper databaseMapper, - StorageService storageService, DatabaseService databaseService) { + StorageService storageService, DatabaseService databaseService, + ContainerService containerService) { this.userService = userService; this.accessService = accessService; this.databaseMapper = databaseMapper; this.storageService = storageService; this.databaseService = databaseService; + this.containerService = containerService; } @RequestMapping(method = {RequestMethod.GET, RequestMethod.HEAD}) @@ -127,6 +131,11 @@ public class DatabaseEndpoint { content = {@Content( mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), + @ApiResponse(responseCode = "423", + description = "Database quota exceeded", + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = ApiErrorDto.class))}), @ApiResponse(responseCode = "502", description = "Connection to search service failed", content = {@Content( @@ -141,10 +150,15 @@ public class DatabaseEndpoint { public ResponseEntity<DatabaseDto> create(@Valid @RequestBody DatabaseCreateDto data, @NotNull Principal principal) throws DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, - SearchServiceException, SearchServiceConnectionException { + SearchServiceException, SearchServiceConnectionException, ContainerQuotaException { log.debug("endpoint create database, data.name={}", data.getName()); + final Container container = containerService.find(data.getCid()); + if (container.getDatabases().size() + 1 > container.getQuota()) { + log.error("Failed to create database: quota of {} exceeded", container.getQuota()); + throw new ContainerQuotaException("Failed to create database: quota of " + container.getQuota() + " exceeded"); + } final User user = userService.findByUsername(principal.getName()); - final Database database = databaseService.create(data, user); + final Database database = databaseService.create(container, data, user); final DatabaseDto dto = databaseMapper.customDatabaseToDatabaseDto(database); return ResponseEntity.status(HttpStatus.CREATED) .body(dto); diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java index f6764895556ac07fe0321ae3e4a580f17e873d54..bf655f071abee0fdd5fc390b76402e3165d04c37 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java @@ -79,6 +79,13 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler { return generic_handle(e.getClass(), e.getLocalizedMessage()); } + @Hidden + @ResponseStatus(code = HttpStatus.LOCKED) + @ExceptionHandler(ContainerQuotaException.class) + public ResponseEntity<ApiErrorDto> handle(ContainerQuotaException e) { + return generic_handle(e.getClass(), e.getLocalizedMessage()); + } + @Hidden @ResponseStatus(code = HttpStatus.FORBIDDEN) @ExceptionHandler(CredentialsInvalidException.class) diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java index 7706e185bd3721fdddec7daed15ce8df628b0bad..ab3f4485b2cf35134c2d0ee126ee30af04636165 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/ContainerEndpointUnitTest.java @@ -8,6 +8,7 @@ import at.tuwien.entities.container.Container; import at.tuwien.exception.*; import at.tuwien.service.impl.ContainerServiceImpl; import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +38,11 @@ public class ContainerEndpointUnitTest extends AbstractUnitTest { @Autowired private ContainerEndpoint containerEndpoint; + @BeforeEach + public void beforeEach() { + genesis(); + } + @Test @WithAnonymousUser public void findById_anonymous_succeeds() throws ContainerNotFoundException { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java index 02ba52ecaa930f1747ee55f80cff2ea36379ffc1..8ffe328aa95342c6b8ce6fe93a910658ad2ab043 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java @@ -13,6 +13,7 @@ import at.tuwien.service.ContainerService; import at.tuwien.service.BrokerService; import at.tuwien.service.impl.DatabaseServiceImpl; import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -62,6 +63,11 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { @Autowired private DatabaseEndpoint databaseEndpoint; + @BeforeEach + public void beforeEach() { + genesis(); + } + @Test @WithAnonymousUser public void create_anonymous_fails() { @@ -97,7 +103,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { public void create_succeeds() throws DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException, AuthServiceException, AuthServiceConnectionException, - CredentialsInvalidException, BrokerServiceException, BrokerServiceConnectionException { + CredentialsInvalidException, BrokerServiceException, BrokerServiceConnectionException, ContainerQuotaException { final DatabaseCreateDto request = DatabaseCreateDto.builder() .cid(CONTAINER_1_ID) .name(DATABASE_1_NAME) @@ -107,7 +113,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { /* mock */ when(containerService.find(CONTAINER_1_ID)) .thenReturn(CONTAINER_1); - when(databaseService.create(request, USER_1)) + when(databaseService.create(CONTAINER_1, request, USER_1)) .thenReturn(DATABASE_1); doNothing() .when(messageQueueService) @@ -433,7 +439,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest { public void create_generic(DatabaseCreateDto data, Principal principal, User user) throws DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException, - BrokerServiceException, BrokerServiceConnectionException { + BrokerServiceException, BrokerServiceConnectionException, ContainerQuotaException { /* mock */ doNothing() diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/AuthenticationPrivilegedIntegrationMvcTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/AuthenticationPrivilegedIntegrationMvcTest.java index 5b2e607ec1ba9c6fe33055d4533042da4e88b2f9..474db3910bef5233d676bf387edd63afcd4aa5c6 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/AuthenticationPrivilegedIntegrationMvcTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/mvc/AuthenticationPrivilegedIntegrationMvcTest.java @@ -81,8 +81,8 @@ public class AuthenticationPrivilegedIntegrationMvcTest extends AbstractUnitTest genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); - containerRepository.save(CONTAINER_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4)); + containerRepository.save(CONTAINER_1); databaseRepository.save(DATABASE_1); /* keycloak */ keycloakUtils.deleteUser(USER_1_USERNAME); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java index 0c0cf075c4d83645a7df6bae035cbae4d458ad1e..648bb6ab290b319a817aba31d49310d43416e4a3 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServicePersistenceTest.java @@ -76,8 +76,8 @@ public class DataCiteIdentifierServicePersistenceTest extends AbstractUnitTest { genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); - containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4)); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4)); databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4)); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java index 283450cc256197b1add589295304bd69fbe89dab..b4bd67f88d225a5cfc5398fac6c485b48c674ac2 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java @@ -47,8 +47,8 @@ public class DatabaseServicePersistenceTest extends AbstractUnitTest { genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); - containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4)); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4)); databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4)); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java index ea58ae16e4ac35931bb5f713b197bacdc37b6958..68d6e1a93d5fe594d207df5ae0edc9da1b5c80b3 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java @@ -1,7 +1,6 @@ package at.tuwien.service; import at.tuwien.test.AbstractUnitTest; -import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.api.database.DatabaseModifyVisibilityDto; import at.tuwien.api.database.internal.CreateDatabaseDto; import at.tuwien.entities.database.Database; @@ -43,9 +42,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { @MockBean private DatabaseRepository databaseRepository; - @MockBean - private ContainerRepository containerRepository; - @Autowired private DatabaseService databaseService; @@ -92,23 +88,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { }); } - @Test - public void create_notFound_fails() { - final DatabaseCreateDto request = DatabaseCreateDto.builder() - .cid(CONTAINER_1_ID) - .name(DATABASE_1_NAME) - .build(); - - /* mock */ - when(containerRepository.findById(CONTAINER_1_ID)) - .thenReturn(Optional.empty()); - - /* test */ - assertThrows(ContainerNotFoundException.class, () -> { - databaseService.create(request, USER_1); - }); - } - @Test public void find_succeeds() throws DatabaseNotFoundException { @@ -138,26 +117,11 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { public void create_succeeds() throws Exception { /* mock */ - when(containerRepository.findById(DATABASE_1.getCid())) - .thenReturn(Optional.of(CONTAINER_1)); when(dataServiceGateway.createDatabase(any(CreateDatabaseDto.class))) .thenReturn(DATABASE_1_DTO); /* test */ - generic_create(DATABASE_1_CREATE, DATABASE_1); - } - - @Test - public void create_containerNotFound_fails() { - - /* mock */ - when(containerRepository.findById(anyLong())) - .thenReturn(Optional.empty()); - - /* test */ - assertThrows(ContainerNotFoundException.class, () -> { - generic_create(DATABASE_1_CREATE, DATABASE_1); - }); + generic_create(); } @Test @@ -165,15 +129,13 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { DatabaseNotFoundException { /* mock */ - when(containerRepository.findById(DATABASE_1.getCid())) - .thenReturn(Optional.of(CONTAINER_1)); doThrow(DataServiceException.class) .when(dataServiceGateway) .createDatabase(any(CreateDatabaseDto.class)); /* test */ assertThrows(DataServiceException.class, () -> { - generic_create(DATABASE_1_CREATE, DATABASE_1); + generic_create(); }); } @@ -182,15 +144,13 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { DatabaseNotFoundException { /* mock */ - when(containerRepository.findById(DATABASE_1.getCid())) - .thenReturn(Optional.of(CONTAINER_1)); doThrow(DataServiceConnectionException.class) .when(dataServiceGateway) .createDatabase(any(CreateDatabaseDto.class)); /* test */ assertThrows(DataServiceConnectionException.class, () -> { - generic_create(DATABASE_1_CREATE, DATABASE_1); + generic_create(); }); } @@ -304,7 +264,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ - protected Database generic_create(DatabaseCreateDto createDto, Database database) throws DataServiceException, + protected Database generic_create() throws DataServiceException, DataServiceConnectionException, UserNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, SearchServiceException, SearchServiceConnectionException { @@ -312,13 +272,11 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { when(searchServiceGateway.update(any(Database.class))) .thenReturn(DATABASE_1_DTO); when(databaseRepository.save(any(Database.class))) - .thenReturn(database); + .thenReturn(DATABASE_1); /* test */ - final Database response = databaseService.create(createDto, USER_1); - assertEquals(database.getName(), response.getName()); - assertEquals(database.getIsPublic(), response.getIsPublic()); - assertTrue(response.getInternalName().startsWith(database.getInternalName())); + final Database response = databaseService.create(CONTAINER_1, DATABASE_1_CREATE, USER_1); + assertTrue(response.getInternalName().startsWith(DATABASE_1_INTERNALNAME)); assertNotNull(response.getContainer()); assertNotNull(response.getTables()); assertNotNull(response.getViews()); @@ -332,7 +290,6 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest { assertNotNull(response.getOwner()); assertNull(response.getImage()); assertNotNull(response.getExchangeName()); - assertEquals(database.getIsPublic(), response.getIsPublic()); return response; } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java index 6b3ff624b0e5ebf47757824f645e4a120e43b243..246ae7de1a4beb7a55f4cadf13f142b48ef995fd 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServicePersistenceTest.java @@ -73,8 +73,8 @@ public class IdentifierServicePersistenceTest extends AbstractUnitTest { genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); - containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4)); userRepository.saveAll(List.of(USER_1, USER_2, USER_3, USER_4, USER_5)); + containerRepository.saveAll(List.of(CONTAINER_1, CONTAINER_2, CONTAINER_3, CONTAINER_4)); databaseRepository.saveAll(List.of(DATABASE_1, DATABASE_2, DATABASE_3, DATABASE_4)); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServicePersistenceTest.java index 50e0dc08f657fb5230838397c90a21a619d8bd8b..fb501cb28179e895dfcf4340afb7dc0cfee547fb 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServicePersistenceTest.java @@ -1,12 +1,12 @@ package at.tuwien.service; +import at.tuwien.exception.ImageInvalidException; import at.tuwien.test.AbstractUnitTest; import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.exception.ImageAlreadyExistsException; import at.tuwien.repository.ContainerRepository; import at.tuwien.repository.ImageRepository; import lombok.extern.log4j.Log4j2; -import org.apache.http.auth.BasicUserPrincipal; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -15,8 +15,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; -import java.security.Principal; - import static org.junit.jupiter.api.Assertions.*; @Log4j2 @@ -42,7 +40,7 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { } @Test - public void create_succeeds() throws ImageAlreadyExistsException { + public void create_succeeds() throws ImageAlreadyExistsException, ImageInvalidException { final ImageCreateDto request = ImageCreateDto.builder() .name(IMAGE_1_NAME) .version("11.1.4") // new tag @@ -51,11 +49,11 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { .dialect(IMAGE_1_DIALECT) .driverClass(IMAGE_1_DRIVER) .defaultPort(IMAGE_1_PORT) + .isDefault(false) .build(); - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* test */ - imageService.create(request, principal); + imageService.create(request, USER_1_PRINCIPAL); } @Test @@ -67,12 +65,31 @@ public class ImageServicePersistenceTest extends AbstractUnitTest { .driverClass(IMAGE_1_DRIVER) .jdbcMethod(IMAGE_1_JDBC) .dialect(IMAGE_1_DIALECT) + .isDefault(IMAGE_1_IS_DEFAULT) .build(); - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* test */ assertThrows(ImageAlreadyExistsException.class, () -> { - imageService.create(request, principal); + imageService.create(request, USER_1_PRINCIPAL); + }); + } + + @Test + public void create_multipleDefaultImages_fails() { + final ImageCreateDto request = ImageCreateDto.builder() + .name("mariadb") + .version("10.5") + .registry(IMAGE_1_REGISTRY) + .defaultPort(IMAGE_1_PORT) + .driverClass(IMAGE_1_DRIVER) + .jdbcMethod(IMAGE_1_JDBC) + .dialect(IMAGE_1_DIALECT) + .isDefault(true) // <<<< + .build(); + + /* test */ + assertThrows(ImageInvalidException.class, () -> { + imageService.create(request, USER_1_PRINCIPAL); }); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java index bce3c7bc125636591d86a83311a4315ab677fba3..524c5715b4fd59e24c3f972a3acf2bd08453d99b 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java @@ -1,5 +1,6 @@ package at.tuwien.service; +import at.tuwien.exception.ImageInvalidException; import at.tuwien.exception.ImageNotFoundException; import at.tuwien.test.AbstractUnitTest; import at.tuwien.api.container.image.ImageChangeDto; @@ -82,8 +83,8 @@ public class ImageServiceUnitTest extends AbstractUnitTest { .build(); /* mock */ - when(imageRepository.save(any(ContainerImage.class))) - .thenThrow(ConstraintViolationException.class); + when(imageRepository.findByNameAndVersion(IMAGE_1_NAME, IMAGE_1_VERSION)) + .thenReturn(Optional.of(IMAGE_1)); /* test */ assertThrows(ImageAlreadyExistsException.class, () -> { @@ -91,6 +92,27 @@ public class ImageServiceUnitTest extends AbstractUnitTest { }); } + @Test + public void create_multipleDefaults_fails() { + final ImageCreateDto request = ImageCreateDto.builder() + .name(IMAGE_1_NAME) + .version("10.5") + .defaultPort(IMAGE_1_PORT) + .isDefault(true) + .build(); + + /* mock */ + when(imageRepository.findByNameAndVersion(IMAGE_1_NAME, IMAGE_1_VERSION)) + .thenReturn(Optional.empty()); + when(imageRepository.findByIsDefault(true)) + .thenReturn(Optional.of(IMAGE_1)); + + /* test */ + assertThrows(ImageInvalidException.class, () -> { + imageService.create(request, USER_1_PRINCIPAL); + }); + } + @Test public void update_succeeds() { final ImageServiceImpl mockImageService = mock(ImageServiceImpl.class); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java index e66d35d8ea0d8b0f9aff850cf4baf880e4240c12..e2d7d33896f6c1b13d0ce9ab5af3262c8668f0bc 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/TableServicePersistenceTest.java @@ -71,8 +71,8 @@ public class TableServicePersistenceTest extends AbstractUnitTest { genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); - containerRepository.save(CONTAINER_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); + containerRepository.save(CONTAINER_1); databaseRepository.saveAll(List.of(DATABASE_1)); } diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java index e23320017c54592662f42b24c3eb7039a3f1a540..3ed06bfd7c8ba6222bcbfbf45cfeb9a602e8fa91 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/ViewServicePersistenceTest.java @@ -61,8 +61,8 @@ public class ViewServicePersistenceTest extends AbstractUnitTest { genesis(); /* metadata database */ licenseRepository.save(LICENSE_1); - containerRepository.save(CONTAINER_1); userRepository.saveAll(List.of(USER_1, USER_2, USER_3)); + containerRepository.save(CONTAINER_1); databaseRepository.save(DATABASE_1); } diff --git a/dbrepo-metadata-service/services/pom.xml b/dbrepo-metadata-service/services/pom.xml index bf2105f98da2ff1644bd94493f54f1b5929ea9ce..5f0bc0960c21eee8b171addb2bdd240a55b3faf7 100644 --- a/dbrepo-metadata-service/services/pom.xml +++ b/dbrepo-metadata-service/services/pom.xml @@ -6,12 +6,12 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>dbrepo-metadata-service-services</artifactId> <name>dbrepo-metadata-service-services</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/init/InitHandler.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/init/InitHandler.java deleted file mode 100644 index 1f7c8ced0a84bf4dc37f41b36b46408a68aa42df..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/init/InitHandler.java +++ /dev/null @@ -1,59 +0,0 @@ -package at.tuwien.init; - -import at.tuwien.api.keycloak.UserDto; -import at.tuwien.config.GatewayConfig; -import at.tuwien.config.MetadataConfig; -import at.tuwien.entities.user.User; -import at.tuwien.exception.AuthServiceConnectionException; -import at.tuwien.exception.AuthServiceException; -import at.tuwien.exception.UserNotFoundException; -import at.tuwien.gateway.KeycloakGateway; -import at.tuwien.repository.UserRepository; -import at.tuwien.service.UserService; -import jakarta.annotation.PostConstruct; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Component; - -@Log4j2 -@Component -@Profile("!junit") -public class InitHandler { - - private final UserService userService; - private final GatewayConfig gatewayConfig; - private final MetadataConfig metadataConfig; - private final UserRepository userRepository; - private final KeycloakGateway keycloakGateway; - - @Autowired - public InitHandler(UserService userService, GatewayConfig gatewayConfig, MetadataConfig metadataConfig, - UserRepository userRepository, KeycloakGateway keycloakGateway) { - this.userService = userService; - this.gatewayConfig = gatewayConfig; - this.metadataConfig = metadataConfig; - this.userRepository = userRepository; - this.keycloakGateway = keycloakGateway; - } - - @PostConstruct - public void init() throws UserNotFoundException, AuthServiceException, AuthServiceConnectionException { - try { - userService.findByUsername(gatewayConfig.getSystemUsername()); - } catch (UserNotFoundException e) { - log.warn("Failed to find system user with username {} in metadata database", gatewayConfig.getSystemUsername()); - final UserDto user = keycloakGateway.findByUsername(gatewayConfig.getSystemUsername()); - final User entity = User.builder() - .id(user.getId()) - .username(user.getUsername()) - .email(metadataConfig.getAdminEmail()) - .theme("light") - .mariadbPassword(userService.getMariaDbPassword(gatewayConfig.getSystemPassword())) - .language("en") - .build(); - userRepository.save(entity); - log.info("Saved system user with username: {}", gatewayConfig.getSystemUsername()); - } - } -} diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java index aa25ee1362f825ddf060ce9c90dde9e4c965b6bf..d7c036049b84cfe9d028fa60fa532aa6ba00dc75 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java @@ -2,6 +2,7 @@ package at.tuwien.service; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.api.database.DatabaseModifyVisibilityDto; +import at.tuwien.entities.container.Container; import at.tuwien.entities.database.Database; import at.tuwien.entities.user.User; import at.tuwien.exception.*; @@ -47,15 +48,17 @@ public interface DatabaseService { /** * Creates a new database with minimal metadata in the metadata database and creates a new database on the container. * + * @param container The container. * @param createDto The metadata. * @param user The user. * @return The database, if successful. - * @throws UserNotFoundException If the container/user was not found in the metadata database. + * @throws UserNotFoundException If the container/user was not found in the metadata database. * @throws DataServiceException If the data service returned non-successfully. * @throws DataServiceConnectionException If failing to connect to the data service/search service. */ - Database create(DatabaseCreateDto createDto, User user) throws UserNotFoundException, ContainerNotFoundException, - DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException; + Database create(Container container, DatabaseCreateDto createDto, User user) throws UserNotFoundException, + ContainerNotFoundException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, + SearchServiceException, SearchServiceConnectionException; /** * Updates the user's password. @@ -73,7 +76,7 @@ public interface DatabaseService { * @param database The database. * @param data The visibility * @return The database, if successful. - * @throws NotFoundException The database was not found in the metadata database. + * @throws NotFoundException The database was not found in the metadata database. * @throws DataServiceConnectionException If failing to connect to the search service. */ Database modifyVisibility(Database database, DatabaseModifyVisibilityDto data) throws DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ImageService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ImageService.java index bb5134ebc4f1435f9db797f54b0128ab2cff9bbb..cc51082d65f1b72a066208b83276169fd36d8f5d 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ImageService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/ImageService.java @@ -4,6 +4,7 @@ import at.tuwien.api.container.image.ImageChangeDto; import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.exception.ImageAlreadyExistsException; +import at.tuwien.exception.ImageInvalidException; import at.tuwien.exception.ImageNotFoundException; import java.security.Principal; @@ -32,8 +33,11 @@ public interface ImageService { * @param createDto The new image. * @param principal The user principal. * @return The container image, if successful. + * @throws ImageAlreadyExistsException The image already exists. + * @throws ImageInvalidException The default image cannot be created as a default image already exists. */ - ContainerImage create(ImageCreateDto createDto, Principal principal) throws ImageAlreadyExistsException; + ContainerImage create(ImageCreateDto createDto, Principal principal) throws ImageAlreadyExistsException, + ImageInvalidException; /** * Updates a container image with given id in the metadata database. diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java index 8c835864db5ed4bf69bd2bd6b29adfe4d409899d..1c91de7be10e544cfe9b9e5ce71c3af5c3f89e88 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java @@ -34,17 +34,14 @@ import java.util.*; public class DatabaseServiceImpl implements DatabaseService { private final MetadataMapper metadataMapper; - private final ContainerService containerService; private final DatabaseRepository databaseRepository; private final DataServiceGateway dataServiceGateway; private final SearchServiceGateway searchServiceGateway; @Autowired - public DatabaseServiceImpl(MetadataMapper metadataMapper, ContainerService containerService, - DatabaseRepository databaseRepository, DataServiceGateway dataServiceGateway, - SearchServiceGateway searchServiceGateway) { + public DatabaseServiceImpl(MetadataMapper metadataMapper, DatabaseRepository databaseRepository, + DataServiceGateway dataServiceGateway, SearchServiceGateway searchServiceGateway) { this.metadataMapper = metadataMapper; - this.containerService = containerService; this.databaseRepository = databaseRepository; this.dataServiceGateway = dataServiceGateway; this.searchServiceGateway = searchServiceGateway; @@ -84,10 +81,9 @@ public class DatabaseServiceImpl implements DatabaseService { @Override @Transactional - public Database create(DatabaseCreateDto data, User user) throws UserNotFoundException, + public Database create(Container container, DatabaseCreateDto data, User user) throws UserNotFoundException, ContainerNotFoundException, DataServiceException, DataServiceConnectionException, DatabaseNotFoundException, SearchServiceException, SearchServiceConnectionException { - final Container container = containerService.find(data.getCid()); Database database = Database.builder() .isPublic(data.getIsPublic()) .name(data.getName()) diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java index 8e4decfc1724a010e4d62f38491ad3404d259b1d..84fdffcf43b1e6e6f110bf0acf72d4ca75a3a3cf 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java @@ -4,6 +4,7 @@ import at.tuwien.api.container.image.ImageChangeDto; import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.exception.ImageAlreadyExistsException; +import at.tuwien.exception.ImageInvalidException; import at.tuwien.exception.ImageNotFoundException; import at.tuwien.mapper.MetadataMapper; import at.tuwien.repository.ImageRepository; @@ -51,13 +52,17 @@ public class ImageServiceImpl implements ImageService { @Override @Transactional - public ContainerImage create(ImageCreateDto createDto, Principal principal) throws ImageAlreadyExistsException { + public ContainerImage create(ImageCreateDto createDto, Principal principal) throws ImageAlreadyExistsException, + ImageInvalidException { final ContainerImage image = metadataMapper.createImageDtoToContainerImage(createDto); if (imageRepository.findByNameAndVersion(createDto.getName(), createDto.getVersion()).isPresent()) { - log.error("Failed to create image {}:{}: exists in the metadata database", - createDto.getName(), createDto.getVersion()); + log.error("Failed to create image {}:{}: exists in the metadata database", createDto.getName(), createDto.getVersion()); throw new ImageAlreadyExistsException("Failed to create image " + createDto.getName() + ":" + createDto.getVersion() + ": exists in the metadata database"); } + if (createDto.getIsDefault() && imageRepository.findByIsDefault(true).isPresent()) { + log.error("Failed to create image {}:{}: default image exists", createDto.getName(), createDto.getVersion()); + throw new ImageInvalidException("Failed to create image: default image exists"); + } final ContainerImage dto; try { dto = imageRepository.save(image); diff --git a/dbrepo-metadata-service/test/pom.xml b/dbrepo-metadata-service/test/pom.xml index 2c4091eace14d78e0a6323f8960be5ffa6f5cfb0..b7bed994e55bae1797efdd69602e415c275a5062 100644 --- a/dbrepo-metadata-service/test/pom.xml +++ b/dbrepo-metadata-service/test/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.4.5</version> + <version>1.4.6</version> </parent> <artifactId>dbrepo-metadata-service-test</artifactId> <name>dbrepo-metadata-service-test</name> - <version>1.4.5</version> + <version>1.4.6</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java index 23ba450312b224d76e729613c005489fb7cc8826..996dbb9a7d71b00c7988d9da4dc1ddeb3876245e 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/AbstractUnitTest.java @@ -9,6 +9,8 @@ import java.util.List; public abstract class AbstractUnitTest extends BaseTest { public void genesis() { + CONTAINER_1.setDatabases(new LinkedList<>(List.of(DATABASE_1, DATABASE_2, DATABASE_3))); + CONTAINER_4.setDatabases(new LinkedList<>(List.of(DATABASE_4))); /* USER_1 */ USER_1.setAccesses(new LinkedList<>()); /* USER_2 */ diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java index dfaf58d995e8e57ef8fcc017c551ff0720bc8a4a..6ade19c1ec0f6c742a97731d3a97482fea97923d 100644 --- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java @@ -136,7 +136,7 @@ import static java.time.temporal.ChronoUnit.MINUTES; * <li>Identifier 6 (Title=en, Description=en, Query=3)</li> * </ul> * <p> - * Database 4 (Public, User 4) + * Database 4 (Public, User 4) -> Container 4 * <li>Identifier 7 (Database=4)</li> * <ul> * </ul> @@ -899,13 +899,14 @@ public abstract class BaseTest { USER_6_PASSWORD, USER_6_DETAILS.getAuthorities()); public final static Long IMAGE_1_ID = 1L; - public final static String IMAGE_1_REGISTRY = "docker.io/library"; + public final static String IMAGE_1_REGISTRY = "docker.io"; public final static String IMAGE_1_NAME = "mariadb"; public final static String IMAGE_1_VERSION = "11.1.3"; public final static String IMAGE_1_DIALECT = "org.hibernate.dialect.MariaDBDialect"; public final static String IMAGE_1_DRIVER = "org.mariadb.jdbc.Driver"; public final static String IMAGE_1_JDBC = "mariadb"; public final static Integer IMAGE_1_PORT = 3306; + public final static Boolean IMAGE_1_IS_DEFAULT = true; public final static Long IMAGE_DATE_1_ID = 1L; public final static Long IMAGE_DATE_1_IMAGE_ID = IMAGE_1_ID; @@ -1026,6 +1027,7 @@ public abstract class BaseTest { .jdbcMethod(IMAGE_1_JDBC) .driverClass(IMAGE_1_DRIVER) .defaultPort(IMAGE_1_PORT) + .isDefault(IMAGE_1_IS_DEFAULT) .dateFormats(new LinkedList<>(List.of(IMAGE_DATE_1, IMAGE_DATE_2, IMAGE_DATE_3, IMAGE_DATE_4))) .build(); @@ -1038,6 +1040,7 @@ public abstract class BaseTest { .jdbcMethod(IMAGE_1_JDBC) .driverClass(IMAGE_1_DRIVER) .defaultPort(IMAGE_1_PORT) + .isDefault(IMAGE_1_IS_DEFAULT) .dateFormats(List.of(IMAGE_DATE_1_DTO, IMAGE_DATE_2_DTO, IMAGE_DATE_3_DTO)) .build(); @@ -1045,6 +1048,7 @@ public abstract class BaseTest { .id(IMAGE_1_ID) .name(IMAGE_1_NAME) .version(IMAGE_1_VERSION) + .isDefault(IMAGE_1_IS_DEFAULT) .build(); public final static Long CONTAINER_1_ID = 1L; @@ -1056,7 +1060,8 @@ public abstract class BaseTest { public final static String CONTAINER_1_UI_HOST = "localhost"; public final static Integer CONTAINER_1_UI_PORT = 3306; public final static String CONTAINER_1_UI_ADDITIONAL_FLAGS = "?sslMode=disable"; - public final static Boolean CONTAINER_1_RUNNING = true; + public final static Integer CONTAINER_1_QUOTA = 4; + public final static Integer CONTAINER_1_COUNT = 3; public final static String CONTAINER_1_HOST = "localhost"; public final static Integer CONTAINER_1_PORT = 3308; public final static String CONTAINER_1_SIDECAR_HOST = "localhost"; @@ -1075,6 +1080,7 @@ public abstract class BaseTest { .port(CONTAINER_1_PORT) .uiHost(CONTAINER_1_UI_HOST) .uiPort(CONTAINER_1_UI_PORT) + .quota(CONTAINER_1_QUOTA) .uiAdditionalFlags(CONTAINER_1_UI_ADDITIONAL_FLAGS) .privilegedUsername(CONTAINER_1_PRIVILEGED_USERNAME) .privilegedPassword(CONTAINER_1_PRIVILEGED_PASSWORD) @@ -1097,7 +1103,8 @@ public abstract class BaseTest { .name(CONTAINER_1_NAME) .internalName(CONTAINER_1_INTERNALNAME) .created(CONTAINER_1_CREATED) - .running(CONTAINER_1_RUNNING) + .quota(CONTAINER_1_QUOTA) + .count(CONTAINER_1_COUNT) .build(); public final static PrivilegedContainerDto CONTAINER_1_PRIVILEGED_DTO = PrivilegedContainerDto.builder() @@ -1124,7 +1131,8 @@ public abstract class BaseTest { public final static Integer CONTAINER_2_PORT = 3309; public final static String CONTAINER_2_SIDECAR_HOST = "localhost"; public final static Integer CONTAINER_2_SIDECAR_PORT = 33091; - public final static Boolean CONTAINER_2_RUNNING = true; + public final static Integer CONTAINER_2_QUOTA = 3; + public final static Integer CONTAINER_2_COUNT = 3; public final static String CONTAINER_2_PRIVILEGED_USERNAME = "root"; public final static String CONTAINER_2_PRIVILEGED_PASSWORD = "dbrepo"; public final static Instant CONTAINER_2_CREATED = Instant.ofEpochSecond(1677399655L) /* 2023-02-26 08:20:55 (UTC) */; @@ -1137,6 +1145,8 @@ public abstract class BaseTest { .created(CONTAINER_2_CREATED) .host(CONTAINER_2_HOST) .port(CONTAINER_2_PORT) + .quota(CONTAINER_2_QUOTA) + .databases(List.of()) .privilegedUsername(CONTAINER_2_PRIVILEGED_USERNAME) .privilegedPassword(CONTAINER_2_PRIVILEGED_PASSWORD) .build(); @@ -1156,7 +1166,7 @@ public abstract class BaseTest { .name(CONTAINER_2_NAME) .internalName(CONTAINER_2_INTERNALNAME) .created(CONTAINER_2_CREATED) - .running(CONTAINER_2_RUNNING) + .quota(CONTAINER_2_QUOTA) .build(); public final static Long CONTAINER_3_ID = 3L; @@ -1166,6 +1176,7 @@ public abstract class BaseTest { public final static String CONTAINER_3_IP = "172.30.0.7"; public final static String CONTAINER_3_HOST = "localhost"; public final static Integer CONTAINER_3_PORT = 3310; + public final static Integer CONTAINER_3_QUOTA = 20; public final static String CONTAINER_3_SIDECAR_HOST = "localhost"; public final static Integer CONTAINER_3_SIDECAR_PORT = 33101; public final static String CONTAINER_3_PRIVILEGED_USERNAME = "root"; @@ -1180,6 +1191,8 @@ public abstract class BaseTest { .created(CONTAINER_3_CREATED) .host(CONTAINER_3_HOST) .port(CONTAINER_3_PORT) + .quota(CONTAINER_3_QUOTA) + .databases(List.of()) .privilegedUsername(CONTAINER_3_PRIVILEGED_USERNAME) .privilegedPassword(CONTAINER_3_PRIVILEGED_PASSWORD) .build(); @@ -1191,6 +1204,7 @@ public abstract class BaseTest { public final static String CONTAINER_4_IP = "172.30.0.8"; public final static String CONTAINER_4_HOST = "localhost"; public final static Integer CONTAINER_4_PORT = 3311; + public final static Integer CONTAINER_4_QUOTA = 0; public final static String CONTAINER_4_SIDECAR_HOST = "localhost"; public final static Integer CONTAINER_4_SIDECAR_PORT = 33111; public final static String CONTAINER_4_PRIVILEGED_USERNAME = "root"; @@ -1205,6 +1219,7 @@ public abstract class BaseTest { .created(CONTAINER_4_CREATED) .host(CONTAINER_4_HOST) .port(CONTAINER_4_PORT) + .quota(CONTAINER_4_QUOTA) .privilegedUsername(CONTAINER_4_PRIVILEGED_USERNAME) .privilegedPassword(CONTAINER_4_PRIVILEGED_PASSWORD) .build(); @@ -2171,8 +2186,12 @@ public abstract class BaseTest { .columnType(ColumnTypeDto.TIMESTAMP) .build(); + public final static Long COLUMN_4_1_ID = 44L; + + public final static Long COLUMN_4_2_ID = 45L; + public final static List<TableColumn> TABLE_4_COLUMNS = List.of(TableColumn.builder() - .id(44L) + .id(COLUMN_4_1_ID) .ordinalPosition(0) .table(TABLE_4) .name("Timestamp") @@ -2182,7 +2201,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(45L) + .id(COLUMN_4_2_ID) .ordinalPosition(1) .table(TABLE_4) .name("Value") @@ -2228,7 +2247,7 @@ public abstract class BaseTest { .build(); public final static List<ColumnDto> TABLE_4_COLUMNS_DTO = List.of(ColumnDto.builder() - .id(44L) + .id(COLUMN_4_1_ID) .databaseId(DATABASE_1_ID) .tableId(TABLE_4_ID) .name("Timestamp") @@ -2239,7 +2258,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(45L) + .id(COLUMN_4_2_ID) .databaseId(DATABASE_1_ID) .tableId(TABLE_4_ID) .name("Value") @@ -2441,7 +2460,7 @@ public abstract class BaseTest { .sparqlEndpoint(ONTOLOGY_5_SPARQL_ENDPOINT) .build(); - public final static Long COLUMN_8_1_ID = 72L; + public final static Long COLUMN_8_1_ID = 75L; public final static Integer COLUMN_8_1_ORDINALPOS = 0; public final static String COLUMN_8_1_NAME = "ID"; public final static String COLUMN_8_1_INTERNAL_NAME = "id"; @@ -2450,7 +2469,7 @@ public abstract class BaseTest { public final static Boolean COLUMN_8_1_NULL = false; public final static Boolean COLUMN_8_1_AUTO_GENERATED = true; - public final static Long COLUMN_8_2_ID = 73L; + public final static Long COLUMN_8_2_ID = 76L; public final static Integer COLUMN_8_2_ORDINALPOS = 1; public final static String COLUMN_8_2_NAME = "Value"; public final static String COLUMN_8_2_INTERNAL_NAME = "value"; @@ -2461,7 +2480,7 @@ public abstract class BaseTest { public final static Boolean COLUMN_8_2_NULL = false; public final static Boolean COLUMN_8_2_AUTO_GENERATED = false; - public final static Long COLUMN_8_3_ID = 74L; + public final static Long COLUMN_8_3_ID = 77L; public final static Integer COLUMN_8_3_ORDINALPOS = 2; public final static String COLUMN_8_3_NAME = "raw"; public final static String COLUMN_8_3_INTERNAL_NAME = "raw"; @@ -2638,8 +2657,6 @@ public abstract class BaseTest { public final static Long QUERY_2_ID = 2L; public final static String QUERY_2_STATEMENT = "SELECT `location` FROM `weather_aus`"; public final static String QUERY_2_QUERY_HASH = "a2d2dd94ebc7653bb5a3b55dd8ed5e91d3d13c225c6855a1eb4eb7ca14c36ced"; - public final static Long QUERY_2_CONTAINER_ID = CONTAINER_2_ID; - public final static Long QUERY_2_DATABASE_ID = DATABASE_2_ID; public final static Long QUERY_2_RESULT_NUMBER = 2L; public final static String QUERY_2_RESULT_HASH = "ff3f7cbe1b96d296957f6e39e55b8b1b577fa3d205d4795af99594cfd20cb80d"; public final static Instant QUERY_2_CREATED = Instant.now().minus(2, MINUTES); @@ -2651,7 +2668,7 @@ public abstract class BaseTest { public final static QueryDto QUERY_2_DTO = QueryDto.builder() .id(QUERY_2_ID) - .databaseId(QUERY_2_DATABASE_ID) + .databaseId(DATABASE_2_ID) .query(QUERY_2_STATEMENT) .queryNormalized(QUERY_2_STATEMENT) .resultNumber(QUERY_2_RESULT_NUMBER) @@ -2817,8 +2834,6 @@ public abstract class BaseTest { public final static Long QUERY_6_ID = 6L; public final static String QUERY_6_STATEMENT = "SELECT `location` FROM `weather_aus` WHERE `id` = 1"; public final static String QUERY_6_QUERY_HASH = "6d6dc48b12cdfd959d39a62887334a6bbd529b93eed4f211f3f671bd9e7d6225"; - public final static Long QUERY_6_CONTAINER_ID = CONTAINER_2_ID; - public final static Long QUERY_6_DATABASE_ID = DATABASE_2_ID; public final static String QUERY_6_RESULT_HASH = "ff5f7cbe1b96d596957f6e59e55b8b1b577fa5d505d5795af99595cfd50cb80d"; public final static Instant QUERY_6_CREATED = Instant.now().minus(5, MINUTES); public final static Instant QUERY_6_EXECUTION = Instant.now().minus(1, MINUTES); @@ -2830,7 +2845,7 @@ public abstract class BaseTest { public final static QueryDto QUERY_6_DTO = QueryDto.builder() .id(QUERY_6_ID) - .databaseId(QUERY_6_DATABASE_ID) + .databaseId(DATABASE_2_ID) .query(QUERY_6_STATEMENT) .queryNormalized(QUERY_6_STATEMENT) .resultNumber(QUERY_6_RESULT_NUMBER) @@ -2851,8 +2866,18 @@ public abstract class BaseTest { .columnType(ColumnTypeDto.BIGINT) .build(); + public final static Long COLUMN_1_1_ID = 1L; + + public final static Long COLUMN_1_2_ID = 2L; + + public final static Long COLUMN_1_3_ID = 3L; + + public final static Long COLUMN_1_4_ID = 4L; + + public final static Long COLUMN_1_5_ID = 5L; + public final static List<TableColumn> TABLE_1_COLUMNS = List.of(TableColumn.builder() - .id(1L) + .id(COLUMN_1_1_ID) .ordinalPosition(0) .table(TABLE_1) .name("id") @@ -2862,7 +2887,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(2L) + .id(COLUMN_1_2_ID) .ordinalPosition(1) .table(TABLE_1) .name("Date") @@ -2873,7 +2898,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(3L) + .id(COLUMN_1_3_ID) .ordinalPosition(2) .table(TABLE_1) .name("Location") @@ -2884,7 +2909,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(4L) + .id(COLUMN_1_4_ID) .ordinalPosition(3) .table(TABLE_1) .name("MinTemp") @@ -2896,7 +2921,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(5L) + .id(COLUMN_1_5_ID) .ordinalPosition(4) .table(TABLE_1) .name("Rainfall") @@ -2984,8 +3009,14 @@ public abstract class BaseTest { .constraints(TABLE_1_CONSTRAINTS_CREATE_INVALID_DTO) .build(); + public final static Long COLUMN_2_1_ID = 6L; + + public final static Long COLUMN_2_2_ID = 7L; + + public final static Long COLUMN_2_3_ID = 8L; + public final static List<TableColumn> TABLE_2_COLUMNS = List.of(TableColumn.builder() - .id(6L) + .id(COLUMN_2_1_ID) .ordinalPosition(0) .table(TABLE_2) .name("location") @@ -2999,7 +3030,7 @@ public abstract class BaseTest { .sets(null) .build(), TableColumn.builder() - .id(7L) + .id(COLUMN_2_2_ID) .ordinalPosition(1) .table(TABLE_2) .name("lat") @@ -3014,7 +3045,7 @@ public abstract class BaseTest { .sets(null) .build(), TableColumn.builder() - .id(8L) + .id(COLUMN_2_3_ID) .ordinalPosition(2) .table(TABLE_2) .name("lng") @@ -3030,21 +3061,21 @@ public abstract class BaseTest { .build()); public final static ColumnBriefDto TABLE_2_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() - .id(6L) + .id(COLUMN_2_1_ID) .name("location") .internalName("location") .columnType(ColumnTypeDto.VARCHAR) .build(); public final static ColumnBriefDto TABLE_2_COLUMNS_BRIEF_2_DTO = ColumnBriefDto.builder() - .id(8L) + .id(COLUMN_2_3_ID) .name("lng") .internalName("lng") .columnType(ColumnTypeDto.DECIMAL) .build(); public final static List<ColumnDto> TABLE_2_COLUMNS_DTO = List.of(ColumnDto.builder() - .id(6L) + .id(COLUMN_2_1_ID) .table(TABLE_2_DTO) .tableId(TABLE_2_ID) .databaseId(DATABASE_1_ID) @@ -3059,7 +3090,7 @@ public abstract class BaseTest { .sets(null) .build(), ColumnDto.builder() - .id(7L) + .id(COLUMN_2_2_ID) .table(TABLE_2_DTO) .tableId(TABLE_2_ID) .databaseId(DATABASE_1_ID) @@ -3074,7 +3105,7 @@ public abstract class BaseTest { .sets(null) .build(), ColumnDto.builder() - .id(8L) + .id(COLUMN_2_3_ID) .table(TABLE_2_DTO) .tableId(TABLE_2_ID) .databaseId(DATABASE_1_ID) @@ -3089,15 +3120,85 @@ public abstract class BaseTest { .sets(null) .build()); + public final static Long COLUMN_3_1_ID = 9L; + + public final static Long COLUMN_3_2_ID = 10L; + + public final static Long COLUMN_3_3_ID = 11L; + + public final static Long COLUMN_3_4_ID = 12L; + + public final static Long COLUMN_3_5_ID = 13L; + + public final static Long COLUMN_3_6_ID = 14L; + + public final static Long COLUMN_3_7_ID = 15L; + + public final static Long COLUMN_3_8_ID = 16L; + + public final static Long COLUMN_3_9_ID = 17L; + + public final static Long COLUMN_3_10_ID = 18L; + + public final static Long COLUMN_3_11_ID = 19L; + + public final static Long COLUMN_3_12_ID = 20L; + + public final static Long COLUMN_3_13_ID = 21L; + + public final static Long COLUMN_3_14_ID = 22L; + + public final static Long COLUMN_3_15_ID = 23L; + + public final static Long COLUMN_3_16_ID = 24L; + + public final static Long COLUMN_3_17_ID = 25L; + + public final static Long COLUMN_3_18_ID = 26L; + + public final static Long COLUMN_3_19_ID = 27L; + + public final static Long COLUMN_3_20_ID = 28L; + + public final static Long COLUMN_3_21_ID = 29L; + + public final static Long COLUMN_3_22_ID = 30L; + + public final static Long COLUMN_3_23_ID = 31L; + + public final static Long COLUMN_3_24_ID = 32L; + + public final static Long COLUMN_3_25_ID = 33L; + + public final static Long COLUMN_3_26_ID = 34L; + + public final static Long COLUMN_3_27_ID = 35L; + + public final static Long COLUMN_3_28_ID = 36L; + + public final static Long COLUMN_3_29_ID = 37L; + + public final static Long COLUMN_3_30_ID = 38L; + + public final static Long COLUMN_3_31_ID = 39L; + + public final static Long COLUMN_3_32_ID = 40L; + + public final static Long COLUMN_3_33_ID = 41L; + + public final static Long COLUMN_3_34_ID = 42L; + + public final static Long COLUMN_3_35_ID = 43L; + public final static ColumnBriefDto TABLE_3_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() - .id(9L) + .id(COLUMN_3_1_ID) .columnType(ColumnTypeDto.BIGINT) .name("id") .internalName("id") .build(); public final static List<TableColumn> TABLE_3_COLUMNS = List.of(TableColumn.builder() - .id(9L) + .id(COLUMN_3_1_ID) .table(TABLE_3) .ordinalPosition(0) .autoGenerated(true) @@ -3110,7 +3211,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(10L) + .id(COLUMN_3_2_ID) .table(TABLE_3) .ordinalPosition(1) .autoGenerated(false) @@ -3123,7 +3224,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(11L) + .id(COLUMN_3_3_ID) .table(TABLE_3) .ordinalPosition(2) .autoGenerated(false) @@ -3136,7 +3237,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(12L) + .id(COLUMN_3_4_ID) .table(TABLE_3) .ordinalPosition(3) .autoGenerated(false) @@ -3148,7 +3249,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(13L) + .id(COLUMN_3_5_ID) .table(TABLE_3) .ordinalPosition(4) .autoGenerated(false) @@ -3161,7 +3262,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(14L) + .id(COLUMN_3_6_ID) .table(TABLE_3) .ordinalPosition(5) .autoGenerated(false) @@ -3174,7 +3275,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(15L) + .id(COLUMN_3_7_ID) .table(TABLE_3) .ordinalPosition(6) .autoGenerated(false) @@ -3187,7 +3288,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(16L) + .id(COLUMN_3_8_ID) .table(TABLE_3) .ordinalPosition(7) .autoGenerated(false) @@ -3200,7 +3301,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(17L) + .id(COLUMN_3_9_ID) .table(TABLE_3) .ordinalPosition(8) .autoGenerated(false) @@ -3213,7 +3314,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(18L) + .id(COLUMN_3_10_ID) .table(TABLE_3) .ordinalPosition(9) .autoGenerated(false) @@ -3226,7 +3327,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(19L) + .id(COLUMN_3_11_ID) .table(TABLE_3) .ordinalPosition(10) .autoGenerated(false) @@ -3238,7 +3339,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(20L) + .id(COLUMN_3_12_ID) .table(TABLE_3) .ordinalPosition(11) .autoGenerated(false) @@ -3251,7 +3352,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(21L) + .id(COLUMN_3_13_ID) .table(TABLE_3) .ordinalPosition(12) .autoGenerated(false) @@ -3264,7 +3365,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(22L) + .id(COLUMN_3_14_ID) .table(TABLE_3) .ordinalPosition(13) .autoGenerated(false) @@ -3277,7 +3378,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(23L) + .id(COLUMN_3_15_ID) .table(TABLE_3) .ordinalPosition(14) .autoGenerated(false) @@ -3290,7 +3391,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(24L) + .id(COLUMN_3_16_ID) .table(TABLE_3) .ordinalPosition(15) .autoGenerated(false) @@ -3303,7 +3404,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(25L) + .id(COLUMN_3_17_ID) .table(TABLE_3) .ordinalPosition(16) .autoGenerated(false) @@ -3316,7 +3417,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(26L) + .id(COLUMN_3_18_ID) .table(TABLE_3) .ordinalPosition(17) .autoGenerated(false) @@ -3329,7 +3430,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(27L) + .id(COLUMN_3_19_ID) .table(TABLE_3) .ordinalPosition(18) .autoGenerated(false) @@ -3342,7 +3443,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(28L) + .id(COLUMN_3_20_ID) .table(TABLE_3) .ordinalPosition(19) .autoGenerated(false) @@ -3354,7 +3455,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(29L) + .id(COLUMN_3_21_ID) .table(TABLE_3) .ordinalPosition(20) .autoGenerated(false) @@ -3367,7 +3468,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(30L) + .id(COLUMN_3_22_ID) .table(TABLE_3) .ordinalPosition(21) .autoGenerated(false) @@ -3380,7 +3481,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(31L) + .id(COLUMN_3_23_ID) .table(TABLE_3) .ordinalPosition(22) .autoGenerated(false) @@ -3393,7 +3494,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(32L) + .id(COLUMN_3_24_ID) .table(TABLE_3) .ordinalPosition(23) .autoGenerated(false) @@ -3406,7 +3507,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(33L) + .id(COLUMN_3_25_ID) .table(TABLE_3) .ordinalPosition(24) .autoGenerated(false) @@ -3419,7 +3520,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(34L) + .id(COLUMN_3_26_ID) .table(TABLE_3) .ordinalPosition(25) .autoGenerated(false) @@ -3432,7 +3533,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(35L) + .id(COLUMN_3_27_ID) .table(TABLE_3) .ordinalPosition(26) .autoGenerated(false) @@ -3445,7 +3546,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(36L) + .id(COLUMN_3_28_ID) .table(TABLE_3) .ordinalPosition(27) .autoGenerated(false) @@ -3458,7 +3559,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(37L) + .id(COLUMN_3_29_ID) .table(TABLE_3) .ordinalPosition(28) .autoGenerated(false) @@ -3471,7 +3572,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(38L) + .id(COLUMN_3_30_ID) .table(TABLE_3) .ordinalPosition(29) .autoGenerated(false) @@ -3484,7 +3585,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(39L) + .id(COLUMN_3_31_ID) .table(TABLE_3) .ordinalPosition(30) .autoGenerated(false) @@ -3497,7 +3598,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(40L) + .id(COLUMN_3_32_ID) .table(TABLE_3) .ordinalPosition(31) .autoGenerated(false) @@ -3510,7 +3611,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(41L) + .id(COLUMN_3_33_ID) .table(TABLE_3) .ordinalPosition(32) .autoGenerated(false) @@ -3523,7 +3624,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(42L) + .id(COLUMN_3_34_ID) .table(TABLE_3) .ordinalPosition(33) .autoGenerated(false) @@ -3536,7 +3637,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), TableColumn.builder() - .id(43L) + .id(COLUMN_3_35_ID) .table(TABLE_3) .ordinalPosition(34) .autoGenerated(false) @@ -3550,7 +3651,7 @@ public abstract class BaseTest { .build()); public final static List<ColumnDto> TABLE_3_COLUMNS_DTO = List.of(ColumnDto.builder() - .id(9L) + .id(COLUMN_3_1_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3564,7 +3665,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(10L) + .id(COLUMN_3_2_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3578,7 +3679,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(11L) + .id(COLUMN_3_3_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3592,7 +3693,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(12L) + .id(COLUMN_3_4_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3606,7 +3707,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(13L) + .id(COLUMN_3_5_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3620,7 +3721,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(14L) + .id(COLUMN_3_6_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3634,7 +3735,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(15L) + .id(COLUMN_3_7_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3648,7 +3749,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(16L) + .id(COLUMN_3_8_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3662,7 +3763,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(17L) + .id(COLUMN_3_9_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3676,7 +3777,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(18L) + .id(COLUMN_3_10_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3690,7 +3791,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(19L) + .id(COLUMN_3_11_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3704,7 +3805,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(20L) + .id(COLUMN_3_12_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3718,7 +3819,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(21L) + .id(COLUMN_3_13_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3732,7 +3833,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(22L) + .id(COLUMN_3_14_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3746,7 +3847,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(23L) + .id(COLUMN_3_15_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3760,7 +3861,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(24L) + .id(COLUMN_3_16_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3774,7 +3875,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(25L) + .id(COLUMN_3_17_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3788,7 +3889,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(26L) + .id(COLUMN_3_18_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3802,7 +3903,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(27L) + .id(COLUMN_3_19_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3816,7 +3917,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(28L) + .id(COLUMN_3_20_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3830,7 +3931,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(29L) + .id(COLUMN_3_21_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3844,7 +3945,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(30L) + .id(COLUMN_3_22_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3858,7 +3959,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(31L) + .id(COLUMN_3_23_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3872,7 +3973,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(32L) + .id(COLUMN_3_24_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3886,7 +3987,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(33L) + .id(COLUMN_3_25_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3900,7 +4001,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(34L) + .id(COLUMN_3_26_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3914,7 +4015,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(35L) + .id(COLUMN_3_27_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3928,7 +4029,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(36L) + .id(COLUMN_3_28_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3942,7 +4043,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(37L) + .id(COLUMN_3_29_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3956,7 +4057,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(38L) + .id(COLUMN_3_30_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3970,7 +4071,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(39L) + .id(COLUMN_3_31_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3984,7 +4085,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(40L) + .id(COLUMN_3_32_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -3998,7 +4099,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(41L) + .id(COLUMN_3_33_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -4012,7 +4113,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(42L) + .id(COLUMN_3_34_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -4026,7 +4127,7 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build(), ColumnDto.builder() - .id(43L) + .id(COLUMN_3_35_ID) .tableId(TABLE_3_ID) .table(TABLE_3_DTO) .databaseId(DATABASE_1_ID) @@ -4040,15 +4141,57 @@ public abstract class BaseTest { .sets(new LinkedList<>()) .build()); + public final static Long COLUMN_5_1_ID = 46L; + + public final static Long COLUMN_5_2_ID = 47L; + + public final static Long COLUMN_5_3_ID = 48L; + + public final static Long COLUMN_5_4_ID = 49L; + + public final static Long COLUMN_5_5_ID = 50L; + + public final static Long COLUMN_5_6_ID = 51L; + + public final static Long COLUMN_5_7_ID = 52L; + + public final static Long COLUMN_5_8_ID = 53L; + + public final static Long COLUMN_5_9_ID = 54L; + + public final static Long COLUMN_5_10_ID = 55L; + + public final static Long COLUMN_5_11_ID = 56L; + + public final static Long COLUMN_5_12_ID = 57L; + + public final static Long COLUMN_5_13_ID = 58L; + + public final static Long COLUMN_5_14_ID = 59L; + + public final static Long COLUMN_5_15_ID = 60L; + + public final static Long COLUMN_5_16_ID = 61L; + + public final static Long COLUMN_5_17_ID = 62L; + + public final static Long COLUMN_5_18_ID = 63L; + + public final static Long COLUMN_5_19_ID = 64L; + + public final static Long COLUMN_5_20_ID = 65L; + + public final static Long COLUMN_5_21_ID = 66L; + public final static ColumnBriefDto TABLE_5_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() - .id(45L) + .id(COLUMN_5_1_ID) .name("id") .internalName("id") .columnType(ColumnTypeDto.BIGINT) .build(); public final static List<TableColumn> TABLE_5_COLUMNS = List.of(TableColumn.builder() - .id(45L) + .id(COLUMN_5_1_ID) .ordinalPosition(0) .table(TABLE_5) .name("id") @@ -4058,7 +4201,7 @@ public abstract class BaseTest { .autoGenerated(true) .build(), TableColumn.builder() - .id(46L) + .id(COLUMN_5_2_ID) .ordinalPosition(1) .table(TABLE_5) .name("Animal Name") @@ -4068,7 +4211,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(47L) + .id(COLUMN_5_3_ID) .ordinalPosition(2) .table(TABLE_5) .name("Hair") @@ -4078,7 +4221,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(48L) + .id(COLUMN_5_4_ID) .ordinalPosition(3) .table(TABLE_5) .name("Feathers") @@ -4088,7 +4231,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(49L) + .id(COLUMN_5_5_ID) .ordinalPosition(4) .table(TABLE_5) .name("Bread") @@ -4098,7 +4241,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(50L) + .id(COLUMN_5_6_ID) .ordinalPosition(5) .table(TABLE_5) .name("Eggs") @@ -4108,7 +4251,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(51L) + .id(COLUMN_5_7_ID) .ordinalPosition(6) .table(TABLE_5) .name("Milk") @@ -4118,7 +4261,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(52L) + .id(COLUMN_5_8_ID) .ordinalPosition(7) .table(TABLE_5) .name("Water") @@ -4128,7 +4271,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(53L) + .id(COLUMN_5_9_ID) .ordinalPosition(8) .table(TABLE_5) .name("Airborne") @@ -4138,7 +4281,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(54L) + .id(COLUMN_5_10_ID) .ordinalPosition(9) .table(TABLE_5) .name("Waterborne") @@ -4148,7 +4291,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(55L) + .id(COLUMN_5_11_ID) .ordinalPosition(10) .table(TABLE_5) .name("Aquantic") @@ -4158,7 +4301,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(56L) + .id(COLUMN_5_12_ID) .ordinalPosition(11) .table(TABLE_5) .name("Predator") @@ -4168,7 +4311,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(57L) + .id(COLUMN_5_13_ID) .ordinalPosition(12) .table(TABLE_5) .name("Backbone") @@ -4178,7 +4321,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(58L) + .id(COLUMN_5_14_ID) .ordinalPosition(13) .table(TABLE_5) .name("Breathes") @@ -4188,7 +4331,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(59L) + .id(COLUMN_5_15_ID) .ordinalPosition(14) .table(TABLE_5) .name("Venomous") @@ -4198,7 +4341,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(60L) + .id(COLUMN_5_16_ID) .ordinalPosition(15) .table(TABLE_5) .name("Fin") @@ -4208,7 +4351,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(61L) + .id(COLUMN_5_17_ID) .ordinalPosition(16) .table(TABLE_5) .name("Legs") @@ -4218,7 +4361,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(62L) + .id(COLUMN_5_18_ID) .ordinalPosition(17) .table(TABLE_5) .name("Tail") @@ -4228,7 +4371,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(63L) + .id(COLUMN_5_19_ID) .ordinalPosition(18) .table(TABLE_5) .name("Domestic") @@ -4238,7 +4381,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(64L) + .id(COLUMN_5_20_ID) .ordinalPosition(19) .table(TABLE_5) .name("Catsize") @@ -4248,7 +4391,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(65L) + .id(COLUMN_5_21_ID) .ordinalPosition(20) .table(TABLE_5) .name("Class Type") @@ -4259,7 +4402,7 @@ public abstract class BaseTest { .build()); public final static List<ColumnDto> TABLE_5_COLUMNS_DTO = List.of(ColumnDto.builder() - .id(45L) + .id(COLUMN_5_1_ID) .ordinalPosition(0) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4270,7 +4413,7 @@ public abstract class BaseTest { .autoGenerated(true) .build(), ColumnDto.builder() - .id(46L) + .id(COLUMN_5_2_ID) .ordinalPosition(1) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4281,7 +4424,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(47L) + .id(COLUMN_5_3_ID) .ordinalPosition(2) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4292,7 +4435,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(48L) + .id(COLUMN_5_4_ID) .ordinalPosition(3) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4303,7 +4446,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(49L) + .id(COLUMN_5_5_ID) .ordinalPosition(4) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4314,7 +4457,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(50L) + .id(COLUMN_5_6_ID) .ordinalPosition(5) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4325,7 +4468,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(51L) + .id(COLUMN_5_7_ID) .ordinalPosition(6) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4336,7 +4479,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(52L) + .id(COLUMN_5_8_ID) .ordinalPosition(7) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4347,7 +4490,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(53L) + .id(COLUMN_5_9_ID) .ordinalPosition(8) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4358,7 +4501,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(54L) + .id(COLUMN_5_10_ID) .ordinalPosition(9) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4369,7 +4512,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(55L) + .id(COLUMN_5_11_ID) .ordinalPosition(10) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4380,7 +4523,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(56L) + .id(COLUMN_5_12_ID) .ordinalPosition(11) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4391,7 +4534,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(57L) + .id(COLUMN_5_13_ID) .ordinalPosition(12) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4402,7 +4545,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(58L) + .id(COLUMN_5_14_ID) .ordinalPosition(13) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4413,7 +4556,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(59L) + .id(COLUMN_5_15_ID) .ordinalPosition(14) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4424,7 +4567,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(60L) + .id(COLUMN_5_16_ID) .ordinalPosition(15) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4435,7 +4578,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(61L) + .id(COLUMN_5_17_ID) .ordinalPosition(16) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4446,7 +4589,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(62L) + .id(COLUMN_5_18_ID) .ordinalPosition(17) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4457,7 +4600,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(63L) + .id(COLUMN_5_19_ID) .ordinalPosition(18) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4468,7 +4611,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(64L) + .id(COLUMN_5_20_ID) .ordinalPosition(19) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4479,7 +4622,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(65L) + .id(COLUMN_5_21_ID) .ordinalPosition(20) .tableId(TABLE_5_ID) .table(TABLE_5_DTO) @@ -4690,7 +4833,7 @@ public abstract class BaseTest { .build()); public final static ColumnBriefDto TABLE_6_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() - .id(66L) + .id(67L) .name("id") .internalName("id") .columnType(ColumnTypeDto.BIGINT) @@ -4802,22 +4945,26 @@ public abstract class BaseTest { .constraints(TABLE_6_CONSTRAINTS_CREATE) .build(); + public final static Long COLUMN_7_1_ID = 73L; + + public final static Long COLUMN_7_2_ID = 74L; + public final static ColumnBriefDto TABLE_7_COLUMNS_BRIEF_0_DTO = ColumnBriefDto.builder() - .id(26L) + .id(COLUMN_7_1_ID) .name("name_id") .internalName("name_id") .columnType(ColumnTypeDto.BIGINT) .build(); public final static ColumnBriefDto TABLE_7_COLUMNS_BRIEF_1_DTO = ColumnBriefDto.builder() - .id(27L) + .id(COLUMN_7_2_ID) .name("zoo_id") .internalName("zoo_id") .columnType(ColumnTypeDto.BIGINT) .build(); public final static List<TableColumn> TABLE_7_COLUMNS = List.of(TableColumn.builder() - .id(74L) + .id(COLUMN_7_1_ID) .ordinalPosition(0) .table(TABLE_7) .name("name_id") @@ -4827,7 +4974,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), TableColumn.builder() - .id(75L) + .id(COLUMN_7_2_ID) .ordinalPosition(1) .table(TABLE_7) .name("zoo_id") @@ -4838,7 +4985,7 @@ public abstract class BaseTest { .build()); public final static List<ColumnDto> TABLE_7_COLUMNS_DTO = List.of(ColumnDto.builder() - .id(74L) + .id(COLUMN_7_1_ID) .ordinalPosition(0) .tableId(TABLE_7_ID) .table(TABLE_7_DTO) @@ -4849,7 +4996,7 @@ public abstract class BaseTest { .autoGenerated(false) .build(), ColumnDto.builder() - .id(75L) + .id(COLUMN_7_2_ID) .ordinalPosition(1) .tableId(TABLE_7_ID) .table(TABLE_7_DTO) @@ -4903,8 +5050,7 @@ public abstract class BaseTest { .size(22L) .isNullAllowed(true) .autoGenerated(false) - .build() - ); + .build() ); public final static View VIEW_1 = View.builder() .id(VIEW_1_ID) diff --git a/dbrepo-search-service/Pipfile b/dbrepo-search-service/Pipfile index 8d6cc6b220d0e6df9219aeca9b7d1ec571c2fde6..260236a6ec0d2f08ba3929a45f875dd9cd449e5f 100644 --- a/dbrepo-search-service/Pipfile +++ b/dbrepo-search-service/Pipfile @@ -18,7 +18,7 @@ jwt = "~=1.3" testcontainers-opensearch = "*" pytest = "*" rdflib = "*" -dbrepo = {path = "./lib/dbrepo-1.4.5.tar.gz"} +dbrepo = {path = "./lib/dbrepo-1.4.6.tar.gz"} gunicorn = "*" [dev-packages] diff --git a/dbrepo-search-service/Pipfile.lock b/dbrepo-search-service/Pipfile.lock index 1eda993f108c195ae51b8d607d900d31dcf1d722..c8e647e9d94833b85f72bb2dbdf0c6ab2f84db00 100644 --- a/dbrepo-search-service/Pipfile.lock +++ b/dbrepo-search-service/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f4b77f12b6e64d95ba5e3df0cce6f3eeb8d9cb8e45a6a17b46088d7077d13595" + "sha256": "8f7de86e8c15ccfa38b73d7deeec2c48afa5dd59f14a2d61432f5e79989b53cd" }, "pipfile-spec": 6, "requires": { @@ -373,11 +373,10 @@ }, "dbrepo": { "hashes": [ - "sha256:0a04b67204de6dc969ec68fb21aaead898156077e8a5b6f1e03bb5ab0e124a61", - "sha256:454a182b772cb777d27a22bb334bf059ce68d4e6b5fecae802678fabfdf3f934" + "sha256:b0e92f1a6130cd00924b3011c0e9029b292ee7c8faea3eca20f8af5ea9531c1b" ], "markers": "python_version >= '3.11'", - "path": "./lib/dbrepo-1.4.5.tar.gz" + "path": "./lib/dbrepo-1.4.6.tar.gz" }, "docker": { "hashes": [ @@ -528,67 +527,75 @@ }, "greenlet": { "hashes": [ - "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67", - "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6", - "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257", - "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4", - "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676", - "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61", - "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc", - "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca", - "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7", - "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728", - "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305", - "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6", - "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379", - "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414", - "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04", - "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a", - "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf", - "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491", - "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559", - "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e", - "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274", - "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb", - "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b", - "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9", - "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b", - "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be", - "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506", - "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405", - "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113", - "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f", - "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5", - "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230", - "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d", - "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f", - "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a", - "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e", - "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61", - "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6", - "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d", - "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71", - "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22", - "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2", - "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3", - "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067", - "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc", - "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881", - "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3", - "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e", - "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac", - "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53", - "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0", - "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b", - "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83", - "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41", - "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c", - "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf", - "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da", - "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33" + "sha256:01059afb9b178606b4b6e92c3e710ea1635597c3537e44da69f4531e111dd5e9", + "sha256:037d9ac99540ace9424cb9ea89f0accfaff4316f149520b4ae293eebc5bded17", + "sha256:0e49a65d25d7350cca2da15aac31b6f67a43d867448babf997fe83c7505f57bc", + "sha256:13ff8c8e54a10472ce3b2a2da007f915175192f18e6495bad50486e87c7f6637", + "sha256:1544b8dd090b494c55e60c4ff46e238be44fdc472d2589e943c241e0169bcea2", + "sha256:184258372ae9e1e9bddce6f187967f2e08ecd16906557c4320e3ba88a93438c3", + "sha256:1ddc7bcedeb47187be74208bc652d63d6b20cb24f4e596bd356092d8000da6d6", + "sha256:221169d31cada333a0c7fd087b957c8f431c1dba202c3a58cf5a3583ed973e9b", + "sha256:243a223c96a4246f8a30ea470c440fe9db1f5e444941ee3c3cd79df119b8eebf", + "sha256:24fc216ec7c8be9becba8b64a98a78f9cd057fd2dc75ae952ca94ed8a893bf27", + "sha256:2651dfb006f391bcb240635079a68a261b227a10a08af6349cba834a2141efa1", + "sha256:26811df4dc81271033a7836bc20d12cd30938e6bd2e9437f56fa03da81b0f8fc", + "sha256:26d9c1c4f1748ccac0bae1dbb465fb1a795a75aba8af8ca871503019f4285e2a", + "sha256:28fe80a3eb673b2d5cc3b12eea468a5e5f4603c26aa34d88bf61bba82ceb2f9b", + "sha256:2cd8518eade968bc52262d8c46727cfc0826ff4d552cf0430b8d65aaf50bb91d", + "sha256:2d004db911ed7b6218ec5c5bfe4cf70ae8aa2223dffbb5b3c69e342bb253cb28", + "sha256:3d07c28b85b350564bdff9f51c1c5007dfb2f389385d1bc23288de51134ca303", + "sha256:3e7e6ef1737a819819b1163116ad4b48d06cfdd40352d813bb14436024fcda99", + "sha256:44151d7b81b9391ed759a2f2865bbe623ef00d648fed59363be2bbbd5154656f", + "sha256:44cd313629ded43bb3b98737bba2f3e2c2c8679b55ea29ed73daea6b755fe8e7", + "sha256:4a3dae7492d16e85ea6045fd11cb8e782b63eac8c8d520c3a92c02ac4573b0a6", + "sha256:4b5ea3664eed571779403858d7cd0a9b0ebf50d57d2cdeafc7748e09ef8cd81a", + "sha256:4c3446937be153718250fe421da548f973124189f18fe4575a0510b5c928f0cc", + "sha256:5415b9494ff6240b09af06b91a375731febe0090218e2898d2b85f9b92abcda0", + "sha256:5fd6e94593f6f9714dbad1aaba734b5ec04593374fa6638df61592055868f8b8", + "sha256:619935a44f414274a2c08c9e74611965650b730eb4efe4b2270f91df5e4adf9a", + "sha256:655b21ffd37a96b1e78cc48bf254f5ea4b5b85efaf9e9e2a526b3c9309d660ca", + "sha256:665b21e95bc0fce5cab03b2e1d90ba9c66c510f1bb5fdc864f3a377d0f553f6b", + "sha256:6a4bf607f690f7987ab3291406e012cd8591a4f77aa54f29b890f9c331e84989", + "sha256:6cea1cca3be76c9483282dc7760ea1cc08a6ecec1f0b6ca0a94ea0d17432da19", + "sha256:713d450cf8e61854de9420fb7eea8ad228df4e27e7d4ed465de98c955d2b3fa6", + "sha256:726377bd60081172685c0ff46afbc600d064f01053190e4450857483c4d44484", + "sha256:76b3e3976d2a452cba7aa9e453498ac72240d43030fdc6d538a72b87eaff52fd", + "sha256:76dc19e660baea5c38e949455c1181bc018893f25372d10ffe24b3ed7341fb25", + "sha256:76e5064fd8e94c3f74d9fd69b02d99e3cdb8fc286ed49a1f10b256e59d0d3a0b", + "sha256:7f346d24d74c00b6730440f5eb8ec3fe5774ca8d1c9574e8e57c8671bb51b910", + "sha256:81eeec4403a7d7684b5812a8aaa626fa23b7d0848edb3a28d2eb3220daddcbd0", + "sha256:90b5bbf05fe3d3ef697103850c2ce3374558f6fe40fd57c9fac1bf14903f50a5", + "sha256:9730929375021ec90f6447bff4f7f5508faef1c02f399a1953870cdb78e0c345", + "sha256:9eb4a1d7399b9f3c7ac68ae6baa6be5f9195d1d08c9ddc45ad559aa6b556bce6", + "sha256:a0409bc18a9f85321399c29baf93545152d74a49d92f2f55302f122007cfda00", + "sha256:a22f4e26400f7f48faef2d69c20dc055a1f3043d330923f9abe08ea0aecc44df", + "sha256:a53dfe8f82b715319e9953330fa5c8708b610d48b5c59f1316337302af5c0811", + "sha256:a771dc64fa44ebe58d65768d869fcfb9060169d203446c1d446e844b62bdfdca", + "sha256:a814dc3100e8a046ff48faeaa909e80cdb358411a3d6dd5293158425c684eda8", + "sha256:a8870983af660798dc1b529e1fd6f1cefd94e45135a32e58bd70edd694540f33", + "sha256:ac0adfdb3a21dc2a24ed728b61e72440d297d0fd3a577389df566651fcd08f97", + "sha256:b395121e9bbe8d02a750886f108d540abe66075e61e22f7353d9acb0b81be0f0", + "sha256:b9505a0c8579899057cbefd4ec34d865ab99852baf1ff33a9481eb3924e2da0b", + "sha256:c0a5b1c22c82831f56f2f7ad9bbe4948879762fe0d59833a4a71f16e5fa0f682", + "sha256:c3967dcc1cd2ea61b08b0b276659242cbce5caca39e7cbc02408222fb9e6ff39", + "sha256:c6f4c2027689093775fd58ca2388d58789009116844432d920e9147f91acbe64", + "sha256:c9d86401550b09a55410f32ceb5fe7efcd998bd2dad9e82521713cb148a4a15f", + "sha256:cd468ec62257bb4544989402b19d795d2305eccb06cde5da0eb739b63dc04665", + "sha256:cfcfb73aed40f550a57ea904629bdaf2e562c68fa1164fa4588e752af6efdc3f", + "sha256:d0dd943282231480aad5f50f89bdf26690c995e8ff555f26d8a5b9887b559bcc", + "sha256:d3c59a06c2c28a81a026ff11fbf012081ea34fb9b7052f2ed0366e14896f0a1d", + "sha256:d45b75b0f3fd8d99f62eb7908cfa6d727b7ed190737dec7fe46d993da550b81a", + "sha256:d46d5069e2eeda111d6f71970e341f4bd9aeeee92074e649ae263b834286ecc0", + "sha256:d58ec349e0c2c0bc6669bf2cd4982d2f93bf067860d23a0ea1fe677b0f0b1e09", + "sha256:db1b3ccb93488328c74e97ff888604a8b95ae4f35f4f56677ca57a4fc3a4220b", + "sha256:dd65695a8df1233309b701dec2539cc4b11e97d4fcc0f4185b4a12ce54db0491", + "sha256:f9482c2ed414781c0af0b35d9d575226da6b728bd1a720668fa05837184965b7", + "sha256:f9671e7282d8c6fcabc32c0fb8d7c0ea8894ae85cee89c9aadc2d7129e1a9954", + "sha256:fad7a051e07f64e297e6e8399b4d6a3bdcad3d7297409e9a06ef8cbccff4f501", + "sha256:ffb08f2a1e59d38c7b8b9ac8083c9c8b9875f0955b1e9b9b9a965607a51f8e54" ], "markers": "python_version < '3.13' and platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))", - "version": "==3.0.3" + "version": "==3.1.0" }, "gunicorn": { "hashes": [ @@ -738,99 +745,101 @@ }, "multidict": { "hashes": [ - "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556", - "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c", - "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29", - "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b", - "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8", - "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7", - "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd", - "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40", - "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6", - "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3", - "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c", - "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9", - "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5", - "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae", - "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442", - "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9", - "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc", - "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c", - "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea", - "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5", - "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50", - "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182", - "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453", - "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e", - "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600", - "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733", - "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda", - "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241", - "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461", - "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e", - "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e", - "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b", - "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e", - "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7", - "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386", - "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd", - "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9", - "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf", - "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee", - "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5", - "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a", - "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271", - "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54", - "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4", - "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496", - "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb", - "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319", - "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3", - "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f", - "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527", - "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed", - "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604", - "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef", - "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8", - "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5", - "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5", - "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626", - "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c", - "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d", - "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c", - "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc", - "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc", - "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b", - "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38", - "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450", - "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1", - "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f", - "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3", - "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755", - "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226", - "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a", - "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046", - "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf", - "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479", - "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e", - "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1", - "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a", - "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83", - "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929", - "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93", - "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a", - "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c", - "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44", - "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89", - "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba", - "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e", - "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da", - "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24", - "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423", - "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef" + "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f", + "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056", + "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761", + "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3", + "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b", + "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6", + "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748", + "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966", + "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f", + "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1", + "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6", + "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada", + "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305", + "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2", + "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d", + "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a", + "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef", + "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c", + "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb", + "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60", + "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6", + "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4", + "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478", + "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81", + "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7", + "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56", + "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3", + "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6", + "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30", + "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb", + "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506", + "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0", + "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925", + "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c", + "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6", + "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e", + "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95", + "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2", + "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133", + "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2", + "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa", + "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3", + "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3", + "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436", + "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657", + "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581", + "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492", + "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43", + "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2", + "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2", + "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926", + "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057", + "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc", + "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80", + "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255", + "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1", + "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972", + "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53", + "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1", + "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423", + "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a", + "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160", + "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c", + "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd", + "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa", + "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5", + "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b", + "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa", + "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef", + "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44", + "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4", + "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156", + "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753", + "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28", + "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d", + "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a", + "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304", + "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008", + "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429", + "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72", + "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399", + "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3", + "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392", + "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167", + "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c", + "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774", + "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351", + "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76", + "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875", + "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd", + "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28", + "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db" ], - "markers": "python_version >= '3.7'", - "version": "==6.0.5" + "markers": "python_version >= '3.8'", + "version": "==6.1.0" }, "numpy": { "hashes": [ @@ -985,106 +994,106 @@ }, "pydantic": { "hashes": [ - "sha256:c7a8a9fdf7d100afa49647eae340e2d23efa382466a8d177efcd1381e9be5598", - "sha256:f66a7073abd93214a20c5f7b32d56843137a7a2e70d02111f3be287035c45370" + "sha256:1363c7d975c7036df0db2b4a61f2e062fbc0aa5ab5f2772e0ffc7191a4f4bce2", + "sha256:7aff4db5fdf3cf573d4b3c30926a510a10e19a0774d38fc4967f78beb6deb612" ], "markers": "python_version >= '3.8'", - "version": "==2.9.0" + "version": "==2.9.1" }, "pydantic-core": { "hashes": [ - "sha256:0102e49ac7d2df3379ef8d658d3bc59d3d769b0bdb17da189b75efa861fc07b4", - "sha256:0123655fedacf035ab10c23450163c2f65a4174f2bb034b188240a6cf06bb123", - "sha256:043ef8469f72609c4c3a5e06a07a1f713d53df4d53112c6d49207c0bd3c3bd9b", - "sha256:0448b81c3dfcde439551bb04a9f41d7627f676b12701865c8a2574bcea034437", - "sha256:05b366fb8fe3d8683b11ac35fa08947d7b92be78ec64e3277d03bd7f9b7cda79", - "sha256:07049ec9306ec64e955b2e7c40c8d77dd78ea89adb97a2013d0b6e055c5ee4c5", - "sha256:084414ffe9a85a52940b49631321d636dadf3576c30259607b75516d131fecd0", - "sha256:086c5db95157dc84c63ff9d96ebb8856f47ce113c86b61065a066f8efbe80acf", - "sha256:12625e69b1199e94b0ae1c9a95d000484ce9f0182f9965a26572f054b1537e44", - "sha256:16b25a4a120a2bb7dab51b81e3d9f3cde4f9a4456566c403ed29ac81bf49744f", - "sha256:19f1352fe4b248cae22a89268720fc74e83f008057a652894f08fa931e77dced", - "sha256:1a2ab4f410f4b886de53b6bddf5dd6f337915a29dd9f22f20f3099659536b2f6", - "sha256:1c7b81beaf7c7ebde978377dc53679c6cba0e946426fc7ade54251dfe24a7604", - "sha256:1cf842265a3a820ebc6388b963ead065f5ce8f2068ac4e1c713ef77a67b71f7c", - "sha256:1eb37f7d6a8001c0f86dc8ff2ee8d08291a536d76e49e78cda8587bb54d8b329", - "sha256:23af245b8f2f4ee9e2c99cb3f93d0e22fb5c16df3f2f643f5a8da5caff12a653", - "sha256:257d6a410a0d8aeb50b4283dea39bb79b14303e0fab0f2b9d617701331ed1515", - "sha256:276ae78153a94b664e700ac362587c73b84399bd1145e135287513442e7dfbc7", - "sha256:2b1a195efd347ede8bcf723e932300292eb13a9d2a3c1f84eb8f37cbbc905b7f", - "sha256:329a721253c7e4cbd7aad4a377745fbcc0607f9d72a3cc2102dd40519be75ed2", - "sha256:358331e21a897151e54d58e08d0219acf98ebb14c567267a87e971f3d2a3be59", - "sha256:3649bd3ae6a8ebea7dc381afb7f3c6db237fc7cebd05c8ac36ca8a4187b03b30", - "sha256:3713dc093d5048bfaedbba7a8dbc53e74c44a140d45ede020dc347dda18daf3f", - "sha256:3ef71ec876fcc4d3bbf2ae81961959e8d62f8d74a83d116668409c224012e3af", - "sha256:41ae8537ad371ec018e3c5da0eb3f3e40ee1011eb9be1da7f965357c4623c501", - "sha256:4a801c5e1e13272e0909c520708122496647d1279d252c9e6e07dac216accc41", - "sha256:4c83c64d05ffbbe12d4e8498ab72bdb05bcc1026340a4a597dc647a13c1605ec", - "sha256:4cebb9794f67266d65e7e4cbe5dcf063e29fc7b81c79dc9475bd476d9534150e", - "sha256:5668b3173bb0b2e65020b60d83f5910a7224027232c9f5dc05a71a1deac9f960", - "sha256:56e6a12ec8d7679f41b3750ffa426d22b44ef97be226a9bab00a03365f217b2b", - "sha256:582871902e1902b3c8e9b2c347f32a792a07094110c1bca6c2ea89b90150caac", - "sha256:5c8aa40f6ca803f95b1c1c5aeaee6237b9e879e4dfb46ad713229a63651a95fb", - "sha256:5d813fd871b3d5c3005157622ee102e8908ad6011ec915a18bd8fde673c4360e", - "sha256:5dd0ec5f514ed40e49bf961d49cf1bc2c72e9b50f29a163b2cc9030c6742aa73", - "sha256:5f3cf3721eaf8741cffaf092487f1ca80831202ce91672776b02b875580e174a", - "sha256:6294907eaaccf71c076abdd1c7954e272efa39bb043161b4b8aa1cd76a16ce43", - "sha256:64d094ea1aa97c6ded4748d40886076a931a8bf6f61b6e43e4a1041769c39dd2", - "sha256:6650a7bbe17a2717167e3e23c186849bae5cef35d38949549f1c116031b2b3aa", - "sha256:67b6655311b00581914aba481729971b88bb8bc7996206590700a3ac85e457b8", - "sha256:6b06c5d4e8701ac2ba99a2ef835e4e1b187d41095a9c619c5b185c9068ed2a49", - "sha256:6ce883906810b4c3bd90e0ada1f9e808d9ecf1c5f0b60c6b8831d6100bcc7dd6", - "sha256:6db09153d8438425e98cdc9a289c5fade04a5d2128faff8f227c459da21b9703", - "sha256:6f80fba4af0cb1d2344869d56430e304a51396b70d46b91a55ed4959993c0589", - "sha256:743e5811b0c377eb830150d675b0847a74a44d4ad5ab8845923d5b3a756d8100", - "sha256:753294d42fb072aa1775bfe1a2ba1012427376718fa4c72de52005a3d2a22178", - "sha256:7568f682c06f10f30ef643a1e8eec4afeecdafde5c4af1b574c6df079e96f96c", - "sha256:7706e15cdbf42f8fab1e6425247dfa98f4a6f8c63746c995d6a2017f78e619ae", - "sha256:785e7f517ebb9890813d31cb5d328fa5eda825bb205065cde760b3150e4de1f7", - "sha256:7a05c0240f6c711eb381ac392de987ee974fa9336071fb697768dfdb151345ce", - "sha256:7ce7eaf9a98680b4312b7cebcdd9352531c43db00fca586115845df388f3c465", - "sha256:7ce8e26b86a91e305858e018afc7a6e932f17428b1eaa60154bd1f7ee888b5f8", - "sha256:7d0324a35ab436c9d768753cbc3c47a865a2cbc0757066cb864747baa61f6ece", - "sha256:7e9b24cca4037a561422bf5dc52b38d390fb61f7bfff64053ce1b72f6938e6b2", - "sha256:810ca06cca91de9107718dc83d9ac4d2e86efd6c02cba49a190abcaf33fb0472", - "sha256:820f6ee5c06bc868335e3b6e42d7ef41f50dfb3ea32fbd523ab679d10d8741c0", - "sha256:82764c0bd697159fe9947ad59b6db6d7329e88505c8f98990eb07e84cc0a5d81", - "sha256:8ae65fdfb8a841556b52935dfd4c3f79132dc5253b12c0061b96415208f4d622", - "sha256:8d5b0ff3218858859910295df6953d7bafac3a48d5cd18f4e3ed9999efd2245f", - "sha256:95d6bf449a1ac81de562d65d180af5d8c19672793c81877a2eda8fde5d08f2fd", - "sha256:964c7aa318da542cdcc60d4a648377ffe1a2ef0eb1e996026c7f74507b720a78", - "sha256:96ef39add33ff58cd4c112cbac076726b96b98bb8f1e7f7595288dcfb2f10b57", - "sha256:a6612c2a844043e4d10a8324c54cdff0042c558eef30bd705770793d70b224aa", - "sha256:a8031074a397a5925d06b590121f8339d34a5a74cfe6970f8a1124eb8b83f4ac", - "sha256:aab9e522efff3993a9e98ab14263d4e20211e62da088298089a03056980a3e69", - "sha256:ae579143826c6f05a361d9546446c432a165ecf1c0b720bbfd81152645cb897d", - "sha256:ae90b9e50fe1bd115b24785e962b51130340408156d34d67b5f8f3fa6540938e", - "sha256:b18cf68255a476b927910c6873d9ed00da692bb293c5b10b282bd48a0afe3ae2", - "sha256:b7efb12e5071ad8d5b547487bdad489fbd4a5a35a0fc36a1941517a6ad7f23e0", - "sha256:c4d9f15ffe68bcd3898b0ad7233af01b15c57d91cd1667f8d868e0eacbfe3f87", - "sha256:c53100c8ee5a1e102766abde2158077d8c374bee0639201f11d3032e3555dfbc", - "sha256:c57e493a0faea1e4c38f860d6862ba6832723396c884fbf938ff5e9b224200e2", - "sha256:c8319e0bd6a7b45ad76166cc3d5d6a36c97d0c82a196f478c3ee5346566eebfd", - "sha256:caffda619099cfd4f63d48462f6aadbecee3ad9603b4b88b60cb821c1b258576", - "sha256:cc0c316fba3ce72ac3ab7902a888b9dc4979162d320823679da270c2d9ad0cad", - "sha256:cdd02a08205dc90238669f082747612cb3c82bd2c717adc60f9b9ecadb540f80", - "sha256:d50ac34835c6a4a0d456b5db559b82047403c4317b3bc73b3455fefdbdc54b0a", - "sha256:d6b9dd6aa03c812017411734e496c44fef29b43dba1e3dd1fa7361bbacfc1354", - "sha256:da3131ef2b940b99106f29dfbc30d9505643f766704e14c5d5e504e6a480c35e", - "sha256:da43cbe593e3c87d07108d0ebd73771dc414488f1f91ed2e204b0370b94b37ac", - "sha256:dd59638025160056687d598b054b64a79183f8065eae0d3f5ca523cde9943940", - "sha256:e1895e949f8849bc2757c0dbac28422a04be031204df46a56ab34bcf98507342", - "sha256:e1a79ad49f346aa1a2921f31e8dbbab4d64484823e813a002679eaa46cba39e1", - "sha256:e460475719721d59cd54a350c1f71c797c763212c836bf48585478c5514d2854", - "sha256:e64ffaf8f6e17ca15eb48344d86a7a741454526f3a3fa56bc493ad9d7ec63936", - "sha256:e6e3ccebdbd6e53474b0bb7ab8b88e83c0cfe91484b25e058e581348ee5a01a5", - "sha256:e758d271ed0286d146cf7c04c539a5169a888dd0b57026be621547e756af55bc", - "sha256:f087879f1ffde024dd2788a30d55acd67959dcf6c431e9d3682d1c491a0eb474", - "sha256:f477d26183e94eaafc60b983ab25af2a809a1b48ce4debb57b343f671b7a90b6", - "sha256:fc535cb898ef88333cf317777ecdfe0faac1c2a3187ef7eb061b6f7ecf7e6bae" + "sha256:01491d8b4d8db9f3391d93b0df60701e644ff0894352947f31fff3e52bd5c801", + "sha256:03667cec5daf43ac4995cefa8aaf58f99de036204a37b889c24a80927b629cec", + "sha256:03795b9e8a5d7fda05f3873efc3f59105e2dcff14231680296b87b80bb327295", + "sha256:047531242f8e9c2db733599f1c612925de095e93c9cc0e599e96cf536aaf56ba", + "sha256:04b07490bc2f6f2717b10c3969e1b830f5720b632f8ae2f3b8b1542394c47a8e", + "sha256:09e926397f392059ce0afdcac920df29d9c833256354d0c55f1584b0b70cf07e", + "sha256:0a0137ddf462575d9bce863c4c95bac3493ba8e22f8c28ca94634b4a1d3e2bb4", + "sha256:0dda0290a6f608504882d9f7650975b4651ff91c85673341789a476b1159f211", + "sha256:13dd45ba2561603681a2676ca56006d6dee94493f03d5cadc055d2055615c3ea", + "sha256:1c3980f2843de5184656aab58698011b42763ccba11c4a8c35936c8dd6c7068c", + "sha256:1eba2f7ce3e30ee2170410e2171867ea73dbd692433b81a93758ab2de6c64835", + "sha256:203171e48946c3164fe7691fc349c79241ff8f28306abd4cad5f4f75ed80bc8d", + "sha256:255ec6dcb899c115f1e2a64bc9ebc24cc0e3ab097775755244f77360d1f3c06c", + "sha256:2718443bc671c7ac331de4eef9b673063b10af32a0bb385019ad61dcf2cc8f6c", + "sha256:2b2b55b0448e9da68f56b696f313949cda1039e8ec7b5d294285335b53104b61", + "sha256:2b603cde285322758a0279995b5796d64b63060bfbe214b50a3ca23b5cee3e83", + "sha256:2b676583fc459c64146debea14ba3af54e540b61762dfc0613dc4e98c3f66eeb", + "sha256:37ba321ac2a46100c578a92e9a6aa33afe9ec99ffa084424291d84e456f490c1", + "sha256:3c09a7885dd33ee8c65266e5aa7fb7e2f23d49d8043f089989726391dd7350c5", + "sha256:3cb0f65d8b4121c1b015c60104a685feb929a29d7cf204387c7f2688c7974690", + "sha256:40b8441be16c1e940abebed83cd006ddb9e3737a279e339dbd6d31578b802f7b", + "sha256:40d9bd259538dba2f40963286009bf7caf18b5112b19d2b55b09c14dde6db6a7", + "sha256:4b259fd8409ab84b4041b7b3f24dcc41e4696f180b775961ca8142b5b21d0e70", + "sha256:4f62c1c953d7ee375df5eb2e44ad50ce2f5aff931723b398b8bc6f0ac159791a", + "sha256:50e4661f3337977740fdbfbae084ae5693e505ca2b3130a6d4eb0f2281dc43b8", + "sha256:510b7fb0a86dc8f10a8bb43bd2f97beb63cffad1203071dc434dac26453955cd", + "sha256:5499798317fff7f25dbef9347f4451b91ac2a4330c6669821c8202fd354c7bee", + "sha256:560e32f0df04ac69b3dd818f71339983f6d1f70eb99d4d1f8e9705fb6c34a5c1", + "sha256:59d52cf01854cb26c46958552a21acb10dd78a52aa34c86f284e66b209db8cab", + "sha256:5a8cd3074a98ee70173a8633ad3c10e00dcb991ecec57263aacb4095c5efb958", + "sha256:5b01a078dd4f9a52494370af21aa52964e0a96d4862ac64ff7cea06e0f12d2c5", + "sha256:6470b5a1ec4d1c2e9afe928c6cb37eb33381cab99292a708b8cb9aa89e62429b", + "sha256:65b6e5da855e9c55a0c67f4db8a492bf13d8d3316a59999cfbaf98cc6e401961", + "sha256:67a5def279309f2e23014b608c4150b0c2d323bd7bccd27ff07b001c12c2415c", + "sha256:68f4cf373f0de6abfe599a38307f4417c1c867ca381c03df27c873a9069cda25", + "sha256:6b5547d098c76e1694ba85f05b595720d7c60d342f24d5aad32c3049131fa5c4", + "sha256:6cb968da9a0746a0cf521b2b5ef25fc5a0bee9b9a1a8214e0a1cfaea5be7e8a4", + "sha256:6daaf5b1ba1369a22c8b050b643250e3e5efc6a78366d323294aee54953a4d5f", + "sha256:7200fd561fb3be06827340da066df4311d0b6b8eb0c2116a110be5245dceb326", + "sha256:748bdf985014c6dd3e1e4cc3db90f1c3ecc7246ff5a3cd4ddab20c768b2f1dab", + "sha256:76bdab0de4acb3f119c2a4bff740e0c7dc2e6de7692774620f7452ce11ca76c8", + "sha256:7e6f33503c5495059148cc486867e1d24ca35df5fc064686e631e314d959ad5b", + "sha256:7f10a5d1b9281392f1bf507d16ac720e78285dfd635b05737c3911637601bae6", + "sha256:82da2f4703894134a9f000e24965df73cc103e31e8c31906cc1ee89fde72cbd8", + "sha256:86fc6c762ca7ac8fbbdff80d61b2c59fb6b7d144aa46e2d54d9e1b7b0e780e01", + "sha256:87cfa0ed6b8c5bd6ae8b66de941cece179281239d482f363814d2b986b79cedc", + "sha256:89b731f25c80830c76fdb13705c68fef6a2b6dc494402987c7ea9584fe189f5d", + "sha256:8b2682038e255e94baf2c473dca914a7460069171ff5cdd4080be18ab8a7fd6e", + "sha256:8b5b3ed73abb147704a6e9f556d8c5cb078f8c095be4588e669d315e0d11893b", + "sha256:8e22b477bf90db71c156f89a55bfe4d25177b81fce4aa09294d9e805eec13855", + "sha256:9172d2088e27d9a185ea0a6c8cebe227a9139fd90295221d7d495944d2367700", + "sha256:94f85614f2cba13f62c3c6481716e4adeae48e1eaa7e8bac379b9d177d93947a", + "sha256:98ccd69edcf49f0875d86942f4418a4e83eb3047f20eb897bffa62a5d419c8fa", + "sha256:a0d90e08b2727c5d01af1b5ef4121d2f0c99fbee692c762f4d9d0409c9da6541", + "sha256:a3fc572d9b5b5cfe13f8e8a6e26271d5d13f80173724b738557a8c7f3a8a3791", + "sha256:a678c1ac5c5ec5685af0133262103defb427114e62eafeda12f1357a12140162", + "sha256:a7f7f72f721223f33d3dc98a791666ebc6a91fa023ce63733709f4894a7dc611", + "sha256:bb68b41c3fa64587412b104294b9cbb027509dc2f6958446c502638d481525ef", + "sha256:bbb5e45eab7624440516ee3722a3044b83fff4c0372efe183fd6ba678ff681fe", + "sha256:c24574c7e92e2c56379706b9a3f07c1e0c7f2f87a41b6ee86653100c4ce343e5", + "sha256:c483dab0f14b8d3f0df0c6c18d70b21b086f74c87ab03c59250dbf6d3c89baba", + "sha256:c6de1ec30c4bb94f3a69c9f5f2182baeda5b809f806676675e9ef6b8dc936f28", + "sha256:c744fa100fdea0d000d8bcddee95213d2de2e95b9c12be083370b2072333a0fa", + "sha256:c889fd87e1f1bbeb877c2ee56b63bb297de4636661cc9bbfcf4b34e5e925bc27", + "sha256:cbaaf2ef20d282659093913da9d402108203f7cb5955020bd8d1ae5a2325d1c4", + "sha256:ce3317d155628301d649fe5e16a99528d5680af4ec7aa70b90b8dacd2d725c9b", + "sha256:d015e63b985a78a3d4ccffd3bdf22b7c20b3bbd4b8227809b3e8e75bc37f9cb2", + "sha256:d063c6b9fed7d992bcbebfc9133f4c24b7a7f215d6b102f3e082b1117cddb72c", + "sha256:d965e8b325f443ed3196db890d85dfebbb09f7384486a77461347f4adb1fa7f8", + "sha256:db6e6afcb95edbe6b357786684b71008499836e91f2a4a1e55b840955b341dbb", + "sha256:dc1636770a809dee2bd44dd74b89cc80eb41172bcad8af75dd0bc182c2666d4c", + "sha256:dd9be0a42de08f4b58a3cc73a123f124f65c24698b95a54c1543065baca8cf0e", + "sha256:e0ec50663feedf64d21bad0809f5857bac1ce91deded203efc4a84b31b2e4305", + "sha256:e2c409ce1c219c091e47cb03feb3c4ed8c2b8e004efc940da0166aaee8f9d6c8", + "sha256:e61328920154b6a44d98cabcb709f10e8b74276bc709c9a513a8c37a18786cc4", + "sha256:e89513f014c6be0d17b00a9a7c81b1c426f4eb9224b15433f3d98c1a071f8433", + "sha256:ea85bda3189fb27503af4c45273735bcde3dd31c1ab17d11f37b04877859ef45", + "sha256:edbefe079a520c5984e30e1f1f29325054b59534729c25b874a16a5048028d16", + "sha256:f0cb80fd5c2df4898693aa841425ea1727b1b6d2167448253077d2a49003e0ed", + "sha256:f2b05e6ccbee333a8f4b8f4d7c244fdb7a979e90977ad9c51ea31261e2085ce0", + "sha256:f399e8657c67313476a121a6944311fab377085ca7f490648c9af97fc732732d", + "sha256:f4a57db8966b3a1d1a350012839c6a0099f0898c56512dfade8a1fe5fb278710", + "sha256:f56af3a420fb1ffaf43ece3ea09c2d27c444e7c40dcb7c6e7cf57aae764f2b48", + "sha256:f6bd91345b5163ee7448bee201ed7dd601ca24f43f439109b0212e296eb5b423", + "sha256:fb539d7e5dc4aac345846f290cf504d2fd3c1be26ac4e8b5e4c2b688069ff4cf", + "sha256:fbdce4b47592f9e296e19ac31667daed8753c8367ebb34b9a9bd89dacaa299c9", + "sha256:fc379c73fd66606628b866f661e8785088afe2adaba78e6bbe80796baf708a63", + "sha256:fc3cf31edf405a161a0adad83246568647c54404739b614b1ff43dad2b02e6d5", + "sha256:fcf31facf2796a2d3b7fe338fe8640aa0166e4e55b4cb108dbfd1058049bf4cb" ], "markers": "python_version >= '3.8'", - "version": "==2.23.2" + "version": "==2.23.3" }, "pyjwt": { "hashes": [ @@ -1104,12 +1113,12 @@ }, "pytest": { "hashes": [ - "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5", - "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce" + "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", + "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==8.3.2" + "version": "==8.3.3" }, "python-dateutil": { "hashes": [ @@ -1130,10 +1139,10 @@ }, "pytz": { "hashes": [ - "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", - "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319" + "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", + "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725" ], - "version": "==2024.1" + "version": "==2024.2" }, "pyyaml": { "hashes": [ @@ -1449,11 +1458,11 @@ }, "urllib3": { "hashes": [ - "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", - "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168" + "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" ], "markers": "python_version >= '3.10'", - "version": "==2.2.2" + "version": "==2.2.3" }, "werkzeug": { "hashes": [ @@ -1541,101 +1550,101 @@ }, "yarl": { "hashes": [ - "sha256:012c506b2c23be4500fb97509aa7e6a575996fb317b80667fa26899d456e2aaf", - "sha256:030d41d48217b180c5a176e59c49d212d54d89f6f53640fa4c1a1766492aec27", - "sha256:044b76d069e69c6b0246f071ebac0576f89c772f806d66ef51e662bd015d03c7", - "sha256:05b07e6e0f715eaae9d927a302d9220724392f3c0b4e7f8dfa174bf2e1b8433e", - "sha256:0b3bf343b4ef9ec600d75363eb9b48ab3bd53b53d4e1c5a9fbf0cfe7ba73a47f", - "sha256:0e0aea8319fdc1ac340236e58b0b7dc763621bce6ce98124a9d58104cafd0aaa", - "sha256:11f7f8a72b3e26c533fa7ffa7a8068f4e3aad7b67c5cf7b17ea8c79fc81d9830", - "sha256:1718c0bca5a61edac7a57dcc11856cb01bde13a9360a3cb6baf384b89cfc0b40", - "sha256:179b1df5e9cd99234ea65e63d5bfc6dd524b2c3b6cf68a14b94ccbe01ab37ddd", - "sha256:1824bfb932d8100e5c94f4f98c078f23ebc6f6fa93acc3d95408762089c54a06", - "sha256:183136dc5d5411872e7529c924189a2e26fac5a7f9769cf13ef854d1d653ad36", - "sha256:183dd37bb5471e8017ab8a998c1ea070b4a0b08a97a7c4e20e0c7ccbe8ebb999", - "sha256:18b7ce6d8c35da8e16dcc8de124a80e250fc8c73f8c02663acf2485c874f1972", - "sha256:18bc4600eed1907762c1816bb16ac63bc52912e53b5e9a353eb0935a78e95496", - "sha256:190e70d2f9f16f1c9d666c103d635c9ed4bf8de7803e9fa0495eec405a3e96a8", - "sha256:1ea30675fbf0ad6795c100da677ef6a8960a7db05ac5293f02a23c2230203c89", - "sha256:1eafa7317063de4bc310716cdd9026c13f00b1629e649079a6908c3aafdf5046", - "sha256:23057a004bc9735008eb2a04b6ce94c6c06219cdf2b193997fd3ae6039eb3196", - "sha256:273baee8a8af5989d5aab51c740e65bc2b1fc6619b9dd192cd16a3fae51100be", - "sha256:293f7c2b30d015de3f1441c4ee764963b86636fde881b4d6093498d1e8711f69", - "sha256:2b922c32a1cff62bc43d408d1a8745abeed0a705793f2253c622bf3521922198", - "sha256:308d1cce071b5b500e3d95636bbf15dfdb8e87ed081b893555658a7f9869a156", - "sha256:30dde3a8b88c80a4f049eb4dd240d2a02e89174da6be2525541f949bf9fa38ab", - "sha256:315e8853d0ea46aabdce01f1f248fff7b9743de89b555c5f0487f54ac84beae8", - "sha256:32d2e46848dea122484317485129f080220aa84aeb6a9572ad9015107cebeb07", - "sha256:32e79d5ae975f7c2cc29f7104691fc9be5ee3724f24e1a7254d72f6219672108", - "sha256:3352c69dc235850d6bf8ddad915931f00dcab208ac4248b9af46175204c2f5f9", - "sha256:347011ad09a8f9be3d41fe2d7d611c3a4de4d49aa77bcb9a8c03c7a82fc45248", - "sha256:348ad53acd41caa489df7db352d620c982ab069855d9635dda73d685bbbc3636", - "sha256:3576ed2c51f8525d4ff5c3279247aacff9540bb43b292c4a37a8e6c6e1691adb", - "sha256:36d12d78b8b0d46099d413c8689b5510ad9ce5e443363d1c37b6ac5b3d7cbdfb", - "sha256:3bf10a395adac62177ba8ea738617e8de6cbb1cea6aa5d5dd2accde704fc8195", - "sha256:48a48261f8d610b0e15fed033e74798763bc2f8f2c0d769a2a0732511af71f1e", - "sha256:493ad061ee025c5ed3a60893cd70204eead1b3f60ccc90682e752f95b845bd46", - "sha256:4c46454fafa31f7241083a0dd21814f63e0fcb4ae49662dc7e286fd6a5160ea1", - "sha256:4cca9ba00be4bb8a051c4007b60fc91d6c9728c8b70c86cee4c24be9d641002f", - "sha256:4f6ac063a4e9bbd4f6cc88cc621516a44d6aec66862ea8399ba063374e4b12c7", - "sha256:52d1ae09b0764017e330bb5bf9af760c0168c564225085bb806f687bccffda8a", - "sha256:534b8bc181dca1691cf491c263e084af678a8fb6b6181687c788027d8c317026", - "sha256:54a4b5e6a060d46cad6a3cf340f4cb268e6fbc89c589d82a2da58f7db47c47c8", - "sha256:5b46c603bee1f2dd407b8358c2afc9b0472a22ccca528f114e1f4cd30dfecd22", - "sha256:5cece693380c1c4a606cdcaa0c54eda8f72cfe1ba83f5149b9023bb955e8fa8e", - "sha256:5d0c9e1dcc92d46ca89608fe4763fc2362f1e81c19a922c67dbc0f20951466e4", - "sha256:5f3372f9ae1d1f001826b77d0b29d4220e84f6c5f53915e71a825cdd02600065", - "sha256:5f769c2708c31227c5349c3e4c668c8b4b2e25af3e7263723f2ef33e8e3906a0", - "sha256:6026a6ef14d038a38ca9d81422db4b6bb7d5da94f9d08f21e0ad9ebd9c4bc3bb", - "sha256:637dd0f55d1781d4634c23994101c509e455b5ab61af9086b5763b7eca9359aa", - "sha256:687131ee4d045f3d58128ca28f5047ec902f7760545c39bbe003cc737c5a02b5", - "sha256:6bc602c7413e1b5223bc988947125998cb54d6184de45a871985daacc23e6c8c", - "sha256:6e91ed5f6818e1e3806eaeb7b14d9e17b90340f23089451ea59a89a29499d760", - "sha256:6eec21d8c3aa932c5a89480b58fa877e9c48092ab838ccc76788cbc917ceec0d", - "sha256:6f4f43ba30d604ba391bc7fe2dd104d6b87b62b0de4bbde79e362524b8a1eb75", - "sha256:6f64f8681671624f539eea5564518bc924524c25eb90ab24a7eddc2d872e668e", - "sha256:762a196612c2aba4197cd271da65fe08308f7ddf130dc63842c7a76d774b6a2c", - "sha256:88173836a25b7e5dce989eeee3b92d8ef5cdf512830d4155c6212de98e616f70", - "sha256:8c6214071f653d21bb7b43f7ee519afcbf7084263bb43408f4939d14558290db", - "sha256:8d7bd531d7eec4aa7ef8a99fef91962eeea5158a53af0ec507c476ddf8ebc29c", - "sha256:8e69b55965a47dd6c79e578abd7d85637b1bb4a7565436630826bdb28aa9b7ad", - "sha256:90fd64ce00f594db02f603efa502521c440fa1afcf6266be82eb31f19d2d9561", - "sha256:96422a3322b4d954f4c52403a2fc129ad118c151ee60a717847fb46a8480d1e1", - "sha256:99e7459ee86a3b81e57777afd3825b8b1acaac8a99f9c0bd02415d80eb3c371b", - "sha256:99eaa7d53f509ba1c2fea8fdfec15ba3cd36caca31d57ec6665073b148b5f260", - "sha256:9a8d6a0e2b5617b5c15c59db25f20ba429f1fea810f2c09fbf93067cb21ab085", - "sha256:9b6d0d7522b514f054b359409817af4c5ed76fa4fe42d8bd1ed12956804cf595", - "sha256:9ef7ce61958b3c7b2e2e0927c52d35cf367c5ee410e06e1337ecc83a90c23b95", - "sha256:a162cf04fd1e8d81025ec651d14cac4f6e0ca73a3c0a9482de8691b944e3098a", - "sha256:a80cdb3c15c15b33ecdb080546dcb022789b0084ca66ad41ffa0fe09857fca11", - "sha256:a9d8c4be5658834dc688072239d220631ad4b71ff79a5f3d17fb653f16d10759", - "sha256:aa1aeb99408be0ca774c5126977eb085fedda6dd7d9198ce4ceb2d06a44325c7", - "sha256:af5b52bfbbd5eb208cf1afe23c5ada443929e9b9d79e9fbc66cacc07e4e39748", - "sha256:b453b3dbc1ed4c2907632d05b378123f3fb411cad05d8d96de7d95104ef11c70", - "sha256:b80246bdee036381636e73ef0f19b032912064622b0e5ee44f6960fd11df12aa", - "sha256:bc544248b5263e1c0f61332ccf35e37404b54213f77ed17457f857f40af51452", - "sha256:bc66927f6362ed613a483c22618f88f014994ccbd0b7a25ec1ebc8c472d4b40a", - "sha256:be199fed28861d72df917e355287ad6835555d8210e7f8203060561f24d7d842", - "sha256:beda87b63c08fb4df8cc5353eeefe68efe12aa4f5284958bd1466b14c85e508e", - "sha256:bf733c835ebbd52bd78a52b919205e0f06d8571f71976a0259e5bcc20d0a2f44", - "sha256:c1bf63ba496cd4f12d30e916d9a52daa6c91433fedd9cd0d99fef3e13232836f", - "sha256:c382e189af10070bcb39caa9406b9cc47b26c1d2257979f11fe03a38be09fea9", - "sha256:c4d13071c5b99974cfe2f94c749ecc4baf882f7c4b6e4c40ca3d15d1b7e81f24", - "sha256:c5527d32506c11150ca87f33820057dc284e2a01a87f0238555cada247a8b278", - "sha256:c77a3c10af4aaf8891578fe492ef0990c65cf7005dd371f5ea8007b420958bf6", - "sha256:ca42a9281807fdf8fba86e671d8fdd76f92e9302a6d332957f2bae51c774f8a7", - "sha256:cd65588273d19f8483bc8f32a6fcf602e94a9a7ba287a1725977bd9527cd6c0c", - "sha256:d2366e2f987f69752f0588d2035321aaf24272693d75f7f6bb7e8a0f48f7ccdd", - "sha256:dff84623e7098cf9bfbb5187f9883051af652b0ce08b9f7084cc8630b87b6457", - "sha256:e4657fd290d556a5f3018d07c7b7deadcb622760c0125277d10a11471c340054", - "sha256:e8da33665ecc64cd3e593098adb449f9c65b4e3bc6338e75ad592da15453d898", - "sha256:eeb6a40c5ae2616fd38c1e039c6dd50031bbfbc2acacfd7b70a5d64fafc70901", - "sha256:f8e24b9a4afdffab399191a9f0b0e80eabc7b7fdb9f2dbccdeb8e4d28e5c57bb", - "sha256:ff45a655ca51e1cb778abbb586083fddb7d896332f47bb3b03bc75e30c25649f", - "sha256:ff8e803d8ca170e632fb3b4df1bfd29ba29be8edc3e9306c5ffa5fadea234a4f" + "sha256:01a8697ec24f17c349c4f655763c4db70eebc56a5f82995e5e26e837c6eb0e49", + "sha256:02da8759b47d964f9173c8675710720b468aa1c1693be0c9c64abb9d8d9a4867", + "sha256:04293941646647b3bfb1719d1d11ff1028e9c30199509a844da3c0f5919dc520", + "sha256:067b961853c8e62725ff2893226fef3d0da060656a9827f3f520fb1d19b2b68a", + "sha256:077da604852be488c9a05a524068cdae1e972b7dc02438161c32420fb4ec5e14", + "sha256:09696438cb43ea6f9492ef237761b043f9179f455f405279e609f2bc9100212a", + "sha256:0b8486f322d8f6a38539136a22c55f94d269addb24db5cb6f61adc61eabc9d93", + "sha256:0ea9682124fc062e3d931c6911934a678cb28453f957ddccf51f568c2f2b5e05", + "sha256:0f351fa31234699d6084ff98283cb1e852270fe9e250a3b3bf7804eb493bd937", + "sha256:14438dfc5015661f75f85bc5adad0743678eefee266ff0c9a8e32969d5d69f74", + "sha256:15061ce6584ece023457fb8b7a7a69ec40bf7114d781a8c4f5dcd68e28b5c53b", + "sha256:15439f3c5c72686b6c3ff235279630d08936ace67d0fe5c8d5bbc3ef06f5a420", + "sha256:17b5a386d0d36fb828e2fb3ef08c8829c1ebf977eef88e5367d1c8c94b454639", + "sha256:18ac56c9dd70941ecad42b5a906820824ca72ff84ad6fa18db33c2537ae2e089", + "sha256:1bb2d9e212fb7449b8fb73bc461b51eaa17cc8430b4a87d87be7b25052d92f53", + "sha256:1e969fa4c1e0b1a391f3fcbcb9ec31e84440253325b534519be0d28f4b6b533e", + "sha256:1fa2e7a406fbd45b61b4433e3aa254a2c3e14c4b3186f6e952d08a730807fa0c", + "sha256:2164cd9725092761fed26f299e3f276bb4b537ca58e6ff6b252eae9631b5c96e", + "sha256:21a7c12321436b066c11ec19c7e3cb9aec18884fe0d5b25d03d756a9e654edfe", + "sha256:238a21849dd7554cb4d25a14ffbfa0ef380bb7ba201f45b144a14454a72ffa5a", + "sha256:250e888fa62d73e721f3041e3a9abf427788a1934b426b45e1b92f62c1f68366", + "sha256:25861303e0be76b60fddc1250ec5986c42f0a5c0c50ff57cc30b1be199c00e63", + "sha256:267b24f891e74eccbdff42241c5fb4f974de2d6271dcc7d7e0c9ae1079a560d9", + "sha256:27fcb271a41b746bd0e2a92182df507e1c204759f460ff784ca614e12dd85145", + "sha256:2909fa3a7d249ef64eeb2faa04b7957e34fefb6ec9966506312349ed8a7e77bf", + "sha256:3257978c870728a52dcce8c2902bf01f6c53b65094b457bf87b2644ee6238ddc", + "sha256:327c724b01b8641a1bf1ab3b232fb638706e50f76c0b5bf16051ab65c868fac5", + "sha256:3de5292f9f0ee285e6bd168b2a77b2a00d74cbcfa420ed078456d3023d2f6dff", + "sha256:3fce4da3703ee6048ad4138fe74619c50874afe98b1ad87b2698ef95bf92c96d", + "sha256:3ff6b1617aa39279fe18a76c8d165469c48b159931d9b48239065767ee455b2b", + "sha256:400cd42185f92de559d29eeb529e71d80dfbd2f45c36844914a4a34297ca6f00", + "sha256:4179522dc0305c3fc9782549175c8e8849252fefeb077c92a73889ccbcd508ad", + "sha256:4307d9a3417eea87715c9736d050c83e8c1904e9b7aada6ce61b46361b733d92", + "sha256:476e20c433b356e16e9a141449f25161e6b69984fb4cdbd7cd4bd54c17844998", + "sha256:489fa8bde4f1244ad6c5f6d11bb33e09cf0d1d0367edb197619c3e3fc06f3d91", + "sha256:48a28bed68ab8fb7e380775f0029a079f08a17799cb3387a65d14ace16c12e2b", + "sha256:48dfd117ab93f0129084577a07287376cc69c08138694396f305636e229caa1a", + "sha256:4973eac1e2ff63cf187073cd4e1f1148dcd119314ab79b88e1b3fad74a18c9d5", + "sha256:498442e3af2a860a663baa14fbf23fb04b0dd758039c0e7c8f91cb9279799bff", + "sha256:501c503eed2bb306638ccb60c174f856cc3246c861829ff40eaa80e2f0330367", + "sha256:504cf0d4c5e4579a51261d6091267f9fd997ef58558c4ffa7a3e1460bd2336fa", + "sha256:61a5f2c14d0a1adfdd82258f756b23a550c13ba4c86c84106be4c111a3a4e413", + "sha256:637c7ddb585a62d4469f843dac221f23eec3cbad31693b23abbc2c366ad41ff4", + "sha256:66b63c504d2ca43bf7221a1f72fbe981ff56ecb39004c70a94485d13e37ebf45", + "sha256:67459cf8cf31da0e2cbdb4b040507e535d25cfbb1604ca76396a3a66b8ba37a6", + "sha256:688654f8507464745ab563b041d1fb7dab5d9912ca6b06e61d1c4708366832f5", + "sha256:6907daa4b9d7a688063ed098c472f96e8181733c525e03e866fb5db480a424df", + "sha256:69721b8effdb588cb055cc22f7c5105ca6fdaa5aeb3ea09021d517882c4a904c", + "sha256:6d23754b9939cbab02c63434776df1170e43b09c6a517585c7ce2b3d449b7318", + "sha256:7175a87ab8f7fbde37160a15e58e138ba3b2b0e05492d7351314a250d61b1591", + "sha256:72bf26f66456baa0584eff63e44545c9f0eaed9b73cb6601b647c91f14c11f38", + "sha256:74db2ef03b442276d25951749a803ddb6e270d02dda1d1c556f6ae595a0d76a8", + "sha256:750f656832d7d3cb0c76be137ee79405cc17e792f31e0a01eee390e383b2936e", + "sha256:75e0ae31fb5ccab6eda09ba1494e87eb226dcbd2372dae96b87800e1dcc98804", + "sha256:768ecc550096b028754ea28bf90fde071c379c62c43afa574edc6f33ee5daaec", + "sha256:7d51324a04fc4b0e097ff8a153e9276c2593106a811704025bbc1d6916f45ca6", + "sha256:7e975a2211952a8a083d1b9d9ba26472981ae338e720b419eb50535de3c02870", + "sha256:8215f6f21394d1f46e222abeb06316e77ef328d628f593502d8fc2a9117bde83", + "sha256:8258c86f47e080a258993eed877d579c71da7bda26af86ce6c2d2d072c11320d", + "sha256:8418c053aeb236b20b0ab8fa6bacfc2feaaf7d4683dd96528610989c99723d5f", + "sha256:87f020d010ba80a247c4abc335fc13421037800ca20b42af5ae40e5fd75e7909", + "sha256:884eab2ce97cbaf89f264372eae58388862c33c4f551c15680dd80f53c89a269", + "sha256:8a336eaa7ee7e87cdece3cedb395c9657d227bfceb6781295cf56abcd3386a26", + "sha256:8aef1b64da41d18026632d99a06b3fefe1d08e85dd81d849fa7c96301ed22f1b", + "sha256:8aef97ba1dd2138112890ef848e17d8526fe80b21f743b4ee65947ea184f07a2", + "sha256:8ed653638ef669e0efc6fe2acb792275cb419bf9cb5c5049399f3556995f23c7", + "sha256:9361628f28f48dcf8b2f528420d4d68102f593f9c2e592bfc842f5fb337e44fd", + "sha256:946eedc12895873891aaceb39bceb484b4977f70373e0122da483f6c38faaa68", + "sha256:94d0caaa912bfcdc702a4204cd5e2bb01eb917fc4f5ea2315aa23962549561b0", + "sha256:964a428132227edff96d6f3cf261573cb0f1a60c9a764ce28cda9525f18f7786", + "sha256:999bfee0a5b7385a0af5ffb606393509cfde70ecca4f01c36985be6d33e336da", + "sha256:a08ea567c16f140af8ddc7cb58e27e9138a1386e3e6e53982abaa6f2377b38cc", + "sha256:a28b70c9e2213de425d9cba5ab2e7f7a1c8ca23a99c4b5159bf77b9c31251447", + "sha256:a34e1e30f1774fa35d37202bbeae62423e9a79d78d0874e5556a593479fdf239", + "sha256:a4264515f9117be204935cd230fb2a052dd3792789cc94c101c535d349b3dab0", + "sha256:a7915ea49b0c113641dc4d9338efa9bd66b6a9a485ffe75b9907e8573ca94b84", + "sha256:aac44097d838dda26526cffb63bdd8737a2dbdf5f2c68efb72ad83aec6673c7e", + "sha256:b91044952da03b6f95fdba398d7993dd983b64d3c31c358a4c89e3c19b6f7aef", + "sha256:ba444bdd4caa2a94456ef67a2f383710928820dd0117aae6650a4d17029fa25e", + "sha256:c2dc4250fe94d8cd864d66018f8344d4af50e3758e9d725e94fecfa27588ff82", + "sha256:c35f493b867912f6fda721a59cc7c4766d382040bdf1ddaeeaa7fa4d072f4675", + "sha256:c92261eb2ad367629dc437536463dc934030c9e7caca861cc51990fe6c565f26", + "sha256:ce928c9c6409c79e10f39604a7e214b3cb69552952fbda8d836c052832e6a979", + "sha256:d95b52fbef190ca87d8c42f49e314eace4fc52070f3dfa5f87a6594b0c1c6e46", + "sha256:dae7bd0daeb33aa3e79e72877d3d51052e8b19c9025ecf0374f542ea8ec120e4", + "sha256:e286580b6511aac7c3268a78cdb861ec739d3e5a2a53b4809faef6b49778eaff", + "sha256:e4b53f73077e839b3f89c992223f15b1d2ab314bdbdf502afdc7bb18e95eae27", + "sha256:e8f63904df26d1a66aabc141bfd258bf738b9bc7bc6bdef22713b4f5ef789a4c", + "sha256:f3a6d90cab0bdf07df8f176eae3a07127daafcf7457b997b2bf46776da2c7eb7", + "sha256:f41fa79114a1d2eddb5eea7b912d6160508f57440bd302ce96eaa384914cd265", + "sha256:f46f81501160c28d0c0b7333b4f7be8983dbbc161983b6fb814024d1b4952f79", + "sha256:f61db3b7e870914dbd9434b560075e0366771eecbe6d2b5561f5bc7485f39efd" ], "markers": "python_version >= '3.8'", - "version": "==1.10.0" + "version": "==1.11.1" } }, "develop": { @@ -1744,12 +1753,12 @@ }, "pytest": { "hashes": [ - "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5", - "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce" + "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", + "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==8.3.2" + "version": "==8.3.3" } } } diff --git a/dbrepo-search-service/app.py b/dbrepo-search-service/app.py index f8d7856c9b7f7c60cf9769e3ade9f800640f0b9f..d668bfae419cfd43ea13a14987e116d99d54b592 100644 --- a/dbrepo-search-service/app.py +++ b/dbrepo-search-service/app.py @@ -165,7 +165,7 @@ template = { "info": { "title": "Database Repository Search Service API", "description": "Service that searches the search database", - "version": "1.4.5", + "version": "1.4.6", "contact": { "name": "Prof. Andreas Rauber", "email": "andreas.rauber@tuwien.ac.at" @@ -177,7 +177,7 @@ template = { }, "externalDocs": { "description": "Sourcecode Documentation", - "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/" + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/" }, "servers": [ { diff --git a/dbrepo-search-service/init/app.py b/dbrepo-search-service/init/app.py index fccbd92feaf8f9e3e904ca245e485ff4b8f8aa8e..450575ba090c445e030c60464a68f820f79b173b 100644 --- a/dbrepo-search-service/init/app.py +++ b/dbrepo-search-service/init/app.py @@ -6,6 +6,7 @@ from typing import List import opensearchpy.exceptions from dbrepo.RestClient import RestClient from logging.config import dictConfig +from pathlib import Path from dbrepo.api.dto import Database from opensearchpy import OpenSearch @@ -48,11 +49,11 @@ class App: search_instance: OpenSearch = None def __init__(self): - self.metadata_service_endpoint = os.getenv("METADATA_SERVICE_ENDPOINT") - self.search_host = os.getenv("OPENSEARCH_HOST") - self.search_port = int(os.getenv("OPENSEARCH_PORT")) - self.search_username = os.getenv("OPENSEARCH_USERNAME") - self.search_password = os.getenv("OPENSEARCH_PASSWORD") + self.metadata_service_endpoint = os.getenv("METADATA_SERVICE_ENDPOINT", "http://metadata-service:8080") + self.search_host = os.getenv("OPENSEARCH_HOST", "search-db") + self.search_port = int(os.getenv("OPENSEARCH_PORT", "9200")) + self.search_username = os.getenv("OPENSEARCH_USERNAME", "admin") + self.search_password = os.getenv("OPENSEARCH_PASSWORD", "admin") def _instance(self) -> OpenSearch: """ @@ -101,16 +102,17 @@ class App: return True def fetch_databases(self) -> List[Database]: + logging.debug(f"fetching database from endpoint: {self.metadata_service_endpoint}") client = RestClient(endpoint=self.metadata_service_endpoint) databases = [] - for database in client.get_databases(): + for database, index in client.get_databases(): + logging.debug(f"fetching database {index}/{len(databases)} details for database id: {database.id}") databases.append(client.get_database(database_id=database.id)) logging.debug(f"fetched {len(databases)} database(s)") return databases def save_databases(self, databases: List[Database]): - logging.debug( - f"save {len(databases)} database(s)") + logging.debug(f"save {len(databases)} database(s)") for doc in databases: doc: Database = doc try: diff --git a/dbrepo-search-service/init/lib/dbrepo-1.4.6.tar.gz b/dbrepo-search-service/init/lib/dbrepo-1.4.6.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..958287917e7f2b38a0286c3e91c2d471462bceee Binary files /dev/null and b/dbrepo-search-service/init/lib/dbrepo-1.4.6.tar.gz differ diff --git a/dbrepo-search-service/lib/dbrepo-1.4.6.tar.gz b/dbrepo-search-service/lib/dbrepo-1.4.6.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..958287917e7f2b38a0286c3e91c2d471462bceee Binary files /dev/null and b/dbrepo-search-service/lib/dbrepo-1.4.6.tar.gz differ diff --git a/dbrepo-ui/components/container/ContainerCard.vue b/dbrepo-ui/components/container/ContainerCard.vue new file mode 100644 index 0000000000000000000000000000000000000000..b2937cf6b4fb7f1a243056ea52ccd4649e205772 --- /dev/null +++ b/dbrepo-ui/components/container/ContainerCard.vue @@ -0,0 +1,53 @@ +<template> + <v-card + v-if="container" + variant="flat" + rounded="0"> + <v-divider class="mx-4" /> + <v-card-title + v-text="container.name" /> + <v-card-subtitle v-text="$t('pages.container.subtitle.text')" /> + <v-card-text> + <v-progress-linear + v-model="utilization" + :color="colorVariant" + height="20" + class="font-small"> + <template v-slot:default> + {{ container.count }} / {{ container.quota }} + </template> + </v-progress-linear> + </v-card-text> + </v-card> +</template> + +<script> +export default { + data() { + return { + loading: false + } + }, + props: { + container: { + default: () => { + return null + } + } + }, + computed: { + utilization () { + return this.container.count * 100.0 / this.container.quota + }, + colorVariant () { + return this.isContrastTheme ? '' : (this.isDarkTheme ? 'tertiary' : 'secondary') + }, + isContrastTheme () { + return this.$vuetify.theme.global.name.toLowerCase().endsWith('contrast') + }, + isDarkTheme () { + return this.$vuetify.theme.global.name.toLowerCase().startsWith('dark') + } + } +} +</script> diff --git a/dbrepo-ui/components/container/ContainerList.vue b/dbrepo-ui/components/container/ContainerList.vue new file mode 100644 index 0000000000000000000000000000000000000000..567ee4eec4fdb361157a8dd8d7d0d3e0f6e77d7b --- /dev/null +++ b/dbrepo-ui/components/container/ContainerList.vue @@ -0,0 +1,42 @@ +<template> + <div> + <v-card + variant="flat" + rounded="0"> + <v-list-item + v-if="loading" + lines="two"> + <Loading /> + </v-list-item> + </v-card> + <ContainerCard + v-for="(container, idx) in containers" + :container="container" + :key="idx"/> + </div> +</template> + +<script> +import ContainerCard from '@/components/container/ContainerCard.vue' + +export default { + components: { + ContainerCard + }, + props: { + containers: { + type: Array, + default: () => { + return [] + } + }, + loading: { + type: Boolean, + default: () => { + return true + } + } + } +} +</script> + diff --git a/dbrepo-ui/components/database/DatabaseCreate.vue b/dbrepo-ui/components/database/DatabaseCreate.vue index 275b7198311f6edc62aeefb07311e2d01fea771c..8d909b4da350c1cbc10dfad7d595799aa3adee4e 100644 --- a/dbrepo-ui/components/database/DatabaseCreate.vue +++ b/dbrepo-ui/components/database/DatabaseCreate.vue @@ -40,7 +40,17 @@ item-value="id" :rules="[v => !!v || $t('validation.required')]" return-object - required /> + required> + <template + v-slot:selection> + <span>{{ engine.name }}</span> + </template> + <template + v-if="engine" + v-slot:details> + {{ $t('pages.database.subpages.create.utilization.label') }} {{ engine.count }}/{{ engine.quota }} + </template> + </v-select> </v-col> </v-row> </v-card-text> @@ -106,7 +116,13 @@ export default { this.loadingContainers = true containerService.findAll() .then((containers) => { - this.engines = containers + const freeContainers = containers.filter(c => c.count < c.quota) + const defaultContainers = freeContainers.filter(c => c.image.default) + defaultContainers.sort(this.compareContainerUtilization) + this.engines = defaultContainers + const other = freeContainers.filter(c => !c.image.default) + other.sort(this.compareContainerUtilization) + other.forEach(c => this.engines.push(c)) if (this.engines.length > 0) { this.engine = this.engines[0] } @@ -139,6 +155,9 @@ export default { toast.error(this.$t(code)) }) }, + compareContainerUtilization (container, other) { + return Math.round(container.count / container.quota) < Math.round(other.count / other.quota) + }, notEmpty } } diff --git a/dbrepo-ui/layouts/default.vue b/dbrepo-ui/layouts/default.vue index c3bd070422bb488f880d9a891acabfe22c230443..d004feb2d2ff62fac50995b1ebe1122c445876cd 100644 --- a/dbrepo-ui/layouts/default.vue +++ b/dbrepo-ui/layouts/default.vue @@ -35,6 +35,11 @@ to="/semantic" prepend-icon="mdi-share-variant" :title="$t('navigation.semantics')" /> + <v-list-item + v-if="canListContainers" + to="/container" + prepend-icon="mdi-database-settings" + :title="$t('navigation.container')" /> </v-list> <template v-slot:append> <v-alert @@ -208,6 +213,12 @@ export default { } return this.roles.includes('list-ontologies') }, + canListContainers () { + if (!this.roles) { + return false + } + return this.roles.includes('list-containers') + }, logo () { return this.$config.public.logo }, diff --git a/dbrepo-ui/locales/en-US.json b/dbrepo-ui/locales/en-US.json index c07ee7ac48b99bcd3ce0a9055fc1846c686c5789..6abf715bc0ea6b7e8756acb78141672758ef9b54 100644 --- a/dbrepo-ui/locales/en-US.json +++ b/dbrepo-ui/locales/en-US.json @@ -2,6 +2,7 @@ "navigation": { "information": "Information", "search": "Search", + "container": "Engines", "ontologies": "Ontologies", "logout": "Logout", "login": "Login", @@ -641,6 +642,9 @@ }, "submit": { "text": "Create" + }, + "utilization": { + "label": "Utilization" } }, "tables": { @@ -1033,10 +1037,13 @@ } }, "container": { - "title": "Container", + "title": "Engines", "name": { "title": "Name" }, + "subtitle": { + "text": "Engine" + }, "internal-name": { "title": "Internal Name" }, @@ -1075,7 +1082,8 @@ }, "container": { "exists": "Container already exists in metadata database", - "missing": "Failed to find container in metadata database" + "missing": "Failed to find container in metadata database", + "quota": "Database quota exceeded in engine" }, "data": { "connection": "Failed to contact data service", diff --git a/dbrepo-ui/pages/container/index.vue b/dbrepo-ui/pages/container/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..360ce1543fdf086d60d568ed066ccca1f7c04537 --- /dev/null +++ b/dbrepo-ui/pages/container/index.vue @@ -0,0 +1,43 @@ +<template> + <div> + <v-toolbar + flat + :title="$t('pages.container.title')"> + </v-toolbar> + <ContainerList + v-cloak + :loading="loading" + :containers="containers" /> + </div> +</template> + +<script> +import ContainerList from '@/components/container/ContainerList.vue' + +export default { + components: { + ContainerList + }, + data () { + return { + loading: true, + dialog: null, + containers: [] + } + }, + computed: { + roles () { + return this.userStore.getRoles + }, + }, + mounted () { + this.loading = true + const containerService = useContainerService(); + containerService.findAll() + .then((containers) => { + this.containers = containers + this.loading = false + }) + } +} +</script> diff --git a/docker-compose.yml b/docker-compose.yml index 96fb14f99510d4be52433188cf1b38b04f6228b6..3fc6b972b1a8c556cf3ec79922b5a6595e0a99d9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -410,6 +410,8 @@ services: depends_on: dbrepo-search-db: condition: service_healthy + dbrepo-metadata-service: + condition: service_healthy logging: driver: json-file diff --git a/helm/dbrepo-mariadb-galera/.gitignore b/helm/dbrepo-mariadb-galera/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..613d851d27fbfa390c201b7ed8591da3e04bec35 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/.gitignore @@ -0,0 +1,6 @@ +# generated +*.crt +*.key +*.srl +*.csr +build/* \ No newline at end of file diff --git a/helm/dbrepo-mariadb-galera/.helmignore b/helm/dbrepo-mariadb-galera/.helmignore new file mode 100644 index 0000000000000000000000000000000000000000..b9029e8dea3ccab2aabc5c3a8d9226e9bb9ac827 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/.helmignore @@ -0,0 +1,30 @@ +# Dev +values.dev.yaml +Chart.tpl.yaml +hack/ +# MacOS +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Generated +build/ +artifacthub-repo.yml +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# Make +Makefile diff --git a/helm/dbrepo-mariadb-galera/Chart.lock b/helm/dbrepo-mariadb-galera/Chart.lock new file mode 100644 index 0000000000000000000000000000000000000000..fb510b79ee5efe30a1091eb91b09a163f7e6c4e9 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: mariadb-galera + repository: https://charts.bitnami.com/bitnami + version: 10.1.3 +digest: sha256:ec9ea7a577993779d520b0c93990fb04847f96e41f2bd503141ba66338340985 +generated: "2024-09-14T01:42:48.297778184+04:00" diff --git a/helm/dbrepo-mariadb-galera/Chart.yaml b/helm/dbrepo-mariadb-galera/Chart.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4be4337885fe446add1835f3a5296bc2a42f9583 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/Chart.yaml @@ -0,0 +1,23 @@ +annotations: + licenses: Apache-2.0 +apiVersion: v2 +name: dbrepo-mariadb-galera +description: Helm Chart for installing DBRepo Data Database +sources: + - https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +type: application +version: "1.4.6" +appVersion: "1.4.6" +keywords: + - dbrepo +maintainers: + - name: Martin Weise + email: martin.weise@tuwien.ac.at +home: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/ +icon: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/dbrepo-ui/public/favicon.png +dependencies: + - name: mariadb-galera + alias: database + version: 10.1.3 # app version: 11.1.3 + repository: https://charts.bitnami.com/bitnami + condition: database.enabled \ No newline at end of file diff --git a/helm/dbrepo-mariadb-galera/README.md b/helm/dbrepo-mariadb-galera/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c5aa55100a7959b5a7bc888519e4d7ccbdaefb5e --- /dev/null +++ b/helm/dbrepo-mariadb-galera/README.md @@ -0,0 +1,6 @@ +# DBRepo MariaDB Helm chart + +tbd + +## Parameters + diff --git a/helm/dbrepo-mariadb-galera/charts/mariadb-galera-10.1.3.tgz b/helm/dbrepo-mariadb-galera/charts/mariadb-galera-10.1.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c906aaf7634b20f0eaf9358b435b01086bdc4f55 Binary files /dev/null and b/helm/dbrepo-mariadb-galera/charts/mariadb-galera-10.1.3.tgz differ diff --git a/helm/dbrepo-mariadb-galera/templates/_compatibility.tpl b/helm/dbrepo-mariadb-galera/templates/_compatibility.tpl new file mode 100644 index 0000000000000000000000000000000000000000..6fc2aa8fa45e3bf7a8cfdb5312515aa2c27a0491 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/templates/_compatibility.tpl @@ -0,0 +1,42 @@ +{{/* +Copyright Broadcom, Inc. All Rights Reserved. +SPDX-License-Identifier: APACHE-2.0 +*/}} + +{{/* vim: set filetype=mustache: */}} + +{{/* +Return true if the detected platform is Openshift +Usage: +{{- include "common.compatibility.isOpenshift" . -}} +*/}} +{{- define "common.compatibility.isOpenshift" -}} +{{- if .Capabilities.APIVersions.Has "security.openshift.io/v1" -}} +{{- true -}} +{{- end -}} +{{- end -}} + +{{/* +Render a compatible securityContext depending on the platform. By default it is maintained as it is. In other platforms like Openshift we remove default user/group values that do not work out of the box with the restricted-v1 SCC +Usage: +{{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.containerSecurityContext "context" $) -}} +*/}} +{{- define "common.compatibility.renderSecurityContext" -}} +{{- $adaptedContext := .secContext -}} + +{{- if (((.context.Values.global).compatibility).openshift) -}} + {{- if or (eq .context.Values.global.compatibility.openshift.adaptSecurityContext "force") (and (eq .context.Values.global.compatibility.openshift.adaptSecurityContext "auto") (include "common.compatibility.isOpenshift" .context)) -}} + {{/* Remove incompatible user/group values that do not work in Openshift out of the box */}} + {{- $adaptedContext = omit $adaptedContext "fsGroup" "runAsUser" "runAsGroup" -}} + {{- if not .secContext.seLinuxOptions -}} + {{/* If it is an empty object, we remove it from the resulting context because it causes validation issues */}} + {{- $adaptedContext = omit $adaptedContext "seLinuxOptions" -}} + {{- end -}} + {{- end -}} +{{- end -}} +{{/* Remove fields that are disregarded when running the container in privileged mode */}} +{{- if $adaptedContext.privileged -}} + {{- $adaptedContext = omit $adaptedContext "capabilities" "seLinuxOptions" -}} +{{- end -}} +{{- omit $adaptedContext "enabled" | toYaml -}} +{{- end -}} \ No newline at end of file diff --git a/helm/dbrepo-mariadb-galera/templates/_helpers.tpl b/helm/dbrepo-mariadb-galera/templates/_helpers.tpl new file mode 100644 index 0000000000000000000000000000000000000000..b17e44d2dfa6f6e7a09c3ab58b35794c46791c71 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "kubernetes.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "kubernetes.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "kubernetes.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "kubernetes.labels" -}} +helm.sh/chart: {{ include "kubernetes.chart" . }} +{{ include "kubernetes.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "kubernetes.selectorLabels" -}} +app.kubernetes.io/name: {{ include "kubernetes.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "kubernetes.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "kubernetes.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/helm/dbrepo-mariadb-galera/templates/configmap.yaml b/helm/dbrepo-mariadb-galera/templates/configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..066a0d1afbbc5d46cd00a1f5315195365aef0c66 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/templates/configmap.yaml @@ -0,0 +1,580 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: database-setup + namespace: {{ .Values.namespace }} +data: + {{- with .Values.database.extraInitDbScripts }} + {{ toYaml . | nindent 2 }} + {{- end }} + 02-setup-data.sql: | + BEGIN; + INSERT INTO `mdb_containers` (name, internal_name, image_id, host, port, sidecar_host, sidecar_port, privileged_username, privileged_password) + VALUES ('MariaDB 11.1.3', 'mariadb_11_1_3', 1, 'data-db', 3306, 'data-db', 8080, 'root', 'dbrepo'); + COMMIT; + 01-setup-schema.sql: | + BEGIN; + + CREATE TABLE IF NOT EXISTS `mdb_users` + ( + id character varying(36) NOT NULL, + username character varying(255) NOT NULL, + firstname character varying(255), + lastname character varying(255), + email character varying(255) NOT NULL, + orcid character varying(255), + affiliation character varying(255), + mariadb_password character varying(255) NOT NULL, + theme character varying(255) NOT NULL default ('light'), + language character varying(3) NOT NULL default ('en'), + PRIMARY KEY (id), + UNIQUE (username), + UNIQUE (email) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_images` + ( + id bigint NOT NULL AUTO_INCREMENT, + registry character varying(255) NOT NULL DEFAULT 'docker.io', + name character varying(255) NOT NULL, + version character varying(255) NOT NULL, + default_port integer NOT NULL, + dialect character varying(255) NOT NULL, + driver_class character varying(255) NOT NULL, + jdbc_method character varying(255) NOT NULL, + is_default BOOLEAN NOT NULL DEFAULT FALSE, + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + PRIMARY KEY (id), + UNIQUE (name, version), + UNIQUE (is_default) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_images_date` + ( + id bigint NOT NULL AUTO_INCREMENT, + iid bigint NOT NULL, + database_format character varying(255) NOT NULL, + unix_format character varying(255) NOT NULL, + example character varying(255) NOT NULL, + has_time boolean NOT NULL, + created_at timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id), + FOREIGN KEY (iid) REFERENCES mdb_images (id), + UNIQUE (database_format, unix_format, example) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_containers` + ( + id bigint NOT NULL AUTO_INCREMENT, + internal_name character varying(255) NOT NULL, + name character varying(255) NOT NULL, + host character varying(255) NOT NULL, + port integer NOT NULL default 3306, + ui_host character varying(255) NOT NULL default host, + ui_port integer NOT NULL default port, + ui_additional_flags text, + sidecar_host character varying(255), + sidecar_port integer, + image_id bigint NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + privileged_username character varying(255) NOT NULL, + privileged_password character varying(255) NOT NULL, + quota integer NOT NULL DEFAULT 50, + PRIMARY KEY (id), + FOREIGN KEY (image_id) REFERENCES mdb_images (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_data` + ( + ID bigint NOT NULL AUTO_INCREMENT, + PROVENANCE text, + FileEncoding text, + FileType character varying(100), + Version text, + Seperator text, + PRIMARY KEY (ID) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_licenses` + ( + identifier character varying(255) NOT NULL, + uri text NOT NULL, + description text NOT NULL, + PRIMARY KEY (identifier), + UNIQUE (uri(200)) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_databases` + ( + id bigint NOT NULL AUTO_INCREMENT, + cid bigint NOT NULL, + name character varying(255) NOT NULL, + internal_name character varying(255) NOT NULL, + exchange_name character varying(255) NOT NULL, + description text, + engine character varying(20), + is_public boolean NOT NULL DEFAULT TRUE, + image longblob, + created_by character varying(36), + owned_by character varying(36), + contact_person character varying(36), + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + PRIMARY KEY (id), + FOREIGN KEY (cid) REFERENCES mdb_containers (id) /* currently we only support one-to-one */, + FOREIGN KEY (created_by) REFERENCES mdb_users (id), + FOREIGN KEY (owned_by) REFERENCES mdb_users (id), + FOREIGN KEY (contact_person) REFERENCES mdb_users (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_databases_subjects` + ( + dbid BIGINT NOT NULL, + subjects character varying(255) NOT NULL, + PRIMARY KEY (dbid, subjects) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_tables` + ( + ID bigint NOT NULL AUTO_INCREMENT, + tDBID bigint NOT NULL, + tName VARCHAR(64) NOT NULL, + internal_name VARCHAR(64) NOT NULL, + queue_name VARCHAR(255) NOT NULL, + routing_key VARCHAR(255), + tDescription VARCHAR(2048), + num_rows BIGINT, + data_length BIGINT, + max_data_length BIGINT, + avg_row_length BIGINT, + `separator` CHAR(1), + quote CHAR(1), + element_null VARCHAR(50), + skip_lines BIGINT, + element_true VARCHAR(50), + element_false VARCHAR(50), + Version TEXT, + created timestamp NOT NULL DEFAULT NOW(), + versioned boolean not null default true, + created_by character varying(36) NOT NULL, + owned_by character varying(36) NOT NULL, + last_modified timestamp, + PRIMARY KEY (ID), + UNIQUE (tDBID, internal_name), + FOREIGN KEY (tDBID) REFERENCES mdb_databases (id), + FOREIGN KEY (created_by) REFERENCES mdb_users (id), + FOREIGN KEY (owned_by) REFERENCES mdb_users (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_columns` + ( + ID BIGINT NOT NULL AUTO_INCREMENT, + tID BIGINT NOT NULL, + dfID BIGINT, + cName VARCHAR(64), + internal_name VARCHAR(64) NOT NULL, + Datatype ENUM ('CHAR','VARCHAR','BINARY','VARBINARY','TINYBLOB','TINYTEXT','TEXT','BLOB','MEDIUMTEXT','MEDIUMBLOB','LONGTEXT','LONGBLOB','ENUM','SET','BIT','TINYINT','BOOL','SMALLINT','MEDIUMINT','INT','BIGINT','FLOAT','DOUBLE','DECIMAL','DATE','DATETIME','TIMESTAMP','TIME','YEAR'), + length BIGINT NULL, + ordinal_position INTEGER NOT NULL, + index_length BIGINT NULL, + description VARCHAR(2048), + size BIGINT, + d BIGINT, + auto_generated BOOLEAN DEFAULT false, + is_null_allowed BOOLEAN NOT NULL DEFAULT true, + val_min NUMERIC NULL, + val_max NUMERIC NULL, + mean NUMERIC NULL, + median NUMERIC NULL, + std_dev Numeric NULL, + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + FOREIGN KEY (tID) REFERENCES mdb_tables (ID) ON DELETE CASCADE, + PRIMARY KEY (ID) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_columns_enums` + ( + id bigint NOT NULL AUTO_INCREMENT, + column_id bigint NOT NULL, + value CHARACTER VARYING(255) NOT NULL, + FOREIGN KEY (column_id) REFERENCES mdb_columns (ID) ON DELETE CASCADE, + PRIMARY KEY (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_columns_sets` + ( + id bigint NOT NULL AUTO_INCREMENT, + column_id bigint NOT NULL, + value CHARACTER VARYING(255) NOT NULL, + FOREIGN KEY (column_id) REFERENCES mdb_columns (ID) ON DELETE CASCADE, + PRIMARY KEY (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_columns_nom` + ( + tID bigint, + cID bigint, + maxlength INTEGER, + last_modified timestamp, + created timestamp NOT NULL DEFAULT NOW(), + FOREIGN KEY (tID, cID) REFERENCES mdb_columns (tID, ID), + PRIMARY KEY (tID, cID) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_columns_cat` + ( + tID bigint, + cID bigint, + num_cat INTEGER, + -- cat_array TEXT[], + last_modified timestamp, + created timestamp NOT NULL DEFAULT NOW(), + FOREIGN KEY (tID, cID) REFERENCES mdb_columns (tID, ID), + PRIMARY KEY (tID, cID) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_constraints_foreign_key` + ( + fkid BIGINT NOT NULL AUTO_INCREMENT, + tid BIGINT NOT NULL, + rtid BIGINT NOT NULL, + name VARCHAR(255) NOT NULL, + on_update VARCHAR(50) NULL, + on_delete VARCHAR(50) NULL, + position INT NULL, + PRIMARY KEY (fkid), + FOREIGN KEY (tid) REFERENCES mdb_tables (id) ON DELETE CASCADE, + FOREIGN KEY (rtid) REFERENCES mdb_tables (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_constraints_primary_key` + ( + pkid BIGINT NOT NULL AUTO_INCREMENT, + tID BIGINT NOT NULL, + cid BIGINT NOT NULL, + PRIMARY KEY (pkid), + FOREIGN KEY (tID) REFERENCES mdb_tables (id) ON DELETE CASCADE, + FOREIGN KEY (cid) REFERENCES mdb_columns (id) ON DELETE CASCADE + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_constraints_foreign_key_reference` + ( + id BIGINT NOT NULL AUTO_INCREMENT, + fkid BIGINT NOT NULL, + cid BIGINT NOT NULL, + rcid BIGINT NOT NULL, + PRIMARY KEY (id), + UNIQUE (fkid, cid, rcid), + FOREIGN KEY (fkid) REFERENCES mdb_constraints_foreign_key (fkid) ON UPDATE CASCADE, + FOREIGN KEY (cid) REFERENCES mdb_columns (id), + FOREIGN KEY (rcid) REFERENCES mdb_columns (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_constraints_unique` + ( + uid BIGINT NOT NULL AUTO_INCREMENT, + name VARCHAR(255) NOT NULL, + tid BIGINT NOT NULL, + position INT NULL, + PRIMARY KEY (uid), + FOREIGN KEY (tid) REFERENCES mdb_tables (id) ON DELETE CASCADE + ); + + CREATE TABLE IF NOT EXISTS `mdb_constraints_unique_columns` + ( + id BIGINT NOT NULL AUTO_INCREMENT, + uid BIGINT NOT NULL, + cid BIGINT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (uid) REFERENCES mdb_constraints_unique (uid), + FOREIGN KEY (cid) REFERENCES mdb_columns (id) ON DELETE CASCADE + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_constraints_checks` + ( + id BIGINT NOT NULL AUTO_INCREMENT, + tid BIGINT NOT NULL, + checks VARCHAR(255) NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (tid) REFERENCES mdb_tables (id) ON DELETE CASCADE + ) WITH SYSTEM VERSIONING; + + + CREATE TABLE IF NOT EXISTS `mdb_concepts` + ( + id bigint NOT NULL AUTO_INCREMENT, + uri text not null, + name VARCHAR(255) null, + description TEXT null, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id), + UNIQUE (uri(200)) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_units` + ( + id bigint NOT NULL AUTO_INCREMENT, + uri text not null, + name VARCHAR(255) null, + description TEXT null, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id), + UNIQUE (uri(200)) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_columns_concepts` + ( + id bigint NOT NULL, + cID bigint NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id, cid), + FOREIGN KEY (cID) REFERENCES mdb_columns (ID) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_columns_units` + ( + id bigint NOT NULL, + cID bigint NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (id, cID), + FOREIGN KEY (cID) REFERENCES mdb_columns (ID) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_view` + ( + id bigint NOT NULL AUTO_INCREMENT, + vdbid bigint NOT NULL, + vName VARCHAR(64) NOT NULL, + internal_name VARCHAR(64) NOT NULL, + Query TEXT NOT NULL, + query_hash VARCHAR(255) NOT NULL, + Public BOOLEAN NOT NULL, + InitialView BOOLEAN NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + last_modified timestamp, + created_by character varying(36) NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (vdbid) REFERENCES mdb_databases (id), + FOREIGN KEY (created_by) REFERENCES mdb_users (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_banner_messages` + ( + id bigint NOT NULL AUTO_INCREMENT, + type ENUM ('ERROR', 'WARNING', 'INFO') NOT NULL default 'INFO', + message TEXT NOT NULL, + link TEXT NULL, + link_text VARCHAR(255) NULL, + display_start timestamp NULL, + display_end timestamp NULL, + PRIMARY KEY (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_ontologies` + ( + id bigint NOT NULL AUTO_INCREMENT, + prefix VARCHAR(8) NOT NULL, + uri TEXT NOT NULL, + uri_pattern TEXT, + sparql_endpoint TEXT NULL, + rdf_path TEXT NULL, + last_modified timestamp, + created timestamp NOT NULL DEFAULT NOW(), + UNIQUE (prefix), + UNIQUE (uri(200)), + PRIMARY KEY (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_view_columns` + ( + id BIGINT NOT NULL AUTO_INCREMENT, + view_id BIGINT NOT NULL, + dfID BIGINT, + name VARCHAR(64), + internal_name VARCHAR(64) NOT NULL, + column_type ENUM ('CHAR','VARCHAR','BINARY','VARBINARY','TINYBLOB','TINYTEXT','TEXT','BLOB','MEDIUMTEXT','MEDIUMBLOB','LONGTEXT','LONGBLOB','ENUM','SET','BIT','TINYINT','BOOL','SMALLINT','MEDIUMINT','INT','BIGINT','FLOAT','DOUBLE','DECIMAL','DATE','DATETIME','TIMESTAMP','TIME','YEAR'), + ordinal_position INTEGER NOT NULL, + size BIGINT, + d BIGINT, + auto_generated BOOLEAN DEFAULT false, + is_null_allowed BOOLEAN NOT NULL DEFAULT true, + PRIMARY KEY (id), + FOREIGN KEY (view_id) REFERENCES mdb_view (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_identifiers` + ( + id BIGINT NOT NULL AUTO_INCREMENT, + dbid BIGINT NOT NULL, + qid BIGINT, + vid BIGINT, + tid BIGINT, + publisher VARCHAR(255) NOT NULL, + language VARCHAR(2), + publication_year INTEGER NOT NULL, + publication_month INTEGER, + publication_day INTEGER, + identifier_type ENUM ('DATABASE', 'SUBSET', 'VIEW', 'TABLE') NOT NULL, + status ENUM ('DRAFT', 'PUBLISHED') NOT NULL DEFAULT ('PUBLISHED'), + query TEXT, + query_normalized TEXT, + query_hash VARCHAR(255), + execution TIMESTAMP, + result_hash VARCHAR(255), + result_number BIGINT, + doi VARCHAR(255), + created TIMESTAMP NOT NULL DEFAULT NOW(), + created_by VARCHAR(36) NOT NULL, + last_modified TIMESTAMP, + PRIMARY KEY (id), /* must be a single id from persistent identifier concept */ + FOREIGN KEY (dbid) REFERENCES mdb_databases (id), + FOREIGN KEY (created_by) REFERENCES mdb_users (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_identifier_licenses` + ( + pid bigint NOT NULL, + license_id VARCHAR(255) NOT NULL, + PRIMARY KEY (pid, license_id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id), + FOREIGN KEY (license_id) REFERENCES mdb_licenses (identifier) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_identifier_titles` + ( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + title text NOT NULL, + title_type ENUM ('ALTERNATIVE_TITLE', 'SUBTITLE', 'TRANSLATED_TITLE', 'OTHER'), + language VARCHAR(2), + PRIMARY KEY (id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_identifier_funders` + ( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + funder_name VARCHAR(255) NOT NULL, + funder_identifier TEXT, + funder_identifier_type ENUM ('CROSSREF_FUNDER_ID', 'GRID', 'ISNI', 'ROR', 'OTHER'), + scheme_uri text, + award_number VARCHAR(255), + award_title text, + language VARCHAR(255), + PRIMARY KEY (id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_identifier_descriptions` + ( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + description text NOT NULL, + description_type ENUM ('ABSTRACT', 'METHODS', 'SERIES_INFORMATION', 'TABLE_OF_CONTENTS', 'TECHNICAL_INFO', 'OTHER'), + language VARCHAR(2), + PRIMARY KEY (id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_related_identifiers` + ( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + value varchar(255) NOT NULL, + type varchar(255) NOT NULL, + relation varchar(255) NOT NULL, + PRIMARY KEY (id), /* must be a single id from persistent identifier concept */ + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id), + UNIQUE (pid, value) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_identifier_creators` + ( + id bigint NOT NULL AUTO_INCREMENT, + pid bigint NOT NULL, + given_names text, + family_name text, + creator_name VARCHAR(255) NOT NULL, + name_type ENUM ('PERSONAL', 'ORGANIZATIONAL') default 'PERSONAL', + name_identifier text, + name_identifier_scheme ENUM ('ROR', 'GRID', 'ISNI', 'ORCID'), + name_identifier_scheme_uri text, + affiliation VARCHAR(255), + affiliation_identifier text, + affiliation_identifier_scheme ENUM ('ROR', 'GRID', 'ISNI'), + affiliation_identifier_scheme_uri text, + PRIMARY KEY (id), + FOREIGN KEY (pid) REFERENCES mdb_identifiers (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_update` + ( + uUserID character varying(255) NOT NULL, + uDBID bigint NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (uUserID, uDBID), + FOREIGN KEY (uDBID) REFERENCES mdb_databases (id) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_access` + ( + aUserID character varying(255) NOT NULL, + aDBID bigint REFERENCES mdb_databases (id), + attime TIMESTAMP, + download BOOLEAN, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (aUserID, aDBID) + ) WITH SYSTEM VERSIONING; + + CREATE TABLE IF NOT EXISTS `mdb_have_access` + ( + user_id character varying(36) NOT NULL, + database_id bigint REFERENCES mdb_databases (id), + access_type ENUM ('READ', 'WRITE_OWN', 'WRITE_ALL') NOT NULL, + created timestamp NOT NULL DEFAULT NOW(), + PRIMARY KEY (user_id, database_id), + FOREIGN KEY (user_id) REFERENCES mdb_users (id) + ) WITH SYSTEM VERSIONING; + + COMMIT; + BEGIN; + + INSERT INTO `mdb_licenses` (identifier, uri, description) + VALUES ('CC0-1.0', 'https://creativecommons.org/publicdomain/zero/1.0/legalcode', + 'CC0 waives copyright interest in a work you''ve created and dedicates it to the world-wide public domain. Use CC0 to opt out of copyright entirely and ensure your work has the widest reach.'), + ('CC-BY-4.0', 'https://creativecommons.org/licenses/by/4.0/legalcode', + 'The Creative Commons Attribution license allows re-distribution and re-use of a licensed work on the condition that the creator is appropriately credited.'); + + INSERT INTO `mdb_images` (name, registry, version, default_port, dialect, driver_class, jdbc_method) + VALUES ('mariadb', 'docker.io', '11.1.3', 3306, 'org.hibernate.dialect.MariaDBDialect', 'org.mariadb.jdbc.Driver', + 'mariadb'); + + INSERT INTO `mdb_images_date` (iid, database_format, unix_format, example, has_time) + VALUES (1, '%Y-%c-%d %H:%i:%S.%f', 'yyyy-MM-dd HH:mm:ss.SSSSSS', '2022-01-30 13:44:25.499', true), + (1, '%Y-%c-%d %H:%i:%S', 'yyyy-MM-dd HH:mm:ss', '2022-01-30 13:44:25', true), + (1, '%Y-%c-%d', 'yyyy-MM-dd', '2022-01-30', false), + (1, '%H:%i:%S', 'HH:mm:ss', '13:44:25', true), + (1, '%d.%c.%Y', 'dd.MM.yyyy', '30.01.2022', false); + + INSERT INTO `mdb_ontologies` (prefix, uri, uri_pattern, sparql_endpoint, rdf_path) + VALUES ('om', 'http://www.ontology-of-units-of-measure.org/resource/om-2/', + 'http://www.ontology-of-units-of-measure.org/resource/om-2/.*', null, 'rdf/om-2.0.rdf'), + ('wd', 'http://www.wikidata.org/', 'http://www.wikidata.org/entity/.*', 'https://query.wikidata.org/sparql', + null), + ('mo', 'http://purl.org/ontology/mo/', 'http://purl.org/ontology/mo/.*', null, null), + ('dc', 'http://purl.org/dc/elements/1.1/', null, null, null), + ('xsd', 'http://www.w3.org/2001/XMLSchema#', null, null, null), + ('tl', 'http://purl.org/NET/c4dm/timeline.owl#', null, null, null), + ('foaf', 'http://xmlns.com/foaf/0.1/', null, null, null), + ('schema', 'http://schema.org/', null, null, null), + ('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', null, null, null), + ('rdfs', 'http://www.w3.org/2000/01/rdf-schema#', null, null, null), + ('owl', 'http://www.w3.org/2002/07/owl#', null, null, null), + ('prov', 'http://www.w3.org/ns/prov#', null, null, null), + ('db', 'http://dbpedia.org', 'http://dbpedia.org/ontology/.*', 'http://dbpedia.org/sparql', null); + COMMIT; + diff --git a/helm/dbrepo-mariadb-galera/templates/secret.yaml b/helm/dbrepo-mariadb-galera/templates/secret.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fc5a2a7c5ddaa757c9fc29dc75b24d787a3c0656 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/templates/secret.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + name: sidecar-secret + namespace: {{ .Values.namespace }} +stringData: + S3_ACCESS_KEY_ID: "{{ .Values.s3.auth.adminAccessKeyId }}" + S3_SECRET_ACCESS_KEY: "{{ .Values.s3.auth.adminSecretAccessKey }}" + S3_STORAGE_ENDPOINT: "{{ .Values.s3.endpoint }}" diff --git a/helm/dbrepo-mariadb-galera/values.schema.json b/helm/dbrepo-mariadb-galera/values.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..9dbb1f01336e3ee40f404473191855d06a992c48 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/values.schema.json @@ -0,0 +1,304 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "database": { + "properties": { + "db": { + "properties": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "enabled": { + "type": "boolean" + }, + "extraInitDbScripts": { + "properties": {}, + "type": "object" + }, + "extraVolumeMounts": { + "items": { + "properties": { + "mountPath": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "extraVolumes": { + "items": { + "properties": { + "emptyDir": { + "properties": {}, + "type": "object" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "fullnameOverride": { + "type": "string" + }, + "galera": { + "properties": { + "mariabackup": { + "properties": { + "password": { + "type": "string" + }, + "user": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "host": { + "type": "string" + }, + "initdbScriptsConfigMap": { + "type": "string" + }, + "jdbcExtraArgs": { + "type": "string" + }, + "metrics": { + "properties": { + "enabled": { + "type": "boolean" + } + }, + "type": "object" + }, + "persistence": { + "properties": { + "enabled": { + "type": "boolean" + } + }, + "type": "object" + }, + "replicaCount": { + "type": "integer" + }, + "rootUser": { + "properties": { + "password": { + "type": "string" + }, + "user": { + "type": "string" + } + }, + "type": "object" + }, + "service": { + "properties": { + "extraPorts": { + "items": { + "properties": { + "name": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "protocol": { + "type": "string" + }, + "targetPort": { + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "sidecars": { + "items": { + "properties": { + "envFrom": { + "items": { + "properties": { + "secretRef": { + "properties": { + "name": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "image": { + "type": "string" + }, + "imagePullPolicy": { + "type": "string" + }, + "livenessProbe": { + "properties": { + "exec": { + "properties": { + "command": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "initialDelaySeconds": { + "type": "integer" + }, + "periodSeconds": { + "type": "integer" + } + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "ports": { + "items": { + "properties": { + "containerPort": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "protocol": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "readinessProbe": { + "properties": { + "exec": { + "properties": { + "command": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "initialDelaySeconds": { + "type": "integer" + }, + "periodSeconds": { + "type": "integer" + } + }, + "type": "object" + }, + "securityContext": { + "properties": { + "allowPrivilegeEscalation": { + "type": "boolean" + }, + "capabilities": { + "properties": { + "drop": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "runAsGroup": { + "type": "integer" + }, + "runAsNonRoot": { + "type": "boolean" + }, + "runAsUser": { + "type": "integer" + }, + "seccompProfile": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "volumeMounts": { + "items": { + "properties": { + "mountPath": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "namespace": { + "type": "string" + }, + "s3": { + "properties": { + "auth": { + "properties": { + "adminAccessKeyId": { + "type": "string" + }, + "adminSecretAccessKey": { + "type": "string" + } + }, + "type": "object" + }, + "endpoint": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" +} diff --git a/helm/dbrepo-mariadb-galera/values.yaml b/helm/dbrepo-mariadb-galera/values.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2e8e94c72e593c0d2da52cf0fd35d3cb4277a703 --- /dev/null +++ b/helm/dbrepo-mariadb-galera/values.yaml @@ -0,0 +1,108 @@ +# Copyright the DBRepo developers +# SPDX-License-Identifier: APACHE-2.0 + +## @param namespace The namespace to install the chart +namespace: dbrepo + +s3: + endpoint: http://storage-service-s3:8333 + auth: + adminAccessKeyId: seaweedfsadmin + adminSecretAccessKey: seaweedfsadmin + +database: + ## @param database.enabled Enable the Metadata Database. + enabled: true + ## @skip database.fullnameOverride + fullnameOverride: data-db + ## @param database.host The hostname for the microservices. + host: data-db + rootUser: + ## @param database.rootUser.user The root username. + user: root + ## @param database.rootUser.password The root user password. + password: dbrepo + db: + ## @param database.db.name The database name. + name: dbrepo + galera: + mariabackup: + ## @param database.galera.mariabackup.user The database backup username. + user: backup + ## @param database.galera.mariabackup.password The database backup user password + password: backup + ## @param database.jdbcExtraArgs The extra arguments for JDBC connections in the microservices. + jdbcExtraArgs: "" + metrics: + ## @skip database.metrics.enabled The Prometheus settings. + enabled: false + ## @skip database.initdbScriptsConfigMap The initial database scripts. + initdbScriptsConfigMap: database-setup + ## @param database.extraInitDbScripts Additional init.db scripts that are executed on the first start. + extraInitDbScripts: { } + # 03-additional-data.sql: | + # BEGIN; + # INSERT INTO `mdb_containers` (name, internal_name, image_id, host, port, sidecar_host, sidecar_port, privileged_username, privileged_password) + # VALUES ('MariaDB Galera TEST', 'mariadb_11_1_3', 1, 'data-db', 3306, 'data-db', 80, 'root', 'dbrepo'); + # COMMIT; + ## @param database.replicaCount The number of cluster nodes, should be uneven i.e. 2n+1 + replicaCount: 3 + persistence: + ## @param database.persistence.enabled Enable persistent storage. + enabled: true + ## @skip database.service + service: + extraPorts: + - name: "sidecar" + port: 8080 + targetPort: 8080 + protocol: TCP + ## @skip database.sidecars + sidecars: + - name: sidecar + image: registry.datalab.tuwien.ac.at/dbrepo/data-db-sidecar:1.4.5 + imagePullPolicy: Always + securityContext: + runAsUser: 1001 + runAsGroup: 0 + runAsNonRoot: true + allowPrivilegeEscalation: false + seccompProfile: + type: RuntimeDefault + capabilities: + drop: + - ALL + ports: + - name: "sidecar" + containerPort: 8080 + protocol: TCP + envFrom: + - secretRef: + name: data-service-secret + livenessProbe: + exec: + command: + - /bin/bash + - -ec + - "curl -sSL localhost:8080/health | grep 'UP' || exit 1" + initialDelaySeconds: 120 + periodSeconds: 30 + readinessProbe: + exec: + command: + - /bin/bash + - -ec + - "curl -sSL localhost:8080/health | grep 'UP' || exit 1" + initialDelaySeconds: 30 + periodSeconds: 30 + volumeMounts: + - name: s3 + mountPath: /s3 + ## @skip database.extraVolumeMounts + extraVolumeMounts: + - name: s3 + mountPath: /s3 + ## @skip database.extraVolumes + extraVolumes: + - name: s3 + emptyDir: { } diff --git a/helm/dbrepo/Chart.lock b/helm/dbrepo/Chart.lock index 45878cdfc0597e70b690912b03e500643e617367..21f0b9d1972b91ad04e2ce681c8f97ca0ec18476 100644 --- a/helm/dbrepo/Chart.lock +++ b/helm/dbrepo/Chart.lock @@ -5,9 +5,9 @@ dependencies: - name: keycloak repository: https://charts.bitnami.com/bitnami version: 21.6.1 -- name: mariadb - repository: https://charts.bitnami.com/bitnami - version: 14.1.4 +- name: dbrepo-mariadb-galera + repository: file://../dbrepo-mariadb-galera + version: 1.4.6 - name: mariadb-galera repository: https://charts.bitnami.com/bitnami version: 10.1.3 @@ -23,5 +23,5 @@ dependencies: - name: openldap-stack-ha repository: https://jp-gouin.github.io/helm-openldap/ version: 4.2.5 -digest: sha256:bc81f32931159cbea98f6da5f58ff3425a5cd03183506ab218120be136486468 -generated: "2024-07-12T06:33:37.323435643+02:00" +digest: sha256:b25413b979bd026412ed188968db993c958bc71175b379315d5e24d373f8065f +generated: "2024-09-14T01:52:39.203839653+04:00" diff --git a/helm/dbrepo/Chart.yaml b/helm/dbrepo/Chart.yaml index f32287b93cd1ba982cef7af817c95a70f0af7604..517d649b8a023c2a232ca15e0d4cabdbf0ed3347 100644 --- a/helm/dbrepo/Chart.yaml +++ b/helm/dbrepo/Chart.yaml @@ -6,8 +6,8 @@ description: Helm Chart for installing DBRepo sources: - https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services type: application -version: "1.4.5" -appVersion: "1.4.5" +version: "1.4.6" +appVersion: "1.4.6" keywords: - dbrepo maintainers: @@ -26,10 +26,10 @@ dependencies: version: 21.6.1 # app version: 24.0.5 repository: https://charts.bitnami.com/bitnami condition: authservice.enabled - - name: mariadb + - name: dbrepo-mariadb-galera alias: datadb - version: 14.1.4 # app version: 11.1.3 - repository: https://charts.bitnami.com/bitnami + version: 1.4.6 + repository: file://../dbrepo-mariadb-galera condition: datadb.enabled - name: mariadb-galera alias: metadatadb diff --git a/helm/dbrepo/README.md b/helm/dbrepo/README.md index 294fda6477f278e1cc6bf71e0002ca7cfbfc9916..53d920f47e1462e5203dc56222b25263bc928f8c 100644 --- a/helm/dbrepo/README.md +++ b/helm/dbrepo/README.md @@ -74,7 +74,7 @@ The command removes all the Kubernetes components associated with the chart and | `metadatadb.galera.mariabackup.user` | The database backup username. | `backup` | | `metadatadb.galera.mariabackup.password` | The database backup user password | `backup` | | `metadatadb.jdbcExtraArgs` | The extra arguments for JDBC connections in the microservices. | `""` | -| `metadatadb.initdbScripts` | Additional init.db scripts that are executed on the first start. | `{}` | +| `metadatadb.extraInitDbScripts` | Additional init.db scripts that are executed on the first start. | `{}` | | `metadatadb.replicaCount` | The number of cluster nodes, should be uneven i.e. 2n+1 | `3` | | `metadatadb.persistence.enabled` | Enable persistent storage. | `true` | @@ -85,8 +85,6 @@ The command removes all the Kubernetes components associated with the chart and | `authservice.enabled` | Enable the Auth Service. | `true` | | `authservice.image.debug` | Set the logging level to `trace`. Otherwise, set to `info`. | `false` | | `authservice.endpoint` | The hostname for the microservices. | `http://auth-service` | -| `authservice.auth.adminUser` | The admin username. | `fda` | -| `authservice.auth.adminPassword` | The admin user password. | `fda` | | `authservice.jwt.pubkey` | The JWT public key from the `dbrepo-client`. | `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB` | | `authservice.tls.enabled` | Enable TLS/SSL communication. Required for HTTPS. | `true` | | `authservice.tls.existingSecret` | The secret containing the `tls.crt`, `tls.key` and `ca.crt`. | `ingress-cert` | @@ -137,7 +135,7 @@ The command removes all the Kubernetes components associated with the chart and | `brokerservice.ldap.binddn` | The domain name the broker service should bind to. In many cases this is the admin user from `identityservice.global.adminUser`. | `cn=admin,dc=dbrepo,dc=at` | | `brokerservice.ldap.bindpw` | The password to bind on the identity service. In many cases this value is equal to `identityservice.global.adminPassword`. | `admin` | | `brokerservice.ldap.uidField` | The field containing the user id. | `uid` | -| `brokerservice.ldap.basedn` | The base domain name containing the users. | `ou=users,dc=dbrepo,dc=at` | +| `brokerservice.ldap.basedn` | The base domain name containing the users. | `dc=dbrepo,dc=at` | | `brokerservice.ldap.userDnPattern` | The pattern to determine the user. | `${username}` | | `brokerservice.extraPlugins` | The list of plugins to be activated. | `rabbitmq_prometheus rabbitmq_auth_backend_ldap rabbitmq_auth_mechanism_ssl` | | `brokerservice.persistence.enabled` | If set to true, a PVC will be created. | `false` | @@ -178,7 +176,7 @@ The command removes all the Kubernetes components associated with the chart and | `metadataservice.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | | `metadataservice.podSecurityContext.supplementalGroups` | Set filesystem extra groups | `[]` | | `metadataservice.podSecurityContext.fsGroup` | Set RabbitMQ pod's Security Context fsGroup | `1001` | -| `metadataservice.containerSecurityContext.enabled` | Enabled containers' Security Context | `true` | +| `metadataservice.containerSecurityContext.enabled` | Enable containers' Security Context | `true` | | `metadataservice.containerSecurityContext.seLinuxOptions` | Set SELinux options in container | `{}` | | `metadataservice.containerSecurityContext.runAsUser` | Set RabbitMQ containers' Security Context runAsUser | `1001` | | `metadataservice.containerSecurityContext.runAsGroup` | Set RabbitMQ containers' Security Context runAsGroup | `1001` | @@ -271,6 +269,7 @@ The command removes all the Kubernetes components associated with the chart and | Name | Description | Value | | --------------------------------------------- | -------------------------------------------------------------------------------------- | ---------------- | | `storageservice.enabled` | Enable the Storage Service. | `true` | +| `storageservice.mariadb.auth.rootPassword` | The user password for the root user. | `seaweedfsdb` | | `storageservice.filer.enabled` | Enable the storage service filer which is required for S3. | `true` | | `storageservice.s3.replicaCount` | The number of replicas. | `2` | | `storageservice.s3.bucket` | The S3-bucket name. | `dbrepo` | @@ -321,10 +320,10 @@ The command removes all the Kubernetes components associated with the chart and | `ui.public.icon` | The user interface icon. | `/favicon.ico` | | `ui.public.touch` | The user interface apple touch icon. | `/apple-touch-icon.png` | | `ui.public.broker.host` | The displayed broker hostname. | `example.com` | -| `ui.public.broker.port.5671` | Enable display of the broker 5671 port and mark it as secure (SSL/TLS). | `true` | -| `ui.public.broker.port.5672` | Enable display of the broker 5672 port and mark it as insecure (no SSL/TLS). | `false` | +| `ui.public.broker.port.5671` | Enable display of the broker 5671 port and mark it as secure (SSL/TLS). | `false` | +| `ui.public.broker.port.5672` | Enable display of the broker 5672 port and mark it as insecure (no SSL/TLS). | `true` | | `ui.public.broker.extra` | Extra metadata displayed. | `""` | -| `ui.public.database.extra` | Extra metadata displayed. | `128.130.0.0/15` | +| `ui.public.database.extra` | Extra metadata displayed. | `""` | | `ui.public.pid.default.publisher` | The default dataset publisher for persisted identifiers. | `Example University` | | `ui.public.doi.enabled` | Enable the display that DOIs are minted. | `false` | | `ui.public.doi.endpoint` | The DOI proxy. | `https://doi.org` | diff --git a/helm/dbrepo/charts/dbrepo-mariadb-galera-1.4.6.tgz b/helm/dbrepo/charts/dbrepo-mariadb-galera-1.4.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..6729ba0a6c32d47f6710c8e81915c8726f4c3bde Binary files /dev/null and b/helm/dbrepo/charts/dbrepo-mariadb-galera-1.4.6.tgz differ diff --git a/helm/dbrepo/charts/mariadb-14.1.4.tgz b/helm/dbrepo/charts/mariadb-14.1.4.tgz deleted file mode 100644 index 83f470bdcade4fdfc13b0d1f4f46095b877e3bcd..0000000000000000000000000000000000000000 Binary files a/helm/dbrepo/charts/mariadb-14.1.4.tgz and /dev/null differ diff --git a/helm/dbrepo/templates/auth-configmap.yaml b/helm/dbrepo/templates/auth-configmap.yaml index 269d18c99d7800101afc8ac1c3528104fad7243c..948b31e77d83cf289162f3dad5401b374f2e589a 100644 --- a/helm/dbrepo/templates/auth-configmap.yaml +++ b/helm/dbrepo/templates/auth-configmap.yaml @@ -540,7 +540,7 @@ data: "description" : "${default-container-handling}", "composite" : true, "composites" : { - "realm" : [ "find-container", "list-containers" ] + "realm" : [ "find-container" ] }, "clientRole" : false, "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", @@ -2153,7 +2153,7 @@ data: "subType" : "anonymous", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "oidc-full-name-mapper", "saml-user-attribute-mapper", "saml-user-property-mapper", "saml-role-list-mapper", "oidc-usermodel-attribute-mapper", "oidc-usermodel-property-mapper", "oidc-address-mapper", "oidc-sha256-pairwise-sub-mapper" ] + "allowed-protocol-mapper-types" : [ "saml-user-attribute-mapper", "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-address-mapper", "saml-user-property-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "saml-role-list-mapper" ] } }, { "id" : "1849e52a-b8c9-44a8-af3d-ee19376a1ed1", @@ -2179,7 +2179,7 @@ data: "subType" : "authenticated", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "saml-user-property-mapper", "oidc-usermodel-property-mapper", "saml-role-list-mapper", "oidc-address-mapper", "saml-user-attribute-mapper", "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-usermodel-attribute-mapper" ] + "allowed-protocol-mapper-types" : [ "saml-role-list-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-full-name-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper", "oidc-address-mapper" ] } } ], "org.keycloak.storage.UserStorageProvider" : [ { @@ -2195,8 +2195,8 @@ data: "config" : { "ldap.attribute" : [ "createTimestamp" ], "is.mandatory.in.ldap" : [ "false" ], - "always.read.value.from.ldap" : [ "true" ], "read.only" : [ "true" ], + "always.read.value.from.ldap" : [ "true" ], "user.model.attribute" : [ "createTimestamp" ] } }, { @@ -2219,8 +2219,8 @@ data: "config" : { "ldap.attribute" : [ "cn" ], "is.mandatory.in.ldap" : [ "true" ], - "read.only" : [ "false" ], "always.read.value.from.ldap" : [ "true" ], + "read.only" : [ "false" ], "user.model.attribute" : [ "firstName" ] } }, { @@ -2231,8 +2231,8 @@ data: "config" : { "ldap.attribute" : [ "mail" ], "is.mandatory.in.ldap" : [ "false" ], - "read.only" : [ "false" ], "always.read.value.from.ldap" : [ "false" ], + "read.only" : [ "false" ], "user.model.attribute" : [ "email" ] } }, { @@ -2245,13 +2245,13 @@ data: "group.name.ldap.attribute" : [ "cn" ], "preserve.group.inheritance" : [ "false" ], "membership.user.ldap.attribute" : [ "uid" ], - "groups.dn" : [ "ou=users,{{ .Values.identityservice.global.ldapDomain }}" ], + "groups.dn" : [ "ou=users,dc=dbrepo,dc=at" ], "mode" : [ "LDAP_ONLY" ], "user.roles.retrieve.strategy" : [ "LOAD_GROUPS_BY_MEMBER_ATTRIBUTE" ], - "membership.ldap.attribute" : [ "member" ], "ignore.missing.groups" : [ "false" ], - "group.object.classes" : [ "groupOfNames" ], + "membership.ldap.attribute" : [ "member" ], "memberof.ldap.attribute" : [ "memberOf" ], + "group.object.classes" : [ "groupOfNames" ], "groups.path" : [ "/" ], "drop.non.existing.groups.during.sync" : [ "false" ] } @@ -2263,8 +2263,8 @@ data: "config" : { "ldap.attribute" : [ "modifyTimestamp" ], "is.mandatory.in.ldap" : [ "false" ], - "always.read.value.from.ldap" : [ "true" ], "read.only" : [ "true" ], + "always.read.value.from.ldap" : [ "true" ], "user.model.attribute" : [ "modifyTimestamp" ] } }, { @@ -2277,15 +2277,15 @@ data: "is.mandatory.in.ldap" : [ "true" ], "attribute.force.default" : [ "false" ], "is.binary.attribute" : [ "false" ], - "always.read.value.from.ldap" : [ "false" ], "read.only" : [ "false" ], + "always.read.value.from.ldap" : [ "false" ], "user.model.attribute" : [ "username" ] } } ] }, "config" : { - "pagination" : [ "false" ], "fullSyncPeriod" : [ "-1" ], + "pagination" : [ "false" ], "startTls" : [ "false" ], "usersDn" : [ "ou=users,dc=dbrepo,dc=at" ], "connectionPooling" : [ "true" ], @@ -2293,14 +2293,14 @@ data: "useKerberosForPasswordAuthentication" : [ "false" ], "importEnabled" : [ "true" ], "enabled" : [ "true" ], + "bindDn" : [ "cn=admin,dc=dbrepo,dc=at" ], + "bindCredential" : [ "admin" ], "usernameLDAPAttribute" : [ "uid" ], - "bindCredential" : [ "{{ .Values.identityservice.global.adminPassword }}" ], - "bindDn" : [ "cn={{ .Values.identityservice.global.adminUser }},{{ .Values.identityservice.global.ldapDomain }}" ], "changedSyncPeriod" : [ "-1" ], "lastSync" : [ "1719252666" ], "vendor" : [ "other" ], "uuidLDAPAttribute" : [ "entryUUID" ], - "connectionUrl" : [ "ldap://identity-service:389" ], + "connectionUrl" : [ "ldap://identity-service:1389" ], "allowKerberosAuthentication" : [ "false" ], "syncRegistrations" : [ "true" ], "authType" : [ "simple" ], diff --git a/helm/dbrepo/values.schema.json b/helm/dbrepo/values.schema.json index 843f7e799100a7b8a5041c96b8914275326ea2b7..3e4c87a1ad78fe527c5321c03aec155f4df3c090 100644 --- a/helm/dbrepo/values.schema.json +++ b/helm/dbrepo/values.schema.json @@ -132,17 +132,6 @@ }, "authservice": { "properties": { - "auth": { - "properties": { - "adminPassword": { - "type": "string" - }, - "adminUser": { - "type": "string" - } - }, - "type": "object" - }, "client": { "properties": { "id": { @@ -445,217 +434,6 @@ }, "type": "object" }, - "primary": { - "properties": { - "extraVolumeMounts": { - "items": { - "properties": { - "mountPath": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "extraVolumes": { - "items": { - "properties": { - "emptyDir": { - "properties": {}, - "type": "object" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "persistence": { - "properties": { - "enabled": { - "type": "boolean" - } - }, - "type": "object" - }, - "service": { - "properties": { - "extraPorts": { - "items": { - "properties": { - "name": { - "type": "string" - }, - "port": { - "type": "integer" - }, - "protocol": { - "type": "string" - }, - "targetPort": { - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "sidecars": { - "items": { - "properties": { - "envFrom": { - "items": { - "properties": { - "secretRef": { - "properties": { - "name": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "type": "array" - }, - "image": { - "type": "string" - }, - "imagePullPolicy": { - "type": "string" - }, - "livenessProbe": { - "properties": { - "exec": { - "properties": { - "command": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - } - }, - "type": "object" - }, - "name": { - "type": "string" - }, - "ports": { - "items": { - "properties": { - "containerPort": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "protocol": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "readinessProbe": { - "properties": { - "exec": { - "properties": { - "command": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - } - }, - "type": "object" - }, - "securityContext": { - "properties": { - "allowPrivilegeEscalation": { - "type": "boolean" - }, - "capabilities": { - "properties": { - "drop": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - }, - "seccompProfile": { - "properties": { - "type": { - "type": "string" - } - }, - "type": "object" - } - }, - "type": "object" - }, - "volumeMounts": { - "items": { - "properties": { - "mountPath": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, "secondary": { "properties": { "replicaCount": { @@ -1042,6 +820,10 @@ "enabled": { "type": "boolean" }, + "extraInitDbScripts": { + "properties": {}, + "type": "object" + }, "fullnameOverride": { "type": "string" }, @@ -1064,10 +846,6 @@ "host": { "type": "string" }, - "initdbScripts": { - "properties": {}, - "type": "object" - }, "initdbScriptsConfigMap": { "type": "string" }, @@ -1333,12 +1111,6 @@ }, "security": { "properties": { - "adminPassword": { - "type": "string" - }, - "adminUsername": { - "type": "string" - }, "enabled": { "type": "boolean" } @@ -1517,6 +1289,14 @@ }, "mariadb": { "properties": { + "auth": { + "properties": { + "rootPassword": { + "type": "string" + } + }, + "type": "object" + }, "enabled": { "type": "boolean" }, diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml index af810436af63b6ca3b87a08c767a28959852ec35..ad50a24f0fea69b98addca6c5ba1535ec46a4e55 100644 --- a/helm/dbrepo/values.yaml +++ b/helm/dbrepo/values.yaml @@ -141,62 +141,6 @@ datadb: metrics: ## @skip datadb.metrics.enabled enabled: true - ## @skip datadb.primary - primary: - service: - extraPorts: - - name: "sidecar" - port: 8080 - targetPort: 8080 - protocol: TCP - sidecars: - - name: sidecar - image: registry.datalab.tuwien.ac.at/dbrepo/data-db-sidecar:1.4.5 - imagePullPolicy: Always - securityContext: - runAsUser: 1001 - runAsGroup: 0 - runAsNonRoot: true - allowPrivilegeEscalation: false - seccompProfile: - type: RuntimeDefault - capabilities: - drop: - - ALL - ports: - - name: "sidecar" - containerPort: 8080 - protocol: TCP - envFrom: - - secretRef: - name: data-service-secret - livenessProbe: - exec: - command: - - /bin/bash - - -ec - - "curl -sSL localhost:8080/health | grep 'UP' || exit 1" - initialDelaySeconds: 120 - periodSeconds: 30 - readinessProbe: - exec: - command: - - /bin/bash - - -ec - - "curl -sSL localhost:8080/health | grep 'UP' || exit 1" - initialDelaySeconds: 30 - periodSeconds: 30 - volumeMounts: - - name: s3 - mountPath: /s3 - extraVolumeMounts: - - name: s3 - mountPath: /s3 - extraVolumes: - - name: s3 - emptyDir: { } - persistence: - enabled: true ## @skip datadb.secondary secondary: replicaCount: 2 @@ -335,7 +279,7 @@ analyseservice: enabled: true image: ## @skip analyseservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.4.5 + name: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.4.6 ## @skip analyseservice.image.pullPolicy pullPolicy: Always ## @param analyseservice.image.debug Set the logging level to `trace`. Otherwise, set to `info`. @@ -397,7 +341,7 @@ metadataservice: enabled: true image: ## @skip metadataservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.4.5 + name: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.4.6 ## @skip metadataservice.image.pullPolicy pullPolicy: Always ## @param metadataservice.image.debug Set the logging level to `trace`. Otherwise, set to `info`. @@ -496,7 +440,7 @@ dataservice: endpoint: http://data-service image: ## @skip dataservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.4.5 + name: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.4.6 ## @skip dataservice.image.pullPolicy pullPolicy: Always ## @param dataservice.image.debug Set the logging level to `trace`. Otherwise, set to `info`. @@ -583,7 +527,7 @@ searchservice: endpoint: http://search-service image: ## @skip searchservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.4.5 + name: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.4.6 ## @skip searchservice.image.pullPolicy pullPolicy: Always ## @param searchservice.image.debug Set the logging level to `trace`. Otherwise, set to `info`. @@ -632,7 +576,7 @@ searchservice: ## @skip searchservice.init init: image: - name: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.4.5 + name: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.4.6 pullPolicy: Always ## @param searchservice.replicaCount The number of replicas. replicaCount: 2 @@ -649,6 +593,9 @@ storageservice: fullnameOverride: storage-service-db ## @skip storageservice.mariadb.enabled enabled: true + auth: + ## @param storageservice.mariadb.auth.rootPassword The user password for the root user. + rootPassword: seaweedfsdb master: ## @skip storageservice.master.enabled enabled: true @@ -674,7 +621,7 @@ storageservice: adminSecretAccessKey: seaweedfsadmin ## @skip storageservice.init init: - image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.4.5 + image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.4.6 pullPolicy: Always ## @section Identity Service @@ -737,7 +684,7 @@ ui: enabled: true image: ## @skip ui.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/ui:1.4.5 + name: registry.datalab.tuwien.ac.at/dbrepo/ui:1.4.6 ## @skip ui.image.pullPolicy pullPolicy: Always ## @param ui.image.debug Set the logging level to `trace`. Otherwise, set to `info`. diff --git a/install.sh b/install.sh index 5e367f4d53fefc633fb3131dad7360569ea971ac..aec9f270bc4b7d2311b93371973dc05aa33ba51c 100644 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/bin/bash # preset -VERSION="1.4.5" +VERSION="1.4.6" MIN_CPU=8 MIN_RAM=8 MIN_MAP_COUNT=262144 diff --git a/lib/python/README.md b/lib/python/README.md index 96166554a7f5cf5a1c3cb1d3fa76650f970eb8bf..d3db052010c3088ee203159f840c01cee6041cff 100644 --- a/lib/python/README.md +++ b/lib/python/README.md @@ -48,17 +48,17 @@ client.import_table_data(database_id=7, table_id=13, file_name_or_data_frame=df) ## Supported Features & Best-Practices - Manage user - account ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/api/#create-user-account)) + account ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/api/#create-user-account)) - Manage databases ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo//usage-overview/#create-database)) - Manage database access & - visibility ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/api/#create-database)) + visibility ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/api/#create-database)) - Import - dataset ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/api/#import-dataset)) + dataset ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/api/#import-dataset)) - Create persistent - identifiers ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/api/#assign-database-pid)) + identifiers ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/api/#assign-database-pid)) - Execute - queries ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/api/#export-subset)) + queries ([docs](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/api/#export-subset)) - Get data from tables/views/subsets ## Configure diff --git a/lib/python/dbrepo/AmqpClient.py b/lib/python/dbrepo/AmqpClient.py index 1cc0e0319c03e46935a5ea9a21a963b609242726..27f7fc4f0fd702e7f40135102f844bb8108971d2 100644 --- a/lib/python/dbrepo/AmqpClient.py +++ b/lib/python/dbrepo/AmqpClient.py @@ -1,13 +1,11 @@ -import dataclasses import os import pika import sys import json import logging -from dbrepo.api.dto import CreateData - -logger = logging.getLogger("AmqpClient") +logging.basicConfig(format='%(asctime)s %(name)-12s %(levelname)-6s %(message)s', level=logging.INFO, + stream=sys.stdout) class AmqpClient: @@ -34,8 +32,6 @@ class AmqpClient: broker_virtual_host: str = '/', username: str = None, password: str = None) -> None: - logging.basicConfig(format='%(asctime)s %(name)-12s %(levelname)-6s %(message)s', level=logging.DEBUG, - stream=sys.stdout) self.broker_host = os.environ.get('AMQP_API_HOST', broker_host) self.broker_port = os.environ.get('AMQP_API_PORT', broker_port) if os.environ.get('AMQP_API_VIRTUAL_HOST') is not None: @@ -59,6 +55,5 @@ class AmqpClient: self.password)) connection = pika.BlockingConnection(parameters) channel = connection.channel() - channel.basic_publish(exchange=exchange, routing_key=routing_key, - body=json.dumps(data)) + channel.basic_publish(exchange=exchange, routing_key=routing_key, body=json.dumps(data)) connection.close() diff --git a/lib/python/dbrepo/RestClient.py b/lib/python/dbrepo/RestClient.py index 7db044958a045c70568268b01eb7b1bccd901cd7..38f18bd84cf52545c81701ede97e2cda5ca9f230 100644 --- a/lib/python/dbrepo/RestClient.py +++ b/lib/python/dbrepo/RestClient.py @@ -2,7 +2,6 @@ import os import sys import logging import time -import datetime import requests from pydantic import TypeAdapter @@ -15,7 +14,8 @@ from dbrepo.api.exceptions import ResponseCodeError, UsernameExistsError, EmailE ForbiddenError, MalformedError, NameExistsError, QueryStoreError, ExternalSystemError, \ AuthenticationError, UploadError, FormatNotAvailable, RequestError, ServiceError, ServiceConnectionError -logger = logging.getLogger("RestClient") +logging.basicConfig(format='%(asctime)s %(name)-12s %(levelname)-6s %(message)s', level=logging.INFO, + stream=sys.stdout) class RestClient: @@ -40,8 +40,6 @@ class RestClient: username: str = None, password: str = None, secure: bool = True) -> None: - logging.basicConfig(format='%(asctime)s %(name)-12s %(levelname)-6s %(message)s', level=logging.DEBUG, - stream=sys.stdout) self.endpoint = os.environ.get('REST_API_ENDPOINT', endpoint) self.username = os.environ.get('REST_API_USERNAME', username) self.password = os.environ.get('REST_API_PASSWORD', password) @@ -49,7 +47,7 @@ class RestClient: self.secure = os.environ.get('REST_API_SECURE') == 'True' else: self.secure = secure - logger.debug( + logging.debug( f'initialized rest client with endpoint={self.endpoint}, username={username}, verify_ssl={secure}') def _wrapper(self, method: str, url: str, params: [(str,)] = None, payload=None, headers: dict = None, @@ -57,27 +55,27 @@ class RestClient: if force_auth and (self.username is None and self.password is None): raise AuthenticationError(f"Failed to perform request: authentication required") url = f'{self.endpoint}{url}' - logger.debug(f'method: {method}') - logger.debug(f'url: {url}') + logging.debug(f'method: {method}') + logging.debug(f'url: {url}') if params is not None: - logger.debug(f'params: {params}') + logging.debug(f'params: {params}') if stream is not None: - logger.debug(f'stream: {stream}') - logger.debug(f'secure: {self.secure}') + logging.debug(f'stream: {stream}') + logging.debug(f'secure: {self.secure}') if headers is not None: - logger.debug(f'headers: {headers}') + logging.debug(f'headers: {headers}') else: headers = dict() - logger.debug(f'no headers set') + logging.debug(f'no headers set') if payload is not None: payload = payload.model_dump() auth = None if self.username is None and self.password is not None: headers["Authorization"] = f"Bearer {self.password}" - logger.debug(f'configured for oidc/bearer auth') + logging.debug(f'configured for oidc/bearer auth') elif self.username is not None and self.password is not None: auth = (self.username, self.password) - logger.debug(f'configured for basic auth: username={self.username}, password=(hidden)') + logging.debug(f'configured for basic auth: username={self.username}, password=(hidden)') return requests.request(method=method, url=url, auth=auth, verify=self.secure, json=payload, headers=headers, params=params, stream=stream) diff --git a/lib/python/dbrepo/UploadClient.py b/lib/python/dbrepo/UploadClient.py index 05fa133d64b2be902deb81423fef9bdc07e8c66d..1c0b8cf88a3af9b64a47e37d510da6b0a4877d6d 100644 --- a/lib/python/dbrepo/UploadClient.py +++ b/lib/python/dbrepo/UploadClient.py @@ -4,7 +4,8 @@ import re import sys from tusclient import client -logger = logging.getLogger("UploadClient") +logging.basicConfig(format='%(asctime)s %(name)-12s %(levelname)-6s %(message)s', level=logging.INFO, + stream=sys.stdout) class UploadClient: @@ -18,8 +19,6 @@ class UploadClient: endpoint: str = None def __init__(self, endpoint: str = 'http://gateway-service/api/upload/files') -> None: - logging.basicConfig(format='%(asctime)s %(name)-12s %(levelname)-6s %(message)s', level=logging.DEBUG, - stream=sys.stdout) self.endpoint = os.environ.get('REST_UPLOAD_ENDPOINT', endpoint) def upload(self, file_path: str) -> str: @@ -35,5 +34,5 @@ class UploadClient: uploader.upload() m = re.search('\\/([a-f0-9]+)\\+', uploader.url) filename = m.group(0)[1:-1] - logger.debug(f'uploaded file {file_path} to storage service with key: {filename}') + logging.info(f'Uploaded file {file_path} to storage service with key: {filename}') return filename diff --git a/lib/python/docs/index.rst b/lib/python/docs/index.rst index 688a62683170012b263ffc1df234c881323ab9fb..6348ed12d3f7de6514621cf6e9add754204690fc 100644 --- a/lib/python/docs/index.rst +++ b/lib/python/docs/index.rst @@ -12,7 +12,7 @@ Quickstart ---------- Find numerous quickstart examples on -the `DBRepo website <https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/api/>`_. +the `DBRepo website <https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/api/>`_. AMQP API Client ----------- diff --git a/lib/python/setup.py b/lib/python/setup.py index 34c44d115b6169e64f356b8d9593a65b59ab2bb1..b92f73d34f8384aa9bc5bcac4ef5387f9261fa0e 100644 --- a/lib/python/setup.py +++ b/lib/python/setup.py @@ -4,7 +4,7 @@ from distutils.core import setup setup(name="dbrepo", version="1.4.6", description="A library for communicating with DBRepo", - url="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/", + url="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/", author="Martin Weise", license="Apache-2.0", author_email="martin.weise@tuwien.ac.at", diff --git a/lib/python/tests/test_unit_query.py b/lib/python/tests/test_unit_query.py index e5448c8a3774e4625c9992ce9c09ff79a18b83a0..e1b326fa576b86519e6c059abd73f66dacbda2e5 100644 --- a/lib/python/tests/test_unit_query.py +++ b/lib/python/tests/test_unit_query.py @@ -1,6 +1,4 @@ import unittest -from json import dumps -from typing import Any import requests_mock import datetime diff --git a/make/build.mk b/make/build.mk index c2851c3a74e3fd8f56d175061f78a6cff0e8fb47..861226251224ec7432d77d9bb1b7fa9fb33d0fe9 100644 --- a/make/build.mk +++ b/make/build.mk @@ -22,7 +22,18 @@ build-ui: ## Build the UI. build-lib: ## Build the Python Library. python3 -m build --sdist ./lib/python python3 -m build --wheel ./lib/python + cp ./lib/python/dist/dbrepo-${APP_VERSION}.tar.gz ./dbrepo-analyse-service/lib/dbrepo-${APP_VERSION}.tar.gz + (cd ./dbrepo-analyse-service && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install) + cp ./lib/python/dist/dbrepo-${APP_VERSION}.tar.gz ./dbrepo-search-service/lib/dbrepo-${APP_VERSION}.tar.gz + (cd ./dbrepo-search-service && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install) + cp ./lib/python/dist/dbrepo-${APP_VERSION}.tar.gz ./dbrepo-search-service/init/lib/dbrepo-${APP_VERSION}.tar.gz + (cd ./dbrepo-search-service/init && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install) .PHONY: build-helm -build-helm: ## Build the Helm Chart. +build-helm: ## Build the DBRepo and DBRepo MariaDB Galera Helm Charts. + ./.scripts/check-helm.sh + helm package ./helm/dbrepo-mariadb-galera --destination ./build + helm schema -input ./helm/dbrepo-mariadb-galera/values.yaml -output ./helm/dbrepo-mariadb-galera/values.schema.json + helm dependency update ./helm/dbrepo helm package ./helm/dbrepo --destination ./build + helm schema -input ./helm/dbrepo/values.yaml -output ./helm/dbrepo/values.schema.json diff --git a/make/gen.mk b/make/gen.mk index b81d504213bdee6cae172d1edfc18db82f2ef65a..322bc6625941b33eb72912212f3034e6cf259dd4 100644 --- a/make/gen.mk +++ b/make/gen.mk @@ -9,7 +9,6 @@ gen-swagger-doc: build-images ## Generate Swagger documentation and fetch. .PHONY: gen-helm-doc gen-helm-doc: build-helm ## Generate Helm documentation and schema - helm schema -input ./helm/dbrepo/values.yaml -output ./helm/dbrepo/values.schema.json readme-generator-for-helm --readme ./helm/dbrepo/README.md --values ./helm/dbrepo/values.yaml .PHONY: gen-dbrepo-doc diff --git a/make/rel.mk b/make/rel.mk index 97aeca4e161ada3786dab0b3ecfca1fc2c3c5a62..1f8b5a1cc56c5d6fe7164ebfa4c9007363a4ddbc 100644 --- a/make/rel.mk +++ b/make/rel.mk @@ -25,3 +25,8 @@ release-images: tag-images ## Release the docker images. docker push "${REPOSITORY_URL}/search-service:${APP_VERSION}" docker push "${REPOSITORY_URL}/search-service-init:${APP_VERSION}" docker push "${REPOSITORY_URL}/storage-service-init:${APP_VERSION}" + +.PHONY: release-helm +release-helm: gen-helm-doc ## Release the DBRepo and DBRepo MariaDB Galera Helm charts. + helm push ./build/dbrepo-${CHART_VERSION}.tgz oci://registry.datalab.tuwien.ac.at/dbrepo/dbrepo/helm + helm push ./build/dbrepo-mariadb-galera-${CHART_VERSION}.tgz oci://registry.datalab.tuwien.ac.at/dbrepo/dbrepo/helm \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 5285953568a544a7589bb091e82c13138f6b84cb..b2314f2cf019d791d10d81e3891b6efbeb75ee50 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: Database Repository -site_url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.5/ +site_url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.6/ repo_url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services repo_name: fda-services site_author: Research Unit Data Science, Technische Universität Wien @@ -118,7 +118,7 @@ markdown_extensions: extra: homepage: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/ version: - default: 1.4.3 + default: 1.4.6 provider: mike social: - icon: simple/artifacthub diff --git a/versions.json b/versions.json index b17c2c59962f34c3f0fc4693ae0c6088212f6eb6..dc4adc279a0ddb9514930e5087fc04a3cf31b8da 100644 --- a/versions.json +++ b/versions.json @@ -1,8 +1,13 @@ [ + { + "version": "1.4.6", + "title": "1.4.6", + "aliases": ["latest"] + }, { "version": "1.4.5", "title": "1.4.5", - "aliases": ["latest"] + "aliases": [] }, { "version": "1.4.4",