deploying docs: chore: 2nd try - simplify python dependencies (#27505) (apache/superset@56a6660c167eb64208b6923eddda616ae37cd3f7)
diff --git a/404.html b/404.html
index f7b53c7..233aa79 100644
--- a/404.html
+++ b/404.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/4cc2c078.31095ff1.js b/assets/js/4cc2c078.31095ff1.js
deleted file mode 100644
index 52bcb43..0000000
--- a/assets/js/4cc2c078.31095ff1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[9908],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>m});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,a=function(e,n){if(null==e)return{};var t,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},c=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},g=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(t),g=a,m=u["".concat(l,".").concat(g)]||u[g]||d[g]||o;return t?r.createElement(m,i(i({ref:n},c),{},{components:t})):r.createElement(m,i({ref:n},c))}));function m(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,i=new Array(o);i[0]=g;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var p=2;p<o;p++)i[p]=t[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,t)}g.displayName="MDXCreateElement"},53460:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=t(45072),a=(t(11504),t(95788));const o={title:"Running a Local Flask Backend",hide_title:!0,sidebar_position:5,version:1},i=void 0,s={unversionedId:"contributing/local-backend",id:"contributing/local-backend",title:"Running a Local Flask Backend",description:"Flask server",source:"@site/docs/contributing/local-backend.mdx",sourceDirName:"contributing",slug:"/contributing/local-backend",permalink:"/docs/contributing/local-backend",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/contributing/local-backend.mdx",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Running a Local Flask Backend",hide_title:!0,sidebar_position:5,version:1},sidebar:"tutorialSidebar",previous:{title:"Style Guide",permalink:"/docs/contributing/style-guide"},next:{title:"Pre-commit Hooks and Linting",permalink:"/docs/contributing/hooks-and-linting"}},l={},p=[{value:"Flask server",id:"flask-server",level:3},{value:"OS Dependencies",id:"os-dependencies",level:4},{value:"Dependencies",id:"dependencies",level:4},{value:"Logging to the browser console",id:"logging-to-the-browser-console",level:4},{value:"Frontend Assets",id:"frontend-assets",level:3}],c={toc:p},u="wrapper";function d(e){let{components:n,...t}=e;return(0,a.yg)(u,(0,r.c)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,a.yg)("h3",{id:"flask-server"},"Flask server"),(0,a.yg)("h4",{id:"os-dependencies"},"OS Dependencies"),(0,a.yg)("p",null,"Make sure your machine meets the ",(0,a.yg)("a",{parentName:"p",href:"/docs/installation/installing-superset-from-pypi#os-dependencies"},"OS dependencies")," before following these steps.\nYou also need to install MySQL or ",(0,a.yg)("a",{parentName:"p",href:"https://mariadb.com/downloads"},"MariaDB"),"."),(0,a.yg)("p",null,"Ensure that you are using Python version 3.9 or 3.10, then proceed with:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-bash"},"# Create a virtual environment and activate it (recommended)\npython3 -m venv venv # setup a python3 virtualenv\nsource venv/bin/activate\n\n# Install external dependencies\npip install -r requirements/testing.txt\n\n# Install Superset in editable (development) mode\npip install -e .\n\n# Initialize the database\n# Note: For generating a SECRET_KEY if you haven't done already, you can use the command:\n# echo \"SECRET_KEY='$(openssl rand -base64 42)'\" | tee -a superset_config.py\nsuperset db upgrade\n\n# Create an admin user in your metadata database (use `admin` as username to be able to load the examples)\nsuperset fab create-admin\n\n# Create default roles and permissions\nsuperset init\n\n# Load some data to play with.\n# Note: you MUST have previously created an admin user with the username `admin` for this command to work.\nsuperset load-examples\n\n# Start the Flask dev web server from inside your virtualenv.\n# Note that your page may not have CSS at this point.\nsuperset run -p 8088 --with-threads --reload --debugger --debug\n")),(0,a.yg)("p",null,"Or you can install via our Makefile"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-bash"},"# Create a virtual environment and activate it (recommended)\npython3 -m venv venv # setup a python3 virtualenv\nsource venv/bin/activate\n\n# install pip packages + pre-commit\nmake install\n\n# Install superset pip packages and setup env only\nmake superset\n\n# Setup pre-commit only\nmake pre-commit\n")),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"Note: the FLASK_APP env var should not need to be set, as it's currently controlled\nvia ",(0,a.yg)("inlineCode",{parentName:"strong"},".flaskenv"),", however if needed, it should be set to ",(0,a.yg)("inlineCode",{parentName:"strong"},"superset.app:create_app()"))),(0,a.yg)("p",null,"If you have made changes to the FAB-managed templates, which are not built the same way as the newer, React-powered front-end assets, you need to start the app without the ",(0,a.yg)("inlineCode",{parentName:"p"},"--with-threads")," argument like so:\n",(0,a.yg)("inlineCode",{parentName:"p"},"superset run -p 8088 --reload --debugger --debug")),(0,a.yg)("h4",{id:"dependencies"},"Dependencies"),(0,a.yg)("p",null,"If you add a new requirement or update an existing requirement (per the ",(0,a.yg)("inlineCode",{parentName:"p"},"install_requires")," section in ",(0,a.yg)("inlineCode",{parentName:"p"},"setup.py"),") you must recompile (freeze) the Python dependencies to ensure that for CI, testing, etc. the build is deterministic. This can be achieved via,"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-bash"},"$ python3 -m venv venv\n$ source venv/bin/activate\n$ python3 -m pip install -r requirements/integration.txt\n$ pip-compile-multi --no-upgrade\n")),(0,a.yg)("h4",{id:"logging-to-the-browser-console"},"Logging to the browser console"),(0,a.yg)("p",null,"This feature is only available on Python 3. When debugging your application, you can have the server logs sent directly to the browser console using the ",(0,a.yg)("a",{parentName:"p",href:"https://github.com/betodealmeida/consolelog"},"ConsoleLog")," package. You need to mutate the app, by adding the following to your ",(0,a.yg)("inlineCode",{parentName:"p"},"config.py")," or ",(0,a.yg)("inlineCode",{parentName:"p"},"superset_config.py"),":"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-python"},"from console_log import ConsoleLog\n\ndef FLASK_APP_MUTATOR(app):\n    app.wsgi_app = ConsoleLog(app.wsgi_app, app.logger)\n")),(0,a.yg)("p",null,"Then make sure you run your WSGI server using the right worker type:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-bash"},'SUPERSET_ENV=development gunicorn "superset.app:create_app()" -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" -b 127.0.0.1:8088 --reload\n')),(0,a.yg)("p",null,"You can log anything to the browser console, including objects:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-python"},"from superset import app\napp.logger.error('An exception occurred!')\napp.logger.info(form_data)\n")),(0,a.yg)("h3",{id:"frontend-assets"},"Frontend Assets"),(0,a.yg)("p",null,"See ",(0,a.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/blob/master/CONTRIBUTING.md#frontend"},"Building Frontend Assets Locally")))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/4cc2c078.cd0078c7.js b/assets/js/4cc2c078.cd0078c7.js
new file mode 100644
index 0000000..cd97834
--- /dev/null
+++ b/assets/js/4cc2c078.cd0078c7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[9908],{95788:(e,n,t)=>{t.d(n,{Iu:()=>c,yg:()=>m});var r=t(11504);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,r,a=function(e,n){if(null==e)return{};var t,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},c=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},g=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(t),g=a,m=u["".concat(l,".").concat(g)]||u[g]||d[g]||o;return t?r.createElement(m,i(i({ref:n},c),{},{components:t})):r.createElement(m,i({ref:n},c))}));function m(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,i=new Array(o);i[0]=g;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var p=2;p<o;p++)i[p]=t[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,t)}g.displayName="MDXCreateElement"},53460:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=t(45072),a=(t(11504),t(95788));const o={title:"Running a Local Flask Backend",hide_title:!0,sidebar_position:5,version:1},i=void 0,s={unversionedId:"contributing/local-backend",id:"contributing/local-backend",title:"Running a Local Flask Backend",description:"Flask server",source:"@site/docs/contributing/local-backend.mdx",sourceDirName:"contributing",slug:"/contributing/local-backend",permalink:"/docs/contributing/local-backend",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/contributing/local-backend.mdx",tags:[],version:"current",sidebarPosition:5,frontMatter:{title:"Running a Local Flask Backend",hide_title:!0,sidebar_position:5,version:1},sidebar:"tutorialSidebar",previous:{title:"Style Guide",permalink:"/docs/contributing/style-guide"},next:{title:"Pre-commit Hooks and Linting",permalink:"/docs/contributing/hooks-and-linting"}},l={},p=[{value:"Flask server",id:"flask-server",level:3},{value:"OS Dependencies",id:"os-dependencies",level:4},{value:"Dependencies",id:"dependencies",level:4},{value:"Logging to the browser console",id:"logging-to-the-browser-console",level:4},{value:"Frontend Assets",id:"frontend-assets",level:3}],c={toc:p},u="wrapper";function d(e){let{components:n,...t}=e;return(0,a.yg)(u,(0,r.c)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,a.yg)("h3",{id:"flask-server"},"Flask server"),(0,a.yg)("h4",{id:"os-dependencies"},"OS Dependencies"),(0,a.yg)("p",null,"Make sure your machine meets the ",(0,a.yg)("a",{parentName:"p",href:"/docs/installation/installing-superset-from-pypi#os-dependencies"},"OS dependencies")," before following these steps.\nYou also need to install MySQL or ",(0,a.yg)("a",{parentName:"p",href:"https://mariadb.com/downloads"},"MariaDB"),"."),(0,a.yg)("p",null,"Ensure that you are using Python version 3.9 or 3.10, then proceed with:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-bash"},"# Create a virtual environment and activate it (recommended)\npython3 -m venv venv # setup a python3 virtualenv\nsource venv/bin/activate\n\n# Install external dependencies\npip install -r requirements/development.txt\n\n# Install Superset in editable (development) mode\npip install -e .\n\n# Initialize the database\n# Note: For generating a SECRET_KEY if you haven't done already, you can use the command:\n# echo \"SECRET_KEY='$(openssl rand -base64 42)'\" | tee -a superset_config.py\nsuperset db upgrade\n\n# Create an admin user in your metadata database (use `admin` as username to be able to load the examples)\nsuperset fab create-admin\n\n# Create default roles and permissions\nsuperset init\n\n# Load some data to play with.\n# Note: you MUST have previously created an admin user with the username `admin` for this command to work.\nsuperset load-examples\n\n# Start the Flask dev web server from inside your virtualenv.\n# Note that your page may not have CSS at this point.\nsuperset run -p 8088 --with-threads --reload --debugger --debug\n")),(0,a.yg)("p",null,"Or you can install via our Makefile"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-bash"},"# Create a virtual environment and activate it (recommended)\npython3 -m venv venv # setup a python3 virtualenv\nsource venv/bin/activate\n\n# install pip packages + pre-commit\nmake install\n\n# Install superset pip packages and setup env only\nmake superset\n\n# Setup pre-commit only\nmake pre-commit\n")),(0,a.yg)("p",null,(0,a.yg)("strong",{parentName:"p"},"Note: the FLASK_APP env var should not need to be set, as it's currently controlled\nvia ",(0,a.yg)("inlineCode",{parentName:"strong"},".flaskenv"),", however if needed, it should be set to ",(0,a.yg)("inlineCode",{parentName:"strong"},"superset.app:create_app()"))),(0,a.yg)("p",null,"If you have made changes to the FAB-managed templates, which are not built the same way as the newer, React-powered front-end assets, you need to start the app without the ",(0,a.yg)("inlineCode",{parentName:"p"},"--with-threads")," argument like so:\n",(0,a.yg)("inlineCode",{parentName:"p"},"superset run -p 8088 --reload --debugger --debug")),(0,a.yg)("h4",{id:"dependencies"},"Dependencies"),(0,a.yg)("p",null,"If you add a new requirement or update an existing requirement (per the ",(0,a.yg)("inlineCode",{parentName:"p"},"install_requires")," section in ",(0,a.yg)("inlineCode",{parentName:"p"},"setup.py"),") you must recompile (freeze) the Python dependencies to ensure that for CI, testing, etc. the build is deterministic. This can be achieved via,"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-bash"},"$ python3 -m venv venv\n$ source venv/bin/activate\n$ python3 -m pip install -r requirements/development.txt\n$ pip-compile-multi --no-upgrade\n")),(0,a.yg)("h4",{id:"logging-to-the-browser-console"},"Logging to the browser console"),(0,a.yg)("p",null,"This feature is only available on Python 3. When debugging your application, you can have the server logs sent directly to the browser console using the ",(0,a.yg)("a",{parentName:"p",href:"https://github.com/betodealmeida/consolelog"},"ConsoleLog")," package. You need to mutate the app, by adding the following to your ",(0,a.yg)("inlineCode",{parentName:"p"},"config.py")," or ",(0,a.yg)("inlineCode",{parentName:"p"},"superset_config.py"),":"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-python"},"from console_log import ConsoleLog\n\ndef FLASK_APP_MUTATOR(app):\n    app.wsgi_app = ConsoleLog(app.wsgi_app, app.logger)\n")),(0,a.yg)("p",null,"Then make sure you run your WSGI server using the right worker type:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-bash"},'SUPERSET_ENV=development gunicorn "superset.app:create_app()" -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" -b 127.0.0.1:8088 --reload\n')),(0,a.yg)("p",null,"You can log anything to the browser console, including objects:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-python"},"from superset import app\napp.logger.error('An exception occurred!')\napp.logger.info(form_data)\n")),(0,a.yg)("h3",{id:"frontend-assets"},"Frontend Assets"),(0,a.yg)("p",null,"See ",(0,a.yg)("a",{parentName:"p",href:"https://github.com/apache/superset/blob/master/CONTRIBUTING.md#frontend"},"Building Frontend Assets Locally")))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/ee5d850a.6c5273be.js b/assets/js/ee5d850a.32f2e5cd.js
similarity index 98%
rename from assets/js/ee5d850a.6c5273be.js
rename to assets/js/ee5d850a.32f2e5cd.js
index 0410e13..a32f50c 100644
--- a/assets/js/ee5d850a.6c5273be.js
+++ b/assets/js/ee5d850a.32f2e5cd.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[9892],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>m});var r=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){i(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,r,i=function(e,n){if(null==e)return{};var t,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=r.createContext({}),c=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},p=function(e){var n=c(e.components);return r.createElement(s.Provider,{value:n},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(t),d=i,m=u["".concat(s,".").concat(d)]||u[d]||g[d]||o;return t?r.createElement(m,a(a({ref:n},p),{},{components:t})):r.createElement(m,a({ref:n},p))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var o=t.length,a=new Array(o);a[0]=d;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[u]="string"==typeof e?e:i,a[1]=l;for(var c=2;c<o;c++)a[c]=t[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,t)}d.displayName="MDXCreateElement"},50936:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>g,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=t(45072),i=(t(11504),t(95788));const o={title:"Pre-commit Hooks and Linting",hide_title:!0,sidebar_position:6,version:1},a=void 0,l={unversionedId:"contributing/hooks-and-linting",id:"contributing/hooks-and-linting",title:"Pre-commit Hooks and Linting",description:"Git Hooks",source:"@site/docs/contributing/hooks-and-linting.mdx",sourceDirName:"contributing",slug:"/contributing/hooks-and-linting",permalink:"/docs/contributing/hooks-and-linting",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/contributing/hooks-and-linting.mdx",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Pre-commit Hooks and Linting",hide_title:!0,sidebar_position:6,version:1},sidebar:"tutorialSidebar",previous:{title:"Running a Local Flask Backend",permalink:"/docs/contributing/local-backend"},next:{title:"Conventions and Typing",permalink:"/docs/contributing/conventions-and-typing"}},s={},c=[{value:"Git Hooks",id:"git-hooks",level:2},{value:"Linting",id:"linting",level:2},{value:"Python",id:"python",level:3},{value:"TypeScript",id:"typescript",level:3}],p={toc:c},u="wrapper";function g(e){let{components:n,...t}=e;return(0,i.yg)(u,(0,r.c)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,i.yg)("h2",{id:"git-hooks"},"Git Hooks"),(0,i.yg)("p",null,"Superset uses Git pre-commit hooks courtesy of ",(0,i.yg)("a",{parentName:"p",href:"https://pre-commit.com/"},"pre-commit"),". To install run the following:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"pip3 install -r requirements/integration.txt\npre-commit install\n")),(0,i.yg)("p",null,"A series of checks will now run when you make a git commit."),(0,i.yg)("p",null,"Alternatively it is possible to run pre-commit via tox:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"tox -e pre-commit\n")),(0,i.yg)("p",null,"Or by running pre-commit manually:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"pre-commit run --all-files\n")),(0,i.yg)("h2",{id:"linting"},"Linting"),(0,i.yg)("h3",{id:"python"},"Python"),(0,i.yg)("p",null,"We use ",(0,i.yg)("a",{parentName:"p",href:"https://pylint.org/"},"Pylint")," for linting which can be invoked via:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"# for python\ntox -e pylint\n")),(0,i.yg)("p",null,"In terms of best practices please avoid blanket disabling of Pylint messages globally (via ",(0,i.yg)("inlineCode",{parentName:"p"},".pylintrc"),") or top-level within the file header, albeit there being a few exceptions. Disabling should occur inline as it prevents masking issues and provides context as to why said message is disabled."),(0,i.yg)("p",null,"Additionally, the Python code is auto-formatted using ",(0,i.yg)("a",{parentName:"p",href:"https://github.com/python/black"},"Black")," which\nis configured as a pre-commit hook. There are also numerous ",(0,i.yg)("a",{parentName:"p",href:"https://black.readthedocs.io/en/stable/integrations/editors.html"},"editor integrations")),(0,i.yg)("h3",{id:"typescript"},"TypeScript"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"cd superset-frontend\nnpm ci\n# run eslint checks\nnpm run eslint -- .\n# run tsc (typescript) checks\nnpm run type\n")),(0,i.yg)("p",null,"If using the eslint extension with vscode, put the following in your workspace ",(0,i.yg)("inlineCode",{parentName:"p"},"settings.json")," file:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-json"},'"eslint.workingDirectories": [\n  "superset-frontend"\n]\n')))}g.isMDXComponent=!0}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[9892],{95788:(e,n,t)=>{t.d(n,{Iu:()=>p,yg:()=>m});var r=t(11504);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){i(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,r,i=function(e,n){if(null==e)return{};var t,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)t=o[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=r.createContext({}),c=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},p=function(e){var n=c(e.components);return r.createElement(s.Provider,{value:n},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(t),d=i,m=u["".concat(s,".").concat(d)]||u[d]||g[d]||o;return t?r.createElement(m,a(a({ref:n},p),{},{components:t})):r.createElement(m,a({ref:n},p))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var o=t.length,a=new Array(o);a[0]=d;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[u]="string"==typeof e?e:i,a[1]=l;for(var c=2;c<o;c++)a[c]=t[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,t)}d.displayName="MDXCreateElement"},50936:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>g,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=t(45072),i=(t(11504),t(95788));const o={title:"Pre-commit Hooks and Linting",hide_title:!0,sidebar_position:6,version:1},a=void 0,l={unversionedId:"contributing/hooks-and-linting",id:"contributing/hooks-and-linting",title:"Pre-commit Hooks and Linting",description:"Git Hooks",source:"@site/docs/contributing/hooks-and-linting.mdx",sourceDirName:"contributing",slug:"/contributing/hooks-and-linting",permalink:"/docs/contributing/hooks-and-linting",draft:!1,editUrl:"https://github.com/apache/superset/edit/master/docs/docs/contributing/hooks-and-linting.mdx",tags:[],version:"current",sidebarPosition:6,frontMatter:{title:"Pre-commit Hooks and Linting",hide_title:!0,sidebar_position:6,version:1},sidebar:"tutorialSidebar",previous:{title:"Running a Local Flask Backend",permalink:"/docs/contributing/local-backend"},next:{title:"Conventions and Typing",permalink:"/docs/contributing/conventions-and-typing"}},s={},c=[{value:"Git Hooks",id:"git-hooks",level:2},{value:"Linting",id:"linting",level:2},{value:"Python",id:"python",level:3},{value:"TypeScript",id:"typescript",level:3}],p={toc:c},u="wrapper";function g(e){let{components:n,...t}=e;return(0,i.yg)(u,(0,r.c)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,i.yg)("h2",{id:"git-hooks"},"Git Hooks"),(0,i.yg)("p",null,"Superset uses Git pre-commit hooks courtesy of ",(0,i.yg)("a",{parentName:"p",href:"https://pre-commit.com/"},"pre-commit"),". To install run the following:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"pip3 install -r requirements/development.txt\npre-commit install\n")),(0,i.yg)("p",null,"A series of checks will now run when you make a git commit."),(0,i.yg)("p",null,"Alternatively it is possible to run pre-commit via tox:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"tox -e pre-commit\n")),(0,i.yg)("p",null,"Or by running pre-commit manually:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"pre-commit run --all-files\n")),(0,i.yg)("h2",{id:"linting"},"Linting"),(0,i.yg)("h3",{id:"python"},"Python"),(0,i.yg)("p",null,"We use ",(0,i.yg)("a",{parentName:"p",href:"https://pylint.org/"},"Pylint")," for linting which can be invoked via:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"# for python\ntox -e pylint\n")),(0,i.yg)("p",null,"In terms of best practices please avoid blanket disabling of Pylint messages globally (via ",(0,i.yg)("inlineCode",{parentName:"p"},".pylintrc"),") or top-level within the file header, albeit there being a few exceptions. Disabling should occur inline as it prevents masking issues and provides context as to why said message is disabled."),(0,i.yg)("p",null,"Additionally, the Python code is auto-formatted using ",(0,i.yg)("a",{parentName:"p",href:"https://github.com/python/black"},"Black")," which\nis configured as a pre-commit hook. There are also numerous ",(0,i.yg)("a",{parentName:"p",href:"https://black.readthedocs.io/en/stable/integrations/editors.html"},"editor integrations")),(0,i.yg)("h3",{id:"typescript"},"TypeScript"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-bash"},"cd superset-frontend\nnpm ci\n# run eslint checks\nnpm run eslint -- .\n# run tsc (typescript) checks\nnpm run type\n")),(0,i.yg)("p",null,"If using the eslint extension with vscode, put the following in your workspace ",(0,i.yg)("inlineCode",{parentName:"p"},"settings.json")," file:"),(0,i.yg)("pre",null,(0,i.yg)("code",{parentName:"pre",className:"language-json"},'"eslint.workingDirectories": [\n  "superset-frontend"\n]\n')))}g.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.89d53fef.js b/assets/js/runtime~main.0295c32e.js
similarity index 98%
rename from assets/js/runtime~main.89d53fef.js
rename to assets/js/runtime~main.0295c32e.js
index 69d7ebe..7448611 100644
--- a/assets/js/runtime~main.89d53fef.js
+++ b/assets/js/runtime~main.0295c32e.js
@@ -1 +1 @@
-(()=>{"use strict";var e,a,f,c,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=b,r.c=t,e=[],r.O=(a,f,c,d)=>{if(!f){var b=1/0;for(i=0;i<e.length;i++){f=e[i][0],c=e[i][1],d=e[i][2];for(var t=!0,o=0;o<f.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[f,c,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({196:"1c42a294",264:"e0a8f778",428:"f75b37f5",616:"3c585fdb",652:"0ae8b3d4",984:"dbb131dd",1008:"eb23a929",1032:"1c734f75",1156:"5818c28e",1204:"07f0ce13",1328:"1ce51947",1420:"30334fcd",1436:"3ec2c3f7",1524:"b92f705c",1528:"dc737160",1620:"2bafca50",1688:"69a4ab96",1748:"d76e6194",1856:"74876495",1933:"f5f07875",2104:"0c21af39",2572:"30256b0d",2644:"9d6fd8ea",2730:"6edc47f3",2751:"67158350",3128:"3c835dee",3480:"cd90435d",3548:"eb3b0997",3664:"f4a6e698",3808:"bd23e567",3904:"40974919",4111:"2c412ea7",4152:"9791fd42",4204:"1f391b9e",4244:"6a90d500",4304:"fe0957ee",4348:"30ec1363",4744:"afef705c",4760:"dc3fdd24",4800:"f9cc156b",5020:"25f17725",5056:"fa1a3aa0",5112:"d5417e33",5132:"4e664dc4",5164:"a9e1a7f6",5180:"57b59cd4",5336:"cf6ffe2f",5496:"a584ba2a",5680:"88eaec5a",5696:"935f2afb",5964:"600a9360",6040:"070b53d1",6044:"c296437a",6084:"6948bca1",6148:"496bf018",6200:"0a0a6d3c",6264:"36ea7a08",6452:"972382ea",6500:"0e9953cd",6544:"d83b78fc",6690:"da60bc8f",6752:"17896441",6872:"35a5de3c",7116:"507542a3",7140:"18cf5ace",7144:"71cf7fe6",7180:"e7c796a6",7228:"2f1b3cda",7268:"5e50ba72",7300:"c1424005",7344:"904d61ef",7504:"ce3fa444",7560:"9a9c044b",7652:"393be207",7672:"21b4b958",7752:"58160c0b",7800:"b46ab14b",7840:"e187e321",7852:"31e90f3c",7936:"6432bc55",7988:"f8409a7e",8396:"19682bb8",8400:"dd0670d3",8552:"1df93b7f",8644:"53bb5fc4",8696:"8660bbc8",9496:"471df853",9560:"5ea65e65",9648:"1a4e3797",9656:"1be78505",9684:"262418cd",9704:"640bc8a0",9748:"a309f86e",9792:"c76f729d",9892:"ee5d850a",9908:"4cc2c078",9980:"2461ffa2"}[e]||e)+"."+{196:"6bb71a8a",264:"456fd1ce",428:"bbb7e730",504:"3a7b75c9",532:"d5299be1",616:"d8b37041",652:"83f331a5",984:"3a6a8245",1008:"2ef565e1",1032:"8d1cc8bc",1156:"998de4e0",1204:"917ee554",1328:"cf223d28",1420:"ec0ebf1b",1436:"de24784a",1480:"53759c72",1524:"84b78771",1528:"0a6cbeb4",1620:"fe144ae6",1676:"f81be4a9",1688:"d02e40f0",1748:"8e0cab52",1856:"de452317",1933:"10cd38c1",2104:"57de718d",2528:"180a6744",2572:"c501eece",2644:"8836b801",2730:"3bed97e5",2751:"26e61633",3128:"d87184f1",3480:"ef593608",3548:"6fcc911f",3664:"2d8655d3",3808:"7744c15c",3848:"e2a75b70",3864:"f3c2b8a7",3904:"f5145e99",4111:"8f2343dd",4152:"14a4f5d9",4204:"e5c7194c",4244:"f355e43c",4304:"a1baa283",4348:"9e9ad500",4744:"6fee4ba1",4760:"4ad87ed7",4800:"f1f99102",5020:"7375f0e0",5056:"2fce82b6",5112:"b5e5ea7b",5132:"4b67b3aa",5164:"03b799f3",5180:"cceaae56",5336:"c4031355",5496:"33328ae6",5680:"22b07e8e",5696:"835ea211",5964:"93fd3055",6040:"5ab7f68e",6044:"b173ecad",6084:"5a73dea7",6148:"0923d32f",6200:"42932d39",6264:"d3790955",6452:"90af39a4",6500:"a96c38bc",6544:"2c6d6f38",6690:"f68de3a4",6752:"19b2ff27",6872:"8ea7a28d",6880:"d27a3c73",7116:"17eac7b1",7140:"d2997bf0",7144:"fa40d205",7180:"6d6f7083",7228:"d1199533",7268:"35221859",7300:"82f5e283",7344:"bbff6082",7504:"8b78db4a",7560:"042480cc",7652:"82b3ed53",7672:"fefcd628",7752:"adec76ae",7800:"fbf6e3f9",7840:"285ee94f",7852:"e5235a0c",7936:"e4f6b618",7988:"d7bd5bc0",8396:"f58a9685",8400:"387a9384",8464:"24d42d4d",8552:"00b8cce5",8644:"e3c349c6",8696:"7b1445a5",8879:"2f35bcd7",9160:"fad42e77",9496:"fb95e367",9560:"9a53b42a",9648:"15293a86",9656:"3715d28d",9684:"86dd5ef2",9704:"3327a0bf",9748:"174f7c1d",9772:"d7658691",9792:"f979d761",9892:"6c5273be",9908:"31095ff1",9980:"dae95944"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},d="docs-v-2:",r.l=(e,a,f,b)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==d+f){t=l;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+f),t.src=e),c[e]=[a];var u=(a,f)=>{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(f))),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"6752",40974919:"3904",67158350:"2751",74876495:"1856","1c42a294":"196",e0a8f778:"264",f75b37f5:"428","3c585fdb":"616","0ae8b3d4":"652",dbb131dd:"984",eb23a929:"1008","1c734f75":"1032","5818c28e":"1156","07f0ce13":"1204","1ce51947":"1328","30334fcd":"1420","3ec2c3f7":"1436",b92f705c:"1524",dc737160:"1528","2bafca50":"1620","69a4ab96":"1688",d76e6194:"1748",f5f07875:"1933","0c21af39":"2104","30256b0d":"2572","9d6fd8ea":"2644","6edc47f3":"2730","3c835dee":"3128",cd90435d:"3480",eb3b0997:"3548",f4a6e698:"3664",bd23e567:"3808","2c412ea7":"4111","9791fd42":"4152","1f391b9e":"4204","6a90d500":"4244",fe0957ee:"4304","30ec1363":"4348",afef705c:"4744",dc3fdd24:"4760",f9cc156b:"4800","25f17725":"5020",fa1a3aa0:"5056",d5417e33:"5112","4e664dc4":"5132",a9e1a7f6:"5164","57b59cd4":"5180",cf6ffe2f:"5336",a584ba2a:"5496","88eaec5a":"5680","935f2afb":"5696","600a9360":"5964","070b53d1":"6040",c296437a:"6044","6948bca1":"6084","496bf018":"6148","0a0a6d3c":"6200","36ea7a08":"6264","972382ea":"6452","0e9953cd":"6500",d83b78fc:"6544",da60bc8f:"6690","35a5de3c":"6872","507542a3":"7116","18cf5ace":"7140","71cf7fe6":"7144",e7c796a6:"7180","2f1b3cda":"7228","5e50ba72":"7268",c1424005:"7300","904d61ef":"7344",ce3fa444:"7504","9a9c044b":"7560","393be207":"7652","21b4b958":"7672","58160c0b":"7752",b46ab14b:"7800",e187e321:"7840","31e90f3c":"7852","6432bc55":"7936",f8409a7e:"7988","19682bb8":"8396",dd0670d3:"8400","1df93b7f":"8552","53bb5fc4":"8644","8660bbc8":"8696","471df853":"9496","5ea65e65":"9560","1a4e3797":"9648","1be78505":"9656","262418cd":"9684","640bc8a0":"9704",a309f86e:"9748",c76f729d:"9792",ee5d850a:"9892","4cc2c078":"9908","2461ffa2":"9980"}[e]||e,r.p+r.u(e)},(()=>{var e={296:0,2176:0};r.f.j=(a,f)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)f.push(c[2]);else if(/^2(17|9)6$/.test(a))e[a]=0;else{var d=new Promise(((f,d)=>c=e[a]=[f,d]));f.push(c[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var d=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var c,d,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(f);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},f=self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[];f.forEach(a.bind(null,0)),f.push=a.bind(null,f.push.bind(f))})()})();
\ No newline at end of file
+(()=>{"use strict";var e,a,f,c,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=b,r.c=t,e=[],r.O=(a,f,c,d)=>{if(!f){var b=1/0;for(i=0;i<e.length;i++){f=e[i][0],c=e[i][1],d=e[i][2];for(var t=!0,o=0;o<f.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=c();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[f,c,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,c){if(1&c&&(e=this(e)),8&c)return e;if("object"==typeof e&&e){if(4&c&&e.__esModule)return e;if(16&c&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({196:"1c42a294",264:"e0a8f778",428:"f75b37f5",616:"3c585fdb",652:"0ae8b3d4",984:"dbb131dd",1008:"eb23a929",1032:"1c734f75",1156:"5818c28e",1204:"07f0ce13",1328:"1ce51947",1420:"30334fcd",1436:"3ec2c3f7",1524:"b92f705c",1528:"dc737160",1620:"2bafca50",1688:"69a4ab96",1748:"d76e6194",1856:"74876495",1933:"f5f07875",2104:"0c21af39",2572:"30256b0d",2644:"9d6fd8ea",2730:"6edc47f3",2751:"67158350",3128:"3c835dee",3480:"cd90435d",3548:"eb3b0997",3664:"f4a6e698",3808:"bd23e567",3904:"40974919",4111:"2c412ea7",4152:"9791fd42",4204:"1f391b9e",4244:"6a90d500",4304:"fe0957ee",4348:"30ec1363",4744:"afef705c",4760:"dc3fdd24",4800:"f9cc156b",5020:"25f17725",5056:"fa1a3aa0",5112:"d5417e33",5132:"4e664dc4",5164:"a9e1a7f6",5180:"57b59cd4",5336:"cf6ffe2f",5496:"a584ba2a",5680:"88eaec5a",5696:"935f2afb",5964:"600a9360",6040:"070b53d1",6044:"c296437a",6084:"6948bca1",6148:"496bf018",6200:"0a0a6d3c",6264:"36ea7a08",6452:"972382ea",6500:"0e9953cd",6544:"d83b78fc",6690:"da60bc8f",6752:"17896441",6872:"35a5de3c",7116:"507542a3",7140:"18cf5ace",7144:"71cf7fe6",7180:"e7c796a6",7228:"2f1b3cda",7268:"5e50ba72",7300:"c1424005",7344:"904d61ef",7504:"ce3fa444",7560:"9a9c044b",7652:"393be207",7672:"21b4b958",7752:"58160c0b",7800:"b46ab14b",7840:"e187e321",7852:"31e90f3c",7936:"6432bc55",7988:"f8409a7e",8396:"19682bb8",8400:"dd0670d3",8552:"1df93b7f",8644:"53bb5fc4",8696:"8660bbc8",9496:"471df853",9560:"5ea65e65",9648:"1a4e3797",9656:"1be78505",9684:"262418cd",9704:"640bc8a0",9748:"a309f86e",9792:"c76f729d",9892:"ee5d850a",9908:"4cc2c078",9980:"2461ffa2"}[e]||e)+"."+{196:"6bb71a8a",264:"456fd1ce",428:"bbb7e730",504:"3a7b75c9",532:"d5299be1",616:"d8b37041",652:"83f331a5",984:"3a6a8245",1008:"2ef565e1",1032:"8d1cc8bc",1156:"998de4e0",1204:"917ee554",1328:"cf223d28",1420:"ec0ebf1b",1436:"de24784a",1480:"53759c72",1524:"84b78771",1528:"0a6cbeb4",1620:"fe144ae6",1676:"f81be4a9",1688:"d02e40f0",1748:"8e0cab52",1856:"de452317",1933:"10cd38c1",2104:"57de718d",2528:"180a6744",2572:"c501eece",2644:"8836b801",2730:"3bed97e5",2751:"26e61633",3128:"d87184f1",3480:"ef593608",3548:"6fcc911f",3664:"2d8655d3",3808:"7744c15c",3848:"e2a75b70",3864:"f3c2b8a7",3904:"f5145e99",4111:"8f2343dd",4152:"14a4f5d9",4204:"e5c7194c",4244:"f355e43c",4304:"a1baa283",4348:"9e9ad500",4744:"6fee4ba1",4760:"4ad87ed7",4800:"f1f99102",5020:"7375f0e0",5056:"2fce82b6",5112:"b5e5ea7b",5132:"4b67b3aa",5164:"03b799f3",5180:"cceaae56",5336:"c4031355",5496:"33328ae6",5680:"22b07e8e",5696:"835ea211",5964:"93fd3055",6040:"5ab7f68e",6044:"b173ecad",6084:"5a73dea7",6148:"0923d32f",6200:"42932d39",6264:"d3790955",6452:"90af39a4",6500:"a96c38bc",6544:"2c6d6f38",6690:"f68de3a4",6752:"19b2ff27",6872:"8ea7a28d",6880:"d27a3c73",7116:"17eac7b1",7140:"d2997bf0",7144:"fa40d205",7180:"6d6f7083",7228:"d1199533",7268:"35221859",7300:"82f5e283",7344:"bbff6082",7504:"8b78db4a",7560:"042480cc",7652:"82b3ed53",7672:"fefcd628",7752:"adec76ae",7800:"fbf6e3f9",7840:"285ee94f",7852:"e5235a0c",7936:"e4f6b618",7988:"d7bd5bc0",8396:"f58a9685",8400:"387a9384",8464:"24d42d4d",8552:"00b8cce5",8644:"e3c349c6",8696:"7b1445a5",8879:"2f35bcd7",9160:"fad42e77",9496:"fb95e367",9560:"9a53b42a",9648:"15293a86",9656:"3715d28d",9684:"86dd5ef2",9704:"3327a0bf",9748:"174f7c1d",9772:"d7658691",9792:"f979d761",9892:"32f2e5cd",9908:"cd0078c7",9980:"dae95944"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},d="docs-v-2:",r.l=(e,a,f,b)=>{if(c[e])c[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var l=n[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==d+f){t=l;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+f),t.src=e),c[e]=[a];var u=(a,f)=>{t.onerror=t.onload=null,clearTimeout(s);var d=c[e];if(delete c[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(f))),a)return a(f)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=u.bind(null,t.onerror),t.onload=u.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.p="/",r.gca=function(e){return e={17896441:"6752",40974919:"3904",67158350:"2751",74876495:"1856","1c42a294":"196",e0a8f778:"264",f75b37f5:"428","3c585fdb":"616","0ae8b3d4":"652",dbb131dd:"984",eb23a929:"1008","1c734f75":"1032","5818c28e":"1156","07f0ce13":"1204","1ce51947":"1328","30334fcd":"1420","3ec2c3f7":"1436",b92f705c:"1524",dc737160:"1528","2bafca50":"1620","69a4ab96":"1688",d76e6194:"1748",f5f07875:"1933","0c21af39":"2104","30256b0d":"2572","9d6fd8ea":"2644","6edc47f3":"2730","3c835dee":"3128",cd90435d:"3480",eb3b0997:"3548",f4a6e698:"3664",bd23e567:"3808","2c412ea7":"4111","9791fd42":"4152","1f391b9e":"4204","6a90d500":"4244",fe0957ee:"4304","30ec1363":"4348",afef705c:"4744",dc3fdd24:"4760",f9cc156b:"4800","25f17725":"5020",fa1a3aa0:"5056",d5417e33:"5112","4e664dc4":"5132",a9e1a7f6:"5164","57b59cd4":"5180",cf6ffe2f:"5336",a584ba2a:"5496","88eaec5a":"5680","935f2afb":"5696","600a9360":"5964","070b53d1":"6040",c296437a:"6044","6948bca1":"6084","496bf018":"6148","0a0a6d3c":"6200","36ea7a08":"6264","972382ea":"6452","0e9953cd":"6500",d83b78fc:"6544",da60bc8f:"6690","35a5de3c":"6872","507542a3":"7116","18cf5ace":"7140","71cf7fe6":"7144",e7c796a6:"7180","2f1b3cda":"7228","5e50ba72":"7268",c1424005:"7300","904d61ef":"7344",ce3fa444:"7504","9a9c044b":"7560","393be207":"7652","21b4b958":"7672","58160c0b":"7752",b46ab14b:"7800",e187e321:"7840","31e90f3c":"7852","6432bc55":"7936",f8409a7e:"7988","19682bb8":"8396",dd0670d3:"8400","1df93b7f":"8552","53bb5fc4":"8644","8660bbc8":"8696","471df853":"9496","5ea65e65":"9560","1a4e3797":"9648","1be78505":"9656","262418cd":"9684","640bc8a0":"9704",a309f86e:"9748",c76f729d:"9792",ee5d850a:"9892","4cc2c078":"9908","2461ffa2":"9980"}[e]||e,r.p+r.u(e)},(()=>{var e={296:0,2176:0};r.f.j=(a,f)=>{var c=r.o(e,a)?e[a]:void 0;if(0!==c)if(c)f.push(c[2]);else if(/^2(17|9)6$/.test(a))e[a]=0;else{var d=new Promise(((f,d)=>c=e[a]=[f,d]));f.push(c[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(c=e[a])&&(e[a]=void 0),c)){var d=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var c,d,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(f);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},f=self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[];f.forEach(a.bind(null,0)),f.push=a.bind(null,f.push.bind(f))})()})();
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
index 542835d..6b46802 100644
--- a/community/index.html
+++ b/community/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/api/index.html b/docs/api/index.html
index 1a98581..e6361b3 100644
--- a/docs/api/index.html
+++ b/docs/api/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/contributing-page/index.html b/docs/contributing/contributing-page/index.html
index 87c7b8a..597fa8a 100644
--- a/docs/contributing/contributing-page/index.html
+++ b/docs/contributing/contributing-page/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/conventions-and-typing/index.html b/docs/contributing/conventions-and-typing/index.html
index f657d76..856160f 100644
--- a/docs/contributing/conventions-and-typing/index.html
+++ b/docs/contributing/conventions-and-typing/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -49,7 +49,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/creating-viz-plugins/index.html b/docs/contributing/creating-viz-plugins/index.html
index 77952db..5c2619a 100644
--- a/docs/contributing/creating-viz-plugins/index.html
+++ b/docs/contributing/creating-viz-plugins/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -61,7 +61,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/hooks-and-linting/index.html b/docs/contributing/hooks-and-linting/index.html
index ff360d8..ebcc24c 100644
--- a/docs/contributing/hooks-and-linting/index.html
+++ b/docs/contributing/hooks-and-linting/index.html
@@ -18,12 +18,12 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/superset-logo-horiz.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/superset-logo-horiz-dark.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Documentation</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/intro">Getting Started</a></li><li><a class="dropdown__link" href="/docs/frequently-asked-questions">FAQ</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community">Resources</a></li><li><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">GitHub<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="http://bit.ly/join-superset-slack" target="_blank" rel="noopener noreferrer" class="dropdown__link">Slack<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://lists.apache.org/list.html?dev@superset.apache.org" target="_blank" rel="noopener noreferrer" class="dropdown__link">Mailing List<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://stackoverflow.com/questions/tagged/apache-superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">Stack Overflow<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link default-button-theme get-started-button" href="/docs/intro">Get Started</a><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link github-button"></a><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/intro">Introduction</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/quickstart">Quickstart</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/installation/installing-superset-using-docker-compose">Installation and Configuration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/creating-charts-dashboards/creating-your-first-dashboard">Creating Charts and Dashboards</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/databases/installing-database-drivers">Connecting to Databases</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/miscellaneous/country-map-tools">Miscellaneous</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/contributing/contributing-page">Contributing</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/contributing-page">Contributing to Superset</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/types-of-contributions">Types of Contributions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/pull-request-guidelines">Pull Request Guidelines</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/style-guide">Style Guide</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/local-backend">Running a Local Flask Backend</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/contributing/hooks-and-linting">Pre-commit Hooks and Linting</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/conventions-and-typing">Conventions and Typing</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/testing-locally">Testing</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/translations">Translating</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/creating-viz-plugins">Creating Visualization Plugins</a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/frequently-asked-questions">Frequently Asked Questions</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/security/">Security</a><button aria-label="Toggle the collapsible sidebar category &#x27;Security&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/api">API</a></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><style data-emotion-css="hrzriw">.css-hrzriw{position:fixed;bottom:40px;right:10px;padding:1rem;padding-left:4rem;background-color:#444;border-radius:10px;z-index:9999;background-image:url('/img/github-dark.png');background-size:2rem;background-position:1rem center;background-repeat:no-repeat;-webkit-transition:background-color 0.3s;transition:background-color 0.3s;bpx-shadow:0 0 0 0 rgba(0,0,0,0);scale:.9;-webkit-transition:all 0.3s;transition:all 0.3s;-webkit-transform-origin:bottom right;-ms-transform-origin:bottom right;transform-origin:bottom right;}.css-hrzriw:hover{background-color:#333;box-shadow:5px 5px 10px 0 rgba(0,0,0,0.3);scale:1;}</style><a href="https://github.com/apache/superset/edit/master/docs/docs/contributing/hooks-and-linting.mdx" target="_blank" rel="noopener noreferrer" class="css-hrzriw">Edit this page on GitHub</a><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Contributing</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Pre-commit Hooks and Linting</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h2 class="anchor anchorWithStickyNavbar_LWe7" id="git-hooks">Git Hooks<a href="#git-hooks" class="hash-link" aria-label="Direct link to Git Hooks" title="Direct link to Git Hooks">​</a></h2><p>Superset uses Git pre-commit hooks courtesy of <a href="https://pre-commit.com/" target="_blank" rel="noopener noreferrer">pre-commit</a>. To install run the following:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">pip3 </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> -r requirements/integration.txt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pre-commit </span><span class="token function" style="color:#d73a49">install</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>A series of checks will now run when you make a git commit.</p><p>Alternatively it is possible to run pre-commit via tox:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">tox -e pre-commit</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Or by running pre-commit manually:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">pre-commit run --all-files</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="linting">Linting<a href="#linting" class="hash-link" aria-label="Direct link to Linting" title="Direct link to Linting">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="python">Python<a href="#python" class="hash-link" aria-label="Direct link to Python" title="Direct link to Python">​</a></h3><p>We use <a href="https://pylint.org/" target="_blank" rel="noopener noreferrer">Pylint</a> for linting which can be invoked via:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># for python</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tox -e pylint</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>In terms of best practices please avoid blanket disabling of Pylint messages globally (via <code>.pylintrc</code>) or top-level within the file header, albeit there being a few exceptions. Disabling should occur inline as it prevents masking issues and provides context as to why said message is disabled.</p><p>Additionally, the Python code is auto-formatted using <a href="https://github.com/python/black" target="_blank" rel="noopener noreferrer">Black</a> which
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/superset-logo-horiz.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/superset-logo-horiz-dark.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Documentation</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/intro">Getting Started</a></li><li><a class="dropdown__link" href="/docs/frequently-asked-questions">FAQ</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community">Resources</a></li><li><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">GitHub<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="http://bit.ly/join-superset-slack" target="_blank" rel="noopener noreferrer" class="dropdown__link">Slack<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://lists.apache.org/list.html?dev@superset.apache.org" target="_blank" rel="noopener noreferrer" class="dropdown__link">Mailing List<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://stackoverflow.com/questions/tagged/apache-superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">Stack Overflow<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link default-button-theme get-started-button" href="/docs/intro">Get Started</a><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link github-button"></a><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/intro">Introduction</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/quickstart">Quickstart</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/installation/installing-superset-using-docker-compose">Installation and Configuration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/creating-charts-dashboards/creating-your-first-dashboard">Creating Charts and Dashboards</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/databases/installing-database-drivers">Connecting to Databases</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/miscellaneous/country-map-tools">Miscellaneous</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/contributing/contributing-page">Contributing</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/contributing-page">Contributing to Superset</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/types-of-contributions">Types of Contributions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/pull-request-guidelines">Pull Request Guidelines</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/style-guide">Style Guide</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/local-backend">Running a Local Flask Backend</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/contributing/hooks-and-linting">Pre-commit Hooks and Linting</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/conventions-and-typing">Conventions and Typing</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/testing-locally">Testing</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/translations">Translating</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/creating-viz-plugins">Creating Visualization Plugins</a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/frequently-asked-questions">Frequently Asked Questions</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/security/">Security</a><button aria-label="Toggle the collapsible sidebar category &#x27;Security&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/api">API</a></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><style data-emotion-css="hrzriw">.css-hrzriw{position:fixed;bottom:40px;right:10px;padding:1rem;padding-left:4rem;background-color:#444;border-radius:10px;z-index:9999;background-image:url('/img/github-dark.png');background-size:2rem;background-position:1rem center;background-repeat:no-repeat;-webkit-transition:background-color 0.3s;transition:background-color 0.3s;bpx-shadow:0 0 0 0 rgba(0,0,0,0);scale:.9;-webkit-transition:all 0.3s;transition:all 0.3s;-webkit-transform-origin:bottom right;-ms-transform-origin:bottom right;transform-origin:bottom right;}.css-hrzriw:hover{background-color:#333;box-shadow:5px 5px 10px 0 rgba(0,0,0,0.3);scale:1;}</style><a href="https://github.com/apache/superset/edit/master/docs/docs/contributing/hooks-and-linting.mdx" target="_blank" rel="noopener noreferrer" class="css-hrzriw">Edit this page on GitHub</a><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Contributing</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Pre-commit Hooks and Linting</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h2 class="anchor anchorWithStickyNavbar_LWe7" id="git-hooks">Git Hooks<a href="#git-hooks" class="hash-link" aria-label="Direct link to Git Hooks" title="Direct link to Git Hooks">​</a></h2><p>Superset uses Git pre-commit hooks courtesy of <a href="https://pre-commit.com/" target="_blank" rel="noopener noreferrer">pre-commit</a>. To install run the following:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">pip3 </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> -r requirements/development.txt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pre-commit </span><span class="token function" style="color:#d73a49">install</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>A series of checks will now run when you make a git commit.</p><p>Alternatively it is possible to run pre-commit via tox:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">tox -e pre-commit</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Or by running pre-commit manually:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">pre-commit run --all-files</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="linting">Linting<a href="#linting" class="hash-link" aria-label="Direct link to Linting" title="Direct link to Linting">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="python">Python<a href="#python" class="hash-link" aria-label="Direct link to Python" title="Direct link to Python">​</a></h3><p>We use <a href="https://pylint.org/" target="_blank" rel="noopener noreferrer">Pylint</a> for linting which can be invoked via:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># for python</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tox -e pylint</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>In terms of best practices please avoid blanket disabling of Pylint messages globally (via <code>.pylintrc</code>) or top-level within the file header, albeit there being a few exceptions. Disabling should occur inline as it prevents masking issues and provides context as to why said message is disabled.</p><p>Additionally, the Python code is auto-formatted using <a href="https://github.com/python/black" target="_blank" rel="noopener noreferrer">Black</a> which
 is configured as a pre-commit hook. There are also numerous <a href="https://black.readthedocs.io/en/stable/integrations/editors.html" target="_blank" rel="noopener noreferrer">editor integrations</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="typescript">TypeScript<a href="#typescript" class="hash-link" aria-label="Direct link to TypeScript" title="Direct link to TypeScript">​</a></h3><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">cd</span><span class="token plain"> superset-frontend</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> ci</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># run eslint checks</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run eslint -- </span><span class="token builtin class-name">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># run tsc (typescript) checks</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run </span><span class="token builtin class-name">type</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If using the eslint extension with vscode, put the following in your workspace <code>settings.json</code> file:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token property" style="color:#36acaa">&quot;eslint.workingDirectories&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token string" style="color:#e3116c">&quot;superset-frontend&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/superset/edit/master/docs/docs/contributing/hooks-and-linting.mdx" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/contributing/local-backend"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Running a Local Flask Backend</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/contributing/conventions-and-typing"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Conventions and Typing</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#git-hooks" class="table-of-contents__link toc-highlight">Git Hooks</a></li><li><a href="#linting" class="table-of-contents__link toc-highlight">Linting</a><ul><li><a href="#python" class="table-of-contents__link toc-highlight">Python</a></li><li><a href="#typescript" class="table-of-contents__link toc-highlight">TypeScript</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="footer__copyright">
           <div class="footer__applitools">
             We use &nbsp;<a href="https://applitools.com/" target="_blank" rel="nofollow"><img src="/img/applitools.png" title="Applitools"></a>
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/local-backend/index.html b/docs/contributing/local-backend/index.html
index 493e9cd..37ac681 100644
--- a/docs/contributing/local-backend/index.html
+++ b/docs/contributing/local-backend/index.html
@@ -18,15 +18,15 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/superset-logo-horiz.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/superset-logo-horiz-dark.svg" alt="Superset Logo" class="themedImage_ToTc themedImage--dark_i4oU"></div></a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Documentation</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/intro">Getting Started</a></li><li><a class="dropdown__link" href="/docs/frequently-asked-questions">FAQ</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community">Resources</a></li><li><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">GitHub<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="http://bit.ly/join-superset-slack" target="_blank" rel="noopener noreferrer" class="dropdown__link">Slack<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://lists.apache.org/list.html?dev@superset.apache.org" target="_blank" rel="noopener noreferrer" class="dropdown__link">Mailing List<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://stackoverflow.com/questions/tagged/apache-superset" target="_blank" rel="noopener noreferrer" class="dropdown__link">Stack Overflow<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><a class="navbar__item navbar__link default-button-theme get-started-button" href="/docs/intro">Get Started</a><a href="https://github.com/apache/superset" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link github-button"></a><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/intro">Introduction</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/quickstart">Quickstart</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/installation/installing-superset-using-docker-compose">Installation and Configuration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/creating-charts-dashboards/creating-your-first-dashboard">Creating Charts and Dashboards</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/databases/installing-database-drivers">Connecting to Databases</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/miscellaneous/country-map-tools">Miscellaneous</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/contributing/contributing-page">Contributing</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/contributing-page">Contributing to Superset</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/types-of-contributions">Types of Contributions</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/pull-request-guidelines">Pull Request Guidelines</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/style-guide">Style Guide</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/contributing/local-backend">Running a Local Flask Backend</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/hooks-and-linting">Pre-commit Hooks and Linting</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/conventions-and-typing">Conventions and Typing</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/testing-locally">Testing</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/translations">Translating</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributing/creating-viz-plugins">Creating Visualization Plugins</a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/frequently-asked-questions">Frequently Asked Questions</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/security/">Security</a><button aria-label="Toggle the collapsible sidebar category &#x27;Security&#x27;" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/api">API</a></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><style data-emotion-css="hrzriw">.css-hrzriw{position:fixed;bottom:40px;right:10px;padding:1rem;padding-left:4rem;background-color:#444;border-radius:10px;z-index:9999;background-image:url('/img/github-dark.png');background-size:2rem;background-position:1rem center;background-repeat:no-repeat;-webkit-transition:background-color 0.3s;transition:background-color 0.3s;bpx-shadow:0 0 0 0 rgba(0,0,0,0);scale:.9;-webkit-transition:all 0.3s;transition:all 0.3s;-webkit-transform-origin:bottom right;-ms-transform-origin:bottom right;transform-origin:bottom right;}.css-hrzriw:hover{background-color:#333;box-shadow:5px 5px 10px 0 rgba(0,0,0,0.3);scale:1;}</style><a href="https://github.com/apache/superset/edit/master/docs/docs/contributing/local-backend.mdx" target="_blank" rel="noopener noreferrer" class="css-hrzriw">Edit this page on GitHub</a><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Contributing</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Running a Local Flask Backend</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h3 class="anchor anchorWithStickyNavbar_LWe7" id="flask-server">Flask server<a href="#flask-server" class="hash-link" aria-label="Direct link to Flask server" title="Direct link to Flask server">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="os-dependencies">OS Dependencies<a href="#os-dependencies" class="hash-link" aria-label="Direct link to OS Dependencies" title="Direct link to OS Dependencies">​</a></h4><p>Make sure your machine meets the <a href="/docs/installation/installing-superset-from-pypi#os-dependencies">OS dependencies</a> before following these steps.
-You also need to install MySQL or <a href="https://mariadb.com/downloads" target="_blank" rel="noopener noreferrer">MariaDB</a>.</p><p>Ensure that you are using Python version 3.9 or 3.10, then proceed with:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Create a virtual environment and activate it (recommended)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">python3 -m venv venv </span><span class="token comment" style="color:#999988;font-style:italic"># setup a python3 virtualenv</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">source</span><span class="token plain"> venv/bin/activate</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Install external dependencies</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> -r requirements/testing.txt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Install Superset in editable (development) mode</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> -e </span><span class="token builtin class-name">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Initialize the database</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Note: For generating a SECRET_KEY if you haven&#x27;t done already, you can use the command:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># echo &quot;SECRET_KEY=&#x27;$(openssl rand -base64 42)&#x27;&quot; | tee -a superset_config.py</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset db upgrade</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Create an admin user in your metadata database (use `admin` as username to be able to load the examples)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset fab create-admin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Create default roles and permissions</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Load some data to play with.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Note: you MUST have previously created an admin user with the username `admin` for this command to work.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset load-examples</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Start the Flask dev web server from inside your virtualenv.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Note that your page may not have CSS at this point.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset run -p </span><span class="token number" style="color:#36acaa">8088</span><span class="token plain"> --with-threads --reload --debugger --debug</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Or you can install via our Makefile</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Create a virtual environment and activate it (recommended)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">python3 -m venv venv </span><span class="token comment" style="color:#999988;font-style:italic"># setup a python3 virtualenv</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">source</span><span class="token plain"> venv/bin/activate</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># install pip packages + pre-commit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">make</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Install superset pip packages and setup env only</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">make</span><span class="token plain"> superset</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Setup pre-commit only</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">make</span><span class="token plain"> pre-commit</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Note: the FLASK_APP env var should not need to be set, as it&#x27;s currently controlled
+You also need to install MySQL or <a href="https://mariadb.com/downloads" target="_blank" rel="noopener noreferrer">MariaDB</a>.</p><p>Ensure that you are using Python version 3.9 or 3.10, then proceed with:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Create a virtual environment and activate it (recommended)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">python3 -m venv venv </span><span class="token comment" style="color:#999988;font-style:italic"># setup a python3 virtualenv</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">source</span><span class="token plain"> venv/bin/activate</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Install external dependencies</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> -r requirements/development.txt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Install Superset in editable (development) mode</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> -e </span><span class="token builtin class-name">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Initialize the database</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Note: For generating a SECRET_KEY if you haven&#x27;t done already, you can use the command:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># echo &quot;SECRET_KEY=&#x27;$(openssl rand -base64 42)&#x27;&quot; | tee -a superset_config.py</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset db upgrade</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Create an admin user in your metadata database (use `admin` as username to be able to load the examples)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset fab create-admin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Create default roles and permissions</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Load some data to play with.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Note: you MUST have previously created an admin user with the username `admin` for this command to work.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset load-examples</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Start the Flask dev web server from inside your virtualenv.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Note that your page may not have CSS at this point.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">superset run -p </span><span class="token number" style="color:#36acaa">8088</span><span class="token plain"> --with-threads --reload --debugger --debug</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Or you can install via our Makefile</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Create a virtual environment and activate it (recommended)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">python3 -m venv venv </span><span class="token comment" style="color:#999988;font-style:italic"># setup a python3 virtualenv</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">source</span><span class="token plain"> venv/bin/activate</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># install pip packages + pre-commit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">make</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Install superset pip packages and setup env only</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">make</span><span class="token plain"> superset</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Setup pre-commit only</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">make</span><span class="token plain"> pre-commit</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Note: the FLASK_APP env var should not need to be set, as it&#x27;s currently controlled
 via <code>.flaskenv</code>, however if needed, it should be set to <code>superset.app:create_app()</code></strong></p><p>If you have made changes to the FAB-managed templates, which are not built the same way as the newer, React-powered front-end assets, you need to start the app without the <code>--with-threads</code> argument like so:
-<code>superset run -p 8088 --reload --debugger --debug</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="dependencies">Dependencies<a href="#dependencies" class="hash-link" aria-label="Direct link to Dependencies" title="Direct link to Dependencies">​</a></h4><p>If you add a new requirement or update an existing requirement (per the <code>install_requires</code> section in <code>setup.py</code>) you must recompile (freeze) the Python dependencies to ensure that for CI, testing, etc. the build is deterministic. This can be achieved via,</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ python3 -m venv venv</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token builtin class-name">source</span><span class="token plain"> venv/bin/activate</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ python3 -m pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> -r requirements/integration.txt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ pip-compile-multi --no-upgrade</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="logging-to-the-browser-console">Logging to the browser console<a href="#logging-to-the-browser-console" class="hash-link" aria-label="Direct link to Logging to the browser console" title="Direct link to Logging to the browser console">​</a></h4><p>This feature is only available on Python 3. When debugging your application, you can have the server logs sent directly to the browser console using the <a href="https://github.com/betodealmeida/consolelog" target="_blank" rel="noopener noreferrer">ConsoleLog</a> package. You need to mutate the app, by adding the following to your <code>config.py</code> or <code>superset_config.py</code>:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> console_log </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> ConsoleLog</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">FLASK_APP_MUTATOR</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">wsgi_app </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> ConsoleLog</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">wsgi_app</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">logger</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then make sure you run your WSGI server using the right worker type:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">SUPERSET_ENV</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">development gunicorn </span><span class="token string" style="color:#e3116c">&quot;superset.app:create_app()&quot;</span><span class="token plain"> -k </span><span class="token string" style="color:#e3116c">&quot;geventwebsocket.gunicorn.workers.GeventWebSocketWorker&quot;</span><span class="token plain"> -b </span><span class="token number" style="color:#36acaa">127.0</span><span class="token plain">.0.1:8088 --reload</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can log anything to the browser console, including objects:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> superset </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> app</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;An exception occurred!&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">form_data</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="frontend-assets">Frontend Assets<a href="#frontend-assets" class="hash-link" aria-label="Direct link to Frontend Assets" title="Direct link to Frontend Assets">​</a></h3><p>See <a href="https://github.com/apache/superset/blob/master/CONTRIBUTING.md#frontend" target="_blank" rel="noopener noreferrer">Building Frontend Assets Locally</a></p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/superset/edit/master/docs/docs/contributing/local-backend.mdx" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/contributing/style-guide"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Style Guide</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/contributing/hooks-and-linting"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Pre-commit Hooks and Linting</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#flask-server" class="table-of-contents__link toc-highlight">Flask server</a></li><li><a href="#frontend-assets" class="table-of-contents__link toc-highlight">Frontend Assets</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="footer__copyright">
+<code>superset run -p 8088 --reload --debugger --debug</code></p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="dependencies">Dependencies<a href="#dependencies" class="hash-link" aria-label="Direct link to Dependencies" title="Direct link to Dependencies">​</a></h4><p>If you add a new requirement or update an existing requirement (per the <code>install_requires</code> section in <code>setup.py</code>) you must recompile (freeze) the Python dependencies to ensure that for CI, testing, etc. the build is deterministic. This can be achieved via,</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ python3 -m venv venv</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token builtin class-name">source</span><span class="token plain"> venv/bin/activate</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ python3 -m pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> -r requirements/development.txt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ pip-compile-multi --no-upgrade</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="logging-to-the-browser-console">Logging to the browser console<a href="#logging-to-the-browser-console" class="hash-link" aria-label="Direct link to Logging to the browser console" title="Direct link to Logging to the browser console">​</a></h4><p>This feature is only available on Python 3. When debugging your application, you can have the server logs sent directly to the browser console using the <a href="https://github.com/betodealmeida/consolelog" target="_blank" rel="noopener noreferrer">ConsoleLog</a> package. You need to mutate the app, by adding the following to your <code>config.py</code> or <code>superset_config.py</code>:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> console_log </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> ConsoleLog</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">FLASK_APP_MUTATOR</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">wsgi_app </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> ConsoleLog</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">wsgi_app</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">logger</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then make sure you run your WSGI server using the right worker type:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">SUPERSET_ENV</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">development gunicorn </span><span class="token string" style="color:#e3116c">&quot;superset.app:create_app()&quot;</span><span class="token plain"> -k </span><span class="token string" style="color:#e3116c">&quot;geventwebsocket.gunicorn.workers.GeventWebSocketWorker&quot;</span><span class="token plain"> -b </span><span class="token number" style="color:#36acaa">127.0</span><span class="token plain">.0.1:8088 --reload</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can log anything to the browser console, including objects:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> superset </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> app</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;An exception occurred!&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">logger</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">info</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">form_data</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="frontend-assets">Frontend Assets<a href="#frontend-assets" class="hash-link" aria-label="Direct link to Frontend Assets" title="Direct link to Frontend Assets">​</a></h3><p>See <a href="https://github.com/apache/superset/blob/master/CONTRIBUTING.md#frontend" target="_blank" rel="noopener noreferrer">Building Frontend Assets Locally</a></p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/superset/edit/master/docs/docs/contributing/local-backend.mdx" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/contributing/style-guide"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Style Guide</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/contributing/hooks-and-linting"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Pre-commit Hooks and Linting</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#flask-server" class="table-of-contents__link toc-highlight">Flask server</a></li><li><a href="#frontend-assets" class="table-of-contents__link toc-highlight">Frontend Assets</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="footer__copyright">
           <div class="footer__applitools">
             We use &nbsp;<a href="https://applitools.com/" target="_blank" rel="nofollow"><img src="/img/applitools.png" title="Applitools"></a>
           </div>
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/pull-request-guidelines/index.html b/docs/contributing/pull-request-guidelines/index.html
index 5575b15..9305dd4 100644
--- a/docs/contributing/pull-request-guidelines/index.html
+++ b/docs/contributing/pull-request-guidelines/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/style-guide/index.html b/docs/contributing/style-guide/index.html
index b419fc1..1886e4a 100644
--- a/docs/contributing/style-guide/index.html
+++ b/docs/contributing/style-guide/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -48,7 +48,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/testing-locally/index.html b/docs/contributing/testing-locally/index.html
index 0a9be3b..924840d 100644
--- a/docs/contributing/testing-locally/index.html
+++ b/docs/contributing/testing-locally/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/translations/index.html b/docs/contributing/translations/index.html
index 24cc630..4403cf8 100644
--- a/docs/contributing/translations/index.html
+++ b/docs/contributing/translations/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -76,7 +76,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/contributing/types-of-contributions/index.html b/docs/contributing/types-of-contributions/index.html
index b148bf8..60f7fa2 100644
--- a/docs/contributing/types-of-contributions/index.html
+++ b/docs/contributing/types-of-contributions/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,7 +56,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html b/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
index 47c41af..aa69e53 100644
--- a/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
+++ b/docs/creating-charts-dashboards/creating-your-first-dashboard/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -88,7 +88,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/creating-charts-dashboards/exploring-data/index.html b/docs/creating-charts-dashboards/exploring-data/index.html
index 116fe25..6c06a6f 100644
--- a/docs/creating-charts-dashboards/exploring-data/index.html
+++ b/docs/creating-charts-dashboards/exploring-data/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -141,7 +141,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/ascend/index.html b/docs/databases/ascend/index.html
index ffc3bee..8ef2dfe 100644
--- a/docs/databases/ascend/index.html
+++ b/docs/databases/ascend/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/athena/index.html b/docs/databases/athena/index.html
index de524a7..295507d 100644
--- a/docs/databases/athena/index.html
+++ b/docs/databases/athena/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/bigquery/index.html b/docs/databases/bigquery/index.html
index d1e6863..8976042 100644
--- a/docs/databases/bigquery/index.html
+++ b/docs/databases/bigquery/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/clickhouse/index.html b/docs/databases/clickhouse/index.html
index 72dc0c5..70ad648 100644
--- a/docs/databases/clickhouse/index.html
+++ b/docs/databases/clickhouse/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/cockroachdb/index.html b/docs/databases/cockroachdb/index.html
index ed26d6f..d8aaa06 100644
--- a/docs/databases/cockroachdb/index.html
+++ b/docs/databases/cockroachdb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/cratedb/index.html b/docs/databases/cratedb/index.html
index 3da3692..ecd28d0 100644
--- a/docs/databases/cratedb/index.html
+++ b/docs/databases/cratedb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -49,7 +49,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/databend/index.html b/docs/databases/databend/index.html
index 4bd0457..579986d 100644
--- a/docs/databases/databend/index.html
+++ b/docs/databases/databend/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/databricks/index.html b/docs/databases/databricks/index.html
index 7ba8204..2365d86 100644
--- a/docs/databases/databricks/index.html
+++ b/docs/databases/databricks/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/db-connection-ui/index.html b/docs/databases/db-connection-ui/index.html
index ef63df2..d9b4918 100644
--- a/docs/databases/db-connection-ui/index.html
+++ b/docs/databases/db-connection-ui/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/docker-add-drivers/index.html b/docs/databases/docker-add-drivers/index.html
index 1577bfa..af7a2b0 100644
--- a/docs/databases/docker-add-drivers/index.html
+++ b/docs/databases/docker-add-drivers/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/doris/index.html b/docs/databases/doris/index.html
index 549ea6d..b79771d 100644
--- a/docs/databases/doris/index.html
+++ b/docs/databases/doris/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/dremio/index.html b/docs/databases/dremio/index.html
index 4804251..403e6c8 100644
--- a/docs/databases/dremio/index.html
+++ b/docs/databases/dremio/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/drill/index.html b/docs/databases/drill/index.html
index c3f719d..6eb362d 100644
--- a/docs/databases/drill/index.html
+++ b/docs/databases/drill/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/druid/index.html b/docs/databases/druid/index.html
index e5b9b12..f02bbd9 100644
--- a/docs/databases/druid/index.html
+++ b/docs/databases/druid/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -58,7 +58,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/dynamodb/index.html b/docs/databases/dynamodb/index.html
index 6cf775b..81e6bce 100644
--- a/docs/databases/dynamodb/index.html
+++ b/docs/databases/dynamodb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/elasticsearch/index.html b/docs/databases/elasticsearch/index.html
index ea5071c..cdf58ac 100644
--- a/docs/databases/elasticsearch/index.html
+++ b/docs/databases/elasticsearch/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/exasol/index.html b/docs/databases/exasol/index.html
index 39166dc..67aa1ba 100644
--- a/docs/databases/exasol/index.html
+++ b/docs/databases/exasol/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/extra-settings/index.html b/docs/databases/extra-settings/index.html
index e51325b..9ace905 100644
--- a/docs/databases/extra-settings/index.html
+++ b/docs/databases/extra-settings/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -55,7 +55,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/firebird/index.html b/docs/databases/firebird/index.html
index b69b30b..c4bc18b 100644
--- a/docs/databases/firebird/index.html
+++ b/docs/databases/firebird/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/firebolt/index.html b/docs/databases/firebolt/index.html
index 8e2710f..0d1770a 100644
--- a/docs/databases/firebolt/index.html
+++ b/docs/databases/firebolt/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/google-sheets/index.html b/docs/databases/google-sheets/index.html
index 36f122e..3aca8fe 100644
--- a/docs/databases/google-sheets/index.html
+++ b/docs/databases/google-sheets/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -49,7 +49,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/hana/index.html b/docs/databases/hana/index.html
index 3bdccc6..4778063 100644
--- a/docs/databases/hana/index.html
+++ b/docs/databases/hana/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/hive/index.html b/docs/databases/hive/index.html
index 3c614cc..f76bf22 100644
--- a/docs/databases/hive/index.html
+++ b/docs/databases/hive/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/hologres/index.html b/docs/databases/hologres/index.html
index a0e2a06..b55d673 100644
--- a/docs/databases/hologres/index.html
+++ b/docs/databases/hologres/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/ibm-db2/index.html b/docs/databases/ibm-db2/index.html
index a5963da..be0fc6c 100644
--- a/docs/databases/ibm-db2/index.html
+++ b/docs/databases/ibm-db2/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/impala/index.html b/docs/databases/impala/index.html
index 0aafd58..8e23f7b 100644
--- a/docs/databases/impala/index.html
+++ b/docs/databases/impala/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/installing-database-drivers/index.html b/docs/databases/installing-database-drivers/index.html
index 605a554..b91000a 100644
--- a/docs/databases/installing-database-drivers/index.html
+++ b/docs/databases/installing-database-drivers/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,7 +56,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/kusto/index.html b/docs/databases/kusto/index.html
index c8a2590..728f9eb 100644
--- a/docs/databases/kusto/index.html
+++ b/docs/databases/kusto/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/kylin/index.html b/docs/databases/kylin/index.html
index 0fc4902..36973f1 100644
--- a/docs/databases/kylin/index.html
+++ b/docs/databases/kylin/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/meta-database/index.html b/docs/databases/meta-database/index.html
index c65c7ee..8f618d7 100644
--- a/docs/databases/meta-database/index.html
+++ b/docs/databases/meta-database/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/mysql/index.html b/docs/databases/mysql/index.html
index ef79f58..f1bd21c 100644
--- a/docs/databases/mysql/index.html
+++ b/docs/databases/mysql/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/netezza/index.html b/docs/databases/netezza/index.html
index 7db3c92..ea887af 100644
--- a/docs/databases/netezza/index.html
+++ b/docs/databases/netezza/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/ocient/index.html b/docs/databases/ocient/index.html
index 6e65a62..fc52447 100644
--- a/docs/databases/ocient/index.html
+++ b/docs/databases/ocient/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/oracle/index.html b/docs/databases/oracle/index.html
index 1ccb8ed..7c99abc 100644
--- a/docs/databases/oracle/index.html
+++ b/docs/databases/oracle/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/pinot/index.html b/docs/databases/pinot/index.html
index aab7c8a..4f672e2 100644
--- a/docs/databases/pinot/index.html
+++ b/docs/databases/pinot/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/postgres/index.html b/docs/databases/postgres/index.html
index 6a30f6e..7fe03bf 100644
--- a/docs/databases/postgres/index.html
+++ b/docs/databases/postgres/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -50,7 +50,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/presto/index.html b/docs/databases/presto/index.html
index b34f2a4..7368d9e 100644
--- a/docs/databases/presto/index.html
+++ b/docs/databases/presto/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/redshift/index.html b/docs/databases/redshift/index.html
index 1890f75..b4a216e 100644
--- a/docs/databases/redshift/index.html
+++ b/docs/databases/redshift/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/risingwave/index.html b/docs/databases/risingwave/index.html
index 9b45d0d..1d549f9 100644
--- a/docs/databases/risingwave/index.html
+++ b/docs/databases/risingwave/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/rockset/index.html b/docs/databases/rockset/index.html
index b4806c2..0e3de3a 100644
--- a/docs/databases/rockset/index.html
+++ b/docs/databases/rockset/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/snowflake/index.html b/docs/databases/snowflake/index.html
index 22b4512..c3ac298 100644
--- a/docs/databases/snowflake/index.html
+++ b/docs/databases/snowflake/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -55,7 +55,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/solr/index.html b/docs/databases/solr/index.html
index f0733ab..841da0a 100644
--- a/docs/databases/solr/index.html
+++ b/docs/databases/solr/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/spark-sql/index.html b/docs/databases/spark-sql/index.html
index 6345f6b..bd010d4 100644
--- a/docs/databases/spark-sql/index.html
+++ b/docs/databases/spark-sql/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/sql-server/index.html b/docs/databases/sql-server/index.html
index 7a08105..8a9494f 100644
--- a/docs/databases/sql-server/index.html
+++ b/docs/databases/sql-server/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/starrocks/index.html b/docs/databases/starrocks/index.html
index 6e98152..a144e64 100644
--- a/docs/databases/starrocks/index.html
+++ b/docs/databases/starrocks/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/teradata/index.html b/docs/databases/teradata/index.html
index 7e3b95f..fb1eb75 100644
--- a/docs/databases/teradata/index.html
+++ b/docs/databases/teradata/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -52,7 +52,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/timescaledb/index.html b/docs/databases/timescaledb/index.html
index cc032d7..191651a 100644
--- a/docs/databases/timescaledb/index.html
+++ b/docs/databases/timescaledb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -46,7 +46,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/trino/index.html b/docs/databases/trino/index.html
index b53f7c8..d745b81 100644
--- a/docs/databases/trino/index.html
+++ b/docs/databases/trino/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/vertica/index.html b/docs/databases/vertica/index.html
index eb39528..102c355 100644
--- a/docs/databases/vertica/index.html
+++ b/docs/databases/vertica/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/databases/yugabytedb/index.html b/docs/databases/yugabytedb/index.html
index fe1e7ff..fdd3d6e 100644
--- a/docs/databases/yugabytedb/index.html
+++ b/docs/databases/yugabytedb/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/frequently-asked-questions/index.html b/docs/frequently-asked-questions/index.html
index a0b5ea5..b43f043 100644
--- a/docs/frequently-asked-questions/index.html
+++ b/docs/frequently-asked-questions/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -133,7 +133,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/alerts-reports/index.html b/docs/installation/alerts-reports/index.html
index 1334d38..d08e074 100644
--- a/docs/installation/alerts-reports/index.html
+++ b/docs/installation/alerts-reports/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -64,7 +64,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/async-queries-celery/index.html b/docs/installation/async-queries-celery/index.html
index 8285d18..508b283 100644
--- a/docs/installation/async-queries-celery/index.html
+++ b/docs/installation/async-queries-celery/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -61,7 +61,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/cache/index.html b/docs/installation/cache/index.html
index 055bbca..34fbadb 100644
--- a/docs/installation/cache/index.html
+++ b/docs/installation/cache/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -64,7 +64,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/configuring-superset/index.html b/docs/installation/configuring-superset/index.html
index 64c9c2b..144c4a2 100644
--- a/docs/installation/configuring-superset/index.html
+++ b/docs/installation/configuring-superset/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -98,7 +98,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/docker/index.html b/docs/installation/docker/index.html
index c26aa3b..fd32007 100644
--- a/docs/installation/docker/index.html
+++ b/docs/installation/docker/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -78,7 +78,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/event-logging/index.html b/docs/installation/event-logging/index.html
index e43e943..69186b6 100644
--- a/docs/installation/event-logging/index.html
+++ b/docs/installation/event-logging/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -51,7 +51,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/installing-superset-from-pypi/index.html b/docs/installation/installing-superset-from-pypi/index.html
index 6ec63df..8c966cd 100644
--- a/docs/installation/installing-superset-from-pypi/index.html
+++ b/docs/installation/installing-superset-from-pypi/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -54,7 +54,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/installing-superset-using-docker-compose/index.html b/docs/installation/installing-superset-using-docker-compose/index.html
index ec697fa..3b15c12 100644
--- a/docs/installation/installing-superset-using-docker-compose/index.html
+++ b/docs/installation/installing-superset-using-docker-compose/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -138,7 +138,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/networking-settings/index.html b/docs/installation/networking-settings/index.html
index 27afd9c..a1d57e6 100644
--- a/docs/installation/networking-settings/index.html
+++ b/docs/installation/networking-settings/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -55,7 +55,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/running-on-kubernetes/index.html b/docs/installation/running-on-kubernetes/index.html
index 7e053b7..1c5cfa0 100644
--- a/docs/installation/running-on-kubernetes/index.html
+++ b/docs/installation/running-on-kubernetes/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -53,7 +53,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/setup-ssh-tunneling/index.html b/docs/installation/setup-ssh-tunneling/index.html
index 3d98555..49fbe62 100644
--- a/docs/installation/setup-ssh-tunneling/index.html
+++ b/docs/installation/setup-ssh-tunneling/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/sql-templating/index.html b/docs/installation/sql-templating/index.html
index bf33f4f..c568ed3 100644
--- a/docs/installation/sql-templating/index.html
+++ b/docs/installation/sql-templating/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -83,7 +83,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/installation/upgrading-superset/index.html b/docs/installation/upgrading-superset/index.html
index e346aec..1d6aa92 100644
--- a/docs/installation/upgrading-superset/index.html
+++ b/docs/installation/upgrading-superset/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -47,7 +47,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/intro/index.html b/docs/intro/index.html
index beae928..e5211fe 100644
--- a/docs/intro/index.html
+++ b/docs/intro/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -55,7 +55,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/chart-params/index.html b/docs/miscellaneous/chart-params/index.html
index 4fd458e..d251a84 100644
--- a/docs/miscellaneous/chart-params/index.html
+++ b/docs/miscellaneous/chart-params/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/country-map-tools/index.html b/docs/miscellaneous/country-map-tools/index.html
index 13d9058..ffa11f7 100644
--- a/docs/miscellaneous/country-map-tools/index.html
+++ b/docs/miscellaneous/country-map-tools/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -51,7 +51,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/importing-exporting-datasources/index.html b/docs/miscellaneous/importing-exporting-datasources/index.html
index db49258..5f47886 100644
--- a/docs/miscellaneous/importing-exporting-datasources/index.html
+++ b/docs/miscellaneous/importing-exporting-datasources/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -56,7 +56,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/issue-codes/index.html b/docs/miscellaneous/issue-codes/index.html
index 5537776..af127b1 100644
--- a/docs/miscellaneous/issue-codes/index.html
+++ b/docs/miscellaneous/issue-codes/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -74,7 +74,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/miscellaneous/timezones/index.html b/docs/miscellaneous/timezones/index.html
index cda63e3..c588699 100644
--- a/docs/miscellaneous/timezones/index.html
+++ b/docs/miscellaneous/timezones/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/quickstart/index.html b/docs/quickstart/index.html
index 7faf792..0ccd0c9 100644
--- a/docs/quickstart/index.html
+++ b/docs/quickstart/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -53,7 +53,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/security/cves/index.html b/docs/security/cves/index.html
index f0d2874..d3c32b8 100644
--- a/docs/security/cves/index.html
+++ b/docs/security/cves/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/security/index.html b/docs/security/index.html
index fe3e182..a8789d9 100644
--- a/docs/security/index.html
+++ b/docs/security/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -144,7 +144,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index a1b4c15..d1c4760 100644
--- a/index.html
+++ b/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/markdown-page/index.html b/markdown-page/index.html
index 5990d58..26cc103 100644
--- a/markdown-page/index.html
+++ b/markdown-page/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/search/index.html b/search/index.html
index 48e574e..b3aa81e 100644
--- a/search/index.html
+++ b/search/index.html
@@ -18,7 +18,7 @@
 
 <script src="/script/matomo.js"></script>
 <script src="https://www.bugherd.com/sidebarv2.js?apikey=enilpiu7bgexxsnoqfjtxa" async></script><link rel="stylesheet" href="/assets/css/styles.686b4caa.css">
-<link rel="preload" href="/assets/js/runtime~main.89d53fef.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.0295c32e.js" as="script">
 <link rel="preload" href="/assets/js/main.ecd8e30e.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
@@ -45,7 +45,7 @@
           <!-- telemetry/analytics pixel: -->
           <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=39ae6855-95fc-4566-86e5-360d542b0a68">
           </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.89d53fef.js"></script>
+<script src="/assets/js/runtime~main.0295c32e.js"></script>
 <script src="/assets/js/main.ecd8e30e.js"></script>
 </body>
 </html>
\ No newline at end of file