mirror of
https://github.com/apache/superset.git
synced 2026-06-04 07:09:22 +00:00
* create boiler modal component
* hello world modal
* setup modal flow
* setup savemodal for components
* flake8
* fix onclick reference
* working create datasource boiler
* saving spot for callback on text input
* working dataset with input box
* working redirect on completion
* get data for owners dropdown
* fix build with pull from master
* fix the filteroption
* 💯
* move state to upper component
* add overwrite state
* hacked overwrite process
* linting
* fix filter
* cleaning up the coe
* Delete preset.code-workspace
* remove unused code
* remove visualize
* update default value
* remove unneeded vars
* checkout package-lock.json
* linting
* get user id
* remove page filter
* setup proper call for updating columns in dataset
* add move to explore flow
* linting
* add param for overriding columns
* linting
* change title
* fix some tings
* cleanup
* linting
* add types in some places
* save toast
* use moment
* add error toast
* create enum for radio states
* initial state for saving query
* add tpying
* addressing concerns
* update propTypes
* add functionality for CTAS explor btn
* handle CTAS state
* fix onclick to reference upper level component
* formatting
* reset state after closing
* add error message when user doesn't pick an already selected dataset
* remove unneeded todo
* remove styling
* move async calls to api directory
* remove console.log
* add user id param
* typing
* littty
* move put to seperate file
* save
* dsf
* fix typing errors
* adding more types
* fix typing erros
* linting
* add basic spec test
* create dataset modal
* add components reference
* Rename SaveDatasetModal_spec.jsx to SaveDatasetModal_spec.tsx
* remove sinon for now
* fix typing errors on modal files
* fix linting
* address comments
* attempt to fix linting
* add props
* fix test
* fix the linting
* yerp
* fix this references
* spaces
* handleOverwriteCancel reference cleanup
* rename bool value for shouldOverwriteDataset
* fix typing for onChange
* you still the best in the world
* fix spec
* align branches
* push
* fix key names
* fix dataset reference
* lowercase
* fix save bug with tiem
* fixed styling
* fix date state after push to explore
* add disabling states
* plz refactor this
* this is working fully now
* do some renaming
* renaming
* remove console.logs
* still refactoring
* remove unneeded code
* remove unneeded variables
* still cleaning
* added interface
* fix typing issues
* cleanup unused code
* fix npm lnit
* fix initial problems
* add props to test
* remove unneeded files
* skip linting
* saving
* this works
* remove old test
* remove old test
* fix linting
* fix broken test
* remove jsx file
* refactoring
* cleanup
* remove comments
* reset user object
* fix functions
* fix this
* reverting CTAS btn flow
* remove onclick
* save frontend work
* allow for database id to be passed as param in body
* use enum
* fix linting
* style alignment
* get rid of .then
* add function to compute default value with tiem
* lit
* remove ts-error
* fix typing
171 lines
6.3 KiB
Python
171 lines
6.3 KiB
Python
# 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.
|
|
import re
|
|
|
|
from flask_babel import lazy_gettext as _
|
|
from marshmallow import fields, Schema, ValidationError
|
|
from marshmallow.validate import Length
|
|
|
|
get_delete_ids_schema = {"type": "array", "items": {"type": "integer"}}
|
|
get_export_ids_schema = {"type": "array", "items": {"type": "integer"}}
|
|
|
|
|
|
def validate_python_date_format(value: str) -> None:
|
|
regex = re.compile(
|
|
r"""
|
|
^(
|
|
epoch_s|epoch_ms|
|
|
(?P<date>%Y(-%m(-%d)?)?)([\sT](?P<time>%H(:%M(:%S(\.%f)?)?)?))?
|
|
)$
|
|
""",
|
|
re.VERBOSE,
|
|
)
|
|
match = regex.match(value or "")
|
|
if not match:
|
|
raise ValidationError(_("Invalid date/timestamp format"))
|
|
|
|
|
|
class DatasetColumnsPutSchema(Schema):
|
|
id = fields.Integer()
|
|
column_name = fields.String(required=True, validate=Length(1, 255))
|
|
type = fields.String(validate=Length(1, 32))
|
|
verbose_name = fields.String(allow_none=True, Length=(1, 1024))
|
|
description = fields.String(allow_none=True)
|
|
expression = fields.String(allow_none=True)
|
|
filterable = fields.Boolean()
|
|
groupby = fields.Boolean()
|
|
is_active = fields.Boolean()
|
|
is_dttm = fields.Boolean(default=False)
|
|
python_date_format = fields.String(
|
|
allow_none=True, validate=[Length(1, 255), validate_python_date_format]
|
|
)
|
|
uuid = fields.String(allow_none=True)
|
|
|
|
|
|
class DatasetMetricsPutSchema(Schema):
|
|
id = fields.Integer()
|
|
expression = fields.String(required=True)
|
|
description = fields.String(allow_none=True)
|
|
metric_name = fields.String(required=True, validate=Length(1, 255))
|
|
metric_type = fields.String(allow_none=True, validate=Length(1, 32))
|
|
d3format = fields.String(allow_none=True, validate=Length(1, 128))
|
|
warning_text = fields.String(allow_none=True)
|
|
|
|
|
|
class DatasetPostSchema(Schema):
|
|
database = fields.Integer(required=True)
|
|
schema = fields.String(validate=Length(0, 250))
|
|
table_name = fields.String(required=True, allow_none=False, validate=Length(1, 250))
|
|
owners = fields.List(fields.Integer())
|
|
|
|
|
|
class DatasetPutSchema(Schema):
|
|
table_name = fields.String(allow_none=True, validate=Length(1, 250))
|
|
database_id = fields.Integer()
|
|
sql = fields.String(allow_none=True)
|
|
filter_select_enabled = fields.Boolean(allow_none=True)
|
|
fetch_values_predicate = fields.String(allow_none=True, validate=Length(0, 1000))
|
|
schema = fields.String(allow_none=True, validate=Length(0, 255))
|
|
description = fields.String(allow_none=True)
|
|
main_dttm_col = fields.String(allow_none=True)
|
|
offset = fields.Integer(allow_none=True)
|
|
default_endpoint = fields.String(allow_none=True)
|
|
cache_timeout = fields.Integer(allow_none=True)
|
|
is_sqllab_view = fields.Boolean(allow_none=True)
|
|
template_params = fields.String(allow_none=True)
|
|
owners = fields.List(fields.Integer())
|
|
columns = fields.List(fields.Nested(DatasetColumnsPutSchema))
|
|
metrics = fields.List(fields.Nested(DatasetMetricsPutSchema))
|
|
extra = fields.String(allow_none=True)
|
|
|
|
|
|
class DatasetRelatedChart(Schema):
|
|
id = fields.Integer()
|
|
slice_name = fields.String()
|
|
viz_type = fields.String()
|
|
|
|
|
|
class DatasetRelatedDashboard(Schema):
|
|
id = fields.Integer()
|
|
json_metadata = fields.Dict()
|
|
slug = fields.String()
|
|
title = fields.String()
|
|
|
|
|
|
class DatasetRelatedCharts(Schema):
|
|
count = fields.Integer(description="Chart count")
|
|
result = fields.List(
|
|
fields.Nested(DatasetRelatedChart), description="A list of dashboards"
|
|
)
|
|
|
|
|
|
class DatasetRelatedDashboards(Schema):
|
|
count = fields.Integer(description="Dashboard count")
|
|
result = fields.List(
|
|
fields.Nested(DatasetRelatedDashboard), description="A list of dashboards"
|
|
)
|
|
|
|
|
|
class DatasetRelatedObjectsResponse(Schema):
|
|
charts = fields.Nested(DatasetRelatedCharts)
|
|
dashboards = fields.Nested(DatasetRelatedDashboards)
|
|
|
|
|
|
class ImportV1ColumnSchema(Schema):
|
|
column_name = fields.String(required=True)
|
|
verbose_name = fields.String(allow_none=True)
|
|
is_dttm = fields.Boolean()
|
|
is_active = fields.Boolean(allow_none=True)
|
|
type = fields.String(allow_none=True)
|
|
groupby = fields.Boolean()
|
|
filterable = fields.Boolean()
|
|
expression = fields.String(allow_none=True)
|
|
description = fields.String(allow_none=True)
|
|
python_date_format = fields.String(allow_none=True)
|
|
|
|
|
|
class ImportV1MetricSchema(Schema):
|
|
metric_name = fields.String(required=True)
|
|
verbose_name = fields.String(allow_none=True)
|
|
metric_type = fields.String(allow_none=True)
|
|
expression = fields.String(required=True)
|
|
description = fields.String(allow_none=True)
|
|
d3format = fields.String(allow_none=True)
|
|
extra = fields.String(allow_none=True)
|
|
warning_text = fields.String(allow_none=True)
|
|
|
|
|
|
class ImportV1DatasetSchema(Schema):
|
|
table_name = fields.String(required=True)
|
|
main_dttm_col = fields.String(allow_none=True)
|
|
description = fields.String(allow_none=True)
|
|
default_endpoint = fields.String(allow_none=True)
|
|
offset = fields.Integer()
|
|
cache_timeout = fields.Integer(allow_none=True)
|
|
schema = fields.String(allow_none=True)
|
|
sql = fields.String(allow_none=True)
|
|
params = fields.String(allow_none=True)
|
|
template_params = fields.String(allow_none=True)
|
|
filter_select_enabled = fields.Boolean()
|
|
fetch_values_predicate = fields.String(allow_none=True)
|
|
extra = fields.String(allow_none=True)
|
|
uuid = fields.UUID(required=True)
|
|
columns = fields.List(fields.Nested(ImportV1ColumnSchema))
|
|
metrics = fields.List(fields.Nested(ImportV1MetricSchema))
|
|
version = fields.String(required=True)
|
|
database_uuid = fields.UUID(required=True)
|