Skip to content

When trying to duplicate a dataset, the "Fatal error" appears #27712

Description

@dinoel93

Bug description

There is some role with access to all interactions with datasets and some user in this role.
This user can create new datasets, edit and delete existing datasets.
But when this user tries to duplicate any dataset, an error appears:
There was an issue duplicating the selected datasets: Fatal error
In logs of superset appears:
ERROR:flask_appbuilder.api:Entity namespace for "mapped class Database->dbs" has no property "table_name"
At the same time, a user with administrator rights can duplicate datasets

How to reproduce the bug

  • Create role with permissions shown in screenshots below
  • Create user in this role an permissions to some database
  • Try to duplicate some dataset by this user

Screenshots/recordings

Снимок экрана от 2024-03-27 16-31-32
Снимок экрана от 2024-03-27 16-28-45

Superset version

3.1.1

Python version

3.10

Node version

16

Browser

Chrome

Additional context

Full error from logs:
Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: 2024-03-27 15:34:24,136:ERROR:flask_appbuilder.api:Entity namespace for "mapped class Database->dbs" has no property "table_name" Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: Traceback (most recent call last): Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/sql/base.py", line 1694, in _entity_namespace_key Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: return getattr(ns, key) Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: AttributeError: type object 'Database' has no attribute 'table_name'. Did you mean: 'database_name'? Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: The above exception was the direct cause of the following exception: Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: Traceback (most recent call last): Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/flask_appbuilder/api/__init__.py", line 110, in wraps Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: return f(self, *args, **kwargs) Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/superset/views/base_api.py", line 127, in wraps Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: raise ex Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/superset/views/base_api.py", line 121, in wraps Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: duration, response = time_function(f, self, *args, **kwargs) Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/superset/utils/core.py", line 1463, in time_function Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: response = func(*args, **kwargs) Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/superset/utils/log.py", line 255, in wrapper Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: value = f(*args, **kwargs) Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/superset/views/base_api.py", line 93, in wraps Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: return f(self, *args, **kwargs) Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/superset/datasets/api.py", line 618, in duplicate Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: new_model = DuplicateDatasetCommand(item).run() Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/superset/commands/dataset/duplicate.py", line 51, in run Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: self.validate() Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/superset/commands/dataset/duplicate.py", line 126, in validate Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: if DatasetDAO.find_one_or_none(table_name=duplicate_name): Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/superset/daos/base.py", line 128, in find_one_or_none Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: return query.filter_by(**filter_by).one_or_none() Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/query.py", line 1806, in filter_by Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: clauses = [ Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/query.py", line 1807, in <listcomp> Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: _entity_namespace_key(from_entity, key) == value Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/sql/base.py", line 1696, in _entity_namespace_key Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: util.raise_( Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/util/compat.py", line 211, in raise_ Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: raise exception Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: sqlalchemy.exc.InvalidRequestError: Entity namespace for "mapped class Database->dbs" has no property "table_name" Mar 27 15:34:24 superset.virt.qb.loc superset[1387334]: 2024-03-27 15:34:24,141:INFO:werkzeug:127.0.0.1 - - [27/Mar/2024 15:34:24] "POST /api/v1/dataset/duplicate HTTP/1.0" 500 -

Checklist

  • I have searched Superset docs and Slack and didn't find a solution to my problem.
  • I have searched the GitHub issue tracker and didn't find a similar bug report.
  • I have checked Superset's logs for errors and if I found a relevant Python stacktrace, I included it here as text in the "additional context" section.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions