You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by GitBox <gi...@apache.org> on 2020/11/20 16:16:28 UTC

[GitHub] [incubator-superset] bzmatteo72 opened a new issue #11765: Apache Superset: cannot send email

bzmatteo72 opened a new issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765


   Hello,
   
   I have configured Apache Superset to send email as per documentation (celery set up)
   https://superset.apache.org/docs/installation/async-queries-celery
   
   After that i get this error when i try to authenticate in the login page:
   
   Please see below attachment
   
   Could you help to resolve this issue?
   Thanks & regards
   Matteo
   
   
   Sorry, something went wrong
   500 - Internal Server Error
   Stacktrace
           Traceback (most recent call last):
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1276, in _execute_context
       self.dialect.do_execute(
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 593, in do_execute
       cursor.execute(statement, parameters)
   sqlite3.OperationalError: no such table: user_attribute
   
   The above exception was the direct cause of the following exception:
   
   Traceback (most recent call last):
     File "/home/matteo/.local/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
       response = self.full_dispatch_request()
     File "/home/matteo/.local/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
       rv = self.handle_user_exception(e)
     File "/home/matteo/.local/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
       reraise(exc_type, exc_value, tb)
     File "/home/matteo/.local/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
       raise value
     File "/home/matteo/.local/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
       rv = self.dispatch_request()
     File "/home/matteo/.local/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
       return self.view_functions[rule.endpoint](**req.view_args)
     File "/home/matteo/.local/lib/python3.8/site-packages/superset/views/core.py", line 2510, in welcome
       db.session.query(UserAttribute.welcome_dashboard_id)
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3523, in scalar
       ret = self.one()
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3490, in one
       ret = self.one_or_none()
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3459, in one_or_none
       ret = list(self)
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3535, in __iter__
       return self._execute_and_instances(context)
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3560, in _execute_and_instances
       result = conn.execute(querycontext.statement, self._params)
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1011, in execute
       return meth(self, multiparams, params)
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
       return connection._execute_clauseelement(self, multiparams, params)
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1124, in _execute_clauseelement
       ret = self._execute_context(
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1316, in _execute_context
       self._handle_dbapi_exception(
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1510, in _handle_dbapi_exception
       util.raise_(
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
       raise exception
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1276, in _execute_context
       self.dialect.do_execute(
     File "/home/matteo/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 593, in do_execute
       cursor.execute(statement, parameters)
   sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user_attribute
   [SQL: SELECT user_attribute.welcome_dashboard_id AS user_attribute_welcome_dashboard_id 
   FROM user_attribute 
   WHERE user_attribute.user_id = ?]
   [parameters: ('1',)]
   (Background on this error at: http://sqlalche.me/e/13/e3q8)
   
         
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-735255510


   There can be plenty of possible issues. Your PATH is incorrect, superset_config.py shoudn't be inside your environment dir, environment cache could be broken, maybe you had forgot to create admin account before executed `init`. I'll suggest you:
   - to move superset_config.py to dedicated config directory
   - to make new superset virtual environment
   Your superset_config.py looks very good. It's a good start. The following set of commands should be enough to make new clear environment. 
   ```
   umask 022
   mkdir -p ~/superset/config
   mv ~/python-environments/env/lib/python3.7/site-packages/superset/superset_config.py ~/superset/config
   chmod 644 ~/superset/config/superset_config.py
   cd ~/superset
   python3 -m venv venv
   source venv/bin/activate
   pip install apache-superset
   superset db upgrade
   export FLASK_APP=superset
   export SUPERSET_CONFIG_PATH=/home/matteo/superset/config/superset_config.py
   flask fab create-admin --username admin --firstname Superset --lastname Admin --email superset@localhost.localdomain --password {{ your_admin_password }}"
   superset init
   superset run -p 8088 --with-threads --reload --debugger
   ```
   Just follow this steps.
   In case you wonder what's wrong with your PATH.
   Your current `PATH=/home/matteo/env/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/matteo/python-environments/env/lib/python3.7/site-packages/superset` doesn't match directory structure you have. `/home/matteo/python-environments/env` is your environment, that means `/home/matteo/python-environments/env/bin` should be inside your PATH, but it doesn't. `/home/matteo/python-environments/env/lib/python3.7/site-packages/superset` does nothing. Your main problem is inattention to details.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734186907


   Hi Shkurupii,
   
   i have updated my Superset config file following your file as example but now when i try to start superset from the terminal i get this message:
   -bash: superset: command not found
   
   Please find attached my config file below.
   Notice that, as per earlier recommendation in the thread above, I have installed a Postgresql db (superset_loc) on my localhost where i have installed Superset and i'm connecting to the same using the following connection url, that you can find in the config file as well below:
   SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc'
   
   Not sure if this is correct but the db connection is responding well
   
   Please could you help kindly to troubleshoot the new issue (superset not found) and check if my configuration file is correctly set up to send email (the SMTP_HOST I'm using in not based on my local machine but it's outside on the company network)?
   
   Let me know if you have any question
   
   Thanks & Regards
   Matteo
   
   
   # Licensed to the Apache Software Foundation (ASF) under one
   # or more contributor license agreements.  See the NOTICE file
   # distributed with this work for additional information
   # regarding copyright ownership.  The ASF licenses this file
   # to you under the Apache License, Version 2.0 (the
   # "License"); you may not use this file except in compliance
   # with the License.  You may obtain a copy of the License at
   #
   #   http://www.apache.org/licenses/LICENSE-2.0
   #
   # Unless required by applicable law or agreed to in writing,
   # software distributed under the License is distributed on an
   # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   # KIND, either express or implied.  See the License for the
   # specific language governing permissions and limitations
   # under the License.
   """The main config file for Superset
   
   All configuration in this file can be overridden by providing a superset_config
   in your PYTHONPATH as there is a ``from superset_config import *``
   at the end of this file.
   """
   import imp
   import importlib.util
   import json
   import logging
   import os
   import sys
   from collections import OrderedDict
   from datetime import date
   from typing import Any, Callable, Dict, List, Optional, Type, TYPE_CHECKING
   
   from cachelib.base import BaseCache
   from celery.schedules import crontab
   from dateutil import tz
   from flask import Blueprint
   from flask_appbuilder.security.manager import AUTH_DB
   from pandas.io.parsers import STR_NA_VALUES
   from cachelib.redis import RedisCache
   
   from superset.jinja_context import (  # pylint: disable=unused-import
       BaseTemplateProcessor,
   )
   from superset.stats_logger import DummyStatsLogger
   from superset.typing import CacheConfig
   from superset.utils.log import DBEventLogger
   from superset.utils.logging_configurator import DefaultLoggingConfigurator
   
   logger = logging.getLogger(__name__)
   
   if TYPE_CHECKING:
       from flask_appbuilder.security.sqla import models  # pylint: disable=unused-import
   
       from superset.models.core import Database  # pylint: disable=unused-import
   
   # Realtime stats logger, a StatsD implementation exists
   STATS_LOGGER = DummyStatsLogger()
   EVENT_LOGGER = DBEventLogger()
   
   SUPERSET_LOG_VIEW = True
   
   BASE_DIR = os.path.abspath(os.path.dirname(__file__))
   if "SUPERSET_HOME" in os.environ:
       DATA_DIR = os.environ["SUPERSET_HOME"]
   else:
       DATA_DIR = os.path.join(os.path.expanduser("~"), ".superset")
   
   # ---------------------------------------------------------
   # Superset specific config
   # ---------------------------------------------------------
   VERSION_INFO_FILE = os.path.join(BASE_DIR, "static", "version_info.json")
   PACKAGE_JSON_FILE = os.path.join(BASE_DIR, "static", "assets", "package.json")
   
   # Multiple favicons can be specified here. The "href" property
   # is mandatory, but "sizes," "type," and "rel" are optional.
   # For example:
   # {
   #     "href":path/to/image.png",
   #     "sizes": "16x16",
   #     "type": "image/png"
   #     "rel": "icon"
   # },
   FAVICONS = [{"href": "/static/assets/images/favicon.png"}]
   
   
   def _try_json_readversion(filepath: str) -> Optional[str]:
       try:
           with open(filepath, "r") as f:
               return json.load(f).get("version")
       except Exception:  # pylint: disable=broad-except
           return None
   
   
   def _try_json_readsha(  # pylint: disable=unused-argument
       filepath: str, length: int
   ) -> Optional[str]:
       try:
           with open(filepath, "r") as f:
               return json.load(f).get("GIT_SHA")[:length]
       except Exception:  # pylint: disable=broad-except
           return None
   
   
   # Depending on the context in which this config is loaded, the
   # version_info.json file may or may not be available, as it is
   # generated on install via setup.py. In the event that we're
   # actually running Superset, we will have already installed,
   # therefore it WILL exist. When unit tests are running, however,
   # it WILL NOT exist, so we fall back to reading package.json
   VERSION_STRING = _try_json_readversion(VERSION_INFO_FILE) or _try_json_readversion(
       PACKAGE_JSON_FILE
   )
   
   VERSION_SHA_LENGTH = 8
   VERSION_SHA = _try_json_readsha(VERSION_INFO_FILE, VERSION_SHA_LENGTH)
   
   ROW_LIMIT = 50000
   VIZ_ROW_LIMIT = 10000
   # max rows retreieved when requesting samples from datasource in explore view
   SAMPLES_ROW_LIMIT = 1000
   # max rows retrieved by filter select auto complete
   FILTER_SELECT_ROW_LIMIT = 10000
   SUPERSET_WORKERS = 2  # deprecated
   SUPERSET_CELERY_WORKERS = 32  # deprecated
   
   SUPERSET_WEBSERVER_PROTOCOL = "http"
   SUPERSET_WEBSERVER_ADDRESS = "0.0.0.0"
   SUPERSET_WEBSERVER_PORT = 8088
   
   # This is an important setting, and should be lower than your
   # [load balancer / proxy / envoy / kong / ...] timeout settings.
   # You should also make sure to configure your WSGI server
   # (gunicorn, nginx, apache, ...) timeout setting to be <= to this setting
   SUPERSET_WEBSERVER_TIMEOUT = 60
   
   # this 2 settings are used by dashboard period force refresh feature
   # When user choose auto force refresh frequency
   # < SUPERSET_DASHBOARD_PERIODICAL_REFRESH_LIMIT
   # they will see warning message in the Refresh Interval Modal.
   # please check PR #9886
   SUPERSET_DASHBOARD_PERIODICAL_REFRESH_LIMIT = 0
   SUPERSET_DASHBOARD_PERIODICAL_REFRESH_WARNING_MESSAGE = None
   
   SUPERSET_DASHBOARD_POSITION_DATA_LIMIT = 65535
   CUSTOM_SECURITY_MANAGER = None
   SQLALCHEMY_TRACK_MODIFICATIONS = False
   # ---------------------------------------------------------
   
   # Your App secret key
   SECRET_KEY = "\2\1thisismyscretkey\1\2\\e\\y\\y\\h"
   
   # The SQLAlchemy connection string.
   # SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
   # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
   SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc'
   
   # In order to hook up a custom password store for all SQLACHEMY connections
   # implement a function that takes a single argument of type 'sqla.engine.url',
   # returns a password and set SQLALCHEMY_CUSTOM_PASSWORD_STORE.
   #
   # e.g.:
   # def lookup_password(url):
   #     return 'secret'
   # SQLALCHEMY_CUSTOM_PASSWORD_STORE = lookup_password
   SQLALCHEMY_CUSTOM_PASSWORD_STORE = None
   
   # The limit of queries fetched for query search
   QUERY_SEARCH_LIMIT = 1000
   
   # Flask-WTF flag for CSRF
   WTF_CSRF_ENABLED = True
   
   # Add endpoints that need to be exempt from CSRF protection
   WTF_CSRF_EXEMPT_LIST = ["superset.views.core.log", "superset.charts.api.data"]
   
   # Whether to run the web server in debug mode or not
   DEBUG = os.environ.get("FLASK_ENV") == "development"
   FLASK_USE_RELOAD = True
   
   # Superset allows server-side python stacktraces to be surfaced to the
   # user when this feature is on. This may has security implications
   # and it's more secure to turn it off in production settings.
   SHOW_STACKTRACE = True
   
   # Use all X-Forwarded headers when ENABLE_PROXY_FIX is True.
   # When proxying to a different port, set "x_port" to 0 to avoid downstream issues.
   ENABLE_PROXY_FIX = True
   PROXY_FIX_CONFIG = {"x_for": 1, "x_proto": 1, "x_host": 1, "x_port": 1, "x_prefix": 1}
   
   # ------------------------------
   # GLOBALS FOR APP Builder
   # ------------------------------
   # Uncomment to setup Your App name
   APP_NAME = "Superset"
   
   # Uncomment to setup an App icon
   APP_ICON = "/static/assets/images/superset-logo-horiz.png"
   APP_ICON_WIDTH = 126
   
   # Uncomment to specify where clicking the logo would take the user
   # e.g. setting it to '/welcome' would take the user to '/superset/welcome'
   LOGO_TARGET_PATH = None
   
   # Enables SWAGGER UI for superset openapi spec
   # ex: http://localhost:8080/swagger/v1
   FAB_API_SWAGGER_UI = True
   
   # Druid query timezone
   # tz.tzutc() : Using utc timezone
   # tz.tzlocal() : Using local timezone
   # tz.gettz('Asia/Shanghai') : Using the time zone with specific name
   # [TimeZone List]
   # See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
   # other tz can be overridden by providing a local_config
   DRUID_TZ = tz.tzutc()
   DRUID_ANALYSIS_TYPES = ["cardinality"]
   
   # Legacy Druid NoSQL (native) connector
   # Druid supports a SQL interface in its newer versions.
   # Setting this flag to True enables the deprecated, API-based Druid
   # connector. This feature may be removed at a future date.
   DRUID_IS_ACTIVE = False
   
   # If Druid is active whether to include the links to scan/refresh Druid datasources.
   # This should be disabled if you are trying to wean yourself off of the Druid NoSQL
   # connector.
   DRUID_METADATA_LINKS_ENABLED = True
   
   # ----------------------------------------------------
   # AUTHENTICATION CONFIG
   # ----------------------------------------------------
   # The authentication type
   # AUTH_OID : Is for OpenID
   # AUTH_DB : Is for database (username/password)
   # AUTH_LDAP : Is for LDAP
   # AUTH_REMOTE_USER : Is for using REMOTE_USER from web server
   AUTH_TYPE = AUTH_DB
   
   # Uncomment to setup Full admin role name
   # AUTH_ROLE_ADMIN = 'Admin'
   
   # Uncomment to setup Public role name, no authentication needed
   # AUTH_ROLE_PUBLIC = 'Public'
   
   # Will allow user self registration
   # AUTH_USER_REGISTRATION = True
   
   # The default user self registration role
   # AUTH_USER_REGISTRATION_ROLE = "Public"
   
   # When using LDAP Auth, setup the LDAP server
   # AUTH_LDAP_SERVER = "ldap://ldapserver.new"
   
   # Uncomment to setup OpenID providers example for OpenID authentication
   # OPENID_PROVIDERS = [
   #    { 'name': 'Yahoo', 'url': 'https://open.login.yahoo.com/' },
   #    { 'name': 'Flickr', 'url': 'https://www.flickr.com/<username>' },
   
   # ---------------------------------------------------
   # Roles config
   # ---------------------------------------------------
   # Grant public role the same set of permissions as for a selected builtin role.
   # This is useful if one wants to enable anonymous users to view
   # dashboards. Explicit grant on specific datasets is still required.
   PUBLIC_ROLE_LIKE: Optional[str] = None
   
   # ---------------------------------------------------
   # Babel config for translations
   # ---------------------------------------------------
   # Setup default language
   BABEL_DEFAULT_LOCALE = "en"
   # Your application default translation path
   BABEL_DEFAULT_FOLDER = "superset/translations"
   # The allowed translation for you app
   LANGUAGES = {
       "en": {"flag": "us", "name": "English"},
       "es": {"flag": "es", "name": "Spanish"},
       "it": {"flag": "it", "name": "Italian"},
       "fr": {"flag": "fr", "name": "French"},
       "zh": {"flag": "cn", "name": "Chinese"},
       "ja": {"flag": "jp", "name": "Japanese"},
       "de": {"flag": "de", "name": "German"},
       "pt": {"flag": "pt", "name": "Portuguese"},
       "pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
       "ru": {"flag": "ru", "name": "Russian"},
       "ko": {"flag": "kr", "name": "Korean"},
   }
   
   # ---------------------------------------------------
   # Feature flags
   # ---------------------------------------------------
   # Feature flags that are set by default go here. Their values can be
   # overwritten by those specified under FEATURE_FLAGS in super_config.py
   # For example, DEFAULT_FEATURE_FLAGS = { 'FOO': True, 'BAR': False } here
   # and FEATURE_FLAGS = { 'BAR': True, 'BAZ': True } in superset_config.py
   # will result in combined feature flags of { 'FOO': True, 'BAR': True, 'BAZ': True }
   DEFAULT_FEATURE_FLAGS: Dict[str, bool] = {
       # Experimental feature introducing a client (browser) cache
       "CLIENT_CACHE": False,
       "ENABLE_EXPLORE_JSON_CSRF_PROTECTION": False,
       "ENABLE_DASHBOARD_ETAG_HEADER": False,
       "KV_STORE": False,
       "PRESTO_EXPAND_DATA": False,
       # Exposes API endpoint to compute thumbnails
       "THUMBNAILS": False,
       "REDUCE_DASHBOARD_BOOTSTRAP_PAYLOAD": True,
       "REMOVE_SLICE_LEVEL_LABEL_COLORS": False,
       "SHARE_QUERIES_VIA_KV_STORE": False,
       "SIP_38_VIZ_REARCHITECTURE": False,
       "TAGGING_SYSTEM": False,
       "SQLLAB_BACKEND_PERSISTENCE": False,
       "LISTVIEWS_DEFAULT_CARD_VIEW": False,
   }
   
   # Set the default view to card/grid view if thumbnail support is enabled.
   # Setting LISTVIEW_DEFAULT_CARD_VIEW to False will force the default view to
   # always be the table layout
   if DEFAULT_FEATURE_FLAGS["THUMBNAILS"]:
       DEFAULT_FEATURE_FLAGS["LISTVIEW_DEFAULT_CARD_VIEW"] = True
   
   # This is merely a default.
   FEATURE_FLAGS: Dict[str, bool] = {}
   
   # A function that receives a dict of all feature flags
   # (DEFAULT_FEATURE_FLAGS merged with FEATURE_FLAGS)
   # can alter it, and returns a similar dict. Note the dict of feature
   # flags passed to the function is a deepcopy of the dict in the config,
   # and can therefore be mutated without side-effect
   #
   # GET_FEATURE_FLAGS_FUNC can be used to implement progressive rollouts,
   # role-based features, or a full on A/B testing framework.
   #
   # from flask import g, request
   # def GET_FEATURE_FLAGS_FUNC(feature_flags_dict: Dict[str, bool]) -> Dict[str, bool]:
   #     if hasattr(g, "user") and g.user.is_active:
   #         feature_flags_dict['some_feature'] = g.user and g.user.id == 5
   #     return feature_flags_dict
   GET_FEATURE_FLAGS_FUNC: Optional[Callable[[Dict[str, bool]], Dict[str, bool]]] = None
   
   # ---------------------------------------------------
   # Thumbnail config (behind feature flag)
   # ---------------------------------------------------
   THUMBNAIL_SELENIUM_USER = "Admin"
   THUMBNAIL_CACHE_CONFIG: CacheConfig = {
       "CACHE_TYPE": "null",
       "CACHE_NO_NULL_WARNING": True,
   }
   
   # Used for thumbnails and other api: Time in seconds before selenium
   # times out after trying to locate an element on the page and wait
   # for that element to load for an alert screenshot.
   SCREENSHOT_LOCATE_WAIT = 60
   SCREENSHOT_LOAD_WAIT = 60
   
   # ---------------------------------------------------
   # Image and file configuration
   # ---------------------------------------------------
   # The file upload folder, when using models with files
   UPLOAD_FOLDER = BASE_DIR + "/app/static/uploads/"
   UPLOAD_CHUNK_SIZE = 4096
   
   # The image upload folder, when using models with images
   IMG_UPLOAD_FOLDER = BASE_DIR + "/app/static/uploads/"
   
   # The image upload url, when using models with images
   IMG_UPLOAD_URL = "/static/uploads/"
   # Setup image size default is (300, 200, True)
   # IMG_SIZE = (300, 200, True)
   
   CACHE_DEFAULT_TIMEOUT = 60 * 60 * 24
   CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
   TABLE_NAMES_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
   
   # CORS Options
   ENABLE_CORS = False
   CORS_OPTIONS: Dict[Any, Any] = {}
   
   # Chrome allows up to 6 open connections per domain at a time. When there are more
   # than 6 slices in dashboard, a lot of time fetch requests are queued up and wait for
   # next available socket. PR #5039 is trying to allow domain sharding for Superset,
   # and this feature will be enabled by configuration only (by default Superset
   # doesn't allow cross-domain request).
   SUPERSET_WEBSERVER_DOMAINS = None
   
   # Allowed format types for upload on Database view
   EXCEL_EXTENSIONS = {"xlsx", "xls"}
   CSV_EXTENSIONS = {"csv", "tsv", "txt"}
   ALLOWED_EXTENSIONS = {*EXCEL_EXTENSIONS, *CSV_EXTENSIONS}
   
   # CSV Options: key/value pairs that will be passed as argument to DataFrame.to_csv
   # method.
   # note: index option should not be overridden
   CSV_EXPORT = {"encoding": "utf-8"}
   
   # ---------------------------------------------------
   # Time grain configurations
   # ---------------------------------------------------
   # List of time grains to disable in the application (see list of builtin
   # time grains in superset/db_engine_specs.builtin_time_grains).
   # For example: to disable 1 second time grain:
   # TIME_GRAIN_DENYLIST = ['PT1S']
   TIME_GRAIN_DENYLIST: List[str] = []
   
   # Additional time grains to be supported using similar definitions as in
   # superset/db_engine_specs.builtin_time_grains.
   # For example: To add a new 2 second time grain:
   # TIME_GRAIN_ADDONS = {'PT2S': '2 second'}
   TIME_GRAIN_ADDONS: Dict[str, str] = {}
   
   # Implementation of additional time grains per engine.
   # The column to be truncated is denoted `{col}` in the expression.
   # For example: To implement 2 second time grain on clickhouse engine:
   # TIME_GRAIN_ADDON_EXPRESSIONS = {
   #     'clickhouse': {
   #         'PT2S': 'toDateTime(intDiv(toUInt32(toDateTime({col})), 2)*2)'
   #     }
   # }
   TIME_GRAIN_ADDON_EXPRESSIONS: Dict[str, Dict[str, str]] = {}
   
   # ---------------------------------------------------
   # List of viz_types not allowed in your environment
   # For example: Disable pivot table and treemap:
   #  VIZ_TYPE_DENYLIST = ['pivot_table', 'treemap']
   # ---------------------------------------------------
   
   VIZ_TYPE_DENYLIST: List[str] = []
   
   # ---------------------------------------------------
   # List of data sources not to be refreshed in druid cluster
   # ---------------------------------------------------
   
   DRUID_DATA_SOURCE_DENYLIST: List[str] = []
   
   # --------------------------------------------------
   # Modules, datasources and middleware to be registered
   # --------------------------------------------------
   DEFAULT_MODULE_DS_MAP = OrderedDict(
       [
           ("superset.connectors.sqla.models", ["SqlaTable"]),
           ("superset.connectors.druid.models", ["DruidDatasource"]),
       ]
   )
   ADDITIONAL_MODULE_DS_MAP: Dict[str, List[str]] = {}
   ADDITIONAL_MIDDLEWARE: List[Callable[..., Any]] = []
   
   # 1) https://docs.python-guide.org/writing/logging/
   # 2) https://docs.python.org/2/library/logging.config.html
   
   # Default configurator will consume the LOG_* settings below
   # LOGGING_CONFIGURATOR = DefaultLoggingConfigurator()
   
   # Console Log Settings
   
   LOG_FORMAT = "%(asctime)s:%(levelname)s:%(name)s:%(message)s"
   LOG_LEVEL = "INFO"
   
   # ---------------------------------------------------
   # Enable Time Rotate Log Handler
   # ---------------------------------------------------
   # LOG_LEVEL = DEBUG, INFO, WARNING, ERROR, CRITICAL
   
   ENABLE_TIME_ROTATE = True
   TIME_ROTATE_LOG_LEVEL = "DEBUG"
   FILENAME = "/var/log/superset.log"
   ROLLOVER = "midnight"
   INTERVAL = 1
   BACKUP_COUNT = 30
   
   # Custom logger for auditing queries. This can be used to send ran queries to a
   # structured immutable store for auditing purposes. The function is called for
   # every query ran, in both SQL Lab and charts/dashboards.
   # def QUERY_LOGGER(
   #     database,
   #     query,
   #     schema=None,
   #     user=None,
   #     client=None,
   #     security_manager=None,
   #     log_params=None,
   # ):
   #     pass
   QUERY_LOGGER = None
   
   # Set this API key to enable Mapbox visualizations
   MAPBOX_API_KEY = os.environ.get("MAPBOX_API_KEY", "")
   
   # Maximum number of rows returned from a database
   # in async mode, no more than SQL_MAX_ROW will be returned and stored
   # in the results backend. This also becomes the limit when exporting CSVs
   SQL_MAX_ROW = 100000
   
   # Maximum number of rows displayed in SQL Lab UI
   # Is set to avoid out of memory/localstorage issues in browsers. Does not affect
   # exported CSVs
   DISPLAY_MAX_ROW = 10000
   
   # Default row limit for SQL Lab queries. Is overridden by setting a new limit in
   # the SQL Lab UI
   DEFAULT_SQLLAB_LIMIT = 1000
   
   # Maximum number of tables/views displayed in the dropdown window in SQL Lab.
   MAX_TABLE_NAMES = 3000
   
   # Adds a warning message on sqllab save query and schedule query modals.
   SQLLAB_SAVE_WARNING_MESSAGE = None
   SQLLAB_SCHEDULE_WARNING_MESSAGE = None
   
   # Default celery config is to use SQLA as a broker, in a production setting
   # you'll want to use a proper broker as specified here:
   # http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html
   
   
   class CeleryConfig:  # pylint: disable=too-few-public-methods
       BROKER_URL = "redis://localhost:6379/0"
       CELERY_IMPORTS = ("superset.sql_lab", "superset.tasks")
       CELERY_RESULT_BACKEND = "postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc"
       CELERYD_LOG_LEVEL = "INFO"
       CELERYD_PREFETCH_MULTIPLIER = 10
       CELERY_ACKS_LATE = True
       CELERY_ANNOTATIONS = {
           "sql_lab.get_sql_results": {"rate_limit": "100/s"},
           "email_reports.send": {
               "rate_limit": "1/s",
               "time_limit": 320,
               "soft_time_limit": 350,
               "ignore_result": True,
           },
       }
       CELERYBEAT_SCHEDULE = {
           "email_reports.schedule_hourly": {
               "task": "email_reports.schedule_hourly",
               "schedule": crontab(minute=1, hour="*"),
           }
       }
   
   
   CELERY_CONFIG = CeleryConfig  # pylint: disable=invalid-name
   
   # Set celery config to None to disable all the above configuration
   # CELERY_CONFIG = None
   
   # Additional static HTTP headers to be served by your Superset server. Note
   # Flask-Talisman applies the relevant security HTTP headers.
   #
   # DEFAULT_HTTP_HEADERS: sets default values for HTTP headers. These may be overridden
   # within the app
   # OVERRIDE_HTTP_HEADERS: sets override values for HTTP headers. These values will
   # override anything set within the app
   DEFAULT_HTTP_HEADERS: Dict[str, Any] = {}
   OVERRIDE_HTTP_HEADERS: Dict[str, Any] = {}
   HTTP_HEADERS: Dict[str, Any] = {}
   
   # The db id here results in selecting this one as a default in SQL Lab
   DEFAULT_DB_ID = None
   
   # Timeout duration for SQL Lab synchronous queries
   SQLLAB_TIMEOUT = 30
   
   # Timeout duration for SQL Lab query validation
   SQLLAB_VALIDATION_TIMEOUT = 10
   
   # SQLLAB_DEFAULT_DBID
   SQLLAB_DEFAULT_DBID = None
   
   # The MAX duration (in seconds) a query can run for before being killed
   # by celery.
   SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6
   
   # Some databases support running EXPLAIN queries that allow users to estimate
   # query costs before they run. These EXPLAIN queries should have a small
   # timeout.
   SQLLAB_QUERY_COST_ESTIMATE_TIMEOUT = 10  # seconds
   
   # Flag that controls if limit should be enforced on the CTA (create table as queries).
   SQLLAB_CTAS_NO_LIMIT = False
   
   # This allows you to define custom logic around the "CREATE TABLE AS" or CTAS feature
   # in SQL Lab that defines where the target schema should be for a given user.
   # Database `CTAS Schema` has a precedence over this setting.
   # Example below returns a username and CTA queries will write tables into the schema
   # name `username`
   # SQLLAB_CTAS_SCHEMA_NAME_FUNC = lambda database, user, schema, sql: user.username
   # This is move involved example where depending on the database you can leverage data
   # available to assign schema for the CTA query:
   # def compute_schema_name(database: Database, user: User, schema: str, sql: str) -> str:
   #     if database.name == 'mysql_payments_slave':
   #         return 'tmp_superset_schema'
   #     if database.name == 'presto_gold':
   #         return user.username
   #     if database.name == 'analytics':
   #         if 'analytics' in [r.name for r in user.roles]:
   #             return 'analytics_cta'
   #         else:
   #             return f'tmp_{schema}'
   # Function accepts database object, user object, schema name and sql that will be run.
   SQLLAB_CTAS_SCHEMA_NAME_FUNC: Optional[
       Callable[["Database", "models.User", str, str], str]
   ] = None
   
   # If enabled, it can be used to store the results of long-running queries
   # in SQL Lab by using the "Run Async" button/feature
   RESULTS_BACKEND = RedisCache(
      host='localhost', port=6379, key_prefix='superset_results')
   
   
   # Use PyArrow and MessagePack for async query results serialization,
   # rather than JSON. This feature requires additional testing from the
   # community before it is fully adopted, so this config option is provided
   # in order to disable should breaking issues be discovered.
   RESULTS_BACKEND_USE_MSGPACK = True
   
   # The S3 bucket where you want to store your external hive tables created
   # from CSV files. For example, 'companyname-superset'
   CSV_TO_HIVE_UPLOAD_S3_BUCKET = None
   
   # The directory within the bucket specified above that will
   # contain all the external tables
   CSV_TO_HIVE_UPLOAD_DIRECTORY = "EXTERNAL_HIVE_TABLES/"
   # Function that creates upload directory dynamically based on the
   # database used, user and schema provided.
   CSV_TO_HIVE_UPLOAD_DIRECTORY_FUNC: Callable[
       ["Database", "models.User", str], Optional[str]
   ] = lambda database, user, schema: CSV_TO_HIVE_UPLOAD_DIRECTORY
   
   # The namespace within hive where the tables created from
   # uploading CSVs will be stored.
   UPLOADED_CSV_HIVE_NAMESPACE: Optional[str] = None
   
   # Function that computes the allowed schemas for the CSV uploads.
   # Allowed schemas will be a union of schemas_allowed_for_csv_upload
   # db configuration and a result of this function.
   
   # mypy doesn't catch that if case ensures list content being always str
   ALLOWED_USER_CSV_SCHEMA_FUNC: Callable[
       ["Database", "models.User"], List[str]
   ] = lambda database, user: [
       UPLOADED_CSV_HIVE_NAMESPACE
   ] if UPLOADED_CSV_HIVE_NAMESPACE else []
   
   # Values that should be treated as nulls for the csv uploads.
   CSV_DEFAULT_NA_NAMES = list(STR_NA_VALUES)
   
   # A dictionary of items that gets merged into the Jinja context for
   # SQL Lab. The existing context gets updated with this dictionary,
   # meaning values for existing keys get overwritten by the content of this
   # dictionary.
   JINJA_CONTEXT_ADDONS: Dict[str, Callable[..., Any]] = {}
   
   # A dictionary of macro template processors that gets merged into global
   # template processors. The existing template processors get updated with this
   # dictionary, which means the existing keys get overwritten by the content of this
   # dictionary. The customized addons don't necessarily need to use jinjia templating
   # language. This allows you to define custom logic to process macro template.
   CUSTOM_TEMPLATE_PROCESSORS: Dict[str, Type[BaseTemplateProcessor]] = {}
   
   # Roles that are controlled by the API / Superset and should not be changes
   # by humans.
   ROBOT_PERMISSION_ROLES = ["Public", "Gamma", "Alpha", "Admin", "sql_lab"]
   
   CONFIG_PATH_ENV_VAR = "SUPERSET_CONFIG_PATH"
   
   # If a callable is specified, it will be called at app startup while passing
   # a reference to the Flask app. This can be used to alter the Flask app
   # in whatever way.
   # example: FLASK_APP_MUTATOR = lambda x: x.before_request = f
   FLASK_APP_MUTATOR = None
   
   # Set this to false if you don't want users to be able to request/grant
   # datasource access requests from/to other users.
   ENABLE_ACCESS_REQUEST = False
   
   # smtp server configuration
   EMAIL_NOTIFICATIONS = True  # all the emails are sent using dryrun
   SMTP_HOST = "100.200.156.23"
   SMTP_STARTTLS = False
   SMTP_SSL = False
   SMTP_USER = ""
   SMTP_PORT = 25
   SMTP_PASSWORD = ""
   SMTP_MAIL_FROM = "superset@objectway.com"
   
   ENABLE_CHUNK_ENCODING = False
   
   # Whether to bump the logging level to ERROR on the flask_appbuilder package
   # Set to False if/when debugging FAB related issues like
   # permission management
   SILENCE_FAB = True
   
   FAB_ADD_SECURITY_VIEWS = True
   FAB_ADD_SECURITY_PERMISSION_VIEW = False
   FAB_ADD_SECURITY_VIEW_MENU_VIEW = False
   FAB_ADD_SECURITY_PERMISSION_VIEWS_VIEW = False
   
   # The link to a page containing common errors and their resolutions
   # It will be appended at the bottom of sql_lab errors.
   TROUBLESHOOTING_LINK = ""
   
   # CSRF token timeout, set to None for a token that never expires
   WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 7
   
   # This link should lead to a page with instructions on how to gain access to a
   # Datasource. It will be placed at the bottom of permissions errors.
   PERMISSION_INSTRUCTIONS_LINK = ""
   
   # Integrate external Blueprints to the app by passing them to your
   # configuration. These blueprints will get integrated in the app
   BLUEPRINTS: List[Blueprint] = []
   
   # Provide a callable that receives a tracking_url and returns another
   # URL. This is used to translate internal Hadoop job tracker URL
   # into a proxied one
   TRACKING_URL_TRANSFORMER = lambda x: x
   
   # Interval between consecutive polls when using Hive Engine
   HIVE_POLL_INTERVAL = 5
   
   # Interval between consecutive polls when using Presto Engine
   # See here: https://github.com/dropbox/PyHive/blob/8eb0aeab8ca300f3024655419b93dad926c1a351/pyhive/presto.py#L93  # pylint: disable=line-too-long
   PRESTO_POLL_INTERVAL = 1
   
   # Allow for javascript controls components
   # this enables programmers to customize certain charts (like the
   # geospatial ones) by inputing javascript in controls. This exposes
   # an XSS security vulnerability
   ENABLE_JAVASCRIPT_CONTROLS = False
   
   # The id of a template dashboard that should be copied to every new user
   DASHBOARD_TEMPLATE_ID = None
   
   # A callable that allows altering the database conneciton URL and params
   # on the fly, at runtime. This allows for things like impersonation or
   # arbitrary logic. For instance you can wire different users to
   # use different connection parameters, or pass their email address as the
   # username. The function receives the connection uri object, connection
   # params, the username, and returns the mutated uri and params objects.
   # Example:
   #   def DB_CONNECTION_MUTATOR(uri, params, username, security_manager, source):
   #       user = security_manager.find_user(username=username)
   #       if user and user.email:
   #           uri.username = user.email
   #       return uri, params
   #
   # Note that the returned uri and params are passed directly to sqlalchemy's
   # as such `create_engine(url, **params)`
   DB_CONNECTION_MUTATOR = None
   
   # A function that intercepts the SQL to be executed and can alter it.
   # The use case is can be around adding some sort of comment header
   # with information such as the username and worker node information
   #
   #    def SQL_QUERY_MUTATOR(sql, username, security_manager):
   #        dttm = datetime.now().isoformat()
   #        return f"-- [SQL LAB] {username} {dttm}\n{sql}"
   SQL_QUERY_MUTATOR = None
   
   # Enable / disable scheduled email reports
   ENABLE_SCHEDULED_EMAIL_REPORTS = True
   
   # Enable / disable Alerts, where users can define custom SQL that
   # will send emails with screenshots of charts or dashboards periodically
   # if it meets the criteria
   ENABLE_ALERTS = True
   
   # Slack API token for the superset reports
   SLACK_API_TOKEN = None
   SLACK_PROXY = None
   
   # If enabled, certail features are run in debug mode
   # Current list:
   # * Emails are sent using dry-run mode (logging only)
   SCHEDULED_EMAIL_DEBUG_MODE = False
   
   # This auth provider is used by background (offline) tasks that need to access
   # protected resources. Can be overridden by end users in order to support
   # custom auth mechanisms
   MACHINE_AUTH_PROVIDER_CLASS = "superset.utils.machine_auth.MachineAuthProvider"
   
   # Email reports - minimum time resolution (in minutes) for the crontab
   EMAIL_REPORTS_CRON_RESOLUTION = 15
   
   # The MAX duration (in seconds) a email schedule can run for before being killed
   # by celery.
   EMAIL_ASYNC_TIME_LIMIT_SEC = 300
   
   # Email report configuration
   # From address in emails
   EMAIL_REPORT_FROM_ADDRESS = "reports@superset.org"
   
   # Send bcc of all reports to this address. Set to None to disable.
   # This is useful for maintaining an audit trail of all email deliveries.
   EMAIL_REPORT_BCC_ADDRESS = None
   
   # User credentials to use for generating reports
   # This user should have permissions to browse all the dashboards and
   # slices.
   # TODO: In the future, login as the owner of the item to generate reports
   EMAIL_REPORTS_USER = "admin"
   EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] "
   
   # The webdriver to use for generating reports. Use one of the following
   # firefox
   #   Requires: geckodriver and firefox installations
   #   Limitations: can be buggy at times
   # chrome:
   #   Requires: headless chrome
   #   Limitations: unable to generate screenshots of elements
   WEBDRIVER_TYPE = "firefox"
   
   # Window size - this will impact the rendering of the data
   WEBDRIVER_WINDOW = {"dashboard": (1600, 2000), "slice": (3000, 1200)}
   
   # An optional override to the default auth hook used to provide auth to the
   # offline webdriver
   WEBDRIVER_AUTH_FUNC = None
   
   # Any config options to be passed as-is to the webdriver
   WEBDRIVER_CONFIGURATION: Dict[Any, Any] = {}
   
   # Additional args to be passed as arguments to the config object
   # Note: these options are Chrome-specific. For FF, these should
   # only include the "--headless" arg
   WEBDRIVER_OPTION_ARGS = [
       "--force-device-scale-factor=2.0",
       "--high-dpi-support=2.0",
       "--headless",
   ]
   
   # The base URL to query for accessing the user interface
   WEBDRIVER_BASEURL = "http://0.0.0.0:8088/"
   # The base URL for the email report hyperlinks.
   WEBDRIVER_BASEURL_USER_FRIENDLY = WEBDRIVER_BASEURL
   # Time in seconds, selenium will wait for the page to load
   # and render for the email report.
   EMAIL_PAGE_RENDER_WAIT = 30
   
   # Send user to a link where they can report bugs
   BUG_REPORT_URL = None
   
   # Send user to a link where they can read more about Superset
   DOCUMENTATION_URL = None
   DOCUMENTATION_TEXT = "Documentation"
   DOCUMENTATION_ICON = None  # Recommended size: 16x16
   
   # Enables the replacement react views for all the FAB views (list, edit, show) with
   # designs introduced in SIP-34: https://github.com/apache/incubator-superset/issues/8976
   # This is a work in progress so not all features available in FAB have been implemented
   ENABLE_REACT_CRUD_VIEWS = False
   
   # What is the Last N days relative in the time selector to:
   # 'today' means it is midnight (00:00:00) in the local timezone
   # 'now' means it is relative to the query issue time
   # If both start and end time is set to now, this will make the time
   # filter a moving window. By only setting the end time to now,
   # start time will be set to midnight, while end will be relative to
   # the query issue time.
   DEFAULT_RELATIVE_START_TIME = "today"
   DEFAULT_RELATIVE_END_TIME = "now"
   
   # Configure which SQL validator to use for each engine
   SQL_VALIDATORS_BY_ENGINE = {"presto": "PrestoDBSQLValidator"}
   
   # Do you want Talisman enabled?
   TALISMAN_ENABLED = False
   # If you want Talisman, how do you want it configured??
   TALISMAN_CONFIG = {
       "content_security_policy": None,
       "force_https": True,
       "force_https_permanent": False,
   }
   
   # Note that: RowLevelSecurityFilter is only given by default to the Admin role
   # and the Admin Role does have the all_datasources security permission.
   # But, if users create a specific role with access to RowLevelSecurityFilter MVC
   # and a custom datasource access, the table dropdown will not be correctly filtered
   # by that custom datasource access. So we are assuming a default security config,
   # a custom security config could potentially give access to setting filters on
   # tables that users do not have access to.
   ENABLE_ROW_LEVEL_SECURITY = False
   # It is possible to customize which tables and roles are featured in the RLS
   # dropdown. When set, this dict is assigned to `add_form_query_rel_fields` and
   # `edit_form_query_rel_fields` on `RowLevelSecurityFiltersModelView`. Example:
   #
   # from flask_appbuilder.models.sqla import filters
   # RLS_FORM_QUERY_REL_FIELDS = {
   #     "roles": [["name", filters.FilterStartsWith, "RlsRole"]]
   #     "tables": [["table_name", filters.FilterContains, "rls"]]
   # }
   RLS_FORM_QUERY_REL_FIELDS: Optional[Dict[str, List[List[Any]]]] = None
   
   #
   # Flask session cookie options
   #
   # See https://flask.palletsprojects.com/en/1.1.x/security/#set-cookie-options
   # for details
   #
   SESSION_COOKIE_HTTPONLY = True  # Prevent cookie from being read by frontend JS?
   SESSION_COOKIE_SECURE = False  # Prevent cookie from being transmitted over non-tls?
   SESSION_COOKIE_SAMESITE = "Lax"  # One of [None, 'None', 'Lax', 'Strict']
   
   # Flask configuration variables
   SEND_FILE_MAX_AGE_DEFAULT = 60 * 60 * 24 * 365  # Cache static resources
   
   # URI to database storing the example data, points to
   # SQLALCHEMY_DATABASE_URI by default if set to `None`
   SQLALCHEMY_EXAMPLES_URI = None
   
   # Some sqlalchemy connection strings can open Superset to security risks.
   # Typically these should not be allowed.
   PREVENT_UNSAFE_DB_CONNECTIONS = True
   
   # Path used to store SSL certificates that are generated when using custom certs.
   # Defaults to temporary directory.
   # Example: SSL_CERT_PATH = "/certs"
   SSL_CERT_PATH: Optional[str] = None
   
   # SIP-15 should be enabled for all new Superset deployments which ensures that the time
   # range endpoints adhere to [start, end). For existing deployments admins should provide
   # a dedicated period of time to allow chart producers to update their charts before
   # mass migrating all charts to use the [start, end) interval.
   #
   # Note if no end date for the grace period is specified then the grace period is
   # indefinite.
   SIP_15_ENABLED = True
   SIP_15_GRACE_PERIOD_END: Optional[date] = None  # exclusive
   SIP_15_DEFAULT_TIME_RANGE_ENDPOINTS = ["unknown", "inclusive"]
   SIP_15_TOAST_MESSAGE = (
       "Action Required: Preview then save your chart using the "
       'new time range endpoints <a target="_blank" href="{url}" '
       'class="alert-link">here</a>.'
   )
   
   
   # SQLA table mutator, every time we fetch the metadata for a certain table
   # (superset.connectors.sqla.models.SqlaTable), we call this hook
   # to allow mutating the object with this callback.
   # This can be used to set any properties of the object based on naming
   # conventions and such. You can find examples in the tests.
   SQLA_TABLE_MUTATOR = lambda table: table
   
   if CONFIG_PATH_ENV_VAR in os.environ:
       # Explicitly import config module that is not necessarily in pythonpath; useful
       # for case where app is being executed via pex.
       try:
           cfg_path = os.environ[CONFIG_PATH_ENV_VAR]
           module = sys.modules[__name__]
           override_conf = imp.load_source("superset_config", cfg_path)
           for key in dir(override_conf):
               if key.isupper():
                   setattr(module, key, getattr(override_conf, key))
   
           print(f"Loaded your LOCAL configuration at [{cfg_path}]")
       except Exception:
           logger.exception(
               "Failed to import config for %s=%s", CONFIG_PATH_ENV_VAR, cfg_path
           )
           raise
   elif importlib.util.find_spec("superset_config"):
       try:
           import superset_config  # pylint: disable=import-error
           from superset_config import *  # type: ignore  # pylint: disable=import-error,wildcard-import,unused-wildcard-import
   
           print(f"Loaded your LOCAL configuration at [{superset_config.__file__}]")
       except Exception:
           logger.exception("Found but failed to import local superset_config")
           raise


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-732059304


   Sorry again, but when you say "go to your DB and see if the table is there", what do you mean exactly?
   Which db you are talking about? Besides how can i query this db if i cannot open Superset SQLab from the portal?
   Thanks


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737330682


   Thanks a lot. Let me try, I'll let you know...
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] dpgaspar commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
dpgaspar commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734194982


   enclose the text inside 3 "`", here: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] dpgaspar commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
dpgaspar commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-732055974


   then you have to troubleshoot, sanity check, and go to your DB and see if the table is there (it shouldn't). note that `superset` cmd will (by default) use sqlite and not pick up your `superset_config.py`


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-743352278


   Nice solution for previous error. In essence /etc/hosts have to contain localhost, it's a very strong default and many services relies on that DNS name, we had faced previously with redis error due to same misconfiguration of your OS. 
   I have just checked https://stackoverflow.com/questions/43713445/selenium-unable-to-find-a-matching-set-of-capabilities-despite-driver-being-in . There are many good pieces of advice. No, I haven't such problems in my experience.
   From my side I would check compatibility first at https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html , find your versions of firefox and geckodriver and compare. An architecture of firefox and geckodriver packages also matters - 32-bit (x86) or 64-bit. Both must have same 64x architecture. 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-735737799


   This is my new PATH and PYTHONPATH:
   
   export PYTHONPATH="/home/matteo/superset/config"
   export PATH="/home/matteo/env/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/matteo/python-environments/env/bin"


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-740613507


   My env is setup on python3. All fine. This is my spec of packages. 
   ```
   aiohttp==3.7.3
   alembic==1.4.3
   amqp==2.6.1
   apache-superset==0.37.2
   apispec==3.3.2
   appdirs==1.4.4
   async-timeout==3.0.1
   attrs==20.3.0
   Babel==2.9.0
   backoff==1.10.0
   billiard==3.6.3.0
   bleach==3.2.1
   Brotli==1.0.9
   cachelib==0.1.1
   celery==4.4.7
   certifi==2020.11.8
   cffi==1.14.3
   chardet==3.0.4
   click==7.1.2
   clickhouse-driver==0.1.5
   clickhouse-sqlalchemy==0.1.4
   colorama==0.4.4
   contextlib2==0.6.0.post1
   croniter==0.3.36
   cryptography==3.2.1
   dataclasses==0.6
   decorator==4.4.2
   defusedxml==0.6.0
   distlib==0.3.1
   dnspython==2.0.0
   email-validator==1.1.2
   filelock==3.0.12
   Flask==1.1.2
   Flask-AppBuilder==3.1.1
   Flask-Babel==1.0.0
   Flask-Caching==1.9.0
   Flask-Compress==1.8.0
   Flask-JWT-Extended==3.25.0
   Flask-Login==0.4.1
   Flask-Migrate==2.5.3
   Flask-OpenID==1.2.5
   Flask-SQLAlchemy==2.4.4
   flask-talisman==0.7.0
   Flask-WTF==0.14.3
   flower==0.9.5
   geographiclib==1.50
   geopy==2.0.0
   gevent==20.9.0
   greenlet==0.4.17
   gunicorn==20.0.4
   humanize==3.1.0
   idna==2.10
   idna-ssl==1.1.0
   importlib-metadata==2.0.0
   importlib-resources==3.3.0
   infi.clickhouse-orm==2.1.0
   iso8601==0.1.13
   isodate==0.6.0
   itsdangerous==1.1.0
   Jinja2==2.11.2
   jsonschema==3.2.0
   kombu==4.6.11
   Mako==1.1.3
   Markdown==3.3.3
   MarkupSafe==1.1.1
   marshmallow==3.9.1
   marshmallow-enum==1.5.1
   marshmallow-sqlalchemy==0.23.1
   msgpack==1.0.0
   multidict==5.0.2
   mysqlclient==2.0.1
   mysql-connector-python==8.0.22
   natsort==7.1.0
   numpy==1.19.4
   packaging==20.4
   pandas==1.0.5
   parsedatetime==2.6
   pathlib2==2.3.5
   Pillow==8.0.1
   polyline==1.4.0
   prison==0.1.3
   prometheus-client==0.8.0
   protobuf==3.14.0
   py==1.9.0
   pyarrow==0.17.1
   pycparser==2.20
   PyJWT==1.7.1
   PyMySQL==0.10.1
   pyparsing==2.4.7
   pyrsistent==0.17.3
   python3-openid==3.2.0
   python-dateutil==2.8.1
   python-dotenv==0.15.0
   python-editor==1.0.4
   python-geohash==0.8.5
   pytz==2020.4
   PyYAML==5.3.1
   redis==3.5.3
   requests==2.25.0
   retry==0.9.2
   selenium==3.141.0
   simplejson==3.17.2
   six==1.15.0
   slackclient==2.5.0
   SQLAlchemy==1.3.20
   sqlalchemy-clickhouse==0.1.5.post0
   SQLAlchemy-Utils==0.36.8
   sqlparse==0.3.0
   tornado==6.1
   typing-extensions==3.7.4.3
   tzlocal==2.1
   urllib3==1.26.2
   vine==1.3.0
   virtualenv==20.2.0
   webencodings==0.5.1
   Werkzeug==1.0.1
   WTForms==2.3.3
   WTForms-JSON==0.3.3
   yarl==1.6.3
   zipp==3.4.0
   zope.event==4.5.0
   zope.interface==5.2.0
   ```
   Ping me in Skype! Have a nice day!


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737416631


   Regarding the other questions:
   
   Yes i have installed Firefox-ESR with the following command: apt-get install firefox-esr
   
   This is the latest superset_config file 
   [superset_config_NEW.txt](https://github.com/apache/incubator-superset/files/5631327/superset_config_NEW.txt)
   
   I have changed the path for the superset logs to "/home/matteo/superset/config/superset.log"
   This is the latest one
   [superset.log](https://github.com/apache/incubator-superset/files/5631350/superset.log)
   
   Thanks
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737178308


   Hi, sorry for bugging you again!
   
   Now i have fixed the issue with CELERY_RESULT_BACKEND setting it works fine like this "db+postgresql://matteo:matteo@127.0.0.1/superset_loc"
   
   But there is still another issue with my Celery configuration (the BROKER_URL = "redis://localhost:6379/0" i guess...)
   
   This is the new error i get when i attempt to start the CELERY WORKER
   
   
   (env4) matteo@mbalzarotti-NB:~/superset$ celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
   Loaded your LOCAL configuration at [/home/matteo/superset/config/superset_config.py]
   logging was configured successfully
   INFO:superset.utils.logging_configurator:logging was configured successfully
   /home/matteo/superset/env4/lib/python3.7/site-packages/flask_caching/__init__.py:192: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled.
     "Flask-Caching: CACHE_TYPE is set to null, "
   No PIL installation found
   INFO:superset.utils.screenshots:No PIL installation found
   
    -------------- celery@mbalzarotti-NB v4.4.7 (cliffs)
   --- ***** -----
   -- ******* ---- Linux-4.4.0-18362-Microsoft-x86_64-with-debian-10.6 2020-12-02 12:35:25
   - *** --- * ---
   - ** ---------- [config]
   - ** ---------- .> app:         __main__:0x7fcc30479550
   - ** ---------- .> transport:   redis://localhost:6379/0
   - ** ---------- .> results:     postgresql://matteo:**@127.0.0.1/superset_loc
   - *** --- * --- .> concurrency: 4 (prefork)
   -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
   --- ***** -----
    -------------- [queues]
                   .> celery           exchange=celery(direct) key=celery
   
   
   [2020-12-02 12:35:25,656: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 111 connecting to localhost:6379. Connection refused..
   Trying again in 2.00 seconds... (1/100)
   
   [2020-12-02 12:35:27,665: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 111 connecting to localhost:6379. Connection refused..
   Trying again in 4.00 seconds... (2/100)
   
   ....


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734322133


   Most probably because after enabling ENABLE_SCHEDULED_EMAIL_REPORTS you must execute `superset init`. I suggest you to spend 30 minutes more, but keep overrides in separate file.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 edited a comment on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 edited a comment on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-735929520


   Created new virtual environment env3 but now there is a new error when i run the superset db upgrade command
   
   > (env3) matteo@mbalzarotti-NB:~/superset$ superset db upgrade
   Found but failed to import local superset_config
   Traceback (most recent call last):
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/config.py", line 956, in <module>
       import superset_config  # pylint: disable=import-error
     File "/home/matteo/superset/config/superset_config.py", line 32, in <module>
       class CeleryConfig:  # pylint: disable=too-few-public-methods
     File "/home/matteo/superset/config/superset_config.py", line 51, in CeleryConfig
       "schedule": crontab(minute=1, hour="*"),
   NameError: name 'crontab' is not defined
   Failed to create app
   Traceback (most recent call last):
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/app.py", line 59, in create_app
       app.config.from_object(config_module)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/config.py", line 174, in from_object
       obj = import_string(obj)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/werkzeug/utils.py", line 568, in import_string
       __import__(import_name)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/config.py", line 956, in <module>
       import superset_config  # pylint: disable=import-error
     File "/home/matteo/superset/config/superset_config.py", line 32, in <module>
       class CeleryConfig:  # pylint: disable=too-few-public-methods
     File "/home/matteo/superset/config/superset_config.py", line 51, in CeleryConfig
       "schedule": crontab(minute=1, hour="*"),
   NameError: name 'crontab' is not defined
   Traceback (most recent call last):
     File "/home/matteo/superset/env3/bin/superset", line 8, in <module>
       sys.exit(superset())
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 829, in __call__
       return self.main(*args, **kwargs)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/cli.py", line 586, in main
       return super(FlaskGroup, self).main(*args, **kwargs)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 782, in main
       rv = self.invoke(ctx)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 1256, in invoke
       Command.invoke(self, ctx)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
       return ctx.invoke(self.callback, **ctx.params)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 610, in invoke
       return callback(*args, **kwargs)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/decorators.py", line 21, in new_func
       return f(get_current_context(), *args, **kwargs)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/cli.py", line 425, in decorator
       with __ctx.ensure_object(ScriptInfo).load_app().app_context():
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/cli.py", line 381, in load_app
       app = call_factory(self, self.create_app)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/cli.py", line 119, in call_factory
       return app_factory()
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/app.py", line 69, in create_app
       raise ex
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/app.py", line 59, in create_app
       app.config.from_object(config_module)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/config.py", line 174, in from_object
       obj = import_string(obj)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/werkzeug/utils.py", line 568, in import_string
       __import__(import_name)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/config.py", line 956, in <module>
       import superset_config  # pylint: disable=import-error
     File "/home/matteo/superset/config/superset_config.py", line 32, in <module>
       class CeleryConfig:  # pylint: disable=too-few-public-methods
     File "/home/matteo/superset/config/superset_config.py", line 51, in CeleryConfig
       "schedule": crontab(minute=1, hour="*"),
   NameError: name 'crontab' is not defined
   (env3) matteo@mbalzarotti-NB:~/superset$                                                    
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737404517


   Hi! Something bad happened between firefox and gecko.
   
   - Did you provide all the stacktrace in message above?
   - What is your firefox version? Is it Firefox ESR?
   - Please provide your superset_config.py once more
   - Check superset logs /var/log/apache-superset/superset.log
   
   Try to run `celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4 -E` ( enable -E to monitor tasks in this worker ) and see what happens, maybe there will be a hint.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] dpgaspar commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
dpgaspar commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-732063766


   the DB is the one you have (or not) configured on your config file, use any available tool to access and query your DB.
   
   for sqlite, use `sqlite3`, for postgres use `psql` etc... (just some examples to help you out)


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-738002870


   yes
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] dpgaspar commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
dpgaspar commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-732052745


   No problem, checkout: https://superset.apache.org/docs/installation/installing-superset-from-scratch
   
   your probably missing:
   ```
   superset db upgrade
   ```
   
   But follow all steps
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-732066585


   Now i believe i understand what you mean
   I have not installed or configured any db during Superset installation, i thought it was installing is own components somewhere in the file system.
   I have just run the command superset db upgrade
   Let me do that and see what's happen next, i let you know
   Thanks again 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-733824076


   @bzmatteo72 hi, eventually you should end up with config kinda mine. Pay attention that my application is bound to port 9000 and hidden behind nginx on https://dev-superset-01.localhost.localdomain/, mysql as backend and redis for brokers and cache.
   
   ```
   (venv) [superset@dev-superset-01 ~]$ cat config/superset_config.py
   from celery.schedules import crontab
   from cachelib.redis import RedisCache
   
   #---------------------------------------------------------
   # Superset specific config
   #---------------------------------------------------------
   
   SQLALCHEMY_DATABASE_URI = 'mysql://superset:passsssword@localhost/superset'
   
   ## include current/last day into reports
   DEFAULT_RELATIVE_END_TIME = "now"
   
   # Default configurator will consume the LOG_* settings below
   #LOGGING_CONFIGURATOR = DefaultLoggingConfigurator()
   
   # Console Log Settings
   
   LOG_FORMAT = "%(asctime)s:%(levelname)s:%(name)s:%(message)s"
   LOG_LEVEL = "INFO"
   
   # ---------------------------------------------------
   # Enable Time Rotate Log Handler
   # ---------------------------------------------------
   # LOG_LEVEL = DEBUG, INFO, WARNING, ERROR, CRITICAL
   
   ENABLE_TIME_ROTATE = True
   TIME_ROTATE_LOG_LEVEL = "DEBUG"
   FILENAME = "/var/log/apache-superset/superset.log"
   ROLLOVER = "midnight"
   INTERVAL = 1
   BACKUP_COUNT = 30
   
   # If the load balancer is inserting X-Forwarded-For/X-Forwarded-Proto headers, you should set ENABLE_PROXY_FIX = True in the superset config file to extract and use the headers.
   ENABLE_PROXY_FIX = True
   
   # Enable / disable scheduled email reports
   ENABLE_SCHEDULED_EMAIL_REPORTS = True
   ENABLE_ALERTS = True
   EMAIL_NOTIFICATIONS = True
   EMAIL_REPORTS_USER = "admin"
   EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] "
   EMAIL_REPORTS_WEBDRIVER = "firefox"
   SMTP_HOST = "localhost"
   SMTP_STARTTLS = False
   SMTP_SSL = False
   SMTP_PORT = 25
   SMTP_USER = ""
   SMTP_PASSWORD = ""
   SMTP_MAIL_FROM = "superset@playtech.com"
   
   WEBDRIVER_BASEURL = "http://0.0.0.0:9000/"
   WEBDRIVER_BASEURL_USER_FRIENDLY = "https://dev-superset-01.localhost.localdomain/"
   EMAIL_PAGE_RENDER_WAIT = 30
   
   class CeleryConfig(object):
       BROKER_URL = 'redis://localhost:6379/0'
       CELERY_IMPORTS = (
           'superset.sql_lab',
           'superset.tasks',
       )
       CELERY_RESULT_BACKEND = 'db+mysql://superset:passsssword@localhost/superset'
       CELERYD_LOG_LEVEL = 'INFO'
       CELERYD_PREFETCH_MULTIPLIER = 10
       CELERY_ACKS_LATE = True
       CELERY_ANNOTATIONS = {
           'sql_lab.get_sql_results': {
               'rate_limit': '100/s',
           },
           'email_reports.send': {
               'rate_limit': '1/s',
               'time_limit': 320,
               'soft_time_limit': 350,
               'ignore_result': True,
           },
       }
       CELERYBEAT_SCHEDULE = {
           'email_reports.schedule_hourly': {
               'task': 'email_reports.schedule_hourly',
               'schedule': crontab(minute=1, hour='*'),
           },
       }
   
   CELERY_CONFIG = CeleryConfig
   
   RESULTS_BACKEND = RedisCache(
       host='localhost', port=6379, key_prefix='superset_results')
   
   SCREENSHOT_LOCATE_WAIT = 60
   SCREENSHOT_LOAD_WAIT = 60
   
   (venv) [superset@dev-superset-01 ~]$
   ```
   Apart of main superset config you should have also celery worker, celery beat and optionally celery flower services. [See daemonizing.html](https://docs.celeryproject.org/en/stable/userguide/daemonizing.html)
   If you need further assistance, ping me.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] issue-label-bot[bot] commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
issue-label-bot[bot] commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-731262795


   Issue-Label Bot is automatically applying the label `#bug` to this issue, with a confidence of 0.61. Please mark this comment with :thumbsup: or :thumbsdown: to give our bot feedback! 
   
    Links: [app homepage](https://github.com/marketplace/issue-label-bot), [dashboard](https://mlbot.net/data/apache/incubator-superset) and [code](https://github.com/hamelsmu/MLapp) for this bot.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737872552


   Hi!
   I have found this document (this is for Centos but i guess it shoul be even valid for Debian as well) i don't know if it might help to troubleshoot this issue:
   https://www.usessionbuddy.com/post/How-To-Install-Selenium-FireFox-On-Centos/
   
   In this step (How To Use Selenium With Firefox) is saying to perform these steps:
   
   Invoke python
   from selenium import webdriver
   from selenium.webdriver.firefox.options import Options
   options = Options()
   options.headless = True
   driver = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver',options=options)
   
   I did all the steps but the last one is failing with this error:
   
   (env4) matteo@mbalzarotti-NB:~/superset$ python
   Python 3.7.3 (default, Jul 25 2020, 13:03:44)
   [GCC 8.3.0] on linux
   Type "help", "copyright", "credits" or "license" for more information.
   >>> from selenium import webdriver
   >>> from selenium.webdriver.firefox.options import Options
   >>> options = Options()
   >>> options.headless = True
   >>> driver = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver',options=options)
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 76, in start
       stdin=PIPE)
     File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
       restore_signals, start_new_session)
     File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
       raise child_exception_type(errno_num, err_msg, err_filename)
   FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/bin/geckodriver': '/usr/local/bin/geckodriver'
   
   During handling of the above exception, another exception occurred:
   
   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
       self.service.start()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 83, in start
       os.path.basename(self.path), self.start_error_message)
   selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
   
   Please notice that i have installed geckodriver in /usr/local/bin  and this is my current PATH
   
   PATH="/home/matteo/superset/env4/bin:/home/matteo/superset/env3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/bin/geckodriver"
   
   Thanks
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737185673


   Good. Means You are moving in right direction. Redis is a requirement. For debian 9 internet (ref: https://cloudwafer.com/blog/installing-redis-on-debian-9/) says to run `apt install redis-server` and `systemctl start redis-server; systemctl status redis-server`, but it might be different for you, check carefully. After you start redis, port 6379 should be responsive. Otherwise you need you configure redis config. And of course restart your worker after.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-735929520


   Created new virtual environment env3 but now there is a new error when i run the superset db upgrade command
   
   (env3) matteo@mbalzarotti-NB:~/superset$ superset db upgrade
   Found but failed to import local superset_config
   Traceback (most recent call last):
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/config.py", line 956, in <module>
       import superset_config  # pylint: disable=import-error
     File "/home/matteo/superset/config/superset_config.py", line 32, in <module>
       class CeleryConfig:  # pylint: disable=too-few-public-methods
     File "/home/matteo/superset/config/superset_config.py", line 51, in CeleryConfig
       "schedule": crontab(minute=1, hour="*"),
   NameError: name 'crontab' is not defined
   Failed to create app
   Traceback (most recent call last):
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/app.py", line 59, in create_app
       app.config.from_object(config_module)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/config.py", line 174, in from_object
       obj = import_string(obj)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/werkzeug/utils.py", line 568, in import_string
       __import__(import_name)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/config.py", line 956, in <module>
       import superset_config  # pylint: disable=import-error
     File "/home/matteo/superset/config/superset_config.py", line 32, in <module>
       class CeleryConfig:  # pylint: disable=too-few-public-methods
     File "/home/matteo/superset/config/superset_config.py", line 51, in CeleryConfig
       "schedule": crontab(minute=1, hour="*"),
   NameError: name 'crontab' is not defined
   Traceback (most recent call last):
     File "/home/matteo/superset/env3/bin/superset", line 8, in <module>
       sys.exit(superset())
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 829, in __call__
       return self.main(*args, **kwargs)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/cli.py", line 586, in main
       return super(FlaskGroup, self).main(*args, **kwargs)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 782, in main
       rv = self.invoke(ctx)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 1256, in invoke
       Command.invoke(self, ctx)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
       return ctx.invoke(self.callback, **ctx.params)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/core.py", line 610, in invoke
       return callback(*args, **kwargs)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/click/decorators.py", line 21, in new_func
       return f(get_current_context(), *args, **kwargs)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/cli.py", line 425, in decorator
       with __ctx.ensure_object(ScriptInfo).load_app().app_context():
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/cli.py", line 381, in load_app
       app = call_factory(self, self.create_app)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/cli.py", line 119, in call_factory
       return app_factory()
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/app.py", line 69, in create_app
       raise ex
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/app.py", line 59, in create_app
       app.config.from_object(config_module)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/flask/config.py", line 174, in from_object
       obj = import_string(obj)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/werkzeug/utils.py", line 568, in import_string
       __import__(import_name)
     File "/home/matteo/superset/env3/lib/python3.7/site-packages/superset/config.py", line 956, in <module>
       import superset_config  # pylint: disable=import-error
     File "/home/matteo/superset/config/superset_config.py", line 32, in <module>
       class CeleryConfig:  # pylint: disable=too-few-public-methods
     File "/home/matteo/superset/config/superset_config.py", line 51, in CeleryConfig
       "schedule": crontab(minute=1, hour="*"),
   NameError: name 'crontab' is not defined
   (env3) matteo@mbalzarotti-NB:~/superset$                                                    
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737996820


   These are the current permissions:
   -rwxr-xr-x 1 matteo matteo  7932136 Nov  3 17:13  geckodriver
   
   I also run the command as you've recommended to check permissions:
   chmod 755 geckodriver
   
   I enable DEBUG in the superset config file
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] nytai closed issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
nytai closed issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-738002361


   alex.poltava.ua


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737998751


   Maybe we can make live session with shared screen?


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-736721734


   `ModuleNotFoundError: No module named 'postgresql'` means your celery backend is misconfigured.  I have checked celery backend config https://docs.celeryproject.org/en/latest/userguide/configuration.html#conf-database-result-backend and your latest superset_config.py file and found smth. See an example from documentation:
   ```
   # postgresql
   result_backend = 'db+postgresql://scott:tiger@localhost/mydatabase'
   ```
   I guess you should update your config with 
   `CELERY_RESULT_BACKEND = "db+postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc"` or `CELERY_RESULT_BACKEND = "db+postgresql://matteo:matteo@127.0.0.1:5432/superset_loc"` and re-run celery.
   
   In my 1st example I have also different connection strings for:
   ```
   CELERY_RESULT_BACKEND = 'db+mysql://superset:passsssword@localhost/superset'
   SQLALCHEMY_DATABASE_URI = 'mysql://superset:passsssword@localhost/superset'
   ```


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734189387


   I did a copy and paste of the file but i don't know what's happened here in the post has removed all the # character so please find attached the config file for more clarity
   [Superset_Config.txt](https://github.com/apache/incubator-superset/files/5601907/Superset_Config.txt)
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-741609358


   Hi Alex!
   Sorry yesterday was bank holiday here in Italy, I didn't check GitHub.
   
   Please let me know if you're available today and in case when i can call you with Skype.
   Thanks
   Matteo


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 removed a comment on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 removed a comment on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734215592


   '''# Licensed to the Apache Software Foundation (ASF) under one
   # or more contributor license agreements.  See the NOTICE file
   # distributed with this work for additional information
   # regarding copyright ownership.  The ASF licenses this file
   # to you under the Apache License, Version 2.0 (the
   # "License"); you may not use this file except in compliance
   # with the License.  You may obtain a copy of the License at
   #
   #   http://www.apache.org/licenses/LICENSE-2.0
   #
   # Unless required by applicable law or agreed to in writing,
   # software distributed under the License is distributed on an
   # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   # KIND, either express or implied.  See the License for the
   # specific language governing permissions and limitations
   # under the License.
   """The main config file for Superset
   
   All configuration in this file can be overridden by providing a superset_config
   in your PYTHONPATH as there is a ``from superset_config import *``
   at the end of this file.
   """
   import imp
   import importlib.util
   import json
   import logging
   import os
   import sys
   from collections import OrderedDict
   from datetime import date
   from typing import Any, Callable, Dict, List, Optional, Type, TYPE_CHECKING
   
   from cachelib.base import BaseCache
   from celery.schedules import crontab
   from dateutil import tz
   from flask import Blueprint
   from flask_appbuilder.security.manager import AUTH_DB
   from pandas.io.parsers import STR_NA_VALUES
   from cachelib.redis import RedisCache
   
   from superset.jinja_context import (  # pylint: disable=unused-import
       BaseTemplateProcessor,
   )
   from superset.stats_logger import DummyStatsLogger
   from superset.typing import CacheConfig
   from superset.utils.log import DBEventLogger
   from superset.utils.logging_configurator import DefaultLoggingConfigurator
   
   logger = logging.getLogger(__name__)
   
   if TYPE_CHECKING:
       from flask_appbuilder.security.sqla import models  # pylint: disable=unused-import
   
       from superset.models.core import Database  # pylint: disable=unused-import
   
   # Realtime stats logger, a StatsD implementation exists
   STATS_LOGGER = DummyStatsLogger()
   EVENT_LOGGER = DBEventLogger()
   
   SUPERSET_LOG_VIEW = True
   
   BASE_DIR = os.path.abspath(os.path.dirname(__file__))
   if "SUPERSET_HOME" in os.environ:
       DATA_DIR = os.environ["SUPERSET_HOME"]
   else:
       DATA_DIR = os.path.join(os.path.expanduser("~"), ".superset")
   
   # ---------------------------------------------------------
   # Superset specific config
   # ---------------------------------------------------------
   VERSION_INFO_FILE = os.path.join(BASE_DIR, "static", "version_info.json")
   PACKAGE_JSON_FILE = os.path.join(BASE_DIR, "static", "assets", "package.json")
   
   # Multiple favicons can be specified here. The "href" property
   # is mandatory, but "sizes," "type," and "rel" are optional.
   # For example:
   # {
   #     "href":path/to/image.png",
   #     "sizes": "16x16",
   #     "type": "image/png"
   #     "rel": "icon"
   # },
   FAVICONS = [{"href": "/static/assets/images/favicon.png"}]
   
   
   def _try_json_readversion(filepath: str) -> Optional[str]:
       try:
           with open(filepath, "r") as f:
               return json.load(f).get("version")
       except Exception:  # pylint: disable=broad-except
           return None
   
   
   def _try_json_readsha(  # pylint: disable=unused-argument
       filepath: str, length: int
   ) -> Optional[str]:
       try:
           with open(filepath, "r") as f:
               return json.load(f).get("GIT_SHA")[:length]
       except Exception:  # pylint: disable=broad-except
           return None
   
   
   # Depending on the context in which this config is loaded, the
   # version_info.json file may or may not be available, as it is
   # generated on install via setup.py. In the event that we're
   # actually running Superset, we will have already installed,
   # therefore it WILL exist. When unit tests are running, however,
   # it WILL NOT exist, so we fall back to reading package.json
   VERSION_STRING = _try_json_readversion(VERSION_INFO_FILE) or _try_json_readversion(
       PACKAGE_JSON_FILE
   )
   
   VERSION_SHA_LENGTH = 8
   VERSION_SHA = _try_json_readsha(VERSION_INFO_FILE, VERSION_SHA_LENGTH)
   
   ROW_LIMIT = 50000
   VIZ_ROW_LIMIT = 10000
   # max rows retreieved when requesting samples from datasource in explore view
   SAMPLES_ROW_LIMIT = 1000
   # max rows retrieved by filter select auto complete
   FILTER_SELECT_ROW_LIMIT = 10000
   SUPERSET_WORKERS = 2  # deprecated
   SUPERSET_CELERY_WORKERS = 32  # deprecated
   
   SUPERSET_WEBSERVER_PROTOCOL = "http"
   SUPERSET_WEBSERVER_ADDRESS = "0.0.0.0"
   SUPERSET_WEBSERVER_PORT = 8088
   
   # This is an important setting, and should be lower than your
   # [load balancer / proxy / envoy / kong / ...] timeout settings.
   # You should also make sure to configure your WSGI server
   # (gunicorn, nginx, apache, ...) timeout setting to be <= to this setting
   SUPERSET_WEBSERVER_TIMEOUT = 60
   
   # this 2 settings are used by dashboard period force refresh feature
   # When user choose auto force refresh frequency
   # < SUPERSET_DASHBOARD_PERIODICAL_REFRESH_LIMIT
   # they will see warning message in the Refresh Interval Modal.
   # please check PR #9886
   SUPERSET_DASHBOARD_PERIODICAL_REFRESH_LIMIT = 0
   SUPERSET_DASHBOARD_PERIODICAL_REFRESH_WARNING_MESSAGE = None
   
   SUPERSET_DASHBOARD_POSITION_DATA_LIMIT = 65535
   CUSTOM_SECURITY_MANAGER = None
   SQLALCHEMY_TRACK_MODIFICATIONS = False
   # ---------------------------------------------------------
   
   # Your App secret key
   SECRET_KEY = "\2\1thisismyscretkey\1\2\\e\\y\\y\\h"
   
   # The SQLAlchemy connection string.
   # SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
   # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
   SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc'
   
   # In order to hook up a custom password store for all SQLACHEMY connections
   # implement a function that takes a single argument of type 'sqla.engine.url',
   # returns a password and set SQLALCHEMY_CUSTOM_PASSWORD_STORE.
   #
   # e.g.:
   # def lookup_password(url):
   #     return 'secret'
   # SQLALCHEMY_CUSTOM_PASSWORD_STORE = lookup_password
   SQLALCHEMY_CUSTOM_PASSWORD_STORE = None
   
   # The limit of queries fetched for query search
   QUERY_SEARCH_LIMIT = 1000
   
   # Flask-WTF flag for CSRF
   WTF_CSRF_ENABLED = True
   
   # Add endpoints that need to be exempt from CSRF protection
   WTF_CSRF_EXEMPT_LIST = ["superset.views.core.log", "superset.charts.api.data"]
   
   # Whether to run the web server in debug mode or not
   DEBUG = os.environ.get("FLASK_ENV") == "development"
   FLASK_USE_RELOAD = True
   
   # Superset allows server-side python stacktraces to be surfaced to the
   # user when this feature is on. This may has security implications
   # and it's more secure to turn it off in production settings.
   SHOW_STACKTRACE = True
   
   # Use all X-Forwarded headers when ENABLE_PROXY_FIX is True.
   # When proxying to a different port, set "x_port" to 0 to avoid downstream issues.
   ENABLE_PROXY_FIX = True
   PROXY_FIX_CONFIG = {"x_for": 1, "x_proto": 1, "x_host": 1, "x_port": 1, "x_prefix": 1}
   
   # ------------------------------
   # GLOBALS FOR APP Builder
   # ------------------------------
   # Uncomment to setup Your App name
   APP_NAME = "Superset"
   
   # Uncomment to setup an App icon
   APP_ICON = "/static/assets/images/superset-logo-horiz.png"
   APP_ICON_WIDTH = 126
   
   # Uncomment to specify where clicking the logo would take the user
   # e.g. setting it to '/welcome' would take the user to '/superset/welcome'
   LOGO_TARGET_PATH = None
   
   # Enables SWAGGER UI for superset openapi spec
   # ex: http://localhost:8080/swagger/v1
   FAB_API_SWAGGER_UI = True
   
   # Druid query timezone
   # tz.tzutc() : Using utc timezone
   # tz.tzlocal() : Using local timezone
   # tz.gettz('Asia/Shanghai') : Using the time zone with specific name
   # [TimeZone List]
   # See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
   # other tz can be overridden by providing a local_config
   DRUID_TZ = tz.tzutc()
   DRUID_ANALYSIS_TYPES = ["cardinality"]
   
   # Legacy Druid NoSQL (native) connector
   # Druid supports a SQL interface in its newer versions.
   # Setting this flag to True enables the deprecated, API-based Druid
   # connector. This feature may be removed at a future date.
   DRUID_IS_ACTIVE = False
   
   # If Druid is active whether to include the links to scan/refresh Druid datasources.
   # This should be disabled if you are trying to wean yourself off of the Druid NoSQL
   # connector.
   DRUID_METADATA_LINKS_ENABLED = True
   
   # ----------------------------------------------------
   # AUTHENTICATION CONFIG
   # ----------------------------------------------------
   # The authentication type
   # AUTH_OID : Is for OpenID
   # AUTH_DB : Is for database (username/password)
   # AUTH_LDAP : Is for LDAP
   # AUTH_REMOTE_USER : Is for using REMOTE_USER from web server
   AUTH_TYPE = AUTH_DB
   
   # Uncomment to setup Full admin role name
   # AUTH_ROLE_ADMIN = 'Admin'
   
   # Uncomment to setup Public role name, no authentication needed
   # AUTH_ROLE_PUBLIC = 'Public'
   
   # Will allow user self registration
   # AUTH_USER_REGISTRATION = True
   
   # The default user self registration role
   # AUTH_USER_REGISTRATION_ROLE = "Public"
   
   # When using LDAP Auth, setup the LDAP server
   # AUTH_LDAP_SERVER = "ldap://ldapserver.new"
   
   # Uncomment to setup OpenID providers example for OpenID authentication
   # OPENID_PROVIDERS = [
   #    { 'name': 'Yahoo', 'url': 'https://open.login.yahoo.com/' },
   #    { 'name': 'Flickr', 'url': 'https://www.flickr.com/<username>' },
   
   # ---------------------------------------------------
   # Roles config
   # ---------------------------------------------------
   # Grant public role the same set of permissions as for a selected builtin role.
   # This is useful if one wants to enable anonymous users to view
   # dashboards. Explicit grant on specific datasets is still required.
   PUBLIC_ROLE_LIKE: Optional[str] = None
   
   # ---------------------------------------------------
   # Babel config for translations
   # ---------------------------------------------------
   # Setup default language
   BABEL_DEFAULT_LOCALE = "en"
   # Your application default translation path
   BABEL_DEFAULT_FOLDER = "superset/translations"
   # The allowed translation for you app
   LANGUAGES = {
       "en": {"flag": "us", "name": "English"},
       "es": {"flag": "es", "name": "Spanish"},
       "it": {"flag": "it", "name": "Italian"},
       "fr": {"flag": "fr", "name": "French"},
       "zh": {"flag": "cn", "name": "Chinese"},
       "ja": {"flag": "jp", "name": "Japanese"},
       "de": {"flag": "de", "name": "German"},
       "pt": {"flag": "pt", "name": "Portuguese"},
       "pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
       "ru": {"flag": "ru", "name": "Russian"},
       "ko": {"flag": "kr", "name": "Korean"},
   }
   
   # ---------------------------------------------------
   # Feature flags
   # ---------------------------------------------------
   # Feature flags that are set by default go here. Their values can be
   # overwritten by those specified under FEATURE_FLAGS in super_config.py
   # For example, DEFAULT_FEATURE_FLAGS = { 'FOO': True, 'BAR': False } here
   # and FEATURE_FLAGS = { 'BAR': True, 'BAZ': True } in superset_config.py
   # will result in combined feature flags of { 'FOO': True, 'BAR': True, 'BAZ': True }
   DEFAULT_FEATURE_FLAGS: Dict[str, bool] = {
       # Experimental feature introducing a client (browser) cache
       "CLIENT_CACHE": False,
       "ENABLE_EXPLORE_JSON_CSRF_PROTECTION": False,
       "ENABLE_DASHBOARD_ETAG_HEADER": False,
       "KV_STORE": False,
       "PRESTO_EXPAND_DATA": False,
       # Exposes API endpoint to compute thumbnails
       "THUMBNAILS": False,
       "REDUCE_DASHBOARD_BOOTSTRAP_PAYLOAD": True,
       "REMOVE_SLICE_LEVEL_LABEL_COLORS": False,
       "SHARE_QUERIES_VIA_KV_STORE": False,
       "SIP_38_VIZ_REARCHITECTURE": False,
       "TAGGING_SYSTEM": False,
       "SQLLAB_BACKEND_PERSISTENCE": False,
       "LISTVIEWS_DEFAULT_CARD_VIEW": False,
   }
   
   # Set the default view to card/grid view if thumbnail support is enabled.
   # Setting LISTVIEW_DEFAULT_CARD_VIEW to False will force the default view to
   # always be the table layout
   if DEFAULT_FEATURE_FLAGS["THUMBNAILS"]:
       DEFAULT_FEATURE_FLAGS["LISTVIEW_DEFAULT_CARD_VIEW"] = True
   
   # This is merely a default.
   FEATURE_FLAGS: Dict[str, bool] = {}
   
   # A function that receives a dict of all feature flags
   # (DEFAULT_FEATURE_FLAGS merged with FEATURE_FLAGS)
   # can alter it, and returns a similar dict. Note the dict of feature
   # flags passed to the function is a deepcopy of the dict in the config,
   # and can therefore be mutated without side-effect
   #
   # GET_FEATURE_FLAGS_FUNC can be used to implement progressive rollouts,
   # role-based features, or a full on A/B testing framework.
   #
   # from flask import g, request
   # def GET_FEATURE_FLAGS_FUNC(feature_flags_dict: Dict[str, bool]) -> Dict[str, bool]:
   #     if hasattr(g, "user") and g.user.is_active:
   #         feature_flags_dict['some_feature'] = g.user and g.user.id == 5
   #     return feature_flags_dict
   GET_FEATURE_FLAGS_FUNC: Optional[Callable[[Dict[str, bool]], Dict[str, bool]]] = None
   
   # ---------------------------------------------------
   # Thumbnail config (behind feature flag)
   # ---------------------------------------------------
   THUMBNAIL_SELENIUM_USER = "Admin"
   THUMBNAIL_CACHE_CONFIG: CacheConfig = {
       "CACHE_TYPE": "null",
       "CACHE_NO_NULL_WARNING": True,
   }
   
   # Used for thumbnails and other api: Time in seconds before selenium
   # times out after trying to locate an element on the page and wait
   # for that element to load for an alert screenshot.
   SCREENSHOT_LOCATE_WAIT = 60
   SCREENSHOT_LOAD_WAIT = 60
   
   # ---------------------------------------------------
   # Image and file configuration
   # ---------------------------------------------------
   # The file upload folder, when using models with files
   UPLOAD_FOLDER = BASE_DIR + "/app/static/uploads/"
   UPLOAD_CHUNK_SIZE = 4096
   
   # The image upload folder, when using models with images
   IMG_UPLOAD_FOLDER = BASE_DIR + "/app/static/uploads/"
   
   # The image upload url, when using models with images
   IMG_UPLOAD_URL = "/static/uploads/"
   # Setup image size default is (300, 200, True)
   # IMG_SIZE = (300, 200, True)
   
   CACHE_DEFAULT_TIMEOUT = 60 * 60 * 24
   CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
   TABLE_NAMES_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
   
   # CORS Options
   ENABLE_CORS = False
   CORS_OPTIONS: Dict[Any, Any] = {}
   
   # Chrome allows up to 6 open connections per domain at a time. When there are more
   # than 6 slices in dashboard, a lot of time fetch requests are queued up and wait for
   # next available socket. PR #5039 is trying to allow domain sharding for Superset,
   # and this feature will be enabled by configuration only (by default Superset
   # doesn't allow cross-domain request).
   SUPERSET_WEBSERVER_DOMAINS = None
   
   # Allowed format types for upload on Database view
   EXCEL_EXTENSIONS = {"xlsx", "xls"}
   CSV_EXTENSIONS = {"csv", "tsv", "txt"}
   ALLOWED_EXTENSIONS = {*EXCEL_EXTENSIONS, *CSV_EXTENSIONS}
   
   # CSV Options: key/value pairs that will be passed as argument to DataFrame.to_csv
   # method.
   # note: index option should not be overridden
   CSV_EXPORT = {"encoding": "utf-8"}
   
   # ---------------------------------------------------
   # Time grain configurations
   # ---------------------------------------------------
   # List of time grains to disable in the application (see list of builtin
   # time grains in superset/db_engine_specs.builtin_time_grains).
   # For example: to disable 1 second time grain:
   # TIME_GRAIN_DENYLIST = ['PT1S']
   TIME_GRAIN_DENYLIST: List[str] = []
   
   # Additional time grains to be supported using similar definitions as in
   # superset/db_engine_specs.builtin_time_grains.
   # For example: To add a new 2 second time grain:
   # TIME_GRAIN_ADDONS = {'PT2S': '2 second'}
   TIME_GRAIN_ADDONS: Dict[str, str] = {}
   
   # Implementation of additional time grains per engine.
   # The column to be truncated is denoted `{col}` in the expression.
   # For example: To implement 2 second time grain on clickhouse engine:
   # TIME_GRAIN_ADDON_EXPRESSIONS = {
   #     'clickhouse': {
   #         'PT2S': 'toDateTime(intDiv(toUInt32(toDateTime({col})), 2)*2)'
   #     }
   # }
   TIME_GRAIN_ADDON_EXPRESSIONS: Dict[str, Dict[str, str]] = {}
   
   # ---------------------------------------------------
   # List of viz_types not allowed in your environment
   # For example: Disable pivot table and treemap:
   #  VIZ_TYPE_DENYLIST = ['pivot_table', 'treemap']
   # ---------------------------------------------------
   
   VIZ_TYPE_DENYLIST: List[str] = []
   
   # ---------------------------------------------------
   # List of data sources not to be refreshed in druid cluster
   # ---------------------------------------------------
   
   DRUID_DATA_SOURCE_DENYLIST: List[str] = []
   
   # --------------------------------------------------
   # Modules, datasources and middleware to be registered
   # --------------------------------------------------
   DEFAULT_MODULE_DS_MAP = OrderedDict(
       [
           ("superset.connectors.sqla.models", ["SqlaTable"]),
           ("superset.connectors.druid.models", ["DruidDatasource"]),
       ]
   )
   ADDITIONAL_MODULE_DS_MAP: Dict[str, List[str]] = {}
   ADDITIONAL_MIDDLEWARE: List[Callable[..., Any]] = []
   
   # 1) https://docs.python-guide.org/writing/logging/
   # 2) https://docs.python.org/2/library/logging.config.html
   
   # Default configurator will consume the LOG_* settings below
   # LOGGING_CONFIGURATOR = DefaultLoggingConfigurator()
   
   # Console Log Settings
   
   LOG_FORMAT = "%(asctime)s:%(levelname)s:%(name)s:%(message)s"
   LOG_LEVEL = "INFO"
   
   # ---------------------------------------------------
   # Enable Time Rotate Log Handler
   # ---------------------------------------------------
   # LOG_LEVEL = DEBUG, INFO, WARNING, ERROR, CRITICAL
   
   ENABLE_TIME_ROTATE = True
   TIME_ROTATE_LOG_LEVEL = "DEBUG"
   FILENAME = "/var/log/superset.log"
   ROLLOVER = "midnight"
   INTERVAL = 1
   BACKUP_COUNT = 30
   
   # Custom logger for auditing queries. This can be used to send ran queries to a
   # structured immutable store for auditing purposes. The function is called for
   # every query ran, in both SQL Lab and charts/dashboards.
   # def QUERY_LOGGER(
   #     database,
   #     query,
   #     schema=None,
   #     user=None,
   #     client=None,
   #     security_manager=None,
   #     log_params=None,
   # ):
   #     pass
   QUERY_LOGGER = None
   
   # Set this API key to enable Mapbox visualizations
   MAPBOX_API_KEY = os.environ.get("MAPBOX_API_KEY", "")
   
   # Maximum number of rows returned from a database
   # in async mode, no more than SQL_MAX_ROW will be returned and stored
   # in the results backend. This also becomes the limit when exporting CSVs
   SQL_MAX_ROW = 100000
   
   # Maximum number of rows displayed in SQL Lab UI
   # Is set to avoid out of memory/localstorage issues in browsers. Does not affect
   # exported CSVs
   DISPLAY_MAX_ROW = 10000
   
   # Default row limit for SQL Lab queries. Is overridden by setting a new limit in
   # the SQL Lab UI
   DEFAULT_SQLLAB_LIMIT = 1000
   
   # Maximum number of tables/views displayed in the dropdown window in SQL Lab.
   MAX_TABLE_NAMES = 3000
   
   # Adds a warning message on sqllab save query and schedule query modals.
   SQLLAB_SAVE_WARNING_MESSAGE = None
   SQLLAB_SCHEDULE_WARNING_MESSAGE = None
   
   # Default celery config is to use SQLA as a broker, in a production setting
   # you'll want to use a proper broker as specified here:
   # http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html
   
   
   class CeleryConfig:  # pylint: disable=too-few-public-methods
       BROKER_URL = "redis://localhost:6379/0"
       CELERY_IMPORTS = ("superset.sql_lab", "superset.tasks")
       CELERY_RESULT_BACKEND = "postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc"
       CELERYD_LOG_LEVEL = "INFO"
       CELERYD_PREFETCH_MULTIPLIER = 10
       CELERY_ACKS_LATE = True
       CELERY_ANNOTATIONS = {
           "sql_lab.get_sql_results": {"rate_limit": "100/s"},
           "email_reports.send": {
               "rate_limit": "1/s",
               "time_limit": 320,
               "soft_time_limit": 350,
               "ignore_result": True,
           },
       }
       CELERYBEAT_SCHEDULE = {
           "email_reports.schedule_hourly": {
               "task": "email_reports.schedule_hourly",
               "schedule": crontab(minute=1, hour="*"),
           }
       }
   
   
   CELERY_CONFIG = CeleryConfig  # pylint: disable=invalid-name
   
   # Set celery config to None to disable all the above configuration
   # CELERY_CONFIG = None
   
   # Additional static HTTP headers to be served by your Superset server. Note
   # Flask-Talisman applies the relevant security HTTP headers.
   #
   # DEFAULT_HTTP_HEADERS: sets default values for HTTP headers. These may be overridden
   # within the app
   # OVERRIDE_HTTP_HEADERS: sets override values for HTTP headers. These values will
   # override anything set within the app
   DEFAULT_HTTP_HEADERS: Dict[str, Any] = {}
   OVERRIDE_HTTP_HEADERS: Dict[str, Any] = {}
   HTTP_HEADERS: Dict[str, Any] = {}
   
   # The db id here results in selecting this one as a default in SQL Lab
   DEFAULT_DB_ID = None
   
   # Timeout duration for SQL Lab synchronous queries
   SQLLAB_TIMEOUT = 30
   
   # Timeout duration for SQL Lab query validation
   SQLLAB_VALIDATION_TIMEOUT = 10
   
   # SQLLAB_DEFAULT_DBID
   SQLLAB_DEFAULT_DBID = None
   
   # The MAX duration (in seconds) a query can run for before being killed
   # by celery.
   SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6
   
   # Some databases support running EXPLAIN queries that allow users to estimate
   # query costs before they run. These EXPLAIN queries should have a small
   # timeout.
   SQLLAB_QUERY_COST_ESTIMATE_TIMEOUT = 10  # seconds
   
   # Flag that controls if limit should be enforced on the CTA (create table as queries).
   SQLLAB_CTAS_NO_LIMIT = False
   
   # This allows you to define custom logic around the "CREATE TABLE AS" or CTAS feature
   # in SQL Lab that defines where the target schema should be for a given user.
   # Database `CTAS Schema` has a precedence over this setting.
   # Example below returns a username and CTA queries will write tables into the schema
   # name `username`
   # SQLLAB_CTAS_SCHEMA_NAME_FUNC = lambda database, user, schema, sql: user.username
   # This is move involved example where depending on the database you can leverage data
   # available to assign schema for the CTA query:
   # def compute_schema_name(database: Database, user: User, schema: str, sql: str) -> str:
   #     if database.name == 'mysql_payments_slave':
   #         return 'tmp_superset_schema'
   #     if database.name == 'presto_gold':
   #         return user.username
   #     if database.name == 'analytics':
   #         if 'analytics' in [r.name for r in user.roles]:
   #             return 'analytics_cta'
   #         else:
   #             return f'tmp_{schema}'
   # Function accepts database object, user object, schema name and sql that will be run.
   SQLLAB_CTAS_SCHEMA_NAME_FUNC: Optional[
       Callable[["Database", "models.User", str, str], str]
   ] = None
   
   # If enabled, it can be used to store the results of long-running queries
   # in SQL Lab by using the "Run Async" button/feature
   RESULTS_BACKEND = RedisCache(
      host='localhost', port=6379, key_prefix='superset_results')
   
   
   # Use PyArrow and MessagePack for async query results serialization,
   # rather than JSON. This feature requires additional testing from the
   # community before it is fully adopted, so this config option is provided
   # in order to disable should breaking issues be discovered.
   RESULTS_BACKEND_USE_MSGPACK = True
   
   # The S3 bucket where you want to store your external hive tables created
   # from CSV files. For example, 'companyname-superset'
   CSV_TO_HIVE_UPLOAD_S3_BUCKET = None
   
   # The directory within the bucket specified above that will
   # contain all the external tables
   CSV_TO_HIVE_UPLOAD_DIRECTORY = "EXTERNAL_HIVE_TABLES/"
   # Function that creates upload directory dynamically based on the
   # database used, user and schema provided.
   CSV_TO_HIVE_UPLOAD_DIRECTORY_FUNC: Callable[
       ["Database", "models.User", str], Optional[str]
   ] = lambda database, user, schema: CSV_TO_HIVE_UPLOAD_DIRECTORY
   
   # The namespace within hive where the tables created from
   # uploading CSVs will be stored.
   UPLOADED_CSV_HIVE_NAMESPACE: Optional[str] = None
   
   # Function that computes the allowed schemas for the CSV uploads.
   # Allowed schemas will be a union of schemas_allowed_for_csv_upload
   # db configuration and a result of this function.
   
   # mypy doesn't catch that if case ensures list content being always str
   ALLOWED_USER_CSV_SCHEMA_FUNC: Callable[
       ["Database", "models.User"], List[str]
   ] = lambda database, user: [
       UPLOADED_CSV_HIVE_NAMESPACE
   ] if UPLOADED_CSV_HIVE_NAMESPACE else []
   
   # Values that should be treated as nulls for the csv uploads.
   CSV_DEFAULT_NA_NAMES = list(STR_NA_VALUES)
   
   # A dictionary of items that gets merged into the Jinja context for
   # SQL Lab. The existing context gets updated with this dictionary,
   # meaning values for existing keys get overwritten by the content of this
   # dictionary.
   JINJA_CONTEXT_ADDONS: Dict[str, Callable[..., Any]] = {}
   
   # A dictionary of macro template processors that gets merged into global
   # template processors. The existing template processors get updated with this
   # dictionary, which means the existing keys get overwritten by the content of this
   # dictionary. The customized addons don't necessarily need to use jinjia templating
   # language. This allows you to define custom logic to process macro template.
   CUSTOM_TEMPLATE_PROCESSORS: Dict[str, Type[BaseTemplateProcessor]] = {}
   
   # Roles that are controlled by the API / Superset and should not be changes
   # by humans.
   ROBOT_PERMISSION_ROLES = ["Public", "Gamma", "Alpha", "Admin", "sql_lab"]
   
   CONFIG_PATH_ENV_VAR = "SUPERSET_CONFIG_PATH"
   
   # If a callable is specified, it will be called at app startup while passing
   # a reference to the Flask app. This can be used to alter the Flask app
   # in whatever way.
   # example: FLASK_APP_MUTATOR = lambda x: x.before_request = f
   FLASK_APP_MUTATOR = None
   
   # Set this to false if you don't want users to be able to request/grant
   # datasource access requests from/to other users.
   ENABLE_ACCESS_REQUEST = False
   
   # smtp server configuration
   EMAIL_NOTIFICATIONS = True  # all the emails are sent using dryrun
   SMTP_HOST = "100.200.156.23"
   SMTP_STARTTLS = False
   SMTP_SSL = False
   SMTP_USER = ""
   SMTP_PORT = 25
   SMTP_PASSWORD = ""
   SMTP_MAIL_FROM = "superset@objectway.com"
   
   ENABLE_CHUNK_ENCODING = False
   
   # Whether to bump the logging level to ERROR on the flask_appbuilder package
   # Set to False if/when debugging FAB related issues like
   # permission management
   SILENCE_FAB = True
   
   FAB_ADD_SECURITY_VIEWS = True
   FAB_ADD_SECURITY_PERMISSION_VIEW = False
   FAB_ADD_SECURITY_VIEW_MENU_VIEW = False
   FAB_ADD_SECURITY_PERMISSION_VIEWS_VIEW = False
   
   # The link to a page containing common errors and their resolutions
   # It will be appended at the bottom of sql_lab errors.
   TROUBLESHOOTING_LINK = ""
   
   # CSRF token timeout, set to None for a token that never expires
   WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 7
   
   # This link should lead to a page with instructions on how to gain access to a
   # Datasource. It will be placed at the bottom of permissions errors.
   PERMISSION_INSTRUCTIONS_LINK = ""
   
   # Integrate external Blueprints to the app by passing them to your
   # configuration. These blueprints will get integrated in the app
   BLUEPRINTS: List[Blueprint] = []
   
   # Provide a callable that receives a tracking_url and returns another
   # URL. This is used to translate internal Hadoop job tracker URL
   # into a proxied one
   TRACKING_URL_TRANSFORMER = lambda x: x
   
   # Interval between consecutive polls when using Hive Engine
   HIVE_POLL_INTERVAL = 5
   
   # Interval between consecutive polls when using Presto Engine
   # See here: https://github.com/dropbox/PyHive/blob/8eb0aeab8ca300f3024655419b93dad926c1a351/pyhive/presto.py#L93  # pylint: disable=line-too-long
   PRESTO_POLL_INTERVAL = 1
   
   # Allow for javascript controls components
   # this enables programmers to customize certain charts (like the
   # geospatial ones) by inputing javascript in controls. This exposes
   # an XSS security vulnerability
   ENABLE_JAVASCRIPT_CONTROLS = False
   
   # The id of a template dashboard that should be copied to every new user
   DASHBOARD_TEMPLATE_ID = None
   
   # A callable that allows altering the database conneciton URL and params
   # on the fly, at runtime. This allows for things like impersonation or
   # arbitrary logic. For instance you can wire different users to
   # use different connection parameters, or pass their email address as the
   # username. The function receives the connection uri object, connection
   # params, the username, and returns the mutated uri and params objects.
   # Example:
   #   def DB_CONNECTION_MUTATOR(uri, params, username, security_manager, source):
   #       user = security_manager.find_user(username=username)
   #       if user and user.email:
   #           uri.username = user.email
   #       return uri, params
   #
   # Note that the returned uri and params are passed directly to sqlalchemy's
   # as such `create_engine(url, **params)`
   DB_CONNECTION_MUTATOR = None
   
   # A function that intercepts the SQL to be executed and can alter it.
   # The use case is can be around adding some sort of comment header
   # with information such as the username and worker node information
   #
   #    def SQL_QUERY_MUTATOR(sql, username, security_manager):
   #        dttm = datetime.now().isoformat()
   #        return f"-- [SQL LAB] {username} {dttm}\n{sql}"
   SQL_QUERY_MUTATOR = None
   
   # Enable / disable scheduled email reports
   ENABLE_SCHEDULED_EMAIL_REPORTS = True
   
   # Enable / disable Alerts, where users can define custom SQL that
   # will send emails with screenshots of charts or dashboards periodically
   # if it meets the criteria
   ENABLE_ALERTS = True
   
   # Slack API token for the superset reports
   SLACK_API_TOKEN = None
   SLACK_PROXY = None
   
   # If enabled, certail features are run in debug mode
   # Current list:
   # * Emails are sent using dry-run mode (logging only)
   SCHEDULED_EMAIL_DEBUG_MODE = False
   
   # This auth provider is used by background (offline) tasks that need to access
   # protected resources. Can be overridden by end users in order to support
   # custom auth mechanisms
   MACHINE_AUTH_PROVIDER_CLASS = "superset.utils.machine_auth.MachineAuthProvider"
   
   # Email reports - minimum time resolution (in minutes) for the crontab
   EMAIL_REPORTS_CRON_RESOLUTION = 15
   
   # The MAX duration (in seconds) a email schedule can run for before being killed
   # by celery.
   EMAIL_ASYNC_TIME_LIMIT_SEC = 300
   
   # Email report configuration
   # From address in emails
   EMAIL_REPORT_FROM_ADDRESS = "reports@superset.org"
   
   # Send bcc of all reports to this address. Set to None to disable.
   # This is useful for maintaining an audit trail of all email deliveries.
   EMAIL_REPORT_BCC_ADDRESS = None
   
   # User credentials to use for generating reports
   # This user should have permissions to browse all the dashboards and
   # slices.
   # TODO: In the future, login as the owner of the item to generate reports
   EMAIL_REPORTS_USER = "admin"
   EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] "
   
   # The webdriver to use for generating reports. Use one of the following
   # firefox
   #   Requires: geckodriver and firefox installations
   #   Limitations: can be buggy at times
   # chrome:
   #   Requires: headless chrome
   #   Limitations: unable to generate screenshots of elements
   WEBDRIVER_TYPE = "firefox"
   
   # Window size - this will impact the rendering of the data
   WEBDRIVER_WINDOW = {"dashboard": (1600, 2000), "slice": (3000, 1200)}
   
   # An optional override to the default auth hook used to provide auth to the
   # offline webdriver
   WEBDRIVER_AUTH_FUNC = None
   
   # Any config options to be passed as-is to the webdriver
   WEBDRIVER_CONFIGURATION: Dict[Any, Any] = {}
   
   # Additional args to be passed as arguments to the config object
   # Note: these options are Chrome-specific. For FF, these should
   # only include the "--headless" arg
   WEBDRIVER_OPTION_ARGS = [
       "--force-device-scale-factor=2.0",
       "--high-dpi-support=2.0",
       "--headless",
   ]
   
   # The base URL to query for accessing the user interface
   WEBDRIVER_BASEURL = "http://0.0.0.0:8088/"
   # The base URL for the email report hyperlinks.
   WEBDRIVER_BASEURL_USER_FRIENDLY = WEBDRIVER_BASEURL
   # Time in seconds, selenium will wait for the page to load
   # and render for the email report.
   EMAIL_PAGE_RENDER_WAIT = 30
   
   # Send user to a link where they can report bugs
   BUG_REPORT_URL = None
   
   # Send user to a link where they can read more about Superset
   DOCUMENTATION_URL = None
   DOCUMENTATION_TEXT = "Documentation"
   DOCUMENTATION_ICON = None  # Recommended size: 16x16
   
   # Enables the replacement react views for all the FAB views (list, edit, show) with
   # designs introduced in SIP-34: https://github.com/apache/incubator-superset/issues/8976
   # This is a work in progress so not all features available in FAB have been implemented
   ENABLE_REACT_CRUD_VIEWS = False
   
   # What is the Last N days relative in the time selector to:
   # 'today' means it is midnight (00:00:00) in the local timezone
   # 'now' means it is relative to the query issue time
   # If both start and end time is set to now, this will make the time
   # filter a moving window. By only setting the end time to now,
   # start time will be set to midnight, while end will be relative to
   # the query issue time.
   DEFAULT_RELATIVE_START_TIME = "today"
   DEFAULT_RELATIVE_END_TIME = "now"
   
   # Configure which SQL validator to use for each engine
   SQL_VALIDATORS_BY_ENGINE = {"presto": "PrestoDBSQLValidator"}
   
   # Do you want Talisman enabled?
   TALISMAN_ENABLED = False
   # If you want Talisman, how do you want it configured??
   TALISMAN_CONFIG = {
       "content_security_policy": None,
       "force_https": True,
       "force_https_permanent": False,
   }
   
   # Note that: RowLevelSecurityFilter is only given by default to the Admin role
   # and the Admin Role does have the all_datasources security permission.
   # But, if users create a specific role with access to RowLevelSecurityFilter MVC
   # and a custom datasource access, the table dropdown will not be correctly filtered
   # by that custom datasource access. So we are assuming a default security config,
   # a custom security config could potentially give access to setting filters on
   # tables that users do not have access to.
   ENABLE_ROW_LEVEL_SECURITY = False
   # It is possible to customize which tables and roles are featured in the RLS
   # dropdown. When set, this dict is assigned to `add_form_query_rel_fields` and
   # `edit_form_query_rel_fields` on `RowLevelSecurityFiltersModelView`. Example:
   #
   # from flask_appbuilder.models.sqla import filters
   # RLS_FORM_QUERY_REL_FIELDS = {
   #     "roles": [["name", filters.FilterStartsWith, "RlsRole"]]
   #     "tables": [["table_name", filters.FilterContains, "rls"]]
   # }
   RLS_FORM_QUERY_REL_FIELDS: Optional[Dict[str, List[List[Any]]]] = None
   
   #
   # Flask session cookie options
   #
   # See https://flask.palletsprojects.com/en/1.1.x/security/#set-cookie-options
   # for details
   #
   SESSION_COOKIE_HTTPONLY = True  # Prevent cookie from being read by frontend JS?
   SESSION_COOKIE_SECURE = False  # Prevent cookie from being transmitted over non-tls?
   SESSION_COOKIE_SAMESITE = "Lax"  # One of [None, 'None', 'Lax', 'Strict']
   
   # Flask configuration variables
   SEND_FILE_MAX_AGE_DEFAULT = 60 * 60 * 24 * 365  # Cache static resources
   
   # URI to database storing the example data, points to
   # SQLALCHEMY_DATABASE_URI by default if set to `None`
   SQLALCHEMY_EXAMPLES_URI = None
   
   # Some sqlalchemy connection strings can open Superset to security risks.
   # Typically these should not be allowed.
   PREVENT_UNSAFE_DB_CONNECTIONS = True
   
   # Path used to store SSL certificates that are generated when using custom certs.
   # Defaults to temporary directory.
   # Example: SSL_CERT_PATH = "/certs"
   SSL_CERT_PATH: Optional[str] = None
   
   # SIP-15 should be enabled for all new Superset deployments which ensures that the time
   # range endpoints adhere to [start, end). For existing deployments admins should provide
   # a dedicated period of time to allow chart producers to update their charts before
   # mass migrating all charts to use the [start, end) interval.
   #
   # Note if no end date for the grace period is specified then the grace period is
   # indefinite.
   SIP_15_ENABLED = True
   SIP_15_GRACE_PERIOD_END: Optional[date] = None  # exclusive
   SIP_15_DEFAULT_TIME_RANGE_ENDPOINTS = ["unknown", "inclusive"]
   SIP_15_TOAST_MESSAGE = (
       "Action Required: Preview then save your chart using the "
       'new time range endpoints <a target="_blank" href="{url}" '
       'class="alert-link">here</a>.'
   )
   
   
   # SQLA table mutator, every time we fetch the metadata for a certain table
   # (superset.connectors.sqla.models.SqlaTable), we call this hook
   # to allow mutating the object with this callback.
   # This can be used to set any properties of the object based on naming
   # conventions and such. You can find examples in the tests.
   SQLA_TABLE_MUTATOR = lambda table: table
   
   if CONFIG_PATH_ENV_VAR in os.environ:
       # Explicitly import config module that is not necessarily in pythonpath; useful
       # for case where app is being executed via pex.
       try:
           cfg_path = os.environ[CONFIG_PATH_ENV_VAR]
           module = sys.modules[__name__]
           override_conf = imp.load_source("superset_config", cfg_path)
           for key in dir(override_conf):
               if key.isupper():
                   setattr(module, key, getattr(override_conf, key))
   
           print(f"Loaded your LOCAL configuration at [{cfg_path}]")
       except Exception:
           logger.exception(
               "Failed to import config for %s=%s", CONFIG_PATH_ENV_VAR, cfg_path
           )
           raise
   elif importlib.util.find_spec("superset_config"):
       try:
           import superset_config  # pylint: disable=import-error
           from superset_config import *  # type: ignore  # pylint: disable=import-error,wildcard-import,unused-wildcard-import
   
           print(f"Loaded your LOCAL configuration at [{superset_config.__file__}]")
       except Exception:
           logger.exception("Found but failed to import local superset_config")
           raise'''


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-733866454


   Hi Shkurupii,
   
   I wil try and let you know the outcome.
   Thanks&Regards
   
   Matteo


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-732053707


   No I did it but i still get this error


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-741894805


   Hi Alex!
   All the services are up and running now. Thanks for your great support!
   
   There is still a problem.
   When I try to schedule a dashboard (i have loaded example dashboards from superset standard package) and click on the "Save" button in superset 'Schedule Email Reports for Dashboards' view nothing happens and the page remains in stand by without saving anything.
   If i go to check the log files created in this directory /home/superset/log/celery i find many, but all of them report the same issue:
   
   ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 111 connecting to localhost:6379. Connection refused..
   
   The redis service is active, I have checked and all the other as well (celery, celerybeat, celeryflower, etc.)
   
   (venv5) [superset@afapachess celery]$ ls -la
   total 332
   drwxrwxr-x 2 superset superset    178 Dec  9 12:41 .
   drwxrwxr-x 3 superset superset     40 Dec  9 12:39 ..
   -rw-r--r-- 1 superset superset  89694 Dec  9 16:35 beat.log
   -rw-r--r-- 1 superset superset      0 Dec  9 12:41 w1-1.log
   -rw-r--r-- 1 superset superset      0 Dec  9 12:41 w1-2.log
   -rw-r--r-- 1 superset superset      0 Dec  9 12:41 w1-3.log
   -rw-r--r-- 1 superset superset      0 Dec  9 12:41 w1-4.log
   -rw-r--r-- 1 superset superset 116493 Dec  9 16:35 w1.log
   -rw-r--r-- 1 superset superset      0 Dec  9 12:41 w2-1.log
   -rw-r--r-- 1 superset superset      0 Dec  9 12:41 w2-2.log
   -rw-r--r-- 1 superset superset      0 Dec  9 12:41 w2-3.log
   -rw-r--r-- 1 superset superset      0 Dec  9 12:41 w2-4.log
   -rw-r--r-- 1 superset superset 116290 Dec  9 16:35 w2.log
   
   Let's talk tomorrow if you have some time
   Have a nice evening!


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-743281508


   hi Alex sorry for bugging you again... 
   
   I did some research and i've found something interesting at this link 
   https://stackoverflow.com/questions/45843575/python3selenium-raise-message-can-not-connect-to-the-service-geckodriver
   
   It's saying that the problem we faced yesterday (WebDriverException('Can not connect to the Service geckodriver',) ) is due to the fact that localhost is not there in the /etc/hosts file
   I have checked mine and looks like this 
   
   127.0.0.1   localhost.localdomain localhost4 localhost4.localdomain4
   10.200.157.15   afapachess afapachess.algorfin.local
   ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
   
   so i have addedd explicitely localhost after the IP like this
   
   127.0.0.1 **localhost**  localhost.localdomain localhost4 localhost4.localdomain4
   10.200.157.15   afapachess afapachess.algorfin.local
   ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
   
   i have saved the file, restarted the server and tryed again to save the dashsoard schedule email
   
   This time, when i checked in Flower portal, I haven't found any more the previous error message but there is a new one like this:
   
   SessionNotCreatedException('Unable to find a matching set of capabilities', None, None)
   
   I have checked this other link and it says that it might be due to version of geckodriver and firefox installed
   This is the link
   https://stackoverflow.com/questions/43713445/selenium-unable-to-find-a-matching-set-of-capabilities-despite-driver-being-in
   
   Are you aware of this issue? Have you ever seen it?
   
   Thanks
   Matteo


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734318391


   Hello Shkrupii,
   thanks for your advices, i try to implement them soon and let you know what's happen.
   
   Please notice that i have not used the superset_config.py file because at the first installation i did for superset (0.37.1) on Linux Centos, the changes we did were not overidden, for example we put ENABLE_SCHEDULED_EMAIL_REPORTS = True in the superset_config but in the Manage tab were not displayed the menu' items Dashboard Emails and Chart Email Schedules, i don't know why.  At that time i have also run the export PYTHONPATH as recommended in the documentation, but nothing happened.
   
   Besides in the superset.log i cannot ever find any info about issues or what went wrong, this is frustrating.
   I'm sorry but i have tryed to install this tool already several times on different Linux distributions and everytime i get new issues.
   
   Thanks for your time and your help!
   Regards
   Matteo


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 edited a comment on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 edited a comment on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734933905


   Hello Shkrupii,
   I have implemented all the changes you've recommended, Please see the superset_config.py file (with the overrides only)
   [superset_config_NEW.txt](https://github.com/apache/incubator-superset/files/5609062/superset_config_NEW.txt)
   
   This is my export PATH:
   /home/matteo/env/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/matteo/python-environments/env/lib/python3.7/site-packages/superset
   
   Now when i run "superset init" command (or any otehr command like superset db upgrade, etc.) I get this new error message:
   
   (env) matteo@mbalzarotti-NB:~$ superset init
   Traceback (most recent call last):
     File "/home/matteo/env/bin/superset", line 5, in <module>
       from superset.cli import superset
     File "/home/matteo/env/lib/python3.7/site-packages/superset/__init__.py", line 21, in <module>
       from superset.app import create_app
     File "/home/matteo/env/lib/python3.7/site-packages/superset/app.py", line 20, in <module>
       from typing import Any, Callable, Dict
     File "/home/matteo/python-environments/env/lib/python3.7/site-packages/superset/typing.py", line 17, in <module>
       from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union
   ImportError: cannot import name 'Any' from 'typing' (/home/matteo/python-environments/env/lib/python3.7/site-packages/superset/typing.py)
   
   Do you know by chance what is this error?
   Thanks&Regards
   Matteo
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737315553


   Hi, I'm almost closed to the end hopefully, with your help.
   
   I have installed Redis, now all the services are started up correctly but there is another error because i have not geckodriver on my pc. It also seems is looking to have this driver in the PATH
   
   Please, if you don't mind could you provide me the instructions, how to install this geckodriver tool?
   Do you also have any specific entry in your PATH for this driver?
   Thanks


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734307065


   I assume as reference you are using [config.py](https://github.com/apache/incubator-superset/blob/master/superset/config.py). As stated at the very beginning of file you should keep your overrides in superset_config.py. There is no need to keep every default setting in your file. Because of that it is also hard to understand what changes you made. In order to point your environment to your superset_config.py you can use an option suggested in config.py 
   ```
   # superset_config.py is located in my case is /opt/local/apache-superset/config directory
   export PYTHONPATH=/opt/local/apache-superset/config
   ```
   or another option is to export to your environment SUPERSET_CONFIG_PATH 
   ```
   export SUPERSET_CONFIG_PATH=/opt/local/apache-superset/config/superset_config.py
   ```
   SQLALCHEMY_DATABASE_URI looks oK.
   
   Command not found means you forgot to export paths with your binaries and superset in particular to your environment
   ```
   # in my case
   # python binaries live /opt/local/apache-superset/venv/bin here
   # geckodriver binary lives /opt/local/apache-superset/bin here
   # common bins live :/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin: here
   export PATH=/opt/local/apache-superset/venv/bin:/opt/local/apache-superset/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin
   ```
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737383260


   Other errors after installing Firefox on Debian :( 
   
   (env4) matteo@mbalzarotti-NB:~/superset$ celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
   Loaded your LOCAL configuration at [/home/matteo/superset/config/superset_config.py]
   logging was configured successfully
   INFO:superset.utils.logging_configurator:logging was configured successfully
   /home/matteo/superset/env4/lib/python3.7/site-packages/flask_caching/__init__.py:192: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled.
     "Flask-Caching: CACHE_TYPE is set to null, "
   No PIL installation found
   INFO:superset.utils.screenshots:No PIL installation found
   
    -------------- celery@mbalzarotti-NB v4.4.7 (cliffs)
   --- ***** -----
   -- ******* ---- Linux-4.4.0-18362-Microsoft-x86_64-with-debian-10.6 2020-12-02 18:28:53
   - *** --- * ---
   - ** ---------- [config]
   - ** ---------- .> app:         __main__:0x7fa97dea95c0
   - ** ---------- .> transport:   redis://localhost:6379/0
   - ** ---------- .> results:     postgresql://matteo:**@127.0.0.1/superset_loc
   - *** --- * --- .> concurrency: 4 (prefork)
   -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
   --- ***** -----
    -------------- [queues]
                   .> celery           exchange=celery(direct) key=celery
   
   
   [2020-12-02 18:32:04,922: INFO/ForkPoolWorker-1] Starting report for slack: None and recipients: matteo.balzarotti@objectway.com.
   Init selenium driver
   [2020-12-02 18:32:04,971: INFO/ForkPoolWorker-1] Init selenium driver
   Message: Process unexpectedly closed with status 0
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0
   
   [2020-12-02 18:32:07,934: ERROR/ForkPoolWorker-1] Message: Process unexpectedly closed with status 0
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0
   
   Message: Process unexpectedly closed with status 0
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 517, in schedule_email_report
       schedule.deliver_as_group,
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0
   
   [2020-12-02 18:32:07,960: ERROR/ForkPoolWorker-1] Message: Process unexpectedly closed with status 0
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 517, in schedule_email_report
       schedule.deliver_as_group,
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0
   
   [2020-12-02 18:32:07,991: ERROR/ForkPoolWorker-1] Task email_reports.send[be5931fa-8136-4ad3-b0d3-616f60353e99] raised unexpected: WebDriverException('Process unexpectedly closed with status 0', None, None)
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/app/trace.py", line 412, in trace_task
       R = retval = fun(*args, **kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/app.py", line 116, in __call__
       return task_base.__call__(self, *args, **kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/app/trace.py", line 704, in __protected_call__
       return self.run(*args, **kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 517, in schedule_email_report
       schedule.deliver_as_group,
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-732267127


   Hello,
   
   I have created my own database on the same server where I have installed Superset. This is a PostgresSQL.
   I have called the db "superset_loc" and granted the access to "matteo" user.
   I have just a question as I cannot find any indication in the Superset documentation on line
   
   Where I should put this info about Postgres db connection, user, etc. in the Superset configuration file in order that Superset connect to the new created db?
   Please could you indicate to me?
   Thanks
   Matteo


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-741638646


   Yes, I am available.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-732036679


   Hello dpgaspar.
   
   the version of Superset I have installed is the latest one avialable, that is 0.37.2
   
   I'm sorry but I'm new to this tool.
   
   -How I can check if user_attribute table is there in my system?
   -Besides, which db migration you are talking about?
   Thanks
   
   Regards
   Matteo


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734215592


   '''# Licensed to the Apache Software Foundation (ASF) under one
   # or more contributor license agreements.  See the NOTICE file
   # distributed with this work for additional information
   # regarding copyright ownership.  The ASF licenses this file
   # to you under the Apache License, Version 2.0 (the
   # "License"); you may not use this file except in compliance
   # with the License.  You may obtain a copy of the License at
   #
   #   http://www.apache.org/licenses/LICENSE-2.0
   #
   # Unless required by applicable law or agreed to in writing,
   # software distributed under the License is distributed on an
   # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   # KIND, either express or implied.  See the License for the
   # specific language governing permissions and limitations
   # under the License.
   """The main config file for Superset
   
   All configuration in this file can be overridden by providing a superset_config
   in your PYTHONPATH as there is a ``from superset_config import *``
   at the end of this file.
   """
   import imp
   import importlib.util
   import json
   import logging
   import os
   import sys
   from collections import OrderedDict
   from datetime import date
   from typing import Any, Callable, Dict, List, Optional, Type, TYPE_CHECKING
   
   from cachelib.base import BaseCache
   from celery.schedules import crontab
   from dateutil import tz
   from flask import Blueprint
   from flask_appbuilder.security.manager import AUTH_DB
   from pandas.io.parsers import STR_NA_VALUES
   from cachelib.redis import RedisCache
   
   from superset.jinja_context import (  # pylint: disable=unused-import
       BaseTemplateProcessor,
   )
   from superset.stats_logger import DummyStatsLogger
   from superset.typing import CacheConfig
   from superset.utils.log import DBEventLogger
   from superset.utils.logging_configurator import DefaultLoggingConfigurator
   
   logger = logging.getLogger(__name__)
   
   if TYPE_CHECKING:
       from flask_appbuilder.security.sqla import models  # pylint: disable=unused-import
   
       from superset.models.core import Database  # pylint: disable=unused-import
   
   # Realtime stats logger, a StatsD implementation exists
   STATS_LOGGER = DummyStatsLogger()
   EVENT_LOGGER = DBEventLogger()
   
   SUPERSET_LOG_VIEW = True
   
   BASE_DIR = os.path.abspath(os.path.dirname(__file__))
   if "SUPERSET_HOME" in os.environ:
       DATA_DIR = os.environ["SUPERSET_HOME"]
   else:
       DATA_DIR = os.path.join(os.path.expanduser("~"), ".superset")
   
   # ---------------------------------------------------------
   # Superset specific config
   # ---------------------------------------------------------
   VERSION_INFO_FILE = os.path.join(BASE_DIR, "static", "version_info.json")
   PACKAGE_JSON_FILE = os.path.join(BASE_DIR, "static", "assets", "package.json")
   
   # Multiple favicons can be specified here. The "href" property
   # is mandatory, but "sizes," "type," and "rel" are optional.
   # For example:
   # {
   #     "href":path/to/image.png",
   #     "sizes": "16x16",
   #     "type": "image/png"
   #     "rel": "icon"
   # },
   FAVICONS = [{"href": "/static/assets/images/favicon.png"}]
   
   
   def _try_json_readversion(filepath: str) -> Optional[str]:
       try:
           with open(filepath, "r") as f:
               return json.load(f).get("version")
       except Exception:  # pylint: disable=broad-except
           return None
   
   
   def _try_json_readsha(  # pylint: disable=unused-argument
       filepath: str, length: int
   ) -> Optional[str]:
       try:
           with open(filepath, "r") as f:
               return json.load(f).get("GIT_SHA")[:length]
       except Exception:  # pylint: disable=broad-except
           return None
   
   
   # Depending on the context in which this config is loaded, the
   # version_info.json file may or may not be available, as it is
   # generated on install via setup.py. In the event that we're
   # actually running Superset, we will have already installed,
   # therefore it WILL exist. When unit tests are running, however,
   # it WILL NOT exist, so we fall back to reading package.json
   VERSION_STRING = _try_json_readversion(VERSION_INFO_FILE) or _try_json_readversion(
       PACKAGE_JSON_FILE
   )
   
   VERSION_SHA_LENGTH = 8
   VERSION_SHA = _try_json_readsha(VERSION_INFO_FILE, VERSION_SHA_LENGTH)
   
   ROW_LIMIT = 50000
   VIZ_ROW_LIMIT = 10000
   # max rows retreieved when requesting samples from datasource in explore view
   SAMPLES_ROW_LIMIT = 1000
   # max rows retrieved by filter select auto complete
   FILTER_SELECT_ROW_LIMIT = 10000
   SUPERSET_WORKERS = 2  # deprecated
   SUPERSET_CELERY_WORKERS = 32  # deprecated
   
   SUPERSET_WEBSERVER_PROTOCOL = "http"
   SUPERSET_WEBSERVER_ADDRESS = "0.0.0.0"
   SUPERSET_WEBSERVER_PORT = 8088
   
   # This is an important setting, and should be lower than your
   # [load balancer / proxy / envoy / kong / ...] timeout settings.
   # You should also make sure to configure your WSGI server
   # (gunicorn, nginx, apache, ...) timeout setting to be <= to this setting
   SUPERSET_WEBSERVER_TIMEOUT = 60
   
   # this 2 settings are used by dashboard period force refresh feature
   # When user choose auto force refresh frequency
   # < SUPERSET_DASHBOARD_PERIODICAL_REFRESH_LIMIT
   # they will see warning message in the Refresh Interval Modal.
   # please check PR #9886
   SUPERSET_DASHBOARD_PERIODICAL_REFRESH_LIMIT = 0
   SUPERSET_DASHBOARD_PERIODICAL_REFRESH_WARNING_MESSAGE = None
   
   SUPERSET_DASHBOARD_POSITION_DATA_LIMIT = 65535
   CUSTOM_SECURITY_MANAGER = None
   SQLALCHEMY_TRACK_MODIFICATIONS = False
   # ---------------------------------------------------------
   
   # Your App secret key
   SECRET_KEY = "\2\1thisismyscretkey\1\2\\e\\y\\y\\h"
   
   # The SQLAlchemy connection string.
   # SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
   # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
   SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc'
   
   # In order to hook up a custom password store for all SQLACHEMY connections
   # implement a function that takes a single argument of type 'sqla.engine.url',
   # returns a password and set SQLALCHEMY_CUSTOM_PASSWORD_STORE.
   #
   # e.g.:
   # def lookup_password(url):
   #     return 'secret'
   # SQLALCHEMY_CUSTOM_PASSWORD_STORE = lookup_password
   SQLALCHEMY_CUSTOM_PASSWORD_STORE = None
   
   # The limit of queries fetched for query search
   QUERY_SEARCH_LIMIT = 1000
   
   # Flask-WTF flag for CSRF
   WTF_CSRF_ENABLED = True
   
   # Add endpoints that need to be exempt from CSRF protection
   WTF_CSRF_EXEMPT_LIST = ["superset.views.core.log", "superset.charts.api.data"]
   
   # Whether to run the web server in debug mode or not
   DEBUG = os.environ.get("FLASK_ENV") == "development"
   FLASK_USE_RELOAD = True
   
   # Superset allows server-side python stacktraces to be surfaced to the
   # user when this feature is on. This may has security implications
   # and it's more secure to turn it off in production settings.
   SHOW_STACKTRACE = True
   
   # Use all X-Forwarded headers when ENABLE_PROXY_FIX is True.
   # When proxying to a different port, set "x_port" to 0 to avoid downstream issues.
   ENABLE_PROXY_FIX = True
   PROXY_FIX_CONFIG = {"x_for": 1, "x_proto": 1, "x_host": 1, "x_port": 1, "x_prefix": 1}
   
   # ------------------------------
   # GLOBALS FOR APP Builder
   # ------------------------------
   # Uncomment to setup Your App name
   APP_NAME = "Superset"
   
   # Uncomment to setup an App icon
   APP_ICON = "/static/assets/images/superset-logo-horiz.png"
   APP_ICON_WIDTH = 126
   
   # Uncomment to specify where clicking the logo would take the user
   # e.g. setting it to '/welcome' would take the user to '/superset/welcome'
   LOGO_TARGET_PATH = None
   
   # Enables SWAGGER UI for superset openapi spec
   # ex: http://localhost:8080/swagger/v1
   FAB_API_SWAGGER_UI = True
   
   # Druid query timezone
   # tz.tzutc() : Using utc timezone
   # tz.tzlocal() : Using local timezone
   # tz.gettz('Asia/Shanghai') : Using the time zone with specific name
   # [TimeZone List]
   # See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
   # other tz can be overridden by providing a local_config
   DRUID_TZ = tz.tzutc()
   DRUID_ANALYSIS_TYPES = ["cardinality"]
   
   # Legacy Druid NoSQL (native) connector
   # Druid supports a SQL interface in its newer versions.
   # Setting this flag to True enables the deprecated, API-based Druid
   # connector. This feature may be removed at a future date.
   DRUID_IS_ACTIVE = False
   
   # If Druid is active whether to include the links to scan/refresh Druid datasources.
   # This should be disabled if you are trying to wean yourself off of the Druid NoSQL
   # connector.
   DRUID_METADATA_LINKS_ENABLED = True
   
   # ----------------------------------------------------
   # AUTHENTICATION CONFIG
   # ----------------------------------------------------
   # The authentication type
   # AUTH_OID : Is for OpenID
   # AUTH_DB : Is for database (username/password)
   # AUTH_LDAP : Is for LDAP
   # AUTH_REMOTE_USER : Is for using REMOTE_USER from web server
   AUTH_TYPE = AUTH_DB
   
   # Uncomment to setup Full admin role name
   # AUTH_ROLE_ADMIN = 'Admin'
   
   # Uncomment to setup Public role name, no authentication needed
   # AUTH_ROLE_PUBLIC = 'Public'
   
   # Will allow user self registration
   # AUTH_USER_REGISTRATION = True
   
   # The default user self registration role
   # AUTH_USER_REGISTRATION_ROLE = "Public"
   
   # When using LDAP Auth, setup the LDAP server
   # AUTH_LDAP_SERVER = "ldap://ldapserver.new"
   
   # Uncomment to setup OpenID providers example for OpenID authentication
   # OPENID_PROVIDERS = [
   #    { 'name': 'Yahoo', 'url': 'https://open.login.yahoo.com/' },
   #    { 'name': 'Flickr', 'url': 'https://www.flickr.com/<username>' },
   
   # ---------------------------------------------------
   # Roles config
   # ---------------------------------------------------
   # Grant public role the same set of permissions as for a selected builtin role.
   # This is useful if one wants to enable anonymous users to view
   # dashboards. Explicit grant on specific datasets is still required.
   PUBLIC_ROLE_LIKE: Optional[str] = None
   
   # ---------------------------------------------------
   # Babel config for translations
   # ---------------------------------------------------
   # Setup default language
   BABEL_DEFAULT_LOCALE = "en"
   # Your application default translation path
   BABEL_DEFAULT_FOLDER = "superset/translations"
   # The allowed translation for you app
   LANGUAGES = {
       "en": {"flag": "us", "name": "English"},
       "es": {"flag": "es", "name": "Spanish"},
       "it": {"flag": "it", "name": "Italian"},
       "fr": {"flag": "fr", "name": "French"},
       "zh": {"flag": "cn", "name": "Chinese"},
       "ja": {"flag": "jp", "name": "Japanese"},
       "de": {"flag": "de", "name": "German"},
       "pt": {"flag": "pt", "name": "Portuguese"},
       "pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
       "ru": {"flag": "ru", "name": "Russian"},
       "ko": {"flag": "kr", "name": "Korean"},
   }
   
   # ---------------------------------------------------
   # Feature flags
   # ---------------------------------------------------
   # Feature flags that are set by default go here. Their values can be
   # overwritten by those specified under FEATURE_FLAGS in super_config.py
   # For example, DEFAULT_FEATURE_FLAGS = { 'FOO': True, 'BAR': False } here
   # and FEATURE_FLAGS = { 'BAR': True, 'BAZ': True } in superset_config.py
   # will result in combined feature flags of { 'FOO': True, 'BAR': True, 'BAZ': True }
   DEFAULT_FEATURE_FLAGS: Dict[str, bool] = {
       # Experimental feature introducing a client (browser) cache
       "CLIENT_CACHE": False,
       "ENABLE_EXPLORE_JSON_CSRF_PROTECTION": False,
       "ENABLE_DASHBOARD_ETAG_HEADER": False,
       "KV_STORE": False,
       "PRESTO_EXPAND_DATA": False,
       # Exposes API endpoint to compute thumbnails
       "THUMBNAILS": False,
       "REDUCE_DASHBOARD_BOOTSTRAP_PAYLOAD": True,
       "REMOVE_SLICE_LEVEL_LABEL_COLORS": False,
       "SHARE_QUERIES_VIA_KV_STORE": False,
       "SIP_38_VIZ_REARCHITECTURE": False,
       "TAGGING_SYSTEM": False,
       "SQLLAB_BACKEND_PERSISTENCE": False,
       "LISTVIEWS_DEFAULT_CARD_VIEW": False,
   }
   
   # Set the default view to card/grid view if thumbnail support is enabled.
   # Setting LISTVIEW_DEFAULT_CARD_VIEW to False will force the default view to
   # always be the table layout
   if DEFAULT_FEATURE_FLAGS["THUMBNAILS"]:
       DEFAULT_FEATURE_FLAGS["LISTVIEW_DEFAULT_CARD_VIEW"] = True
   
   # This is merely a default.
   FEATURE_FLAGS: Dict[str, bool] = {}
   
   # A function that receives a dict of all feature flags
   # (DEFAULT_FEATURE_FLAGS merged with FEATURE_FLAGS)
   # can alter it, and returns a similar dict. Note the dict of feature
   # flags passed to the function is a deepcopy of the dict in the config,
   # and can therefore be mutated without side-effect
   #
   # GET_FEATURE_FLAGS_FUNC can be used to implement progressive rollouts,
   # role-based features, or a full on A/B testing framework.
   #
   # from flask import g, request
   # def GET_FEATURE_FLAGS_FUNC(feature_flags_dict: Dict[str, bool]) -> Dict[str, bool]:
   #     if hasattr(g, "user") and g.user.is_active:
   #         feature_flags_dict['some_feature'] = g.user and g.user.id == 5
   #     return feature_flags_dict
   GET_FEATURE_FLAGS_FUNC: Optional[Callable[[Dict[str, bool]], Dict[str, bool]]] = None
   
   # ---------------------------------------------------
   # Thumbnail config (behind feature flag)
   # ---------------------------------------------------
   THUMBNAIL_SELENIUM_USER = "Admin"
   THUMBNAIL_CACHE_CONFIG: CacheConfig = {
       "CACHE_TYPE": "null",
       "CACHE_NO_NULL_WARNING": True,
   }
   
   # Used for thumbnails and other api: Time in seconds before selenium
   # times out after trying to locate an element on the page and wait
   # for that element to load for an alert screenshot.
   SCREENSHOT_LOCATE_WAIT = 60
   SCREENSHOT_LOAD_WAIT = 60
   
   # ---------------------------------------------------
   # Image and file configuration
   # ---------------------------------------------------
   # The file upload folder, when using models with files
   UPLOAD_FOLDER = BASE_DIR + "/app/static/uploads/"
   UPLOAD_CHUNK_SIZE = 4096
   
   # The image upload folder, when using models with images
   IMG_UPLOAD_FOLDER = BASE_DIR + "/app/static/uploads/"
   
   # The image upload url, when using models with images
   IMG_UPLOAD_URL = "/static/uploads/"
   # Setup image size default is (300, 200, True)
   # IMG_SIZE = (300, 200, True)
   
   CACHE_DEFAULT_TIMEOUT = 60 * 60 * 24
   CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
   TABLE_NAMES_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
   
   # CORS Options
   ENABLE_CORS = False
   CORS_OPTIONS: Dict[Any, Any] = {}
   
   # Chrome allows up to 6 open connections per domain at a time. When there are more
   # than 6 slices in dashboard, a lot of time fetch requests are queued up and wait for
   # next available socket. PR #5039 is trying to allow domain sharding for Superset,
   # and this feature will be enabled by configuration only (by default Superset
   # doesn't allow cross-domain request).
   SUPERSET_WEBSERVER_DOMAINS = None
   
   # Allowed format types for upload on Database view
   EXCEL_EXTENSIONS = {"xlsx", "xls"}
   CSV_EXTENSIONS = {"csv", "tsv", "txt"}
   ALLOWED_EXTENSIONS = {*EXCEL_EXTENSIONS, *CSV_EXTENSIONS}
   
   # CSV Options: key/value pairs that will be passed as argument to DataFrame.to_csv
   # method.
   # note: index option should not be overridden
   CSV_EXPORT = {"encoding": "utf-8"}
   
   # ---------------------------------------------------
   # Time grain configurations
   # ---------------------------------------------------
   # List of time grains to disable in the application (see list of builtin
   # time grains in superset/db_engine_specs.builtin_time_grains).
   # For example: to disable 1 second time grain:
   # TIME_GRAIN_DENYLIST = ['PT1S']
   TIME_GRAIN_DENYLIST: List[str] = []
   
   # Additional time grains to be supported using similar definitions as in
   # superset/db_engine_specs.builtin_time_grains.
   # For example: To add a new 2 second time grain:
   # TIME_GRAIN_ADDONS = {'PT2S': '2 second'}
   TIME_GRAIN_ADDONS: Dict[str, str] = {}
   
   # Implementation of additional time grains per engine.
   # The column to be truncated is denoted `{col}` in the expression.
   # For example: To implement 2 second time grain on clickhouse engine:
   # TIME_GRAIN_ADDON_EXPRESSIONS = {
   #     'clickhouse': {
   #         'PT2S': 'toDateTime(intDiv(toUInt32(toDateTime({col})), 2)*2)'
   #     }
   # }
   TIME_GRAIN_ADDON_EXPRESSIONS: Dict[str, Dict[str, str]] = {}
   
   # ---------------------------------------------------
   # List of viz_types not allowed in your environment
   # For example: Disable pivot table and treemap:
   #  VIZ_TYPE_DENYLIST = ['pivot_table', 'treemap']
   # ---------------------------------------------------
   
   VIZ_TYPE_DENYLIST: List[str] = []
   
   # ---------------------------------------------------
   # List of data sources not to be refreshed in druid cluster
   # ---------------------------------------------------
   
   DRUID_DATA_SOURCE_DENYLIST: List[str] = []
   
   # --------------------------------------------------
   # Modules, datasources and middleware to be registered
   # --------------------------------------------------
   DEFAULT_MODULE_DS_MAP = OrderedDict(
       [
           ("superset.connectors.sqla.models", ["SqlaTable"]),
           ("superset.connectors.druid.models", ["DruidDatasource"]),
       ]
   )
   ADDITIONAL_MODULE_DS_MAP: Dict[str, List[str]] = {}
   ADDITIONAL_MIDDLEWARE: List[Callable[..., Any]] = []
   
   # 1) https://docs.python-guide.org/writing/logging/
   # 2) https://docs.python.org/2/library/logging.config.html
   
   # Default configurator will consume the LOG_* settings below
   # LOGGING_CONFIGURATOR = DefaultLoggingConfigurator()
   
   # Console Log Settings
   
   LOG_FORMAT = "%(asctime)s:%(levelname)s:%(name)s:%(message)s"
   LOG_LEVEL = "INFO"
   
   # ---------------------------------------------------
   # Enable Time Rotate Log Handler
   # ---------------------------------------------------
   # LOG_LEVEL = DEBUG, INFO, WARNING, ERROR, CRITICAL
   
   ENABLE_TIME_ROTATE = True
   TIME_ROTATE_LOG_LEVEL = "DEBUG"
   FILENAME = "/var/log/superset.log"
   ROLLOVER = "midnight"
   INTERVAL = 1
   BACKUP_COUNT = 30
   
   # Custom logger for auditing queries. This can be used to send ran queries to a
   # structured immutable store for auditing purposes. The function is called for
   # every query ran, in both SQL Lab and charts/dashboards.
   # def QUERY_LOGGER(
   #     database,
   #     query,
   #     schema=None,
   #     user=None,
   #     client=None,
   #     security_manager=None,
   #     log_params=None,
   # ):
   #     pass
   QUERY_LOGGER = None
   
   # Set this API key to enable Mapbox visualizations
   MAPBOX_API_KEY = os.environ.get("MAPBOX_API_KEY", "")
   
   # Maximum number of rows returned from a database
   # in async mode, no more than SQL_MAX_ROW will be returned and stored
   # in the results backend. This also becomes the limit when exporting CSVs
   SQL_MAX_ROW = 100000
   
   # Maximum number of rows displayed in SQL Lab UI
   # Is set to avoid out of memory/localstorage issues in browsers. Does not affect
   # exported CSVs
   DISPLAY_MAX_ROW = 10000
   
   # Default row limit for SQL Lab queries. Is overridden by setting a new limit in
   # the SQL Lab UI
   DEFAULT_SQLLAB_LIMIT = 1000
   
   # Maximum number of tables/views displayed in the dropdown window in SQL Lab.
   MAX_TABLE_NAMES = 3000
   
   # Adds a warning message on sqllab save query and schedule query modals.
   SQLLAB_SAVE_WARNING_MESSAGE = None
   SQLLAB_SCHEDULE_WARNING_MESSAGE = None
   
   # Default celery config is to use SQLA as a broker, in a production setting
   # you'll want to use a proper broker as specified here:
   # http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html
   
   
   class CeleryConfig:  # pylint: disable=too-few-public-methods
       BROKER_URL = "redis://localhost:6379/0"
       CELERY_IMPORTS = ("superset.sql_lab", "superset.tasks")
       CELERY_RESULT_BACKEND = "postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc"
       CELERYD_LOG_LEVEL = "INFO"
       CELERYD_PREFETCH_MULTIPLIER = 10
       CELERY_ACKS_LATE = True
       CELERY_ANNOTATIONS = {
           "sql_lab.get_sql_results": {"rate_limit": "100/s"},
           "email_reports.send": {
               "rate_limit": "1/s",
               "time_limit": 320,
               "soft_time_limit": 350,
               "ignore_result": True,
           },
       }
       CELERYBEAT_SCHEDULE = {
           "email_reports.schedule_hourly": {
               "task": "email_reports.schedule_hourly",
               "schedule": crontab(minute=1, hour="*"),
           }
       }
   
   
   CELERY_CONFIG = CeleryConfig  # pylint: disable=invalid-name
   
   # Set celery config to None to disable all the above configuration
   # CELERY_CONFIG = None
   
   # Additional static HTTP headers to be served by your Superset server. Note
   # Flask-Talisman applies the relevant security HTTP headers.
   #
   # DEFAULT_HTTP_HEADERS: sets default values for HTTP headers. These may be overridden
   # within the app
   # OVERRIDE_HTTP_HEADERS: sets override values for HTTP headers. These values will
   # override anything set within the app
   DEFAULT_HTTP_HEADERS: Dict[str, Any] = {}
   OVERRIDE_HTTP_HEADERS: Dict[str, Any] = {}
   HTTP_HEADERS: Dict[str, Any] = {}
   
   # The db id here results in selecting this one as a default in SQL Lab
   DEFAULT_DB_ID = None
   
   # Timeout duration for SQL Lab synchronous queries
   SQLLAB_TIMEOUT = 30
   
   # Timeout duration for SQL Lab query validation
   SQLLAB_VALIDATION_TIMEOUT = 10
   
   # SQLLAB_DEFAULT_DBID
   SQLLAB_DEFAULT_DBID = None
   
   # The MAX duration (in seconds) a query can run for before being killed
   # by celery.
   SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6
   
   # Some databases support running EXPLAIN queries that allow users to estimate
   # query costs before they run. These EXPLAIN queries should have a small
   # timeout.
   SQLLAB_QUERY_COST_ESTIMATE_TIMEOUT = 10  # seconds
   
   # Flag that controls if limit should be enforced on the CTA (create table as queries).
   SQLLAB_CTAS_NO_LIMIT = False
   
   # This allows you to define custom logic around the "CREATE TABLE AS" or CTAS feature
   # in SQL Lab that defines where the target schema should be for a given user.
   # Database `CTAS Schema` has a precedence over this setting.
   # Example below returns a username and CTA queries will write tables into the schema
   # name `username`
   # SQLLAB_CTAS_SCHEMA_NAME_FUNC = lambda database, user, schema, sql: user.username
   # This is move involved example where depending on the database you can leverage data
   # available to assign schema for the CTA query:
   # def compute_schema_name(database: Database, user: User, schema: str, sql: str) -> str:
   #     if database.name == 'mysql_payments_slave':
   #         return 'tmp_superset_schema'
   #     if database.name == 'presto_gold':
   #         return user.username
   #     if database.name == 'analytics':
   #         if 'analytics' in [r.name for r in user.roles]:
   #             return 'analytics_cta'
   #         else:
   #             return f'tmp_{schema}'
   # Function accepts database object, user object, schema name and sql that will be run.
   SQLLAB_CTAS_SCHEMA_NAME_FUNC: Optional[
       Callable[["Database", "models.User", str, str], str]
   ] = None
   
   # If enabled, it can be used to store the results of long-running queries
   # in SQL Lab by using the "Run Async" button/feature
   RESULTS_BACKEND = RedisCache(
      host='localhost', port=6379, key_prefix='superset_results')
   
   
   # Use PyArrow and MessagePack for async query results serialization,
   # rather than JSON. This feature requires additional testing from the
   # community before it is fully adopted, so this config option is provided
   # in order to disable should breaking issues be discovered.
   RESULTS_BACKEND_USE_MSGPACK = True
   
   # The S3 bucket where you want to store your external hive tables created
   # from CSV files. For example, 'companyname-superset'
   CSV_TO_HIVE_UPLOAD_S3_BUCKET = None
   
   # The directory within the bucket specified above that will
   # contain all the external tables
   CSV_TO_HIVE_UPLOAD_DIRECTORY = "EXTERNAL_HIVE_TABLES/"
   # Function that creates upload directory dynamically based on the
   # database used, user and schema provided.
   CSV_TO_HIVE_UPLOAD_DIRECTORY_FUNC: Callable[
       ["Database", "models.User", str], Optional[str]
   ] = lambda database, user, schema: CSV_TO_HIVE_UPLOAD_DIRECTORY
   
   # The namespace within hive where the tables created from
   # uploading CSVs will be stored.
   UPLOADED_CSV_HIVE_NAMESPACE: Optional[str] = None
   
   # Function that computes the allowed schemas for the CSV uploads.
   # Allowed schemas will be a union of schemas_allowed_for_csv_upload
   # db configuration and a result of this function.
   
   # mypy doesn't catch that if case ensures list content being always str
   ALLOWED_USER_CSV_SCHEMA_FUNC: Callable[
       ["Database", "models.User"], List[str]
   ] = lambda database, user: [
       UPLOADED_CSV_HIVE_NAMESPACE
   ] if UPLOADED_CSV_HIVE_NAMESPACE else []
   
   # Values that should be treated as nulls for the csv uploads.
   CSV_DEFAULT_NA_NAMES = list(STR_NA_VALUES)
   
   # A dictionary of items that gets merged into the Jinja context for
   # SQL Lab. The existing context gets updated with this dictionary,
   # meaning values for existing keys get overwritten by the content of this
   # dictionary.
   JINJA_CONTEXT_ADDONS: Dict[str, Callable[..., Any]] = {}
   
   # A dictionary of macro template processors that gets merged into global
   # template processors. The existing template processors get updated with this
   # dictionary, which means the existing keys get overwritten by the content of this
   # dictionary. The customized addons don't necessarily need to use jinjia templating
   # language. This allows you to define custom logic to process macro template.
   CUSTOM_TEMPLATE_PROCESSORS: Dict[str, Type[BaseTemplateProcessor]] = {}
   
   # Roles that are controlled by the API / Superset and should not be changes
   # by humans.
   ROBOT_PERMISSION_ROLES = ["Public", "Gamma", "Alpha", "Admin", "sql_lab"]
   
   CONFIG_PATH_ENV_VAR = "SUPERSET_CONFIG_PATH"
   
   # If a callable is specified, it will be called at app startup while passing
   # a reference to the Flask app. This can be used to alter the Flask app
   # in whatever way.
   # example: FLASK_APP_MUTATOR = lambda x: x.before_request = f
   FLASK_APP_MUTATOR = None
   
   # Set this to false if you don't want users to be able to request/grant
   # datasource access requests from/to other users.
   ENABLE_ACCESS_REQUEST = False
   
   # smtp server configuration
   EMAIL_NOTIFICATIONS = True  # all the emails are sent using dryrun
   SMTP_HOST = "100.200.156.23"
   SMTP_STARTTLS = False
   SMTP_SSL = False
   SMTP_USER = ""
   SMTP_PORT = 25
   SMTP_PASSWORD = ""
   SMTP_MAIL_FROM = "superset@objectway.com"
   
   ENABLE_CHUNK_ENCODING = False
   
   # Whether to bump the logging level to ERROR on the flask_appbuilder package
   # Set to False if/when debugging FAB related issues like
   # permission management
   SILENCE_FAB = True
   
   FAB_ADD_SECURITY_VIEWS = True
   FAB_ADD_SECURITY_PERMISSION_VIEW = False
   FAB_ADD_SECURITY_VIEW_MENU_VIEW = False
   FAB_ADD_SECURITY_PERMISSION_VIEWS_VIEW = False
   
   # The link to a page containing common errors and their resolutions
   # It will be appended at the bottom of sql_lab errors.
   TROUBLESHOOTING_LINK = ""
   
   # CSRF token timeout, set to None for a token that never expires
   WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 7
   
   # This link should lead to a page with instructions on how to gain access to a
   # Datasource. It will be placed at the bottom of permissions errors.
   PERMISSION_INSTRUCTIONS_LINK = ""
   
   # Integrate external Blueprints to the app by passing them to your
   # configuration. These blueprints will get integrated in the app
   BLUEPRINTS: List[Blueprint] = []
   
   # Provide a callable that receives a tracking_url and returns another
   # URL. This is used to translate internal Hadoop job tracker URL
   # into a proxied one
   TRACKING_URL_TRANSFORMER = lambda x: x
   
   # Interval between consecutive polls when using Hive Engine
   HIVE_POLL_INTERVAL = 5
   
   # Interval between consecutive polls when using Presto Engine
   # See here: https://github.com/dropbox/PyHive/blob/8eb0aeab8ca300f3024655419b93dad926c1a351/pyhive/presto.py#L93  # pylint: disable=line-too-long
   PRESTO_POLL_INTERVAL = 1
   
   # Allow for javascript controls components
   # this enables programmers to customize certain charts (like the
   # geospatial ones) by inputing javascript in controls. This exposes
   # an XSS security vulnerability
   ENABLE_JAVASCRIPT_CONTROLS = False
   
   # The id of a template dashboard that should be copied to every new user
   DASHBOARD_TEMPLATE_ID = None
   
   # A callable that allows altering the database conneciton URL and params
   # on the fly, at runtime. This allows for things like impersonation or
   # arbitrary logic. For instance you can wire different users to
   # use different connection parameters, or pass their email address as the
   # username. The function receives the connection uri object, connection
   # params, the username, and returns the mutated uri and params objects.
   # Example:
   #   def DB_CONNECTION_MUTATOR(uri, params, username, security_manager, source):
   #       user = security_manager.find_user(username=username)
   #       if user and user.email:
   #           uri.username = user.email
   #       return uri, params
   #
   # Note that the returned uri and params are passed directly to sqlalchemy's
   # as such `create_engine(url, **params)`
   DB_CONNECTION_MUTATOR = None
   
   # A function that intercepts the SQL to be executed and can alter it.
   # The use case is can be around adding some sort of comment header
   # with information such as the username and worker node information
   #
   #    def SQL_QUERY_MUTATOR(sql, username, security_manager):
   #        dttm = datetime.now().isoformat()
   #        return f"-- [SQL LAB] {username} {dttm}\n{sql}"
   SQL_QUERY_MUTATOR = None
   
   # Enable / disable scheduled email reports
   ENABLE_SCHEDULED_EMAIL_REPORTS = True
   
   # Enable / disable Alerts, where users can define custom SQL that
   # will send emails with screenshots of charts or dashboards periodically
   # if it meets the criteria
   ENABLE_ALERTS = True
   
   # Slack API token for the superset reports
   SLACK_API_TOKEN = None
   SLACK_PROXY = None
   
   # If enabled, certail features are run in debug mode
   # Current list:
   # * Emails are sent using dry-run mode (logging only)
   SCHEDULED_EMAIL_DEBUG_MODE = False
   
   # This auth provider is used by background (offline) tasks that need to access
   # protected resources. Can be overridden by end users in order to support
   # custom auth mechanisms
   MACHINE_AUTH_PROVIDER_CLASS = "superset.utils.machine_auth.MachineAuthProvider"
   
   # Email reports - minimum time resolution (in minutes) for the crontab
   EMAIL_REPORTS_CRON_RESOLUTION = 15
   
   # The MAX duration (in seconds) a email schedule can run for before being killed
   # by celery.
   EMAIL_ASYNC_TIME_LIMIT_SEC = 300
   
   # Email report configuration
   # From address in emails
   EMAIL_REPORT_FROM_ADDRESS = "reports@superset.org"
   
   # Send bcc of all reports to this address. Set to None to disable.
   # This is useful for maintaining an audit trail of all email deliveries.
   EMAIL_REPORT_BCC_ADDRESS = None
   
   # User credentials to use for generating reports
   # This user should have permissions to browse all the dashboards and
   # slices.
   # TODO: In the future, login as the owner of the item to generate reports
   EMAIL_REPORTS_USER = "admin"
   EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] "
   
   # The webdriver to use for generating reports. Use one of the following
   # firefox
   #   Requires: geckodriver and firefox installations
   #   Limitations: can be buggy at times
   # chrome:
   #   Requires: headless chrome
   #   Limitations: unable to generate screenshots of elements
   WEBDRIVER_TYPE = "firefox"
   
   # Window size - this will impact the rendering of the data
   WEBDRIVER_WINDOW = {"dashboard": (1600, 2000), "slice": (3000, 1200)}
   
   # An optional override to the default auth hook used to provide auth to the
   # offline webdriver
   WEBDRIVER_AUTH_FUNC = None
   
   # Any config options to be passed as-is to the webdriver
   WEBDRIVER_CONFIGURATION: Dict[Any, Any] = {}
   
   # Additional args to be passed as arguments to the config object
   # Note: these options are Chrome-specific. For FF, these should
   # only include the "--headless" arg
   WEBDRIVER_OPTION_ARGS = [
       "--force-device-scale-factor=2.0",
       "--high-dpi-support=2.0",
       "--headless",
   ]
   
   # The base URL to query for accessing the user interface
   WEBDRIVER_BASEURL = "http://0.0.0.0:8088/"
   # The base URL for the email report hyperlinks.
   WEBDRIVER_BASEURL_USER_FRIENDLY = WEBDRIVER_BASEURL
   # Time in seconds, selenium will wait for the page to load
   # and render for the email report.
   EMAIL_PAGE_RENDER_WAIT = 30
   
   # Send user to a link where they can report bugs
   BUG_REPORT_URL = None
   
   # Send user to a link where they can read more about Superset
   DOCUMENTATION_URL = None
   DOCUMENTATION_TEXT = "Documentation"
   DOCUMENTATION_ICON = None  # Recommended size: 16x16
   
   # Enables the replacement react views for all the FAB views (list, edit, show) with
   # designs introduced in SIP-34: https://github.com/apache/incubator-superset/issues/8976
   # This is a work in progress so not all features available in FAB have been implemented
   ENABLE_REACT_CRUD_VIEWS = False
   
   # What is the Last N days relative in the time selector to:
   # 'today' means it is midnight (00:00:00) in the local timezone
   # 'now' means it is relative to the query issue time
   # If both start and end time is set to now, this will make the time
   # filter a moving window. By only setting the end time to now,
   # start time will be set to midnight, while end will be relative to
   # the query issue time.
   DEFAULT_RELATIVE_START_TIME = "today"
   DEFAULT_RELATIVE_END_TIME = "now"
   
   # Configure which SQL validator to use for each engine
   SQL_VALIDATORS_BY_ENGINE = {"presto": "PrestoDBSQLValidator"}
   
   # Do you want Talisman enabled?
   TALISMAN_ENABLED = False
   # If you want Talisman, how do you want it configured??
   TALISMAN_CONFIG = {
       "content_security_policy": None,
       "force_https": True,
       "force_https_permanent": False,
   }
   
   # Note that: RowLevelSecurityFilter is only given by default to the Admin role
   # and the Admin Role does have the all_datasources security permission.
   # But, if users create a specific role with access to RowLevelSecurityFilter MVC
   # and a custom datasource access, the table dropdown will not be correctly filtered
   # by that custom datasource access. So we are assuming a default security config,
   # a custom security config could potentially give access to setting filters on
   # tables that users do not have access to.
   ENABLE_ROW_LEVEL_SECURITY = False
   # It is possible to customize which tables and roles are featured in the RLS
   # dropdown. When set, this dict is assigned to `add_form_query_rel_fields` and
   # `edit_form_query_rel_fields` on `RowLevelSecurityFiltersModelView`. Example:
   #
   # from flask_appbuilder.models.sqla import filters
   # RLS_FORM_QUERY_REL_FIELDS = {
   #     "roles": [["name", filters.FilterStartsWith, "RlsRole"]]
   #     "tables": [["table_name", filters.FilterContains, "rls"]]
   # }
   RLS_FORM_QUERY_REL_FIELDS: Optional[Dict[str, List[List[Any]]]] = None
   
   #
   # Flask session cookie options
   #
   # See https://flask.palletsprojects.com/en/1.1.x/security/#set-cookie-options
   # for details
   #
   SESSION_COOKIE_HTTPONLY = True  # Prevent cookie from being read by frontend JS?
   SESSION_COOKIE_SECURE = False  # Prevent cookie from being transmitted over non-tls?
   SESSION_COOKIE_SAMESITE = "Lax"  # One of [None, 'None', 'Lax', 'Strict']
   
   # Flask configuration variables
   SEND_FILE_MAX_AGE_DEFAULT = 60 * 60 * 24 * 365  # Cache static resources
   
   # URI to database storing the example data, points to
   # SQLALCHEMY_DATABASE_URI by default if set to `None`
   SQLALCHEMY_EXAMPLES_URI = None
   
   # Some sqlalchemy connection strings can open Superset to security risks.
   # Typically these should not be allowed.
   PREVENT_UNSAFE_DB_CONNECTIONS = True
   
   # Path used to store SSL certificates that are generated when using custom certs.
   # Defaults to temporary directory.
   # Example: SSL_CERT_PATH = "/certs"
   SSL_CERT_PATH: Optional[str] = None
   
   # SIP-15 should be enabled for all new Superset deployments which ensures that the time
   # range endpoints adhere to [start, end). For existing deployments admins should provide
   # a dedicated period of time to allow chart producers to update their charts before
   # mass migrating all charts to use the [start, end) interval.
   #
   # Note if no end date for the grace period is specified then the grace period is
   # indefinite.
   SIP_15_ENABLED = True
   SIP_15_GRACE_PERIOD_END: Optional[date] = None  # exclusive
   SIP_15_DEFAULT_TIME_RANGE_ENDPOINTS = ["unknown", "inclusive"]
   SIP_15_TOAST_MESSAGE = (
       "Action Required: Preview then save your chart using the "
       'new time range endpoints <a target="_blank" href="{url}" '
       'class="alert-link">here</a>.'
   )
   
   
   # SQLA table mutator, every time we fetch the metadata for a certain table
   # (superset.connectors.sqla.models.SqlaTable), we call this hook
   # to allow mutating the object with this callback.
   # This can be used to set any properties of the object based on naming
   # conventions and such. You can find examples in the tests.
   SQLA_TABLE_MUTATOR = lambda table: table
   
   if CONFIG_PATH_ENV_VAR in os.environ:
       # Explicitly import config module that is not necessarily in pythonpath; useful
       # for case where app is being executed via pex.
       try:
           cfg_path = os.environ[CONFIG_PATH_ENV_VAR]
           module = sys.modules[__name__]
           override_conf = imp.load_source("superset_config", cfg_path)
           for key in dir(override_conf):
               if key.isupper():
                   setattr(module, key, getattr(override_conf, key))
   
           print(f"Loaded your LOCAL configuration at [{cfg_path}]")
       except Exception:
           logger.exception(
               "Failed to import config for %s=%s", CONFIG_PATH_ENV_VAR, cfg_path
           )
           raise
   elif importlib.util.find_spec("superset_config"):
       try:
           import superset_config  # pylint: disable=import-error
           from superset_config import *  # type: ignore  # pylint: disable=import-error,wildcard-import,unused-wildcard-import
   
           print(f"Loaded your LOCAL configuration at [{superset_config.__file__}]")
       except Exception:
           logger.exception("Found but failed to import local superset_config")
           raise'''


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-735725767


   i normally am using this commands to create and activate the virtual environment on Debian
   Please let me know if this wrong
   
   virtualenv --python=python3 env
   source env/bin/activate
   
   and this is the outcome
   
   matteo@mbalzarotti-NB:~/superset$ virtualenv --python=python3 env
   Running virtualenv with interpreter /home/matteo/env/bin/python3
   Using real prefix '/usr'
   Path not in prefix '/home/matteo/env/include/python3.7m' '/usr'
   New python executable in /home/matteo/superset/env/bin/python3
   Also creating executable in /home/matteo/superset/env/bin/python
   Installing setuptools, pkg_resources, pip, wheel...done.
   matteo@mbalzarotti-NB:~/superset$ source env/bin/activate
   (env) matteo@mbalzarotti-NB:~/superset$
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734933905


   Hello Shkrupii,
   I have implemented all the changes you've recommended, Please see the superset_config.py file (with the overrides only)
   [superset_config_NEW.txt](https://github.com/apache/incubator-superset/files/5609062/superset_config_NEW.txt)
   
   -------------------------------------------------------------------------------------------------------------------------------
   
   `matteo@mbalzarotti-NB:~/python-environments/env/lib/python3.7/site-packages/superset$ cat superset_config.py
   # Superset specific config
   from cachelib.redis import RedisCache
   # The SQLAlchemy connection string.
   # SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
   # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
   SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc'
   
   # Console Log Settings
   
   LOG_FORMAT = "%(asctime)s:%(levelname)s:%(name)s:%(message)s"
   LOG_LEVEL = "INFO"
   
   # ---------------------------------------------------
   # Enable Time Rotate Log Handler
   # ---------------------------------------------------
   # LOG_LEVEL = DEBUG, INFO, WARNING, ERROR, CRITICAL
   
   ENABLE_TIME_ROTATE = True
   TIME_ROTATE_LOG_LEVEL = "DEBUG"
   FILENAME = "/var/log/superset.log"
   ROLLOVER = "midnight"
   INTERVAL = 1
   BACKUP_COUNT = 30
   
   # Default celery config is to use SQLA as a broker, in a production setting
   # you'll want to use a proper broker as specified here:
   # http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html
   
   class CeleryConfig:  # pylint: disable=too-few-public-methods
       BROKER_URL = "redis://localhost:6379/0"
       CELERY_IMPORTS = ("superset.sql_lab", "superset.tasks")
       CELERY_RESULT_BACKEND = "postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc"
       CELERYD_LOG_LEVEL = "INFO"
       CELERYD_PREFETCH_MULTIPLIER = 10
       CELERY_ACKS_LATE = True
       CELERY_ANNOTATIONS = {
           "sql_lab.get_sql_results": {"rate_limit": "100/s"},
           "email_reports.send": {
               "rate_limit": "1/s",
               "time_limit": 320,
               "soft_time_limit": 350,
               "ignore_result": True,
           },
       }
       CELERYBEAT_SCHEDULE = {
           "email_reports.schedule_hourly": {
               "task": "email_reports.schedule_hourly",
               "schedule": crontab(minute=1, hour="*"),
           }
       }
   
   CELERY_CONFIG = CeleryConfig  # pylint: disable=invalid-name
   
   # If enabled, it can be used to store the results of long-running queries
   # in SQL Lab by using the "Run Async" button/feature
   RESULTS_BACKEND = RedisCache(
      host='localhost', port=6379, key_prefix='superset_results')
   
   # smtp server configuration
   EMAIL_NOTIFICATIONS = True  # all the emails are sent using dryrun
   SMTP_HOST = "100.200.156.23"
   SMTP_STARTTLS = False
   SMTP_SSL = False
   SMTP_USER = ""
   SMTP_PORT = 25
   SMTP_PASSWORD = ""
   SMTP_MAIL_FROM = "superset@objectway.com"
   
   # Enable / disable scheduled email reports
   ENABLE_SCHEDULED_EMAIL_REPORTS = True
   
   # Enable / disable Alerts, where users can define custom SQL that
   # will send emails with screenshots of charts or dashboards periodically
   # if it meets the criteria
   ENABLE_ALERTS = True
   
   # User credentials to use for generating reports
   # This user should have permissions to browse all the dashboards and
   # slices.
   # TODO: In the future, login as the owner of the item to generate reports
   EMAIL_REPORTS_USER = "admin"
   EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] "
   EMAIL_REPORTS_WEBDRIVER = "firefox"
   
   # The base URL to query for accessing the user interface
   WEBDRIVER_BASEURL = "http://0.0.0.0:8088/"
   # The base URL for the email report hyperlinks.
   WEBDRIVER_BASEURL_USER_FRIENDLY = WEBDRIVER_BASEURL
   # Time in seconds, selenium will wait for the page to load
   # and render for the email report.
   EMAIL_PAGE_RENDER_WAIT = 30
   
   # What is the Last N days relative in the time selector to:
   # 'today' means it is midnight (00:00:00) in the local timezone
   # 'now' means it is relative to the query issue time
   # If both start and end time is set to now, this will make the time
   # filter a moving window. By only setting the end time to now,
   # start time will be set to midnight, while end will be relative to
   # the query issue time.
   DEFAULT_RELATIVE_END_TIME = "now"
   
   SCREENSHOT_LOCATE_WAIT = 60
   SCREENSHOT_LOAD_WAIT = 60
   SCHEDULED_EMAIL_DEBUG_MODE = True`
   
   ------------------------------------------------------------------------------------------------------------------------
   
   This is my export PATH:
   /home/matteo/env/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/matteo/python-environments/env/lib/python3.7/site-packages/superset
   
   Now when i run "superset init" command (or any otehr command like superset db upgrade, etc.) I get this new error message:
   
   (env) matteo@mbalzarotti-NB:~$ superset init
   Traceback (most recent call last):
     File "/home/matteo/env/bin/superset", line 5, in <module>
       from superset.cli import superset
     File "/home/matteo/env/lib/python3.7/site-packages/superset/__init__.py", line 21, in <module>
       from superset.app import create_app
     File "/home/matteo/env/lib/python3.7/site-packages/superset/app.py", line 20, in <module>
       from typing import Any, Callable, Dict
     File "/home/matteo/python-environments/env/lib/python3.7/site-packages/superset/typing.py", line 17, in <module>
       from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union
   ImportError: cannot import name 'Any' from 'typing' (/home/matteo/python-environments/env/lib/python3.7/site-packages/superset/typing.py)
   
   Do you know by chance what is this error?
   Thanks&Regards
   Matteo
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-744364373


   Thank you Alex for your feedback
   A bit busy today with other stuff, but i will check as soon as possible the compatibility matrix (geckodriver, firefox, selenium) on my environment and will let you know. Have a great day!
   Matteo


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734324135


   I did it, believe me...
   Anyway now i follow your recommendations.
   Thanks a lot!


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737316225


   This is the error:
   
   (env4) matteo@mbalzarotti-NB:~/superset$ celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
   Loaded your LOCAL configuration at [/home/matteo/superset/config/superset_config.py]
   logging was configured successfully
   INFO:superset.utils.logging_configurator:logging was configured successfully
   /home/matteo/superset/env4/lib/python3.7/site-packages/flask_caching/__init__.py:192: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled.
     "Flask-Caching: CACHE_TYPE is set to null, "
   No PIL installation found
   INFO:superset.utils.screenshots:No PIL installation found
   
    -------------- celery@mbalzarotti-NB v4.4.7 (cliffs)
   --- ***** -----
   -- ******* ---- Linux-4.4.0-18362-Microsoft-x86_64-with-debian-10.6 2020-12-02 15:52:09
   - *** --- * ---
   - ** ---------- [config]
   - ** ---------- .> app:         __main__:0x7f3574889550
   - ** ---------- .> transport:   redis://localhost:6379/0
   - ** ---------- .> results:     postgresql://matteo:**@127.0.0.1/superset_loc
   - *** --- * --- .> concurrency: 4 (prefork)
   -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
   --- ***** -----
    -------------- [queues]
                   .> celery           exchange=celery(direct) key=celery
   
   
   [2020-12-02 16:06:11,195: INFO/ForkPoolWorker-1] Starting report for slack: None and recipients: matteo.balzarotti@objectway.com.
   Init selenium driver
   [2020-12-02 16:06:11,243: INFO/ForkPoolWorker-1] Init selenium driver
   Message: 'geckodriver' executable needs to be in PATH.
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 76, in start
       stdin=PIPE)
     File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
       restore_signals, start_new_session)
     File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
       raise child_exception_type(errno_num, err_msg, err_filename)
   FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver'
   
   During handling of the above exception, another exception occurred:
   
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
       self.service.start()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 83, in start
       os.path.basename(self.path), self.start_error_message)
   selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
   
   [2020-12-02 16:06:11,271: ERROR/ForkPoolWorker-1] Message: 'geckodriver' executable needs to be in PATH.
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 76, in start
       stdin=PIPE)
     File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
       restore_signals, start_new_session)
     File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
       raise child_exception_type(errno_num, err_msg, err_filename)
   FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver'
   
   During handling of the above exception, another exception occurred:
   
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
       self.service.start()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 83, in start
       os.path.basename(self.path), self.start_error_message)
   selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
   
   Message: 'geckodriver' executable needs to be in PATH.
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 76, in start
       stdin=PIPE)
     File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
       restore_signals, start_new_session)
     File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
       raise child_exception_type(errno_num, err_msg, err_filename)
   FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver': 'geckodriver'
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-738002664


   May i call you now?
   
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-741641839


   ok thanks i try to ping you now


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-735723558


   I have followed your recommedations, thanks for that.
   
   The command 
   python3 -m venv venv
   is failing with this error:
   
   matteo@mbalzarotti-NB:~/superset$ python3 -m venv venv
   The virtual environment was not created successfully because ensurepip is not
   available.  On Debian/Ubuntu systems, you need to install the python3-venv
   package using the following command.
   
       apt-get install python3-venv
   
   You may need to use sudo with that command.  After installing the python3-venv
   package, recreate your virtual environment.
   
   Failing command: ['/home/matteo/superset/venv/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734201894


   Got it, thanks for the tip :)


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737410344


   hi,
   please find attached the full message
   
   (env4) matteo@mbalzarotti-NB:~/superset$ celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
   Loaded your LOCAL configuration at [/home/matteo/superset/config/superset_config.py]
   logging was configured successfully
   INFO:superset.utils.logging_configurator:logging was configured successfully
   /home/matteo/superset/env4/lib/python3.7/site-packages/flask_caching/__init__.py:192: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled.
     "Flask-Caching: CACHE_TYPE is set to null, "
   No PIL installation found
   INFO:superset.utils.screenshots:No PIL installation found
   
    -------------- celery@mbalzarotti-NB v4.4.7 (cliffs)
   --- ***** -----
   -- ******* ---- Linux-4.4.0-18362-Microsoft-x86_64-with-debian-10.6 2020-12-02 18:28:53
   - *** --- * ---
   - ** ---------- [config]
   - ** ---------- .> app:         __main__:0x7fa97dea95c0
   - ** ---------- .> transport:   redis://localhost:6379/0
   - ** ---------- .> results:     postgresql://matteo:**@127.0.0.1/superset_loc
   - *** --- * --- .> concurrency: 4 (prefork)
   -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
   --- ***** -----
    -------------- [queues]
                   .> celery           exchange=celery(direct) key=celery
   
   
   [2020-12-02 18:32:04,922: INFO/ForkPoolWorker-1] Starting report for slack: None and recipients: matteo.balzarotti@objectway.com.
   Init selenium driver
   [2020-12-02 18:32:04,971: INFO/ForkPoolWorker-1] Init selenium driver
   Message: Process unexpectedly closed with status 0
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0
   
   [2020-12-02 18:32:07,934: ERROR/ForkPoolWorker-1] Message: Process unexpectedly closed with status 0
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0
   
   Message: Process unexpectedly closed with status 0
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 517, in schedule_email_report
       schedule.deliver_as_group,
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0
   
   [2020-12-02 18:32:07,960: ERROR/ForkPoolWorker-1] Message: Process unexpectedly closed with status 0
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 517, in schedule_email_report
       schedule.deliver_as_group,
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0
   
   [2020-12-02 18:32:07,991: ERROR/ForkPoolWorker-1] Task email_reports.send[be5931fa-8136-4ad3-b0d3-616f60353e99] raised unexpected: WebDriverException('Process unexpectedly closed with status 0', None, None)
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/app/trace.py", line 412, in trace_task
       R = retval = fun(*args, **kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/app.py", line 116, in __call__
       return task_base.__call__(self, *args, **kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/app/trace.py", line 704, in __protected_call__
       return self.run(*args, **kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 517, in schedule_email_report
       schedule.deliver_as_group,
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 0


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-735783634


   Apparently Debian configured python venv in different to Centos manner. In general we don't care, but when I had provided you my check check points I expected you to recreate environment and superset was expected to become your root directory for everything, both config and venv.
   According to commands you provided and output you returned all should be good. Do you sure that "env" directory is created from scratch? For testing purposes `virtualenv --python=python3 env1; source env1/bin/activate` `virtualenv --python=python3 env2; source env2/bin/activate` ... you can make unique directories for your environments and as much as you want until your superset will be up and running.
   
   BR, Oleksii


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii edited a comment on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii edited a comment on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734307065


   I assume as reference you are using [config.py](https://github.com/apache/incubator-superset/blob/master/superset/config.py). As stated at the very beginning of file you should keep your overrides in superset_config.py. There is no need to keep every default setting in your file. Because of that it is also hard to understand what changes you made. In order to point your environment to your superset_config.py you can use an option suggested in config.py 
   ```
   # superset_config.py is located in my case is /opt/local/apache-superset/config directory
   export PYTHONPATH=/opt/local/apache-superset/config
   ```
   or another option is to export to your environment SUPERSET_CONFIG_PATH 
   ```
   export SUPERSET_CONFIG_PATH=/opt/local/apache-superset/config/superset_config.py
   ```
   SQLALCHEMY_DATABASE_URI looks oK.
   
   Command not found means you forgot to export paths with your binaries and superset in particular to your environment
   ```
   # in my case
   # python binaries live /opt/local/apache-superset/venv/bin here
   # geckodriver binary lives /opt/local/apache-superset/bin here
   # common bins live :/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin: here
   export PATH=/opt/local/apache-superset/venv/bin:/opt/local/apache-superset/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin
   ```
   
   Nice option for you could be `SCHEDULED_EMAIL_DEBUG_MODE = True`. When this option is enabled, celery worker will print email message in raw format to its logs. Could be useful for cases like yours, when superset configured with external email agent; superset will ignore email part of config, just leave them as is, and don't spend your time checking email server whether email is sent or bounced. It's up to you.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-736671848


   hello,
   i have resolved the previous issue. Now I'm able to start correctly Superset but i have still problem with Celery worker when i run this command to start the service as per documentation:
   celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
   
   This is the error that i get (it seems is not able to connect to my postgresql db but the connection works well when  itry to use trhe same in Superset web portal)
   
   (env4) matteo@mbalzarotti-NB:~/superset$ celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
   Loaded your LOCAL configuration at [/home/matteo/superset/config/superset_config.py]
   logging was configured successfully
   INFO:superset.utils.logging_configurator:logging was configured successfully
   /home/matteo/superset/env4/lib/python3.7/site-packages/flask_caching/__init__.py:192: UserWarning: Flask-Caching: CACHE_TYPE is set to null, caching is effectively disabled.
     "Flask-Caching: CACHE_TYPE is set to null, "
   No PIL installation found
   INFO:superset.utils.screenshots:No PIL installation found
   [2020-12-01 17:38:19,687: CRITICAL/MainProcess] Unrecoverable error: ModuleNotFoundError("No module named 'postgresql'")Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/kombu/utils/objects.py", line 42, in __get__
       return obj.__dict__[self.__name__]
   KeyError: 'backend'
   
   During handling of the above exception, another exception occurred:
   
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/worker/worker.py", line 208, in start
       self.blueprint.start(self)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/bootsteps.py", line 115, in start
       self.on_start()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/apps/worker.py", line 140, in on_start
       self.emit_banner()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/apps/worker.py", line 155, in emit_banner
       ' \n', self.startup_info(artlines=not use_image))),
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/apps/worker.py", line 218, in startup_info
       results=self.app.backend.as_uri(),
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/kombu/utils/objects.py", line 44, in __get__
       value = obj.__dict__[self.__name__] = self.__get(obj)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/app/base.py", line 1193, in backend
       return self._get_backend()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/app/base.py", line 910, in _get_backend
       self.loader)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/app/backends.py", line 74, in by_url
       return by_name(backend, loader), url
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/celery/app/backends.py", line 54, in by_name
       cls = symbol_by_name(backend, aliases)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/kombu/utils/imports.py", line 57, in symbol_by_name
       module = imp(module_name, package=package, **kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/importlib/__init__.py", line 127, in import_module
       return _bootstrap._gcd_import(name[level:], package, level)
     File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
     File "<frozen importlib._bootstrap>", line 983, in _find_and_load
     File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
   ModuleNotFoundError: No module named 'postgresql'
   (env4) matteo@mbalzarotti-NB:~/superset$                                                                 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737328676


   Download geckodriver-v0.28.0-linux64.tar.gz from https://github.com/mozilla/geckodriver/releases,  it is latest version at the moment, and untar to folder "bin", that "bin" should be in your PATH, check permissions - `chmod 755 geckodriver`, and restart worker. Should be Ok, otherwise you put the geckodriver in place PATH variable doesn't know about.
   Next possible issue could be `No such file or directory: 'firefox': 'firefox'`.
   Firefox should be easy to install . For example: https://wiki.debian.org/Firefox#From_Debian_packages


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] dpgaspar commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
dpgaspar commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-732032280


   Hi @bzmatteo72, `user_attribute` table should exist on your DB, please post your superset version and check that the db migration ran smoothly


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] Shkurupii commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
Shkurupii commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737957241


   Check whether geckodriver is executable.  Although you place gecko in correct bin PATH, error Message: 'geckodriver' **executable** needs to be in PATH might also give you a hint that gecko has wrong permissions.
   Now regarding your superset and celery stack. Enable DEBUG in superset config:
   ```
   LOG_LEVEL = "DEBUG"
   CELERYD_LOG_LEVEL = "DEBUG"
   ```
   and see how it goes.
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-740077068


   Hello Alex!
   I have reinstalled everyhting on our server (Linux Centos7) and added MySql database as well but now when i run the superset db upgrade command i get the error i have posted below
   It seems is not able to find MySQLdb module (i have had a look at the blogs and it seems there is a problem to install this and other packages for MySql with Python 3.x)
   Were you able to install it in your environment? 
   Thanks&Regards 
   Matteo
   
   (venv3) [root@afapachess superset]# superset db upgrade
   /usr/local/lib/python3.6/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.2) or chardet (3.0.4) doesn't match a supported version!
     RequestsDependencyWarning)
   Loaded your LOCAL configuration at [/root/superset/config/superset_config.py]
   Failed to create app
   Traceback (most recent call last):
     File "/usr/local/lib/python3.6/site-packages/superset/app.py", line 62, in create_app
       app_initializer.init_app()
     File "/usr/local/lib/python3.6/site-packages/superset/app.py", line 503, in init_app
       self.setup_db()
     File "/usr/local/lib/python3.6/site-packages/superset/app.py", line 632, in setup_db
       pessimistic_connection_handling(db.engine)
     File "/usr/local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 943, in engine
       return self.get_engine()
     File "/usr/local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 962, in get_engine
       return connector.get_engine()
     File "/usr/local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 556, in get_engine
       self._engine = rv = self._sa.create_engine(sa_url, options)
     File "/usr/local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 972, in create_engine
       return sqlalchemy.create_engine(sa_url, **engine_opts)
     File "/usr/local/lib64/python3.6/site-packages/sqlalchemy/engine/__init__.py", line 500, in create_engine
       return strategy.create(*args, **kwargs)
     File "/usr/local/lib64/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 87, in create
       dbapi = dialect_cls.dbapi(**dbapi_args)
     File "/usr/local/lib64/python3.6/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 118, in dbapi
       return __import__("MySQLdb")
   ModuleNotFoundError: No module named 'MySQLdb'
   Traceback (most recent call last):
     File "/usr/local/bin/superset", line 11, in <module>
       sys.exit(superset())
     File "/usr/local/lib/python3.6/site-packages/click/core.py", line 829, in __call__
       return self.main(*args, **kwargs)
     File "/usr/local/lib64/python3.6/site-packages/flask/cli.py", line 586, in main
       return super(FlaskGroup, self).main(*args, **kwargs)
     File "/usr/local/lib/python3.6/site-packages/click/core.py", line 782, in main
       rv = self.invoke(ctx)
     File "/usr/local/lib/python3.6/site-packages/click/core.py", line 1256, in invoke
       Command.invoke(self, ctx)
     File "/usr/local/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
       return ctx.invoke(self.callback, **ctx.params)
     File "/usr/local/lib/python3.6/site-packages/click/core.py", line 610, in invoke
       return callback(*args, **kwargs)
     File "/usr/local/lib/python3.6/site-packages/click/decorators.py", line 21, in new_func
       return f(get_current_context(), *args, **kwargs)
     File "/usr/local/lib64/python3.6/site-packages/flask/cli.py", line 425, in decorator
       with __ctx.ensure_object(ScriptInfo).load_app().app_context():
     File "/usr/local/lib64/python3.6/site-packages/flask/cli.py", line 381, in load_app
       app = call_factory(self, self.create_app)
     File "/usr/local/lib64/python3.6/site-packages/flask/cli.py", line 119, in call_factory
       return app_factory()
     File "/usr/local/lib/python3.6/site-packages/superset/app.py", line 69, in create_app
       raise ex
     File "/usr/local/lib/python3.6/site-packages/superset/app.py", line 62, in create_app
       app_initializer.init_app()
     File "/usr/local/lib/python3.6/site-packages/superset/app.py", line 503, in init_app
       self.setup_db()
     File "/usr/local/lib/python3.6/site-packages/superset/app.py", line 632, in setup_db
       pessimistic_connection_handling(db.engine)
     File "/usr/local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 943, in engine
       return self.get_engine()
     File "/usr/local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 962, in get_engine
       return connector.get_engine()
     File "/usr/local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 556, in get_engine
       self._engine = rv = self._sa.create_engine(sa_url, options)
     File "/usr/local/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 972, in create_engine
       return sqlalchemy.create_engine(sa_url, **engine_opts)
     File "/usr/local/lib64/python3.6/site-packages/sqlalchemy/engine/__init__.py", line 500, in create_engine
       return strategy.create(*args, **kwargs)
     File "/usr/local/lib64/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 87, in create
       dbapi = dialect_cls.dbapi(**dbapi_args)
     File "/usr/local/lib64/python3.6/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 118, in dbapi
       return __import__("MySQLdb")
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 edited a comment on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 edited a comment on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-734186907


   Hi Shkurupii,
   
   i have updated my Superset config file following your file as example but now when i try to start superset from the terminal i get this message:
   -bash: superset: command not found
   
   Please find attached my config file below.
   Notice that, as per earlier recommendation in the thread above, I have installed a Postgresql db (superset_loc) on my localhost where i have installed Superset and i'm connecting to the same using the following connection url, that you can find in the config file as well below:
   SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc'
   
   Not sure if this is correct but the db connection is responding well
   
   Please could you help kindly to troubleshoot the new issue (superset not found) and check if my configuration file is correctly set up to send email (the SMTP_HOST I'm using in not based on my local machine but it's outside on the company network)?
   
   Let me know if you have any question
   
   Thanks & Regards
   Matteo
   
   ```
   # Licensed to the Apache Software Foundation (ASF) under one
   # or more contributor license agreements.  See the NOTICE file
   # distributed with this work for additional information
   # regarding copyright ownership.  The ASF licenses this file
   # to you under the Apache License, Version 2.0 (the
   # "License"); you may not use this file except in compliance
   # with the License.  You may obtain a copy of the License at
   #
   #   http://www.apache.org/licenses/LICENSE-2.0
   #
   # Unless required by applicable law or agreed to in writing,
   # software distributed under the License is distributed on an
   # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   # KIND, either express or implied.  See the License for the
   # specific language governing permissions and limitations
   # under the License.
   """The main config file for Superset
   
   All configuration in this file can be overridden by providing a superset_config
   in your PYTHONPATH as there is a ``from superset_config import *``
   at the end of this file.
   """
   import imp
   import importlib.util
   import json
   import logging
   import os
   import sys
   from collections import OrderedDict
   from datetime import date
   from typing import Any, Callable, Dict, List, Optional, Type, TYPE_CHECKING
   
   from cachelib.base import BaseCache
   from celery.schedules import crontab
   from dateutil import tz
   from flask import Blueprint
   from flask_appbuilder.security.manager import AUTH_DB
   from pandas.io.parsers import STR_NA_VALUES
   from cachelib.redis import RedisCache
   
   from superset.jinja_context import (  # pylint: disable=unused-import
       BaseTemplateProcessor,
   )
   from superset.stats_logger import DummyStatsLogger
   from superset.typing import CacheConfig
   from superset.utils.log import DBEventLogger
   from superset.utils.logging_configurator import DefaultLoggingConfigurator
   
   logger = logging.getLogger(__name__)
   
   if TYPE_CHECKING:
       from flask_appbuilder.security.sqla import models  # pylint: disable=unused-import
   
       from superset.models.core import Database  # pylint: disable=unused-import
   
   # Realtime stats logger, a StatsD implementation exists
   STATS_LOGGER = DummyStatsLogger()
   EVENT_LOGGER = DBEventLogger()
   
   SUPERSET_LOG_VIEW = True
   
   BASE_DIR = os.path.abspath(os.path.dirname(__file__))
   if "SUPERSET_HOME" in os.environ:
       DATA_DIR = os.environ["SUPERSET_HOME"]
   else:
       DATA_DIR = os.path.join(os.path.expanduser("~"), ".superset")
   
   # ---------------------------------------------------------
   # Superset specific config
   # ---------------------------------------------------------
   VERSION_INFO_FILE = os.path.join(BASE_DIR, "static", "version_info.json")
   PACKAGE_JSON_FILE = os.path.join(BASE_DIR, "static", "assets", "package.json")
   
   # Multiple favicons can be specified here. The "href" property
   # is mandatory, but "sizes," "type," and "rel" are optional.
   # For example:
   # {
   #     "href":path/to/image.png",
   #     "sizes": "16x16",
   #     "type": "image/png"
   #     "rel": "icon"
   # },
   FAVICONS = [{"href": "/static/assets/images/favicon.png"}]
   
   
   def _try_json_readversion(filepath: str) -> Optional[str]:
       try:
           with open(filepath, "r") as f:
               return json.load(f).get("version")
       except Exception:  # pylint: disable=broad-except
           return None
   
   
   def _try_json_readsha(  # pylint: disable=unused-argument
       filepath: str, length: int
   ) -> Optional[str]:
       try:
           with open(filepath, "r") as f:
               return json.load(f).get("GIT_SHA")[:length]
       except Exception:  # pylint: disable=broad-except
           return None
   
   
   # Depending on the context in which this config is loaded, the
   # version_info.json file may or may not be available, as it is
   # generated on install via setup.py. In the event that we're
   # actually running Superset, we will have already installed,
   # therefore it WILL exist. When unit tests are running, however,
   # it WILL NOT exist, so we fall back to reading package.json
   VERSION_STRING = _try_json_readversion(VERSION_INFO_FILE) or _try_json_readversion(
       PACKAGE_JSON_FILE
   )
   
   VERSION_SHA_LENGTH = 8
   VERSION_SHA = _try_json_readsha(VERSION_INFO_FILE, VERSION_SHA_LENGTH)
   
   ROW_LIMIT = 50000
   VIZ_ROW_LIMIT = 10000
   # max rows retreieved when requesting samples from datasource in explore view
   SAMPLES_ROW_LIMIT = 1000
   # max rows retrieved by filter select auto complete
   FILTER_SELECT_ROW_LIMIT = 10000
   SUPERSET_WORKERS = 2  # deprecated
   SUPERSET_CELERY_WORKERS = 32  # deprecated
   
   SUPERSET_WEBSERVER_PROTOCOL = "http"
   SUPERSET_WEBSERVER_ADDRESS = "0.0.0.0"
   SUPERSET_WEBSERVER_PORT = 8088
   
   # This is an important setting, and should be lower than your
   # [load balancer / proxy / envoy / kong / ...] timeout settings.
   # You should also make sure to configure your WSGI server
   # (gunicorn, nginx, apache, ...) timeout setting to be <= to this setting
   SUPERSET_WEBSERVER_TIMEOUT = 60
   
   # this 2 settings are used by dashboard period force refresh feature
   # When user choose auto force refresh frequency
   # < SUPERSET_DASHBOARD_PERIODICAL_REFRESH_LIMIT
   # they will see warning message in the Refresh Interval Modal.
   # please check PR #9886
   SUPERSET_DASHBOARD_PERIODICAL_REFRESH_LIMIT = 0
   SUPERSET_DASHBOARD_PERIODICAL_REFRESH_WARNING_MESSAGE = None
   
   SUPERSET_DASHBOARD_POSITION_DATA_LIMIT = 65535
   CUSTOM_SECURITY_MANAGER = None
   SQLALCHEMY_TRACK_MODIFICATIONS = False
   # ---------------------------------------------------------
   
   # Your App secret key
   SECRET_KEY = "\2\1thisismyscretkey\1\2\\e\\y\\y\\h"
   
   # The SQLAlchemy connection string.
   # SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
   # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
   SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc'
   
   # In order to hook up a custom password store for all SQLACHEMY connections
   # implement a function that takes a single argument of type 'sqla.engine.url',
   # returns a password and set SQLALCHEMY_CUSTOM_PASSWORD_STORE.
   #
   # e.g.:
   # def lookup_password(url):
   #     return 'secret'
   # SQLALCHEMY_CUSTOM_PASSWORD_STORE = lookup_password
   SQLALCHEMY_CUSTOM_PASSWORD_STORE = None
   
   # The limit of queries fetched for query search
   QUERY_SEARCH_LIMIT = 1000
   
   # Flask-WTF flag for CSRF
   WTF_CSRF_ENABLED = True
   
   # Add endpoints that need to be exempt from CSRF protection
   WTF_CSRF_EXEMPT_LIST = ["superset.views.core.log", "superset.charts.api.data"]
   
   # Whether to run the web server in debug mode or not
   DEBUG = os.environ.get("FLASK_ENV") == "development"
   FLASK_USE_RELOAD = True
   
   # Superset allows server-side python stacktraces to be surfaced to the
   # user when this feature is on. This may has security implications
   # and it's more secure to turn it off in production settings.
   SHOW_STACKTRACE = True
   
   # Use all X-Forwarded headers when ENABLE_PROXY_FIX is True.
   # When proxying to a different port, set "x_port" to 0 to avoid downstream issues.
   ENABLE_PROXY_FIX = True
   PROXY_FIX_CONFIG = {"x_for": 1, "x_proto": 1, "x_host": 1, "x_port": 1, "x_prefix": 1}
   
   # ------------------------------
   # GLOBALS FOR APP Builder
   # ------------------------------
   # Uncomment to setup Your App name
   APP_NAME = "Superset"
   
   # Uncomment to setup an App icon
   APP_ICON = "/static/assets/images/superset-logo-horiz.png"
   APP_ICON_WIDTH = 126
   
   # Uncomment to specify where clicking the logo would take the user
   # e.g. setting it to '/welcome' would take the user to '/superset/welcome'
   LOGO_TARGET_PATH = None
   
   # Enables SWAGGER UI for superset openapi spec
   # ex: http://localhost:8080/swagger/v1
   FAB_API_SWAGGER_UI = True
   
   # Druid query timezone
   # tz.tzutc() : Using utc timezone
   # tz.tzlocal() : Using local timezone
   # tz.gettz('Asia/Shanghai') : Using the time zone with specific name
   # [TimeZone List]
   # See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
   # other tz can be overridden by providing a local_config
   DRUID_TZ = tz.tzutc()
   DRUID_ANALYSIS_TYPES = ["cardinality"]
   
   # Legacy Druid NoSQL (native) connector
   # Druid supports a SQL interface in its newer versions.
   # Setting this flag to True enables the deprecated, API-based Druid
   # connector. This feature may be removed at a future date.
   DRUID_IS_ACTIVE = False
   
   # If Druid is active whether to include the links to scan/refresh Druid datasources.
   # This should be disabled if you are trying to wean yourself off of the Druid NoSQL
   # connector.
   DRUID_METADATA_LINKS_ENABLED = True
   
   # ----------------------------------------------------
   # AUTHENTICATION CONFIG
   # ----------------------------------------------------
   # The authentication type
   # AUTH_OID : Is for OpenID
   # AUTH_DB : Is for database (username/password)
   # AUTH_LDAP : Is for LDAP
   # AUTH_REMOTE_USER : Is for using REMOTE_USER from web server
   AUTH_TYPE = AUTH_DB
   
   # Uncomment to setup Full admin role name
   # AUTH_ROLE_ADMIN = 'Admin'
   
   # Uncomment to setup Public role name, no authentication needed
   # AUTH_ROLE_PUBLIC = 'Public'
   
   # Will allow user self registration
   # AUTH_USER_REGISTRATION = True
   
   # The default user self registration role
   # AUTH_USER_REGISTRATION_ROLE = "Public"
   
   # When using LDAP Auth, setup the LDAP server
   # AUTH_LDAP_SERVER = "ldap://ldapserver.new"
   
   # Uncomment to setup OpenID providers example for OpenID authentication
   # OPENID_PROVIDERS = [
   #    { 'name': 'Yahoo', 'url': 'https://open.login.yahoo.com/' },
   #    { 'name': 'Flickr', 'url': 'https://www.flickr.com/<username>' },
   
   # ---------------------------------------------------
   # Roles config
   # ---------------------------------------------------
   # Grant public role the same set of permissions as for a selected builtin role.
   # This is useful if one wants to enable anonymous users to view
   # dashboards. Explicit grant on specific datasets is still required.
   PUBLIC_ROLE_LIKE: Optional[str] = None
   
   # ---------------------------------------------------
   # Babel config for translations
   # ---------------------------------------------------
   # Setup default language
   BABEL_DEFAULT_LOCALE = "en"
   # Your application default translation path
   BABEL_DEFAULT_FOLDER = "superset/translations"
   # The allowed translation for you app
   LANGUAGES = {
       "en": {"flag": "us", "name": "English"},
       "es": {"flag": "es", "name": "Spanish"},
       "it": {"flag": "it", "name": "Italian"},
       "fr": {"flag": "fr", "name": "French"},
       "zh": {"flag": "cn", "name": "Chinese"},
       "ja": {"flag": "jp", "name": "Japanese"},
       "de": {"flag": "de", "name": "German"},
       "pt": {"flag": "pt", "name": "Portuguese"},
       "pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
       "ru": {"flag": "ru", "name": "Russian"},
       "ko": {"flag": "kr", "name": "Korean"},
   }
   
   # ---------------------------------------------------
   # Feature flags
   # ---------------------------------------------------
   # Feature flags that are set by default go here. Their values can be
   # overwritten by those specified under FEATURE_FLAGS in super_config.py
   # For example, DEFAULT_FEATURE_FLAGS = { 'FOO': True, 'BAR': False } here
   # and FEATURE_FLAGS = { 'BAR': True, 'BAZ': True } in superset_config.py
   # will result in combined feature flags of { 'FOO': True, 'BAR': True, 'BAZ': True }
   DEFAULT_FEATURE_FLAGS: Dict[str, bool] = {
       # Experimental feature introducing a client (browser) cache
       "CLIENT_CACHE": False,
       "ENABLE_EXPLORE_JSON_CSRF_PROTECTION": False,
       "ENABLE_DASHBOARD_ETAG_HEADER": False,
       "KV_STORE": False,
       "PRESTO_EXPAND_DATA": False,
       # Exposes API endpoint to compute thumbnails
       "THUMBNAILS": False,
       "REDUCE_DASHBOARD_BOOTSTRAP_PAYLOAD": True,
       "REMOVE_SLICE_LEVEL_LABEL_COLORS": False,
       "SHARE_QUERIES_VIA_KV_STORE": False,
       "SIP_38_VIZ_REARCHITECTURE": False,
       "TAGGING_SYSTEM": False,
       "SQLLAB_BACKEND_PERSISTENCE": False,
       "LISTVIEWS_DEFAULT_CARD_VIEW": False,
   }
   
   # Set the default view to card/grid view if thumbnail support is enabled.
   # Setting LISTVIEW_DEFAULT_CARD_VIEW to False will force the default view to
   # always be the table layout
   if DEFAULT_FEATURE_FLAGS["THUMBNAILS"]:
       DEFAULT_FEATURE_FLAGS["LISTVIEW_DEFAULT_CARD_VIEW"] = True
   
   # This is merely a default.
   FEATURE_FLAGS: Dict[str, bool] = {}
   
   # A function that receives a dict of all feature flags
   # (DEFAULT_FEATURE_FLAGS merged with FEATURE_FLAGS)
   # can alter it, and returns a similar dict. Note the dict of feature
   # flags passed to the function is a deepcopy of the dict in the config,
   # and can therefore be mutated without side-effect
   #
   # GET_FEATURE_FLAGS_FUNC can be used to implement progressive rollouts,
   # role-based features, or a full on A/B testing framework.
   #
   # from flask import g, request
   # def GET_FEATURE_FLAGS_FUNC(feature_flags_dict: Dict[str, bool]) -> Dict[str, bool]:
   #     if hasattr(g, "user") and g.user.is_active:
   #         feature_flags_dict['some_feature'] = g.user and g.user.id == 5
   #     return feature_flags_dict
   GET_FEATURE_FLAGS_FUNC: Optional[Callable[[Dict[str, bool]], Dict[str, bool]]] = None
   
   # ---------------------------------------------------
   # Thumbnail config (behind feature flag)
   # ---------------------------------------------------
   THUMBNAIL_SELENIUM_USER = "Admin"
   THUMBNAIL_CACHE_CONFIG: CacheConfig = {
       "CACHE_TYPE": "null",
       "CACHE_NO_NULL_WARNING": True,
   }
   
   # Used for thumbnails and other api: Time in seconds before selenium
   # times out after trying to locate an element on the page and wait
   # for that element to load for an alert screenshot.
   SCREENSHOT_LOCATE_WAIT = 60
   SCREENSHOT_LOAD_WAIT = 60
   
   # ---------------------------------------------------
   # Image and file configuration
   # ---------------------------------------------------
   # The file upload folder, when using models with files
   UPLOAD_FOLDER = BASE_DIR + "/app/static/uploads/"
   UPLOAD_CHUNK_SIZE = 4096
   
   # The image upload folder, when using models with images
   IMG_UPLOAD_FOLDER = BASE_DIR + "/app/static/uploads/"
   
   # The image upload url, when using models with images
   IMG_UPLOAD_URL = "/static/uploads/"
   # Setup image size default is (300, 200, True)
   # IMG_SIZE = (300, 200, True)
   
   CACHE_DEFAULT_TIMEOUT = 60 * 60 * 24
   CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
   TABLE_NAMES_CACHE_CONFIG: CacheConfig = {"CACHE_TYPE": "null"}
   
   # CORS Options
   ENABLE_CORS = False
   CORS_OPTIONS: Dict[Any, Any] = {}
   
   # Chrome allows up to 6 open connections per domain at a time. When there are more
   # than 6 slices in dashboard, a lot of time fetch requests are queued up and wait for
   # next available socket. PR #5039 is trying to allow domain sharding for Superset,
   # and this feature will be enabled by configuration only (by default Superset
   # doesn't allow cross-domain request).
   SUPERSET_WEBSERVER_DOMAINS = None
   
   # Allowed format types for upload on Database view
   EXCEL_EXTENSIONS = {"xlsx", "xls"}
   CSV_EXTENSIONS = {"csv", "tsv", "txt"}
   ALLOWED_EXTENSIONS = {*EXCEL_EXTENSIONS, *CSV_EXTENSIONS}
   
   # CSV Options: key/value pairs that will be passed as argument to DataFrame.to_csv
   # method.
   # note: index option should not be overridden
   CSV_EXPORT = {"encoding": "utf-8"}
   
   # ---------------------------------------------------
   # Time grain configurations
   # ---------------------------------------------------
   # List of time grains to disable in the application (see list of builtin
   # time grains in superset/db_engine_specs.builtin_time_grains).
   # For example: to disable 1 second time grain:
   # TIME_GRAIN_DENYLIST = ['PT1S']
   TIME_GRAIN_DENYLIST: List[str] = []
   
   # Additional time grains to be supported using similar definitions as in
   # superset/db_engine_specs.builtin_time_grains.
   # For example: To add a new 2 second time grain:
   # TIME_GRAIN_ADDONS = {'PT2S': '2 second'}
   TIME_GRAIN_ADDONS: Dict[str, str] = {}
   
   # Implementation of additional time grains per engine.
   # The column to be truncated is denoted `{col}` in the expression.
   # For example: To implement 2 second time grain on clickhouse engine:
   # TIME_GRAIN_ADDON_EXPRESSIONS = {
   #     'clickhouse': {
   #         'PT2S': 'toDateTime(intDiv(toUInt32(toDateTime({col})), 2)*2)'
   #     }
   # }
   TIME_GRAIN_ADDON_EXPRESSIONS: Dict[str, Dict[str, str]] = {}
   
   # ---------------------------------------------------
   # List of viz_types not allowed in your environment
   # For example: Disable pivot table and treemap:
   #  VIZ_TYPE_DENYLIST = ['pivot_table', 'treemap']
   # ---------------------------------------------------
   
   VIZ_TYPE_DENYLIST: List[str] = []
   
   # ---------------------------------------------------
   # List of data sources not to be refreshed in druid cluster
   # ---------------------------------------------------
   
   DRUID_DATA_SOURCE_DENYLIST: List[str] = []
   
   # --------------------------------------------------
   # Modules, datasources and middleware to be registered
   # --------------------------------------------------
   DEFAULT_MODULE_DS_MAP = OrderedDict(
       [
           ("superset.connectors.sqla.models", ["SqlaTable"]),
           ("superset.connectors.druid.models", ["DruidDatasource"]),
       ]
   )
   ADDITIONAL_MODULE_DS_MAP: Dict[str, List[str]] = {}
   ADDITIONAL_MIDDLEWARE: List[Callable[..., Any]] = []
   
   # 1) https://docs.python-guide.org/writing/logging/
   # 2) https://docs.python.org/2/library/logging.config.html
   
   # Default configurator will consume the LOG_* settings below
   # LOGGING_CONFIGURATOR = DefaultLoggingConfigurator()
   
   # Console Log Settings
   
   LOG_FORMAT = "%(asctime)s:%(levelname)s:%(name)s:%(message)s"
   LOG_LEVEL = "INFO"
   
   # ---------------------------------------------------
   # Enable Time Rotate Log Handler
   # ---------------------------------------------------
   # LOG_LEVEL = DEBUG, INFO, WARNING, ERROR, CRITICAL
   
   ENABLE_TIME_ROTATE = True
   TIME_ROTATE_LOG_LEVEL = "DEBUG"
   FILENAME = "/var/log/superset.log"
   ROLLOVER = "midnight"
   INTERVAL = 1
   BACKUP_COUNT = 30
   
   # Custom logger for auditing queries. This can be used to send ran queries to a
   # structured immutable store for auditing purposes. The function is called for
   # every query ran, in both SQL Lab and charts/dashboards.
   # def QUERY_LOGGER(
   #     database,
   #     query,
   #     schema=None,
   #     user=None,
   #     client=None,
   #     security_manager=None,
   #     log_params=None,
   # ):
   #     pass
   QUERY_LOGGER = None
   
   # Set this API key to enable Mapbox visualizations
   MAPBOX_API_KEY = os.environ.get("MAPBOX_API_KEY", "")
   
   # Maximum number of rows returned from a database
   # in async mode, no more than SQL_MAX_ROW will be returned and stored
   # in the results backend. This also becomes the limit when exporting CSVs
   SQL_MAX_ROW = 100000
   
   # Maximum number of rows displayed in SQL Lab UI
   # Is set to avoid out of memory/localstorage issues in browsers. Does not affect
   # exported CSVs
   DISPLAY_MAX_ROW = 10000
   
   # Default row limit for SQL Lab queries. Is overridden by setting a new limit in
   # the SQL Lab UI
   DEFAULT_SQLLAB_LIMIT = 1000
   
   # Maximum number of tables/views displayed in the dropdown window in SQL Lab.
   MAX_TABLE_NAMES = 3000
   
   # Adds a warning message on sqllab save query and schedule query modals.
   SQLLAB_SAVE_WARNING_MESSAGE = None
   SQLLAB_SCHEDULE_WARNING_MESSAGE = None
   
   # Default celery config is to use SQLA as a broker, in a production setting
   # you'll want to use a proper broker as specified here:
   # http://docs.celeryproject.org/en/latest/getting-started/brokers/index.html
   
   
   class CeleryConfig:  # pylint: disable=too-few-public-methods
       BROKER_URL = "redis://localhost:6379/0"
       CELERY_IMPORTS = ("superset.sql_lab", "superset.tasks")
       CELERY_RESULT_BACKEND = "postgresql+psycopg2://matteo:matteo@127.0.0.1:5432/superset_loc"
       CELERYD_LOG_LEVEL = "INFO"
       CELERYD_PREFETCH_MULTIPLIER = 10
       CELERY_ACKS_LATE = True
       CELERY_ANNOTATIONS = {
           "sql_lab.get_sql_results": {"rate_limit": "100/s"},
           "email_reports.send": {
               "rate_limit": "1/s",
               "time_limit": 320,
               "soft_time_limit": 350,
               "ignore_result": True,
           },
       }
       CELERYBEAT_SCHEDULE = {
           "email_reports.schedule_hourly": {
               "task": "email_reports.schedule_hourly",
               "schedule": crontab(minute=1, hour="*"),
           }
       }
   
   
   CELERY_CONFIG = CeleryConfig  # pylint: disable=invalid-name
   
   # Set celery config to None to disable all the above configuration
   # CELERY_CONFIG = None
   
   # Additional static HTTP headers to be served by your Superset server. Note
   # Flask-Talisman applies the relevant security HTTP headers.
   #
   # DEFAULT_HTTP_HEADERS: sets default values for HTTP headers. These may be overridden
   # within the app
   # OVERRIDE_HTTP_HEADERS: sets override values for HTTP headers. These values will
   # override anything set within the app
   DEFAULT_HTTP_HEADERS: Dict[str, Any] = {}
   OVERRIDE_HTTP_HEADERS: Dict[str, Any] = {}
   HTTP_HEADERS: Dict[str, Any] = {}
   
   # The db id here results in selecting this one as a default in SQL Lab
   DEFAULT_DB_ID = None
   
   # Timeout duration for SQL Lab synchronous queries
   SQLLAB_TIMEOUT = 30
   
   # Timeout duration for SQL Lab query validation
   SQLLAB_VALIDATION_TIMEOUT = 10
   
   # SQLLAB_DEFAULT_DBID
   SQLLAB_DEFAULT_DBID = None
   
   # The MAX duration (in seconds) a query can run for before being killed
   # by celery.
   SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6
   
   # Some databases support running EXPLAIN queries that allow users to estimate
   # query costs before they run. These EXPLAIN queries should have a small
   # timeout.
   SQLLAB_QUERY_COST_ESTIMATE_TIMEOUT = 10  # seconds
   
   # Flag that controls if limit should be enforced on the CTA (create table as queries).
   SQLLAB_CTAS_NO_LIMIT = False
   
   # This allows you to define custom logic around the "CREATE TABLE AS" or CTAS feature
   # in SQL Lab that defines where the target schema should be for a given user.
   # Database `CTAS Schema` has a precedence over this setting.
   # Example below returns a username and CTA queries will write tables into the schema
   # name `username`
   # SQLLAB_CTAS_SCHEMA_NAME_FUNC = lambda database, user, schema, sql: user.username
   # This is move involved example where depending on the database you can leverage data
   # available to assign schema for the CTA query:
   # def compute_schema_name(database: Database, user: User, schema: str, sql: str) -> str:
   #     if database.name == 'mysql_payments_slave':
   #         return 'tmp_superset_schema'
   #     if database.name == 'presto_gold':
   #         return user.username
   #     if database.name == 'analytics':
   #         if 'analytics' in [r.name for r in user.roles]:
   #             return 'analytics_cta'
   #         else:
   #             return f'tmp_{schema}'
   # Function accepts database object, user object, schema name and sql that will be run.
   SQLLAB_CTAS_SCHEMA_NAME_FUNC: Optional[
       Callable[["Database", "models.User", str, str], str]
   ] = None
   
   # If enabled, it can be used to store the results of long-running queries
   # in SQL Lab by using the "Run Async" button/feature
   RESULTS_BACKEND = RedisCache(
      host='localhost', port=6379, key_prefix='superset_results')
   
   
   # Use PyArrow and MessagePack for async query results serialization,
   # rather than JSON. This feature requires additional testing from the
   # community before it is fully adopted, so this config option is provided
   # in order to disable should breaking issues be discovered.
   RESULTS_BACKEND_USE_MSGPACK = True
   
   # The S3 bucket where you want to store your external hive tables created
   # from CSV files. For example, 'companyname-superset'
   CSV_TO_HIVE_UPLOAD_S3_BUCKET = None
   
   # The directory within the bucket specified above that will
   # contain all the external tables
   CSV_TO_HIVE_UPLOAD_DIRECTORY = "EXTERNAL_HIVE_TABLES/"
   # Function that creates upload directory dynamically based on the
   # database used, user and schema provided.
   CSV_TO_HIVE_UPLOAD_DIRECTORY_FUNC: Callable[
       ["Database", "models.User", str], Optional[str]
   ] = lambda database, user, schema: CSV_TO_HIVE_UPLOAD_DIRECTORY
   
   # The namespace within hive where the tables created from
   # uploading CSVs will be stored.
   UPLOADED_CSV_HIVE_NAMESPACE: Optional[str] = None
   
   # Function that computes the allowed schemas for the CSV uploads.
   # Allowed schemas will be a union of schemas_allowed_for_csv_upload
   # db configuration and a result of this function.
   
   # mypy doesn't catch that if case ensures list content being always str
   ALLOWED_USER_CSV_SCHEMA_FUNC: Callable[
       ["Database", "models.User"], List[str]
   ] = lambda database, user: [
       UPLOADED_CSV_HIVE_NAMESPACE
   ] if UPLOADED_CSV_HIVE_NAMESPACE else []
   
   # Values that should be treated as nulls for the csv uploads.
   CSV_DEFAULT_NA_NAMES = list(STR_NA_VALUES)
   
   # A dictionary of items that gets merged into the Jinja context for
   # SQL Lab. The existing context gets updated with this dictionary,
   # meaning values for existing keys get overwritten by the content of this
   # dictionary.
   JINJA_CONTEXT_ADDONS: Dict[str, Callable[..., Any]] = {}
   
   # A dictionary of macro template processors that gets merged into global
   # template processors. The existing template processors get updated with this
   # dictionary, which means the existing keys get overwritten by the content of this
   # dictionary. The customized addons don't necessarily need to use jinjia templating
   # language. This allows you to define custom logic to process macro template.
   CUSTOM_TEMPLATE_PROCESSORS: Dict[str, Type[BaseTemplateProcessor]] = {}
   
   # Roles that are controlled by the API / Superset and should not be changes
   # by humans.
   ROBOT_PERMISSION_ROLES = ["Public", "Gamma", "Alpha", "Admin", "sql_lab"]
   
   CONFIG_PATH_ENV_VAR = "SUPERSET_CONFIG_PATH"
   
   # If a callable is specified, it will be called at app startup while passing
   # a reference to the Flask app. This can be used to alter the Flask app
   # in whatever way.
   # example: FLASK_APP_MUTATOR = lambda x: x.before_request = f
   FLASK_APP_MUTATOR = None
   
   # Set this to false if you don't want users to be able to request/grant
   # datasource access requests from/to other users.
   ENABLE_ACCESS_REQUEST = False
   
   # smtp server configuration
   EMAIL_NOTIFICATIONS = True  # all the emails are sent using dryrun
   SMTP_HOST = "100.200.156.23"
   SMTP_STARTTLS = False
   SMTP_SSL = False
   SMTP_USER = ""
   SMTP_PORT = 25
   SMTP_PASSWORD = ""
   SMTP_MAIL_FROM = "superset@objectway.com"
   
   ENABLE_CHUNK_ENCODING = False
   
   # Whether to bump the logging level to ERROR on the flask_appbuilder package
   # Set to False if/when debugging FAB related issues like
   # permission management
   SILENCE_FAB = True
   
   FAB_ADD_SECURITY_VIEWS = True
   FAB_ADD_SECURITY_PERMISSION_VIEW = False
   FAB_ADD_SECURITY_VIEW_MENU_VIEW = False
   FAB_ADD_SECURITY_PERMISSION_VIEWS_VIEW = False
   
   # The link to a page containing common errors and their resolutions
   # It will be appended at the bottom of sql_lab errors.
   TROUBLESHOOTING_LINK = ""
   
   # CSRF token timeout, set to None for a token that never expires
   WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 7
   
   # This link should lead to a page with instructions on how to gain access to a
   # Datasource. It will be placed at the bottom of permissions errors.
   PERMISSION_INSTRUCTIONS_LINK = ""
   
   # Integrate external Blueprints to the app by passing them to your
   # configuration. These blueprints will get integrated in the app
   BLUEPRINTS: List[Blueprint] = []
   
   # Provide a callable that receives a tracking_url and returns another
   # URL. This is used to translate internal Hadoop job tracker URL
   # into a proxied one
   TRACKING_URL_TRANSFORMER = lambda x: x
   
   # Interval between consecutive polls when using Hive Engine
   HIVE_POLL_INTERVAL = 5
   
   # Interval between consecutive polls when using Presto Engine
   # See here: https://github.com/dropbox/PyHive/blob/8eb0aeab8ca300f3024655419b93dad926c1a351/pyhive/presto.py#L93  # pylint: disable=line-too-long
   PRESTO_POLL_INTERVAL = 1
   
   # Allow for javascript controls components
   # this enables programmers to customize certain charts (like the
   # geospatial ones) by inputing javascript in controls. This exposes
   # an XSS security vulnerability
   ENABLE_JAVASCRIPT_CONTROLS = False
   
   # The id of a template dashboard that should be copied to every new user
   DASHBOARD_TEMPLATE_ID = None
   
   # A callable that allows altering the database conneciton URL and params
   # on the fly, at runtime. This allows for things like impersonation or
   # arbitrary logic. For instance you can wire different users to
   # use different connection parameters, or pass their email address as the
   # username. The function receives the connection uri object, connection
   # params, the username, and returns the mutated uri and params objects.
   # Example:
   #   def DB_CONNECTION_MUTATOR(uri, params, username, security_manager, source):
   #       user = security_manager.find_user(username=username)
   #       if user and user.email:
   #           uri.username = user.email
   #       return uri, params
   #
   # Note that the returned uri and params are passed directly to sqlalchemy's
   # as such `create_engine(url, **params)`
   DB_CONNECTION_MUTATOR = None
   
   # A function that intercepts the SQL to be executed and can alter it.
   # The use case is can be around adding some sort of comment header
   # with information such as the username and worker node information
   #
   #    def SQL_QUERY_MUTATOR(sql, username, security_manager):
   #        dttm = datetime.now().isoformat()
   #        return f"-- [SQL LAB] {username} {dttm}\n{sql}"
   SQL_QUERY_MUTATOR = None
   
   # Enable / disable scheduled email reports
   ENABLE_SCHEDULED_EMAIL_REPORTS = True
   
   # Enable / disable Alerts, where users can define custom SQL that
   # will send emails with screenshots of charts or dashboards periodically
   # if it meets the criteria
   ENABLE_ALERTS = True
   
   # Slack API token for the superset reports
   SLACK_API_TOKEN = None
   SLACK_PROXY = None
   
   # If enabled, certail features are run in debug mode
   # Current list:
   # * Emails are sent using dry-run mode (logging only)
   SCHEDULED_EMAIL_DEBUG_MODE = False
   
   # This auth provider is used by background (offline) tasks that need to access
   # protected resources. Can be overridden by end users in order to support
   # custom auth mechanisms
   MACHINE_AUTH_PROVIDER_CLASS = "superset.utils.machine_auth.MachineAuthProvider"
   
   # Email reports - minimum time resolution (in minutes) for the crontab
   EMAIL_REPORTS_CRON_RESOLUTION = 15
   
   # The MAX duration (in seconds) a email schedule can run for before being killed
   # by celery.
   EMAIL_ASYNC_TIME_LIMIT_SEC = 300
   
   # Email report configuration
   # From address in emails
   EMAIL_REPORT_FROM_ADDRESS = "reports@superset.org"
   
   # Send bcc of all reports to this address. Set to None to disable.
   # This is useful for maintaining an audit trail of all email deliveries.
   EMAIL_REPORT_BCC_ADDRESS = None
   
   # User credentials to use for generating reports
   # This user should have permissions to browse all the dashboards and
   # slices.
   # TODO: In the future, login as the owner of the item to generate reports
   EMAIL_REPORTS_USER = "admin"
   EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] "
   
   # The webdriver to use for generating reports. Use one of the following
   # firefox
   #   Requires: geckodriver and firefox installations
   #   Limitations: can be buggy at times
   # chrome:
   #   Requires: headless chrome
   #   Limitations: unable to generate screenshots of elements
   WEBDRIVER_TYPE = "firefox"
   
   # Window size - this will impact the rendering of the data
   WEBDRIVER_WINDOW = {"dashboard": (1600, 2000), "slice": (3000, 1200)}
   
   # An optional override to the default auth hook used to provide auth to the
   # offline webdriver
   WEBDRIVER_AUTH_FUNC = None
   
   # Any config options to be passed as-is to the webdriver
   WEBDRIVER_CONFIGURATION: Dict[Any, Any] = {}
   
   # Additional args to be passed as arguments to the config object
   # Note: these options are Chrome-specific. For FF, these should
   # only include the "--headless" arg
   WEBDRIVER_OPTION_ARGS = [
       "--force-device-scale-factor=2.0",
       "--high-dpi-support=2.0",
       "--headless",
   ]
   
   # The base URL to query for accessing the user interface
   WEBDRIVER_BASEURL = "http://0.0.0.0:8088/"
   # The base URL for the email report hyperlinks.
   WEBDRIVER_BASEURL_USER_FRIENDLY = WEBDRIVER_BASEURL
   # Time in seconds, selenium will wait for the page to load
   # and render for the email report.
   EMAIL_PAGE_RENDER_WAIT = 30
   
   # Send user to a link where they can report bugs
   BUG_REPORT_URL = None
   
   # Send user to a link where they can read more about Superset
   DOCUMENTATION_URL = None
   DOCUMENTATION_TEXT = "Documentation"
   DOCUMENTATION_ICON = None  # Recommended size: 16x16
   
   # Enables the replacement react views for all the FAB views (list, edit, show) with
   # designs introduced in SIP-34: https://github.com/apache/incubator-superset/issues/8976
   # This is a work in progress so not all features available in FAB have been implemented
   ENABLE_REACT_CRUD_VIEWS = False
   
   # What is the Last N days relative in the time selector to:
   # 'today' means it is midnight (00:00:00) in the local timezone
   # 'now' means it is relative to the query issue time
   # If both start and end time is set to now, this will make the time
   # filter a moving window. By only setting the end time to now,
   # start time will be set to midnight, while end will be relative to
   # the query issue time.
   DEFAULT_RELATIVE_START_TIME = "today"
   DEFAULT_RELATIVE_END_TIME = "now"
   
   # Configure which SQL validator to use for each engine
   SQL_VALIDATORS_BY_ENGINE = {"presto": "PrestoDBSQLValidator"}
   
   # Do you want Talisman enabled?
   TALISMAN_ENABLED = False
   # If you want Talisman, how do you want it configured??
   TALISMAN_CONFIG = {
       "content_security_policy": None,
       "force_https": True,
       "force_https_permanent": False,
   }
   
   # Note that: RowLevelSecurityFilter is only given by default to the Admin role
   # and the Admin Role does have the all_datasources security permission.
   # But, if users create a specific role with access to RowLevelSecurityFilter MVC
   # and a custom datasource access, the table dropdown will not be correctly filtered
   # by that custom datasource access. So we are assuming a default security config,
   # a custom security config could potentially give access to setting filters on
   # tables that users do not have access to.
   ENABLE_ROW_LEVEL_SECURITY = False
   # It is possible to customize which tables and roles are featured in the RLS
   # dropdown. When set, this dict is assigned to `add_form_query_rel_fields` and
   # `edit_form_query_rel_fields` on `RowLevelSecurityFiltersModelView`. Example:
   #
   # from flask_appbuilder.models.sqla import filters
   # RLS_FORM_QUERY_REL_FIELDS = {
   #     "roles": [["name", filters.FilterStartsWith, "RlsRole"]]
   #     "tables": [["table_name", filters.FilterContains, "rls"]]
   # }
   RLS_FORM_QUERY_REL_FIELDS: Optional[Dict[str, List[List[Any]]]] = None
   
   #
   # Flask session cookie options
   #
   # See https://flask.palletsprojects.com/en/1.1.x/security/#set-cookie-options
   # for details
   #
   SESSION_COOKIE_HTTPONLY = True  # Prevent cookie from being read by frontend JS?
   SESSION_COOKIE_SECURE = False  # Prevent cookie from being transmitted over non-tls?
   SESSION_COOKIE_SAMESITE = "Lax"  # One of [None, 'None', 'Lax', 'Strict']
   
   # Flask configuration variables
   SEND_FILE_MAX_AGE_DEFAULT = 60 * 60 * 24 * 365  # Cache static resources
   
   # URI to database storing the example data, points to
   # SQLALCHEMY_DATABASE_URI by default if set to `None`
   SQLALCHEMY_EXAMPLES_URI = None
   
   # Some sqlalchemy connection strings can open Superset to security risks.
   # Typically these should not be allowed.
   PREVENT_UNSAFE_DB_CONNECTIONS = True
   
   # Path used to store SSL certificates that are generated when using custom certs.
   # Defaults to temporary directory.
   # Example: SSL_CERT_PATH = "/certs"
   SSL_CERT_PATH: Optional[str] = None
   
   # SIP-15 should be enabled for all new Superset deployments which ensures that the time
   # range endpoints adhere to [start, end). For existing deployments admins should provide
   # a dedicated period of time to allow chart producers to update their charts before
   # mass migrating all charts to use the [start, end) interval.
   #
   # Note if no end date for the grace period is specified then the grace period is
   # indefinite.
   SIP_15_ENABLED = True
   SIP_15_GRACE_PERIOD_END: Optional[date] = None  # exclusive
   SIP_15_DEFAULT_TIME_RANGE_ENDPOINTS = ["unknown", "inclusive"]
   SIP_15_TOAST_MESSAGE = (
       "Action Required: Preview then save your chart using the "
       'new time range endpoints <a target="_blank" href="{url}" '
       'class="alert-link">here</a>.'
   )
   
   
   # SQLA table mutator, every time we fetch the metadata for a certain table
   # (superset.connectors.sqla.models.SqlaTable), we call this hook
   # to allow mutating the object with this callback.
   # This can be used to set any properties of the object based on naming
   # conventions and such. You can find examples in the tests.
   SQLA_TABLE_MUTATOR = lambda table: table
   
   if CONFIG_PATH_ENV_VAR in os.environ:
       # Explicitly import config module that is not necessarily in pythonpath; useful
       # for case where app is being executed via pex.
       try:
           cfg_path = os.environ[CONFIG_PATH_ENV_VAR]
           module = sys.modules[__name__]
           override_conf = imp.load_source("superset_config", cfg_path)
           for key in dir(override_conf):
               if key.isupper():
                   setattr(module, key, getattr(override_conf, key))
   
           print(f"Loaded your LOCAL configuration at [{cfg_path}]")
       except Exception:
           logger.exception(
               "Failed to import config for %s=%s", CONFIG_PATH_ENV_VAR, cfg_path
           )
           raise
   elif importlib.util.find_spec("superset_config"):
       try:
           import superset_config  # pylint: disable=import-error
           from superset_config import *  # type: ignore  # pylint: disable=import-error,wildcard-import,unused-wildcard-import
   
           print(f"Loaded your LOCAL configuration at [{superset_config.__file__}]")
       except Exception:
           logger.exception("Found but failed to import local superset_config")
           raise
   ```
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-738001950


   Sure, if you are available it would be great
   If you have skype, please let me know and i send you the link
   Thanks
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


[GitHub] [incubator-superset] bzmatteo72 commented on issue #11765: Apache Superset: cannot send email

Posted by GitBox <gi...@apache.org>.
bzmatteo72 commented on issue #11765:
URL: https://github.com/apache/incubator-superset/issues/11765#issuecomment-737370819


   I guess this is the error you have predicted because i have not firefox installed yet on my Debian. Isn't it?
   I proceed with the installation right now
   
   I have untar geckodriver in the my /usr/local/bin path which is in the PATH environment variable
   
   [2020-12-02 17:59:50,480: INFO/ForkPoolWorker-1] Starting report for slack: None and recipients: matteo.balzarotti@objectway.com.
   Init selenium driver
   [2020-12-02 17:59:50,532: INFO/ForkPoolWorker-1] Init selenium driver
   Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.SessionNotCreatedException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line
   
   [2020-12-02 17:59:50,576: ERROR/ForkPoolWorker-1] Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line
   Traceback (most recent call last):
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/celery.py", line 50, in session_scope
       yield session
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 261, in deliver_dashboard
       driver = create_webdriver(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/tasks/schedules.py", line 205, in create_webdriver
       get_reports_user(session)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 78, in auth
       driver = self.create()
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/superset/utils/webdriver.py", line 75, in create
       return driver_class(**kwargs)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
       keep_alive=True)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
       self.start_session(capabilities, browser_profile)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
       response = self.execute(Command.NEW_SESSION, parameters)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
       self.error_handler.check_response(response)
     File "/home/matteo/superset/env4/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
       raise exception_class(message, screen, stacktrace)
   selenium.common.exceptions.SessionNotCreatedException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line
   
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org