diff --git a/Dockerfile.devfinal b/Dockerfile.devfinal
new file mode 100644
index 0000000000000..520719e0be9e7
--- /dev/null
+++ b/Dockerfile.devfinal
@@ -0,0 +1,125 @@
+######################################################################
+# Node stage to deal with static asset construction
+######################################################################
+ARG PY_VER=3.9-slim-bookworm
+
+# if BUILDPLATFORM is null, set it to 'amd64' (or leave as is otherwise).
+ARG BUILDPLATFORM=${BUILDPLATFORM:-amd64}
+FROM --platform=${BUILDPLATFORM} node:16-bookworm-slim AS superset-node
+
+ARG NPM_BUILD_CMD="build"
+
+RUN apt-get update -qq \
+ && apt-get install -yqq --no-install-recommends \
+ build-essential \
+ python3
+
+ENV BUILD_CMD=${NPM_BUILD_CMD} \
+ PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
+# NPM ci first, as to NOT invalidate previous steps except for when package.json changes
+WORKDIR /app/superset-frontend
+
+RUN --mount=type=bind,target=/frontend-mem-nag.sh,src=./docker/frontend-mem-nag.sh \
+ /frontend-mem-nag.sh
+
+RUN --mount=type=bind,target=./package.json,src=./superset-frontend/package.json \
+ --mount=type=bind,target=./package-lock.json,src=./superset-frontend/package-lock.json \
+ npm ci
+
+COPY ./superset-frontend ./
+# This seems to be the most expensive step
+RUN npm run ${BUILD_CMD}
+
+######################################################################
+# Final lean image...
+######################################################################
+FROM python:${PY_VER} AS lean
+
+WORKDIR /app
+ENV LANG=C.UTF-8 \
+ LC_ALL=C.UTF-8 \
+ SUPERSET_ENV=production \
+ FLASK_APP="superset.app:create_app()" \
+ PYTHONPATH="/app/pythonpath" \
+ SUPERSET_HOME="/app/superset_home" \
+ SUPERSET_PORT=8088
+
+RUN mkdir -p ${PYTHONPATH} superset/static requirements superset-frontend apache_superset.egg-info requirements \
+ && useradd --user-group -d ${SUPERSET_HOME} -m --no-log-init --shell /bin/bash superset \
+ && apt-get update -qq && apt-get install -yqq --no-install-recommends \
+ build-essential \
+ curl \
+ default-libmysqlclient-dev \
+ libsasl2-dev \
+ libsasl2-modules-gssapi-mit \
+ libpq-dev \
+ libecpg-dev \
+ libldap2-dev \
+ && touch superset/static/version_info.json \
+ && chown -R superset:superset ./* \
+ && rm -rf /var/lib/apt/lists/*
+
+COPY --chown=superset:superset setup.py MANIFEST.in README.md ./
+# setup.py uses the version information in package.json
+COPY --chown=superset:superset superset-frontend/package.json superset-frontend/
+COPY --chown=superset:superset requirements/base.txt requirements/
+RUN --mount=type=cache,target=/root/.cache/pip \
+ pip install --upgrade setuptools pip && \
+ pip install -r requirements/base.txt
+
+COPY --chown=superset:superset --from=superset-node /app/superset/static/assets superset/static/assets
+## Lastly, let's install superset itself
+COPY --chown=superset:superset superset superset
+RUN --mount=type=cache,target=/root/.cache/pip \
+ pip install -e . \
+ && flask fab babel-compile --target superset/translations \
+ && chown -R superset:superset superset/translations
+
+COPY --chmod=755 ./docker/run-server.sh /usr/bin/
+USER superset
+
+HEALTHCHECK CMD curl -f "http://localhost:${SUPERSET_PORT}/health"
+
+EXPOSE ${SUPERSET_PORT}
+
+CMD ["/usr/bin/run-server.sh"]
+
+######################################################################
+# Dev image...
+######################################################################
+FROM lean AS dev
+ARG GECKODRIVER_VERSION=v0.33.0 \
+ FIREFOX_VERSION=117.0.1
+
+USER root
+
+RUN apt-get update -qq \
+ && apt-get install -yqq --no-install-recommends \
+ libnss3 \
+ libdbus-glib-1-2 \
+ libgtk-3-0 \
+ libx11-xcb1 \
+ libasound2 \
+ libxtst6 \
+ wget \
+ # Install GeckoDriver WebDriver
+ && wget -q https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O - | tar xfz - -C /usr/local/bin \
+ # Install Firefox
+ && wget -q https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 -O - | tar xfj - -C /opt \
+ && ln -s /opt/firefox/firefox /usr/local/bin/firefox \
+ && apt-get autoremove -yqq --purge wget && rm -rf /var/[log,tmp]/* /tmp/* /var/lib/apt/lists/*
+# Cache everything for dev purposes...
+
+COPY --chown=superset:superset requirements/development.txt requirements/
+RUN --mount=type=cache,target=/root/.cache/pip \
+ pip install -r requirements/development.txt
+
+USER superset
+######################################################################
+# CI image...
+######################################################################
+FROM dev AS devfinal
+
+COPY --chown=superset:superset --chmod=755 ./docker/*.sh /app/docker/
+
+CMD ["/app/docker/docker-ci.sh"]
diff --git a/Dockerfile.zain b/Dockerfile.zain
new file mode 100644
index 0000000000000..5dd3ab29a715c
--- /dev/null
+++ b/Dockerfile.zain
@@ -0,0 +1,137 @@
+############ Zain Note ############
+# ARG PY_VER=3.9-slim-bookworm ## Old version upgraded to ARG PY_VER=3.11-slim-bookworm
+# node:16-bookworm-slim ## Old version upgraded to node:21-bookworm-slim
+# ARG GECKODRIVER_VERSION=v0.29.0 ## you should be noted that GECKODRIVER should be compatible with FIREFOX_VERSION or report delivery will not work
+# FIREFOX_VERSION=117.0.1
+############ Zain Note End ############
+
+ ######################################################################
+# Node stage to deal with static asset construction
+######################################################################
+ARG PY_VER=3.11-slim-bookworm
+# if BUILDPLATFORM is null, set it to 'amd64' (or leave as is otherwise).
+ARG BUILDPLATFORM=${BUILDPLATFORM:-amd64}
+FROM --platform=${BUILDPLATFORM} node:21-bullseye-slim AS superset-node
+
+ARG NPM_BUILD_CMD="build"
+
+RUN apt-get update -qq \
+ && apt-get install -yqq --no-install-recommends \
+ build-essential \
+ python3
+
+ENV BUILD_CMD=${NPM_BUILD_CMD} \
+ PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
+# NPM ci first, as to NOT invalidate previous steps except for when package.json changes
+WORKDIR /app/superset-frontend
+
+RUN --mount=type=bind,target=/frontend-mem-nag.sh,src=./docker/frontend-mem-nag.sh \
+ /frontend-mem-nag.sh
+
+RUN --mount=type=bind,target=./package.json,src=./superset-frontend/package.json \
+ --mount=type=bind,target=./package-lock.json,src=./superset-frontend/package-lock.json \
+ npm ci
+
+COPY ./superset-frontend ./
+# This seems to be the most expensive step
+RUN npm run ${BUILD_CMD}
+
+######################################################################
+# Final lean image...
+######################################################################
+FROM python:${PY_VER} AS lean
+
+
+WORKDIR /app
+ENV LANG=C.UTF-8 \
+ LC_ALL=C.UTF-8 \
+ SUPERSET_ENV=production \
+ FLASK_APP="superset.app:create_app()" \
+ PYTHONPATH="/app/pythonpath" \
+ SUPERSET_HOME="/app/superset_home" \
+ SUPERSET_PORT=8088
+
+RUN mkdir -p ${PYTHONPATH} superset/static requirements superset-frontend apache_superset.egg-info requirements \
+ && useradd --user-group -d ${SUPERSET_HOME} -m --no-log-init --shell /bin/bash superset \
+ && apt-get update -qq && apt-get install -yqq --no-install-recommends \
+ build-essential \
+ curl \
+ default-libmysqlclient-dev \
+ libsasl2-dev \
+ libsasl2-modules-gssapi-mit \
+ libpq-dev \
+ libecpg-dev \
+ libldap2-dev \
+ && touch superset/static/version_info.json \
+ && chown -R superset:superset ./* \
+ && rm -rf /var/lib/apt/lists/*
+
+
+COPY --chown=superset:superset setup.py MANIFEST.in README.md ./
+# setup.py uses the version information in package.json
+COPY --chown=superset:superset superset-frontend/package.json superset-frontend/
+COPY --chown=superset:superset requirements/base.txt requirements/
+RUN --mount=type=cache,target=/root/.cache/pip \
+ pip install --upgrade pip && \
+ pip install uv && \
+ pip install -r requirements/base.txt \
+ uv pip install setuptools Pillow psycopg2-binary gevent ## this is by zain to fix issue not working
+
+
+COPY --chown=superset:superset --from=superset-node /app/superset/static/assets superset/static/assets
+## Lastly, let's install superset itself
+COPY --chown=superset:superset superset superset
+RUN --mount=type=cache,target=/root/.cache/pip \
+ pip install -e . \
+ && flask fab babel-compile --target superset/translations \
+ && chown -R superset:superset superset/translations
+
+COPY --chmod=755 ./docker/run-server.sh /usr/bin/
+USER superset
+
+HEALTHCHECK CMD curl -f "http://localhost:${SUPERSET_PORT}/health"
+
+EXPOSE ${SUPERSET_PORT}
+
+CMD ["/usr/bin/run-server.sh"]
+
+######################################################################
+# Dev image...
+######################################################################
+FROM lean AS dev
+ARG GECKODRIVER_VERSION=v0.33.0 \
+ FIREFOX_VERSION=117.0.1
+
+USER root
+
+RUN apt-get update -qq \
+ && apt-get install -yqq --no-install-recommends \
+ libnss3 \
+ libdbus-glib-1-2 \
+ libgtk-3-0 \
+ libx11-xcb1 \
+ libasound2 \
+ libxtst6 \
+ wget \
+ pkg-config \
+ # Install GeckoDriver WebDriver
+ && wget -q https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O - | tar xfz - -C /usr/local/bin \
+ # Install Firefox
+ && wget -q https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 -O - | tar xfj - -C /opt \
+ && ln -s /opt/firefox/firefox /usr/local/bin/firefox \
+ && apt-get autoremove -yqq --purge wget && rm -rf /var/[log,tmp]/* /tmp/* /var/lib/apt/lists/*
+# Cache everything for dev purposes...
+
+COPY --chown=superset:superset requirements/development.txt requirements/
+RUN --mount=type=cache,target=/root/.cache/pip \
+ uv pip install -r requirements/development.txt
+
+USER superset
+######################################################################
+# CI image...
+######################################################################
+FROM lean AS ci
+
+COPY --chown=superset:superset --chmod=755 ./docker/*.sh /app/docker/
+
+CMD ["/app/docker/docker-ci.sh"]
diff --git a/superset-frontend/src/features/home/RightMenu.tsx b/superset-frontend/src/features/home/RightMenu.tsx
index ff4a6a8095469..7b9b5da94b6b5 100644
--- a/superset-frontend/src/features/home/RightMenu.tsx
+++ b/superset-frontend/src/features/home/RightMenu.tsx
@@ -489,12 +489,12 @@ const RightMenu = ({
{navbarRight.show_watermark && (
- {t('Powered by Apache Superset')}
+ {t('Zain Analytics')}
)}
{navbarRight.version_string && (
- {t('Version')}: {navbarRight.version_string}
+ {t('Business Intelligence')}: {navbarRight.version_string}
)}
{navbarRight.version_sha && (
diff --git a/superset-frontend/src/pages/ChartCreation/index.tsx b/superset-frontend/src/pages/ChartCreation/index.tsx
index f621519102e48..7e4b82f0a85b2 100644
--- a/superset-frontend/src/pages/ChartCreation/index.tsx
+++ b/superset-frontend/src/pages/ChartCreation/index.tsx
@@ -289,7 +289,7 @@ export class ChartCreation extends React.PureComponent<
render() {
const isButtonDisabled = this.isBtnDisabled();
- const VIEW_INSTRUCTIONS_TEXT = t('view instructions');
+ const VIEW_INSTRUCTIONS_TEXT = t('view web');
const datasetHelpText = this.state.canCreateDataset ? (
@@ -297,7 +297,7 @@ export class ChartCreation extends React.PureComponent<
{t('or')}{' '}
diff --git a/superset/config.py b/superset/config.py
index 8e0db72b28dce..cf0224936224f 100644
--- a/superset/config.py
+++ b/superset/config.py
@@ -1327,7 +1327,7 @@ def EMAIL_HEADER_MUTATOR( # pylint: disable=invalid-name,unused-argument
EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] "
# The text for call-to-action link in Alerts & Reports emails
-EMAIL_REPORTS_CTA = "Explore in Superset"
+EMAIL_REPORTS_CTA = "Explore in ZReport"
# Slack API token for the superset reports, either string or callable
SLACK_API_TOKEN: Callable[[], str] | str | None = None
diff --git a/superset/reports/notifications/slack.py b/superset/reports/notifications/slack.py
index a7072ca20c4d5..1ce3296f0887b 100644
--- a/superset/reports/notifications/slack.py
+++ b/superset/reports/notifications/slack.py
@@ -77,7 +77,7 @@ def _message_template(self, table: str = "") -> str:
%(description)s
-<%(url)s|Explore in Superset>
+<%(url)s|Explore in ZReport>
%(table)s
""",
diff --git a/superset/templates/slack/alert.txt b/superset/templates/slack/alert.txt
index df943f5ef090e..c136e2088549f 100644
--- a/superset/templates/slack/alert.txt
+++ b/superset/templates/slack/alert.txt
@@ -21,4 +21,4 @@
*Result*: {{observation_value}}
*Reason*: {{validation_error_message}}
<{{alert_url}}|View Alert Details>
-<{{url}}|*Explore in Superset*>
+<{{url}}|*View Dashboard Details *>
diff --git a/superset/translations/de/LC_MESSAGES/messages.json b/superset/translations/de/LC_MESSAGES/messages.json
index a79b0a23c1f08..9406074df8b3b 100644
--- a/superset/translations/de/LC_MESSAGES/messages.json
+++ b/superset/translations/de/LC_MESSAGES/messages.json
@@ -102,7 +102,7 @@
"), and they become available in your SQL (example:": [
"), und sie werden in Ihrem SQL verfügbar (Beispiel:"
],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
"*%(name)s*\n\n%(description)s\n\n<%(url)s|In Superset erkunden>\n%(table)s\n"
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [
diff --git a/superset/translations/de/LC_MESSAGES/messages.po b/superset/translations/de/LC_MESSAGES/messages.po
index cc6f5ba47cd9e..74bd0fa2f5960 100644
--- a/superset/translations/de/LC_MESSAGES/messages.po
+++ b/superset/translations/de/LC_MESSAGES/messages.po
@@ -2868,7 +2868,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/en/LC_MESSAGES/messages.json b/superset/translations/en/LC_MESSAGES/messages.json
index e74da2f18e124..17f91e327a2df 100644
--- a/superset/translations/en/LC_MESSAGES/messages.json
+++ b/superset/translations/en/LC_MESSAGES/messages.json
@@ -69,7 +69,7 @@
"(deleted or invalid type)": [""],
"(no description, click to see stack trace)": [""],
"), and they become available in your SQL (example:": [""],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore The ZReport >\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/en/LC_MESSAGES/messages.po b/superset/translations/en/LC_MESSAGES/messages.po
index ab7880909b7c9..a1804563e2aaf 100644
--- a/superset/translations/en/LC_MESSAGES/messages.po
+++ b/superset/translations/en/LC_MESSAGES/messages.po
@@ -2651,7 +2651,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/es/LC_MESSAGES/messages.json b/superset/translations/es/LC_MESSAGES/messages.json
index bc880e1e59683..403bc01179274 100644
--- a/superset/translations/es/LC_MESSAGES/messages.json
+++ b/superset/translations/es/LC_MESSAGES/messages.json
@@ -60,7 +60,7 @@
"(deleted or invalid type)": [""],
"(no description, click to see stack trace)": [""],
"), and they become available in your SQL (example:": [""],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/es/LC_MESSAGES/messages.po b/superset/translations/es/LC_MESSAGES/messages.po
index f22ba5bf73958..dcf437d2ed4fd 100644
--- a/superset/translations/es/LC_MESSAGES/messages.po
+++ b/superset/translations/es/LC_MESSAGES/messages.po
@@ -2826,7 +2826,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/fr/LC_MESSAGES/messages.json b/superset/translations/fr/LC_MESSAGES/messages.json
index c45a4f88ccbac..5281875867e6e 100644
--- a/superset/translations/fr/LC_MESSAGES/messages.json
+++ b/superset/translations/fr/LC_MESSAGES/messages.json
@@ -77,8 +77,8 @@
"), and they become available in your SQL (example:": [
"), et ils deviennent disponibles dans votre SQL (exemple :"
],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
- "*%(name)s*%(description)s<%(url)s|Explore in Superset>%(table)s"
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
+ "*%(name)s*%(description)s<%(url)s|Explore in ZReport>%(table)s"
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [
"*%(name)s*%(description)sErreur : %(text)s"
diff --git a/superset/translations/fr/LC_MESSAGES/messages.po b/superset/translations/fr/LC_MESSAGES/messages.po
index 7296f19d9f6bc..def5b07259ade 100644
--- a/superset/translations/fr/LC_MESSAGES/messages.po
+++ b/superset/translations/fr/LC_MESSAGES/messages.po
@@ -2917,10 +2917,10 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
-msgstr "*%(name)s*%(description)s<%(url)s|Explore in Superset>%(table)s"
+msgstr "*%(name)s*%(description)s<%(url)s|Explore in ZReport>%(table)s"
#: superset/reports/notifications/slack.py:93
#, python-format
diff --git a/superset/translations/it/LC_MESSAGES/messages.json b/superset/translations/it/LC_MESSAGES/messages.json
index 7ec2e7ded4651..0e236a3016167 100644
--- a/superset/translations/it/LC_MESSAGES/messages.json
+++ b/superset/translations/it/LC_MESSAGES/messages.json
@@ -62,7 +62,7 @@
"(deleted or invalid type)": [""],
"(no description, click to see stack trace)": [""],
"), and they become available in your SQL (example:": [""],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/it/LC_MESSAGES/messages.po b/superset/translations/it/LC_MESSAGES/messages.po
index 21d93e8d36f65..2c349697e2427 100644
--- a/superset/translations/it/LC_MESSAGES/messages.po
+++ b/superset/translations/it/LC_MESSAGES/messages.po
@@ -2755,7 +2755,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/ja/LC_MESSAGES/messages.json b/superset/translations/ja/LC_MESSAGES/messages.json
index 5d404dc515fc8..52871c4139f62 100644
--- a/superset/translations/ja/LC_MESSAGES/messages.json
+++ b/superset/translations/ja/LC_MESSAGES/messages.json
@@ -61,7 +61,7 @@
"(deleted or invalid type)": [""],
"(no description, click to see stack trace)": [""],
"), and they become available in your SQL (example:": [""],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/ja/LC_MESSAGES/messages.po b/superset/translations/ja/LC_MESSAGES/messages.po
index 59be8b1f49688..d8c7927b9c7e0 100644
--- a/superset/translations/ja/LC_MESSAGES/messages.po
+++ b/superset/translations/ja/LC_MESSAGES/messages.po
@@ -2738,7 +2738,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/ko/LC_MESSAGES/messages.json b/superset/translations/ko/LC_MESSAGES/messages.json
index a4c712693cca4..f57e368f8ad2d 100644
--- a/superset/translations/ko/LC_MESSAGES/messages.json
+++ b/superset/translations/ko/LC_MESSAGES/messages.json
@@ -64,7 +64,7 @@
"(deleted or invalid type)": [""],
"(no description, click to see stack trace)": [""],
"), and they become available in your SQL (example:": [""],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/ko/LC_MESSAGES/messages.po b/superset/translations/ko/LC_MESSAGES/messages.po
index 2c248966fd18f..38d8a0ec335c7 100644
--- a/superset/translations/ko/LC_MESSAGES/messages.po
+++ b/superset/translations/ko/LC_MESSAGES/messages.po
@@ -2712,7 +2712,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/messages.pot b/superset/translations/messages.pot
index 0fa03ca6fc686..d71a31a25cc17 100644
--- a/superset/translations/messages.pot
+++ b/superset/translations/messages.pot
@@ -2657,7 +2657,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/nl/LC_MESSAGES/messages.json b/superset/translations/nl/LC_MESSAGES/messages.json
index 0f5ff0dadd742..8f013f11e446f 100644
--- a/superset/translations/nl/LC_MESSAGES/messages.json
+++ b/superset/translations/nl/LC_MESSAGES/messages.json
@@ -68,7 +68,7 @@
"(deleted or invalid type)": [""],
"(no description, click to see stack trace)": [""],
"), and they become available in your SQL (example:": [""],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/nl/LC_MESSAGES/messages.po b/superset/translations/nl/LC_MESSAGES/messages.po
index 81b3cb88f895f..6cf09a90552cc 100644
--- a/superset/translations/nl/LC_MESSAGES/messages.po
+++ b/superset/translations/nl/LC_MESSAGES/messages.po
@@ -2742,7 +2742,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/pt/LC_MESSAGES/message.json b/superset/translations/pt/LC_MESSAGES/message.json
index 12284400e1b77..d855a1b50789b 100644
--- a/superset/translations/pt/LC_MESSAGES/message.json
+++ b/superset/translations/pt/LC_MESSAGES/message.json
@@ -590,19 +590,19 @@
"An error occurred while pruning logs ": [
"Ocorreu um erro ao renderizar a visualização: %s"
],
- "\n Explore in Superset\n
\n ": [
+ "\n Explore in ZReport\n
\n ": [
""
],
"%(prefix)s %(title)s": [""],
- "\n *%(name)s*\n\n <%(url)s|Explore in Superset>\n ": [
+ "\n *%(name)s*\n\n <%(url)s|Explore in ZReport>\n ": [
""
],
- "\n *%(name)s*\n\n <%(url)s|Explore in Superset>\n ": [
+ "\n *%(name)s*\n\n <%(url)s|Explore in ZReport>\n ": [
""
],
- "Explore in Superset": [""],
+ "Explore in ZReport": [""],
"%(name)s.csv": [""],
- "\n *%(slice_name)s*\n\n <%(slice_url_user_friendly)s|Explore in Superset>\n ": [
+ "\n *%(slice_name)s*\n\n <%(slice_url_user_friendly)s|Explore in ZReport>\n ": [
""
],
"[Alert] %(label)s": ["Etiquetas de marcadores"],
diff --git a/superset/translations/pt/LC_MESSAGES/messages.json b/superset/translations/pt/LC_MESSAGES/messages.json
index 8b50f8ddae5a9..922e48b8f8624 100644
--- a/superset/translations/pt/LC_MESSAGES/messages.json
+++ b/superset/translations/pt/LC_MESSAGES/messages.json
@@ -62,7 +62,7 @@
"(deleted or invalid type)": [""],
"(no description, click to see stack trace)": [""],
"), and they become available in your SQL (example:": [""],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/pt/LC_MESSAGES/messages.po b/superset/translations/pt/LC_MESSAGES/messages.po
index 6a266c3c4ddb3..b12de73f4e455 100644
--- a/superset/translations/pt/LC_MESSAGES/messages.po
+++ b/superset/translations/pt/LC_MESSAGES/messages.po
@@ -2779,7 +2779,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/pt_BR/LC_MESSAGES/messages.po b/superset/translations/pt_BR/LC_MESSAGES/messages.po
index 7e77e7e987335..5b4286fc48acd 100644
--- a/superset/translations/pt_BR/LC_MESSAGES/messages.po
+++ b/superset/translations/pt_BR/LC_MESSAGES/messages.po
@@ -2839,7 +2839,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/ru/LC_MESSAGES/messages.json b/superset/translations/ru/LC_MESSAGES/messages.json
index 9653aec5ba49c..3e900e564a256 100644
--- a/superset/translations/ru/LC_MESSAGES/messages.json
+++ b/superset/translations/ru/LC_MESSAGES/messages.json
@@ -89,7 +89,7 @@
"), and they become available in your SQL (example:": [
"), и они станут доступны в ваших SQL запросах (пример:"
],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
"*%(name)s*\n\n%(description)s\n\n<%(url)s|Исследовать в Суперсете>\n\n%(table)s\n"
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [
diff --git a/superset/translations/ru/LC_MESSAGES/messages.po b/superset/translations/ru/LC_MESSAGES/messages.po
index 1f94678cbd173..31356c1b7ab96 100644
--- a/superset/translations/ru/LC_MESSAGES/messages.po
+++ b/superset/translations/ru/LC_MESSAGES/messages.po
@@ -2787,7 +2787,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/sk/LC_MESSAGES/messages.json b/superset/translations/sk/LC_MESSAGES/messages.json
index b09297f6c6bd6..8df7b7e4b5b9d 100644
--- a/superset/translations/sk/LC_MESSAGES/messages.json
+++ b/superset/translations/sk/LC_MESSAGES/messages.json
@@ -68,7 +68,7 @@
"(deleted or invalid type)": [""],
"(no description, click to see stack trace)": [""],
"), and they become available in your SQL (example:": [""],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/sk/LC_MESSAGES/messages.po b/superset/translations/sk/LC_MESSAGES/messages.po
index 19c570c04d1f9..f3b8c38a8b585 100644
--- a/superset/translations/sk/LC_MESSAGES/messages.po
+++ b/superset/translations/sk/LC_MESSAGES/messages.po
@@ -2663,7 +2663,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/sl/LC_MESSAGES/messages.json b/superset/translations/sl/LC_MESSAGES/messages.json
index fe7f29f5c7f73..d58dc29ced4a6 100644
--- a/superset/translations/sl/LC_MESSAGES/messages.json
+++ b/superset/translations/sl/LC_MESSAGES/messages.json
@@ -103,7 +103,7 @@
"), and they become available in your SQL (example:": [
"), s čimer bodo na razpolago v sklopu SQL-poizvedbe (primer:"
],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
"*%(name)s*\n\n%(description)s\n\n<%(url)s|Razišči v Supersetu>\n\n%(table)s\n"
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [
diff --git a/superset/translations/sl/LC_MESSAGES/messages.po b/superset/translations/sl/LC_MESSAGES/messages.po
index b648a7f8f84a8..d84bdd0adf7ad 100644
--- a/superset/translations/sl/LC_MESSAGES/messages.po
+++ b/superset/translations/sl/LC_MESSAGES/messages.po
@@ -2815,7 +2815,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/tr/LC_MESSAGES/messages.json b/superset/translations/tr/LC_MESSAGES/messages.json
index fbd632709d9a2..be1786dabbf58 100644
--- a/superset/translations/tr/LC_MESSAGES/messages.json
+++ b/superset/translations/tr/LC_MESSAGES/messages.json
@@ -689,7 +689,7 @@
"EMAIL_REPORTS_CTA": [""],
"%(name)s.csv": [""],
"%(prefix)s %(title)s": [""],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZainDash>\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/tr/LC_MESSAGES/messages.po b/superset/translations/tr/LC_MESSAGES/messages.po
index d0fadd852dca2..7bf8c29a1dbd2 100644
--- a/superset/translations/tr/LC_MESSAGES/messages.po
+++ b/superset/translations/tr/LC_MESSAGES/messages.po
@@ -2647,7 +2647,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZainDash>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/uk/LC_MESSAGES/messages.json b/superset/translations/uk/LC_MESSAGES/messages.json
index 4f9392bf0384e..fe6b1e2169ce8 100644
--- a/superset/translations/uk/LC_MESSAGES/messages.json
+++ b/superset/translations/uk/LC_MESSAGES/messages.json
@@ -100,7 +100,7 @@
"), and they become available in your SQL (example:": [
"), і вони стають доступними у вашому SQL (приклад:"
],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZReport>\n\n%(table)s\n": [
"*%(name)s*\n\n%(description)s\n\n<%(URL)s | Ознайомтеся з Superset>\n\n%(table)s\n"
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [
diff --git a/superset/translations/uk/LC_MESSAGES/messages.po b/superset/translations/uk/LC_MESSAGES/messages.po
index fc78d79a68cf1..fdf30df05e4c0 100644
--- a/superset/translations/uk/LC_MESSAGES/messages.po
+++ b/superset/translations/uk/LC_MESSAGES/messages.po
@@ -2825,7 +2825,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/superset/translations/zh/LC_MESSAGES/messages.json b/superset/translations/zh/LC_MESSAGES/messages.json
index 896503f2bdda6..923918063f0d0 100644
--- a/superset/translations/zh/LC_MESSAGES/messages.json
+++ b/superset/translations/zh/LC_MESSAGES/messages.json
@@ -95,7 +95,7 @@
"), and they become available in your SQL (example:": [
"), 他们在你的SQL中会变成有效数据 (比如:"
],
- "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in Superset>\n\n%(table)s\n": [
+ "*%(name)s*\n\n%(description)s\n\n<%(url)s|Explore in ZainDash>\n\n%(table)s\n": [
""
],
"*%(name)s*\n\n%(description)s\n\nError: %(text)s\n": [""],
diff --git a/superset/translations/zh/LC_MESSAGES/messages.po b/superset/translations/zh/LC_MESSAGES/messages.po
index db982d7b0266b..92459f28e8a1f 100644
--- a/superset/translations/zh/LC_MESSAGES/messages.po
+++ b/superset/translations/zh/LC_MESSAGES/messages.po
@@ -2720,7 +2720,7 @@ msgid ""
"\n"
"%(description)s\n"
"\n"
-"<%(url)s|Explore in Superset>\n"
+"<%(url)s|Explore in ZReport>\n"
"\n"
"%(table)s\n"
msgstr ""
diff --git a/tests/integration_tests/reports/commands_tests.py b/tests/integration_tests/reports/commands_tests.py
index 79102654d5126..59c48a3056a7a 100644
--- a/tests/integration_tests/reports/commands_tests.py
+++ b/tests/integration_tests/reports/commands_tests.py
@@ -661,7 +661,7 @@ def test_email_chart_report_schedule(
assert (
'Explore in Superset' in email_mock.call_args[0][2]
+ '%7D&force=false">Explore in ZReport' in email_mock.call_args[0][2]
)
# Assert the email smtp address
assert email_mock.call_args[0][0] == notification_targets[0]
@@ -716,7 +716,7 @@ def _screenshot_side_effect(user: User) -> Optional[bytes]:
assert (
'Explore in Superset' in email_mock.call_args[0][2]
+ '%7D&force=false">Explore in ZReport' in email_mock.call_args[0][2]
)
# Assert the email smtp address
assert email_mock.call_args[0][0] == notification_targets[0]
@@ -761,7 +761,7 @@ def test_email_chart_report_schedule_force_screenshot(
assert (
'Explore in Superset' in email_mock.call_args[0][2]
+ '%7D&force=true">Explore in ZReport' in email_mock.call_args[0][2]
)
# Assert the email smtp address
assert email_mock.call_args[0][0] == notification_targets[0]
@@ -798,7 +798,7 @@ def test_email_chart_alert_schedule(
assert (
'Explore in Superset' in email_mock.call_args[0][2]
+ '%7D&force=true">Explore in ZReport' in email_mock.call_args[0][2]
)
# Assert the email smtp address
assert email_mock.call_args[0][0] == notification_targets[0]
@@ -870,7 +870,7 @@ def test_email_chart_report_schedule_with_csv(
assert (
'Explore in Superset' in email_mock.call_args[0][2]
+ 'force=false">Explore in ZReport' in email_mock.call_args[0][2]
)
# Assert the email smtp address
assert email_mock.call_args[0][0] == notification_targets[0]
@@ -1296,7 +1296,7 @@ def test_slack_chart_report_schedule_with_text(
| 1 | c21 | c22 | c23 |"""
assert table_markdown in post_message_mock.call_args[1]["text"]
assert (
- f""
+ f""
in post_message_mock.call_args[1]["text"]
)
diff --git a/tests/unit_tests/notifications/slack_tests.py b/tests/unit_tests/notifications/slack_tests.py
index e423527df8201..8ce12c5f3529b 100644
--- a/tests/unit_tests/notifications/slack_tests.py
+++ b/tests/unit_tests/notifications/slack_tests.py
@@ -74,7 +74,7 @@ def test_send_slack(
This is a test alert
-
+
```
| | A | B | C |