content: [project]
  requires-python = ">=3.8"
  
  [tool.black]
  target-version = ['py38']
  line-length = 119
  force-exclude = '''
  /(
    migrations
  )/
  '''
  
  [tool.poetry]
  name = "redash"
  version = "24.01.0-dev"
  description = "Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data."
  authors = ["Arik Fraimovich <arik@redash.io>"]
  # to be added to/removed from the mailing list, please reach out to Arik via the above email or Discord
  maintainers = [
      "Redash maintainers and contributors <maintainers@redash.io>",
  ]
  readme = "README.md"
  
  [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 = "41.0.6"
  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 = "20.0.4"
  httplib2 = "0.19.0"
  itsdangerous = "2.1.2"
  jinja2 = "3.1.2"
  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 = "23.2.0"
  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.31.0"
  restrictedpython = "6.2"
  rq = "1.9.0"
  rq-scheduler = "0.11.0"
  semver = "2.8.1"
  sentry-sdk = "1.28.1"
  simplejson = "3.16.0"
  sqlalchemy = "1.3.24"
  sqlalchemy-searchable = "1.2.0"
  sqlalchemy-utils = "0.34.2"
  sqlparse = "0.4.4"
  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.18"
  user-agents = "2.0"
  werkzeug = "2.3.8"
  wtforms = "2.2.1"
  xlsxwriter = "1.2.2"
  tzlocal = "4.3.1"
  
  [tool.poetry.group.all_ds]
  optional = true
  
  [tool.poetry.group.all_ds.dependencies]
  atsd-client = "3.0.5"
  azure-kusto-data = "0.0.35"
  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"
  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"
  nzalchemy = "^11.0.2"
  nzpy = ">=1.15"
  oauth2client = "4.1.3"
  openpyxl = "3.0.7"
  oracledb = "1.4.0"
  pandas = "1.3.4"
  phoenixdb = "0.7"
  pinotdb = ">=0.4.5"
  protobuf = "3.20.2"
  pyathena = ">=1.5.0,<=1.11.5"
  pydgraph = "2.0.2"
  pydruid = "0.5.7"
  pyexasol = "0.12.0"
  pyhive = "0.6.1"
  pyignite = "0.6.1"
  pymongo = { version = "4.3.3", extras = ["srv", "tls"] }
  pymssql = "2.2.8"
  pyodbc = "4.0.28"
  python-arango = "6.1.0"
  python-rapidjson = "1.1.0"
  qds-sdk = ">=1.9.6"
  requests-aws-sign = "0.1.5"
  sasl = ">=0.1.3"
  simple-salesforce = "0.74.3"
  snowflake-connector-python = "3.4.0"
  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.1"
  mock = "5.0.2"
  pre-commit = "3.3.3"
  ptpython = "3.0.23"
  ptvsd = "4.3.2"
  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"]
  
  [tool.ruff.mccabe]
  max-complexity = 15
  
  [tool.ruff.per-file-ignores]
  "__init__.py" = ["F401"]
  