This is an automated email from the ASF dual-hosted git repository. suddjian pushed a commit to branch get-dashboard-by-slug in repository https://gitbox.apache.org/repos/asf/superset.git
commit 8ab7a38436a0dc32aa467041a7466cf64a262819 Author: David Aaron Suddjian <[email protected]> AuthorDate: Thu Feb 25 08:19:56 2021 -0800 refactor out id_or_slug filter logic --- superset/models/dashboard.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/superset/models/dashboard.py b/superset/models/dashboard.py index f827cd4..76b30ad 100644 --- a/superset/models/dashboard.py +++ b/superset/models/dashboard.py @@ -42,6 +42,7 @@ from sqlalchemy.orm import relationship, sessionmaker, subqueryload from sqlalchemy.orm.mapper import Mapper from sqlalchemy.orm.session import object_session from sqlalchemy.sql import join, select +from sqlalchemy.sql.elements import BinaryExpression from superset import app, ConnectorRegistry, db, is_feature_enabled, security_manager from superset.connectors.base.models import BaseDatasource @@ -359,14 +360,16 @@ class Dashboard( # pylint: disable=too-many-instance-attributes ) @classmethod - def get(cls, id_or_slug: str) -> Dashboard: - session = db.session() - qry = session.query(Dashboard) + def id_or_slug_filter(cls, id_or_slug: str) -> BinaryExpression: if id_or_slug.isdigit(): - qry = qry.filter_by(id=int(id_or_slug)) + return Dashboard.id == int(id_or_slug) else: - qry = qry.filter_by(slug=id_or_slug) + return Dashboard.slug == id_or_slug + @classmethod + def get(cls, id_or_slug: str) -> Dashboard: + session = db.session() + qry = session.query(Dashboard).filter(Dashboard.id_or_slug_filter(id_or_slug)) return qry.one_or_none()
