[project] name = "redash" version = "25.12.0-dev" requires-python = ">=3.8" description = "Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data." authors = [ { name = "Arik Fraimovich", email = "" } ] # to be added to/removed from the mailing list, please reach out to Arik via the above email or Discord maintainers = [ { name = "Redash maintainers and contributors", email = "" } ] readme = "README.md" dependencies = [] [tool.black] target-version = ['py38'] line-length = 119 force-exclude = ''' /( migrations )/ ''' [tool.poetry.dependencies] python = ">=3.8,<3.11" advocate = "1.0.0" aniso8601 = "8.0.0" authlib = "0.15.5" backoff = "2.2.1" blinker = "1.6.2" click = "8.1.3" cryptography = "43.0.1" disposable-email-domains = ">=0.0.52" flask = "2.3.2" flask-limiter = "3.3.1" flask-login = "0.6.0" flask-mail = "0.9.1" flask-migrate = "2.5.2" flask-restful = "0.3.10" flask-sqlalchemy = "2.5.1" flask-talisman = "0.7.0" flask-wtf = "1.1.1" funcy = "1.13" gevent = "23.9.1" greenlet = "2.0.2" gunicorn = "22.0.0" httplib2 = "0.19.0" itsdangerous = "2.1.2" jinja2 = "3.1.5" jsonschema = "3.1.1" markupsafe = "2.1.1" maxminddb-geolite2 = "2018.703" parsedatetime = "2.4" passlib = "1.7.3" psycopg2-binary = "2.9.6" pyjwt = "2.4.0" pyopenssl = "24.2.1" pypd = "1.1.0" pysaml2 = "7.3.1" pystache = "0.6.0" python-dateutil = "2.8.0" python-dotenv = "0.19.2" pytz = ">=2019.3" pyyaml = "6.0.1" redis = "4.6.0" regex = "2023.8.8" requests = "2.32.3" restrictedpython = "7.3" rq = "1.16.1" rq-scheduler = "0.13.1" semver = "2.8.1" sentry-sdk = "1.45.1" sqlalchemy = "1.3.24" sqlalchemy-searchable = "1.2.0" sqlalchemy-utils = "0.38.3" sqlparse = "0.5.0" sshtunnel = "0.1.5" statsd = "3.3.0" supervisor = "4.1.0" supervisor-checks = "0.8.1" ua-parser = "0.18.0" urllib3 = "1.26.19" user-agents = "2.0" werkzeug = "2.3.8" wtforms = "2.2.1" xlsxwriter = "1.2.2" tzlocal = "4.3.1" pyodbc = "5.1.0" debugpy = "^1.8.9" paramiko = "3.4.1" oracledb = "2.5.1" ibm-db = { version = "^3.2.7", markers = "platform_machine == 'x86_64' or platform_machine == 'AMD64'" } [tool.poetry.group.all_ds] optional = true [tool.poetry.group.all_ds.dependencies] atsd-client = "3.0.5" azure-kusto-data = "5.0.1" boto3 = "1.28.8" botocore = "1.31.8" cassandra-driver = "3.21.0" certifi = ">=2019.9.11" cmem-cmempy = "21.2.3" databend-py = "0.4.6" databend-sqlalchemy = "0.2.4" duckdb = "1.3.2" google-api-python-client = "1.7.11" gspread = "5.11.2" impyla = "0.16.0" influxdb = "5.2.3" influxdb-client = "1.38.0" memsql = "3.2.0" mysqlclient = "2.1.1" numpy = "1.24.4" nzalchemy = "^11.0.2" nzpy = ">=1.15" oauth2client = "4.1.3" openpyxl = "3.0.7" pandas = "1.3.4" phoenixdb = "0.7" pinotdb = ">=0.4.5" protobuf = "3.20.2" pyathena = "2.25.2" pydgraph = "2.0.2" pydruid = "0.5.7" pyexasol = "0.12.0" pyhive = "0.6.1" pyignite = "0.6.1" pymongo = { version = "4.6.3", extras = ["srv", "tls"] } pymssql = "^2.3.1" pyodbc = "5.1.0" python-arango = "6.1.0" python-rapidjson = "1.20" requests-aws-sign = "0.1.5" sasl = ">=0.1.3" simple-salesforce = "0.74.3" snowflake-connector-python = "3.12.3" td-client = "1.0.0" thrift = ">=0.8.0" thrift-sasl = ">=0.1.0" trino = ">=0.305,<1.0" vertica-python = "1.1.1" xlrd = "2.0.1" e6data-python-connector = "1.1.9" [tool.poetry.group.ldap3] optional = true [tool.poetry.group.ldap3.dependencies] ldap3 = "2.9.1" [tool.poetry.group.dev] optional = true [tool.poetry.group.dev.dependencies] pytest = "7.4.0" coverage = "7.2.7" freezegun = "1.2.1" jwcrypto = "1.5.6" mock = "5.0.2" pre-commit = "3.3.3" ptpython = "3.0.23" pytest-cov = "4.1.0" watchdog = "3.0.0" ruff = "0.0.289" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.ruff] exclude = [".git", "viz-lib", "node_modules", "migrations"] ignore = ["E501"] select = ["C9", "E", "F", "W", "I001", "UP004"] [tool.ruff.mccabe] max-complexity = 15 [tool.ruff.per-file-ignores] "__init__.py" = ["F401"]