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

Updated libs

parent 724bd150
No related branches found
No related tags found
2 merge requests!374Bumped version of DBRepo,!373Bumped version of DBRepo
Showing
with 60 additions and 82 deletions
...@@ -175,20 +175,20 @@ ...@@ -175,20 +175,20 @@
}, },
"boto3": { "boto3": {
"hashes": [ "hashes": [
"sha256:76cfc9a705be46e8d22607efacc8d688c064f923d785a01c00b28e9a96425d1a", "sha256:53a5307f6a3526ee2f8590e3c45efa504a3ea4532c1bfe4926c0c19bf188d141",
"sha256:fde1c29996b77274a60b7bc9f741525afa6267bb1716eb644a764fb7c124a0d2" "sha256:f9843a5d06f501d66ada06f5a5417f671823af2cf319e36ceefa1bafaaaaa953"
], ],
"index": "pypi", "index": "pypi",
"markers": "python_version >= '3.8'", "markers": "python_version >= '3.8'",
"version": "==1.36.2" "version": "==1.36.3"
}, },
"botocore": { "botocore": {
"hashes": [ "hashes": [
"sha256:a1fe6610983f0214b0c7655fe6990b6a731746baf305b182976fc7b568fc3cb0", "sha256:536ab828e6f90dbb000e3702ac45fd76642113ae2db1b7b1373ad24104e89255",
"sha256:bc3b7e3b573a48af2bd7116b80fe24f9a335b0b67314dcb2697a327d009abf29" "sha256:775b835e979da5c96548ed1a0b798101a145aec3cd46541d62e27dda5a94d7f8"
], ],
"markers": "python_version >= '3.8'", "markers": "python_version >= '3.8'",
"version": "==1.36.2" "version": "==1.36.3"
}, },
"certifi": { "certifi": {
"hashes": [ "hashes": [
...@@ -412,7 +412,7 @@ ...@@ -412,7 +412,7 @@
}, },
"dbrepo": { "dbrepo": {
"hashes": [ "hashes": [
"sha256:19c6bbcf9461e20681f0fb342087c618a91123d2d04d4df2f4fd1da80aa77b76" "sha256:a41ca60353510cbecf8fb647cf2483acb100258743794a16bc8ad6f8e9ea4481"
], ],
"path": "./lib/dbrepo-1.6.2.tar.gz" "path": "./lib/dbrepo-1.6.2.tar.gz"
}, },
...@@ -1601,11 +1601,11 @@ ...@@ -1601,11 +1601,11 @@
}, },
"tzdata": { "tzdata": {
"hashes": [ "hashes": [
"sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694",
"sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd" "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"
], ],
"markers": "python_version >= '2'", "markers": "python_version >= '2'",
"version": "==2024.2" "version": "==2025.1"
}, },
"urllib3": { "urllib3": {
"hashes": [ "hashes": [
......
File added
No preview for this file type
...@@ -100,7 +100,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { ...@@ -100,7 +100,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway {
log.error("Failed to find database with id {}: service responded unsuccessful: {}", id, response.getStatusCode()); log.error("Failed to find database with id {}: service responded unsuccessful: {}", id, response.getStatusCode());
throw new MetadataServiceException("Failed to find database: service responded unsuccessful: " + response.getStatusCode()); throw new MetadataServiceException("Failed to find database: service responded unsuccessful: " + response.getStatusCode());
} }
final List<String> expectedHeaders = List.of("X-Username", "X-Password", "X-Host", "X-Port"); final List<String> expectedHeaders = List.of("X-Username", "X-Password", "X-Host", "X-Port", "X-Type");
if (!response.getHeaders().keySet().containsAll(expectedHeaders)) { if (!response.getHeaders().keySet().containsAll(expectedHeaders)) {
log.error("Failed to find all database headers"); log.error("Failed to find all database headers");
log.debug("expected headers: {}", expectedHeaders); log.debug("expected headers: {}", expectedHeaders);
...@@ -112,10 +112,11 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { ...@@ -112,10 +112,11 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway {
throw new MetadataServiceException("Failed to find database with id " + id + ": body is empty"); throw new MetadataServiceException("Failed to find database with id " + id + ": body is empty");
} }
final DatabaseDto database = response.getBody(); final DatabaseDto database = response.getBody();
database.getContainer().setUsername(response.getHeaders().get("X-Username").get(0)); database.setJdbcMethod(response.getHeaders().get("X-Type").get(0));
database.getContainer().setPassword(response.getHeaders().get("X-Password").get(0)); database.setUsername(response.getHeaders().get("X-Username").get(0));
database.getContainer().setHost(response.getHeaders().get("X-Host").get(0)); database.setPassword(response.getHeaders().get("X-Password").get(0));
database.getContainer().setPort(Integer.parseInt(response.getHeaders().get("X-Port").get(0))); database.setHost(response.getHeaders().get("X-Host").get(0));
database.setPort(Integer.parseInt(response.getHeaders().get("X-Port").get(0)));
database.setLastRetrieved(Instant.now()); database.setLastRetrieved(Instant.now());
return database; return database;
} }
...@@ -139,7 +140,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { ...@@ -139,7 +140,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway {
log.error("Failed to find table with id {}: service responded unsuccessful: {}", id, response.getStatusCode()); log.error("Failed to find table with id {}: service responded unsuccessful: {}", id, response.getStatusCode());
throw new MetadataServiceException("Failed to find table: service responded unsuccessful: " + response.getStatusCode()); throw new MetadataServiceException("Failed to find table: service responded unsuccessful: " + response.getStatusCode());
} }
final List<String> expectedHeaders = List.of("X-Type", "X-Host", "X-Port", "X-Username", "X-Password", "X-Database", "X-Table"); final List<String> expectedHeaders = List.of("X-Type", "X-Host", "X-Port", "X-Username", "X-Password", "X-Database", "X-Table", "X-Type");
if (!response.getHeaders().keySet().containsAll(expectedHeaders)) { if (!response.getHeaders().keySet().containsAll(expectedHeaders)) {
log.error("Failed to find all table headers"); log.error("Failed to find all table headers");
log.debug("expected headers: {}", expectedHeaders); log.debug("expected headers: {}", expectedHeaders);
...@@ -181,7 +182,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway { ...@@ -181,7 +182,7 @@ public class MetadataServiceGatewayImpl implements MetadataServiceGateway {
log.error("Failed to find view with id {}: service responded unsuccessful: {}", id, response.getStatusCode()); log.error("Failed to find view with id {}: service responded unsuccessful: {}", id, response.getStatusCode());
throw new MetadataServiceException("Failed to find view: service responded unsuccessful: " + response.getStatusCode()); throw new MetadataServiceException("Failed to find view: service responded unsuccessful: " + response.getStatusCode());
} }
final List<String> expectedHeaders = List.of("X-Type", "X-Host", "X-Port", "X-Username", "X-Password", "X-Database", "X-View"); final List<String> expectedHeaders = List.of("X-Type", "X-Host", "X-Port", "X-Username", "X-Password", "X-Database", "X-View", "X-Type");
if (!response.getHeaders().keySet().containsAll(expectedHeaders)) { if (!response.getHeaders().keySet().containsAll(expectedHeaders)) {
log.error("Failed to find all view headers"); log.error("Failed to find all view headers");
log.debug("expected headers: {}", expectedHeaders); log.debug("expected headers: {}", expectedHeaders);
......
...@@ -12,7 +12,7 @@ public abstract class DataConnector<T extends CacheableDto> { ...@@ -12,7 +12,7 @@ public abstract class DataConnector<T extends CacheableDto> {
public ComboPooledDataSource getDataSource(T entity) { public ComboPooledDataSource getDataSource(T entity) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final ComboPooledDataSource dataSource = new ComboPooledDataSource(); final ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl(getJdbcUrl(entity.getJdbcMethod(), entity.getHost(), entity.getPassword(), dataSource.setJdbcUrl(getJdbcUrl(entity.getJdbcMethod(), entity.getHost(), entity.getPort(),
entity.getDatabase())); entity.getDatabase()));
dataSource.setUser(entity.getUsername()); dataSource.setUser(entity.getUsername());
dataSource.setPassword(entity.getPassword()); dataSource.setPassword(entity.getPassword());
...@@ -27,7 +27,7 @@ public abstract class DataConnector<T extends CacheableDto> { ...@@ -27,7 +27,7 @@ public abstract class DataConnector<T extends CacheableDto> {
public ComboPooledDataSource getDataSource(T entity, String databaseName) { public ComboPooledDataSource getDataSource(T entity, String databaseName) {
final long start = System.currentTimeMillis(); final long start = System.currentTimeMillis();
final ComboPooledDataSource dataSource = new ComboPooledDataSource(); final ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl(getJdbcUrl(entity.getJdbcMethod(), entity.getHost(), entity.getPassword(), databaseName)); dataSource.setJdbcUrl(getJdbcUrl(entity.getJdbcMethod(), entity.getHost(), entity.getPort(), databaseName));
dataSource.setUser(entity.getUsername()); dataSource.setUser(entity.getUsername());
dataSource.setPassword(entity.getPassword()); dataSource.setPassword(entity.getPassword());
dataSource.setInitialPoolSize(5); dataSource.setInitialPoolSize(5);
...@@ -38,24 +38,24 @@ public abstract class DataConnector<T extends CacheableDto> { ...@@ -38,24 +38,24 @@ public abstract class DataConnector<T extends CacheableDto> {
return dataSource; return dataSource;
} }
public String getSparkUrl(String jdbcMethod, String host, String password, String databaseName) { public String getSparkUrl(String jdbcMethod, String host, Integer port, String databaseName) {
final StringBuilder sb = new StringBuilder(getJdbcUrl(jdbcMethod, host, password, databaseName)) final StringBuilder sb = new StringBuilder(getJdbcUrl(jdbcMethod, host, port, databaseName))
.append("?sessionVariables=sql_mode='ANSI_QUOTES'"); .append("?sessionVariables=sql_mode='ANSI_QUOTES'");
log.trace("mapped container to spark url: {}", sb.toString()); log.trace("mapped container to spark url: {}", sb.toString());
return sb.toString(); return sb.toString();
} }
public String getSparkUrl(T entity) { public String getSparkUrl(T entity) {
return getSparkUrl(entity.getJdbcMethod(), entity.getHost(), entity.getPassword(), entity.getDatabase()); return getSparkUrl(entity.getJdbcMethod(), entity.getHost(), entity.getPort(), entity.getDatabase());
} }
public String getJdbcUrl(String jdbcMethod, String host, String password, String databaseName) { public String getJdbcUrl(String jdbcMethod, String host, Integer port, String databaseName) {
final StringBuilder stringBuilder = new StringBuilder("jdbc:") final StringBuilder stringBuilder = new StringBuilder("jdbc:")
.append(jdbcMethod) .append(jdbcMethod)
.append("://") .append("://")
.append(host) .append(host)
.append(":") .append(":")
.append(password); .append(port);
if (databaseName != null) { if (databaseName != null) {
stringBuilder.append("/") stringBuilder.append("/")
.append(databaseName); .append(databaseName);
......
...@@ -13,13 +13,10 @@ import at.tuwien.mapper.DataMapper; ...@@ -13,13 +13,10 @@ import at.tuwien.mapper.DataMapper;
import at.tuwien.mapper.MariaDbMapper; import at.tuwien.mapper.MariaDbMapper;
import at.tuwien.mapper.MetadataMapper; import at.tuwien.mapper.MetadataMapper;
import at.tuwien.service.DatabaseService; import at.tuwien.service.DatabaseService;
import at.tuwien.service.TableService;
import at.tuwien.service.ViewService;
import com.google.common.hash.Hashing; import com.google.common.hash.Hashing;
import com.mchange.v2.c3p0.ComboPooledDataSource; import com.mchange.v2.c3p0.ComboPooledDataSource;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
...@@ -36,19 +33,14 @@ public class DatabaseServiceMariaDbImpl extends DataConnector<DatabaseDto> imple ...@@ -36,19 +33,14 @@ public class DatabaseServiceMariaDbImpl extends DataConnector<DatabaseDto> imple
private final DataMapper dataMapper; private final DataMapper dataMapper;
private final QueryConfig queryConfig; private final QueryConfig queryConfig;
private final ViewService viewService;
private final TableService tableService;
private final MariaDbMapper mariaDbMapper; private final MariaDbMapper mariaDbMapper;
private final MetadataMapper metadataMapper; private final MetadataMapper metadataMapper;
@Autowired @Autowired
public DatabaseServiceMariaDbImpl(DataMapper dataMapper, QueryConfig queryConfig, ViewService viewService, public DatabaseServiceMariaDbImpl(DataMapper dataMapper, QueryConfig queryConfig, MariaDbMapper mariaDbMapper,
TableService tableService, MariaDbMapper mariaDbMapper, MetadataMapper metadataMapper) {
@Qualifier("metadataMapper") MetadataMapper metadataMapper) {
this.dataMapper = dataMapper; this.dataMapper = dataMapper;
this.queryConfig = queryConfig; this.queryConfig = queryConfig;
this.viewService = viewService;
this.tableService = tableService;
this.mariaDbMapper = mariaDbMapper; this.mariaDbMapper = mariaDbMapper;
this.metadataMapper = metadataMapper; this.metadataMapper = metadataMapper;
} }
......
...@@ -374,10 +374,10 @@ public class TableServiceMariaDbImpl extends DataConnector<TableDto> implements ...@@ -374,10 +374,10 @@ public class TableServiceMariaDbImpl extends DataConnector<TableDto> implements
throws QueryMalformedException, TableNotFoundException { throws QueryMalformedException, TableNotFoundException {
try { try {
final Properties properties = new Properties(); final Properties properties = new Properties();
properties.setProperty("user", database.getContainer().getUsername()); properties.setProperty("user", database.getUsername());
properties.setProperty("password", database.getContainer().getPassword()); properties.setProperty("password", database.getPassword());
return sparkSession.read() return sparkSession.read()
.jdbc(getSparkUrl(database.getJdbcMethod(), database.getHost(), database.getPassword(), .jdbc(getSparkUrl(database.getJdbcMethod(), database.getHost(), database.getPort(),
database.getInternalName()), tableOrView, properties); database.getInternalName()), tableOrView, properties);
} catch (Exception e) { } catch (Exception e) {
if (e instanceof ExtendedAnalysisException exception) { if (e instanceof ExtendedAnalysisException exception) {
...@@ -386,8 +386,8 @@ public class TableServiceMariaDbImpl extends DataConnector<TableDto> implements ...@@ -386,8 +386,8 @@ public class TableServiceMariaDbImpl extends DataConnector<TableDto> implements
throw new TableNotFoundException("Failed to find named reference: " + exception.getSimpleMessage()) /* remove throwable on purpose, clutters the output */; throw new TableNotFoundException("Failed to find named reference: " + exception.getSimpleMessage()) /* remove throwable on purpose, clutters the output */;
} }
} }
log.error("Failed to find get data from query statement: {}", e.getMessage()); log.error("Malformed query: {}", e.getMessage());
throw new QueryMalformedException("Failed to find get data from query statement: " + e.getMessage(), e); throw new QueryMalformedException("Malformed query: " + e.getMessage(), e);
} }
} }
......
...@@ -551,6 +551,7 @@ public class DatabaseEndpoint extends AbstractEndpoint { ...@@ -551,6 +551,7 @@ public class DatabaseEndpoint extends AbstractEndpoint {
headers.set("X-Password", database.getContainer().getPrivilegedPassword()); headers.set("X-Password", database.getContainer().getPrivilegedPassword());
headers.set("X-Host", database.getContainer().getHost()); headers.set("X-Host", database.getContainer().getHost());
headers.set("X-Port", "" + database.getContainer().getPort()); headers.set("X-Port", "" + database.getContainer().getPort());
headers.set("X-Type", database.getContainer().getImage().getJdbcMethod());
headers.set("Access-Control-Expose-Headers", "X-Username X-Password X-Host X-Port"); headers.set("Access-Control-Expose-Headers", "X-Username X-Password X-Host X-Port");
} }
return ResponseEntity.status(HttpStatus.OK) return ResponseEntity.status(HttpStatus.OK)
......
...@@ -360,7 +360,7 @@ ...@@ -360,7 +360,7 @@
}, },
"dbrepo": { "dbrepo": {
"hashes": [ "hashes": [
"sha256:19c6bbcf9461e20681f0fb342087c618a91123d2d04d4df2f4fd1da80aa77b76" "sha256:a41ca60353510cbecf8fb647cf2483acb100258743794a16bc8ad6f8e9ea4481"
], ],
"path": "./lib/dbrepo-1.6.2.tar.gz" "path": "./lib/dbrepo-1.6.2.tar.gz"
}, },
...@@ -1574,11 +1574,11 @@ ...@@ -1574,11 +1574,11 @@
}, },
"tzdata": { "tzdata": {
"hashes": [ "hashes": [
"sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694",
"sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd" "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"
], ],
"markers": "python_version >= '2'", "markers": "python_version >= '2'",
"version": "==2024.2" "version": "==2025.1"
}, },
"urllib3": { "urllib3": {
"hashes": [ "hashes": [
......
...@@ -254,7 +254,7 @@ ...@@ -254,7 +254,7 @@
}, },
"dbrepo": { "dbrepo": {
"hashes": [ "hashes": [
"sha256:19c6bbcf9461e20681f0fb342087c618a91123d2d04d4df2f4fd1da80aa77b76" "sha256:a41ca60353510cbecf8fb647cf2483acb100258743794a16bc8ad6f8e9ea4481"
], ],
"path": "./lib/dbrepo-1.6.2.tar.gz" "path": "./lib/dbrepo-1.6.2.tar.gz"
}, },
...@@ -1027,11 +1027,11 @@ ...@@ -1027,11 +1027,11 @@
}, },
"tzdata": { "tzdata": {
"hashes": [ "hashes": [
"sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc", "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694",
"sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd" "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"
], ],
"markers": "python_version >= '2'", "markers": "python_version >= '2'",
"version": "==2024.2" "version": "==2025.1"
}, },
"urllib3": { "urllib3": {
"hashes": [ "hashes": [
......
File added
No preview for this file type
File added
No preview for this file type
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<v-form <v-form
ref="form" ref="form"
v-model="valid" v-model="valid"
@submit.prevent="submit"> @submit.prevent="validate">
<v-card <v-card
:title="title" :title="title"
:subtitle="this.$t('toolbars.table.data.subtitle')" :subtitle="this.$t('toolbars.table.data.subtitle')"
...@@ -17,12 +17,10 @@ ...@@ -17,12 +17,10 @@
<v-text-field <v-text-field
v-if="isNumber(column)" v-if="isNumber(column)"
v-model.number="tuple[column.internal_name]" v-model.number="tuple[column.internal_name]"
:disabled="!edit"
persistent-hint persistent-hint
:variant="inputVariant" :variant="inputVariant"
:label="column.internal_name" :label="column.internal_name"
:hint="hint(column)" :hint="hint(column)"
:rules="rules(column)"
:required="required(column)" :required="required(column)"
type="number"> type="number">
<template <template
...@@ -48,11 +46,9 @@ ...@@ -48,11 +46,9 @@
<v-text-field <v-text-field
v-if="isTextField(column)" v-if="isTextField(column)"
v-model="tuple[column.internal_name]" v-model="tuple[column.internal_name]"
:disabled="disabled(column)"
:clearable="!required(column)" :clearable="!required(column)"
:counter="maxLength(column) !== null" :counter="maxLength(column) !== null"
:maxlength="maxLength(column)" :maxlength="maxLength(column)"
:rules="rules(column)"
:required="required(column)" :required="required(column)"
persistent-hint persistent-hint
:variant="inputVariant" :variant="inputVariant"
...@@ -82,10 +78,8 @@ ...@@ -82,10 +78,8 @@
<v-text-field <v-text-field
v-if="isFloatingPoint(column)" v-if="isFloatingPoint(column)"
v-model="tuple[column.internal_name]" v-model="tuple[column.internal_name]"
:disabled="disabled(column)"
step=".1" step=".1"
:clearable="!required(column)" :clearable="!required(column)"
:rules="rules(column)"
:required="required(column)" :required="required(column)"
persistent-hint persistent-hint
:variant="inputVariant" :variant="inputVariant"
...@@ -115,10 +109,8 @@ ...@@ -115,10 +109,8 @@
<v-textarea <v-textarea
v-if="isTextArea(column)" v-if="isTextArea(column)"
v-model="tuple[column.internal_name]" v-model="tuple[column.internal_name]"
:disabled="disabled(column)"
rows="3" rows="3"
:clearable="!required(column)" :clearable="!required(column)"
:rules="rules(column)"
:required="required(column)" :required="required(column)"
persistent-hint persistent-hint
:variant="inputVariant" :variant="inputVariant"
...@@ -155,7 +147,6 @@ ...@@ -155,7 +147,6 @@
:variant="inputVariant" :variant="inputVariant"
:label="column.internal_name" :label="column.internal_name"
:hint="hint(column)" :hint="hint(column)"
:rules="rules(column)"
:required="required(column)" :required="required(column)"
:clearable="!required(column)" :clearable="!required(column)"
:items="isSet(column) ? column.sets : column.enums"> :items="isSet(column) ? column.sets : column.enums">
...@@ -186,7 +177,6 @@ ...@@ -186,7 +177,6 @@
:variant="inputVariant" :variant="inputVariant"
:label="column.internal_name" :label="column.internal_name"
:hint="hint(column)" :hint="hint(column)"
:rules="rules(column)"
:required="required(column)" :required="required(column)"
:items="bools" :items="bools"
:clearable="!required(column)"> :clearable="!required(column)">
...@@ -324,8 +314,8 @@ export default { ...@@ -324,8 +314,8 @@ export default {
}, },
mounted () { mounted () {
this.fetchContainer() this.fetchContainer()
this.$refs.form.validate()
this.oldTuple = Object.assign({}, this.tuple) this.oldTuple = Object.assign({}, this.tuple)
this.validate()
}, },
computed: { computed: {
database () { database () {
...@@ -358,8 +348,17 @@ export default { ...@@ -358,8 +348,17 @@ export default {
return this.$vuetify.theme.global.name.toLowerCase().endsWith('contrast') ? runtimeConfig.public.variant.button.contrast : runtimeConfig.public.variant.button.normal return this.$vuetify.theme.global.name.toLowerCase().endsWith('contrast') ? runtimeConfig.public.variant.button.contrast : runtimeConfig.public.variant.button.normal
} }
}, },
watch: {
tuple: {
handler () {
this.validate()
},
deep: true
}
},
methods: { methods: {
submit () { validate () {
console.debug('validate form')
this.$refs.form.validate() this.$refs.form.validate()
}, },
cancel () { cancel () {
...@@ -425,18 +424,6 @@ export default { ...@@ -425,18 +424,6 @@ export default {
isTimeField (column) { isTimeField (column) {
return ['date', 'datetime', 'timestamp', 'time', 'year'].includes(column.type) return ['date', 'datetime', 'timestamp', 'time', 'year'].includes(column.type)
}, },
rules (column) {
if (column.is_null_allowed) {
return []
}
const rules = []
rules.push(v => v !== null || this.$t('validation.required'))
if (column.type === 'decimal' || column.type === 'double') {
rules.push(v => !(!v || v.split('.')[0].length > column.size) || `${this.$t('pages.table.subpages.data.float.max')} ${column.size} ${this.$t('pages.table.subpages.data.float.before')}`)
rules.push(v => !(!v || (column.d && v.split('.')[1].length > column.d)) || `${this.$t('pages.table.subpages.data.float.max')} ${column.d} ${this.$t('pages.table.subpages.data.float.after')}`)
}
return rules
},
maxLength (column) { maxLength (column) {
if (!this.isTextField(column) || column.size === null) { if (!this.isTextField(column) || column.size === null) {
return null return null
...@@ -446,9 +433,6 @@ export default { ...@@ -446,9 +433,6 @@ export default {
required (column) { required (column) {
return column.is_null_allowed === false return column.is_null_allowed === false
}, },
disabled (column) {
return (this.edit && column.is_primary_key) || !this.edit
},
updateTuple () { updateTuple () {
const constraints = {} const constraints = {}
this.primaryKeyColumns this.primaryKeyColumns
......
...@@ -20,16 +20,16 @@ build-ui: ## Build the UI. ...@@ -20,16 +20,16 @@ build-ui: ## Build the UI.
.PHONY: build-lib .PHONY: build-lib
build-lib: ## Build the Python Library. build-lib: ## Build the Python Library.
rm -f ./dbrepo-analyse-service/lib/dbrepo-${APP_VERSION}.tar.gz rm -f ./dbrepo-analyse-service/Pipfile.lock ./dbrepo-analyse-service/lib/dbrepo-${APP_VERSION}*
rm -f ./dbrepo-search-service/lib/dbrepo-${APP_VERSION}.tar.gz rm -f ./dbrepo-search-service/Pipfile.lock ./dbrepo-search-service/lib/dbrepo-${APP_VERSION}*
rm -f ./dbrepo-search-service/init/lib/dbrepo-${APP_VERSION}.tar.gz rm -f ./dbrepo-search-service/init/Pipfile.lock ./dbrepo-search-service/init/lib/dbrepo-${APP_VERSION}*
python3 -m build --sdist ./lib/python python3 -m build --sdist ./lib/python
python3 -m build --wheel ./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 cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-analyse-service/lib
(cd ./dbrepo-analyse-service && PIPENV_IGNORE_VIRTUALENVS=1 pipenv lock) (cd ./dbrepo-analyse-service && PIPENV_IGNORE_VIRTUALENVS=1 pipenv lock)
cp ./lib/python/dist/dbrepo-${APP_VERSION}.tar.gz ./dbrepo-search-service/lib/dbrepo-${APP_VERSION}.tar.gz cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-search-service/lib
(cd ./dbrepo-search-service && PIPENV_IGNORE_VIRTUALENVS=1 pipenv lock) (cd ./dbrepo-search-service && PIPENV_IGNORE_VIRTUALENVS=1 pipenv lock)
cp ./lib/python/dist/dbrepo-${APP_VERSION}.tar.gz ./dbrepo-search-service/init/lib/dbrepo-${APP_VERSION}.tar.gz cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-search-service/init/lib
(cd ./dbrepo-search-service/init && PIPENV_IGNORE_VIRTUALENVS=1 pipenv lock) (cd ./dbrepo-search-service/init && PIPENV_IGNORE_VIRTUALENVS=1 pipenv lock)
.PHONY: build-helm .PHONY: build-helm
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment