mirror of
https://github.com/apache/superset.git
synced 2024-09-16 02:29:39 -04:00
fix: handle schemas_allowed_for_csv_upload serde (#16038)
* fix: handle schemas_allowed_for_csv_upload serde * Add migration
This commit is contained in:
parent
7c059cda39
commit
ec22acb786
@ -372,13 +372,17 @@ const ExtraOptions = ({
|
|||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
name="schemas_allowed_for_csv_upload"
|
name="schemas_allowed_for_csv_upload"
|
||||||
value={db?.extra_json?.schemas_allowed_for_csv_upload || ''}
|
value={(
|
||||||
placeholder={t('Select one or multiple schemas')}
|
db?.extra_json?.schemas_allowed_for_csv_upload || []
|
||||||
|
).join(',')}
|
||||||
|
placeholder="schema1,schema2"
|
||||||
onChange={onExtraInputChange}
|
onChange={onExtraInputChange}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="helper">
|
<div className="helper">
|
||||||
{t('A list of schemas that CSVs are allowed to upload to.')}
|
{t(
|
||||||
|
'A comma-separated list of schemas that CSVs are allowed to upload to.',
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</StyledInputContainer>
|
</StyledInputContainer>
|
||||||
<StyledInputContainer css={{ no_margin_bottom }}>
|
<StyledInputContainer css={{ no_margin_bottom }}>
|
||||||
|
@ -222,6 +222,17 @@ function dbReducer(
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
if (action.payload.name === 'schemas_allowed_for_csv_upload') {
|
||||||
|
return {
|
||||||
|
...trimmedState,
|
||||||
|
extra_json: {
|
||||||
|
...trimmedState.extra_json,
|
||||||
|
schemas_allowed_for_csv_upload: (action.payload.value || '').split(
|
||||||
|
',',
|
||||||
|
),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
...trimmedState,
|
...trimmedState,
|
||||||
extra_json: {
|
extra_json: {
|
||||||
@ -409,8 +420,9 @@ const serializeExtra = (extraJson: DatabaseObject['extra_json']) =>
|
|||||||
engine_params: JSON.parse(
|
engine_params: JSON.parse(
|
||||||
((extraJson?.engine_params as unknown) as string) || '{}',
|
((extraJson?.engine_params as unknown) as string) || '{}',
|
||||||
),
|
),
|
||||||
schemas_allowed_for_csv_upload:
|
schemas_allowed_for_csv_upload: (
|
||||||
(extraJson?.schemas_allowed_for_csv_upload as string) || '[]',
|
extraJson?.schemas_allowed_for_csv_upload || []
|
||||||
|
).filter(schema => schema !== ''),
|
||||||
});
|
});
|
||||||
|
|
||||||
const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({
|
const DatabaseModal: FunctionComponent<DatabaseModalProps> = ({
|
||||||
|
@ -83,7 +83,7 @@ export type DatabaseObject = {
|
|||||||
table_cache_timeout?: number; // in Performance
|
table_cache_timeout?: number; // in Performance
|
||||||
}; // No field, holds schema and table timeout
|
}; // No field, holds schema and table timeout
|
||||||
allows_virtual_table_explore?: boolean; // in SQL Lab
|
allows_virtual_table_explore?: boolean; // in SQL Lab
|
||||||
schemas_allowed_for_csv_upload?: [] | string; // in Security
|
schemas_allowed_for_csv_upload?: string[]; // in Security
|
||||||
cancel_query_on_windows_unload?: boolean; // in Performance
|
cancel_query_on_windows_unload?: boolean; // in Performance
|
||||||
version?: string;
|
version?: string;
|
||||||
|
|
||||||
|
@ -0,0 +1,82 @@
|
|||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
"""fix schemas_allowed_for_csv_upload
|
||||||
|
|
||||||
|
Revision ID: e323605f370a
|
||||||
|
Revises: 31b2a1039d4a
|
||||||
|
Create Date: 2021-08-02 16:39:45.329151
|
||||||
|
|
||||||
|
"""
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
from sqlalchemy import Column, Integer, Text
|
||||||
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
|
||||||
|
from superset import db
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "e323605f370a"
|
||||||
|
down_revision = "31b2a1039d4a"
|
||||||
|
|
||||||
|
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
|
||||||
|
class Database(Base):
|
||||||
|
|
||||||
|
__tablename__ = "dbs"
|
||||||
|
id = Column(Integer, primary_key=True)
|
||||||
|
extra = Column(Text)
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
"""
|
||||||
|
Fix databases with ``schemas_allowed_for_csv_upload`` stored as string.
|
||||||
|
"""
|
||||||
|
bind = op.get_bind()
|
||||||
|
session = db.Session(bind=bind)
|
||||||
|
|
||||||
|
for database in session.query(Database).all():
|
||||||
|
try:
|
||||||
|
extra = json.loads(database.extra)
|
||||||
|
except json.decoder.JSONDecodeError as ex:
|
||||||
|
logging.warning(str(ex))
|
||||||
|
continue
|
||||||
|
|
||||||
|
schemas_allowed_for_csv_upload = extra.get("schemas_allowed_for_csv_upload")
|
||||||
|
if not isinstance(schemas_allowed_for_csv_upload, str):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if schemas_allowed_for_csv_upload == "[]":
|
||||||
|
extra["schemas_allowed_for_csv_upload"] = []
|
||||||
|
else:
|
||||||
|
extra["schemas_allowed_for_csv_upload"] = [
|
||||||
|
schema.strip()
|
||||||
|
for schema in schemas_allowed_for_csv_upload.split(",")
|
||||||
|
if schema.strip()
|
||||||
|
]
|
||||||
|
|
||||||
|
database.extra = json.dumps(extra)
|
||||||
|
|
||||||
|
session.commit()
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
pass
|
Loading…
Reference in New Issue
Block a user