# 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.

[metadata]
name = apache-airflow
summary = Programmatically author, schedule and monitor data pipelines
author = Apache Software Foundation
author_email = dev@airflow.apache.org
url = https://airflow.apache.org/
long_description = file: README.md
long_description_content_type = text/markdown
license = Apache License 2.0
license_files =
   LICENSE
   NOTICE
# Start of licenses generated automatically
   licenses/LICENSE-bootstrap.txt
   licenses/LICENSE-bootstrap3-typeahead.txt
   licenses/LICENSE-d3-shape.txt
   licenses/LICENSE-d3-tip.txt
   licenses/LICENSE-d3js.txt
   licenses/LICENSE-dagre-d3.txt
   licenses/LICENSE-datatables.txt
   licenses/LICENSE-elasticmock.txt
   licenses/LICENSE-eonasdan-bootstrap-datetimepicker.txt
   licenses/LICENSE-flask-kerberos.txt
   licenses/LICENSE-hue.txt
   licenses/LICENSE-jqclock.txt
   licenses/LICENSE-jquery.txt
   licenses/LICENSE-moment-strftime.txt
   licenses/LICENSE-moment.txt
   licenses/LICENSE-normalize.txt
# End of licences generated automatically
   licenses/LICENSES-ui.txt
classifiers =
    Development Status :: 5 - Production/Stable
    Environment :: Console
    Environment :: Web Environment
    Intended Audience :: Developers
    Intended Audience :: System Administrators
    License :: OSI Approved :: Apache Software License
    Programming Language :: Python :: 3.7
    Programming Language :: Python :: 3.8
    Programming Language :: Python :: 3.9
    Programming Language :: Python :: 3.10
    Topic :: System :: Monitoring
    Framework :: Apache Airflow
project_urls =
    Documentation=https://airflow.apache.org/docs/
    Bug Tracker=https://github.com/apache/airflow/issues
    Source Code=https://github.com/apache/airflow
    Slack Chat=https://s.apache.org/airflow-slack
    Twitter=https://twitter.com/ApacheAirflow
    YouTube=https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/

[options]
zip_safe = False
include_package_data = True
python_requires = ~=3.7
packages = find:
setup_requires =
    gitpython
    wheel
#####################################################################################################
# IMPORTANT NOTE!!!!!!!!!!!!!!!
# IF you are removing dependencies from this list, please make sure that you also increase
# DEPENDENCIES_EPOCH_NUMBER in the Dockerfile.ci
#####################################################################################################
install_requires =
    # Alembic is important to handle our migrations in predictable and performant way. It is developed
    # together with SQLAlchemy. Our experience with Alembic is that it very stable in minor version
    alembic>=1.5.1, <2.0
    argcomplete>=1.10
    # We limit the version of attrs to work with the old version of cattrs
    attrs>=20.0,<21.0
    blinker
    cached_property>=1.5.0;python_version<="3.7"
    # Cattrs upgrades were known to break lineage https://github.com/apache/airflow/issues/16172
    # TODO: Cattrs is now at 3.8 version so we should attempt to upgrade cattrs soon.
    cattrs~=1.1, !=1.7.*
    # Colorlog 6.x merges TTYColoredFormatter into ColoredFormatter, breaking backwards compatibility with 4.x
    # Update CustomTTYColoredFormatter to remove
    colorlog>=4.0.2, <5.0
    connexion[swagger-ui,flask]>=2.10.0
    cron-descriptor>=1.2.24
    croniter>=0.3.17
    cryptography>=0.9.3
    deprecated>=1.2.13
    dill>=0.2.2
    # Flask and all related libraries are limited to below 2.0.0 because we expect it to introduce
    # Serious breaking changes. Flask 2.0 has been introduced in May 2021 and 2.0.2 version is available
    # now (Feb 2022): TODO: we should attempt to migrate to Flask 2 and all below flask libraries soon.
    flask>=1.1.0, <2.0
    # We are tightly coupled with FAB version because we vendored in part of FAB code related to security manager
    # This is done as part of preparation to removing FAB as dependency, but we are not ready for it yet
    # Every time we update FAB version here, please make sure that you review the classes and models in
    # `airflow/www/fab_security` with their upstream counterparts. In particular, make sure any breaking changes,
    # for example any new methods, are accounted for.
    flask-appbuilder==3.4.5
    flask-caching>=1.5.0, <2.0.0
    flask-login>=0.3, <0.5
    # Strict upper-bound on the latest release of flask-session,
    # as any schema changes will require a migration.
    flask-session>=0.3.1, <=0.4.0
    flask-wtf>=0.14.3, <0.15
    graphviz>=0.12
    gunicorn>=20.1.0
    httpx
    importlib_metadata>=1.7;python_version<"3.9"
    importlib_resources>=5.2;python_version<"3.9"
    # Logging is broken with itsdangerous > 2 - likely due to changed serializing support
    # https://itsdangerous.palletsprojects.com/en/2.0.x/changes/#version-2-0-0
    # itsdangerous 2 has been released in May 2020
    # TODO: we should attempt to upgrade to line 2 of itsdangerous
    itsdangerous>=1.1.0, <2.0
    # Jinja2 3.1 will remove the 'autoescape' and 'with' extensions, which would
    # break Flask 1.x, so we limit this for future compatibility. Remove this
    # when bumping Flask to >=2.
    jinja2>=2.10.1,<3.1
    # Because connexion upper-bound is 5.0.0 and we depend on connexion,
    # we pin to the same upper-bound as connexion.
    jsonschema>=3.2.0, <5.0
    lazy-object-proxy
    lockfile>=0.12.2
    markdown>=3.0
    # Markupsafe 2.1.0 breaks with error: import name 'soft_unicode' from 'markupsafe'.
    # This should be removed when either this issue is closed:
    # https://github.com/pallets/markupsafe/issues/284
    # or when we will be able to upgrade JINJA to newer version (currently limited due to Flask and
    # Flask Application Builder)
    markupsafe>=1.1.1,<2.1.0
    marshmallow-oneofschema>=2.0.1
    packaging>=14.0
    pathspec~=0.9.0
    pendulum>=2.0
    pluggy>=1.0
    psutil>=4.2.0
    pygments>=2.0.1
    # python daemon crashes with 'socket operation on non-socket' for python 3.8+ in version < 2.2.4
    # https://pagure.io/python-daemon/issue/34
    python-daemon>=2.2.4
    python-dateutil>=2.3
    python-nvd3>=0.15.0
    python-slugify>=5.0
    rich>=12.4.1
    setproctitle>=1.1.8
    # SQL Alchemy 1.4.10 introduces a bug where for PyODBC driver UTCDateTime fields get wrongly converted
    # as string and fail to be converted back to datetime. It was supposed to be fixed in
    # https://github.com/sqlalchemy/sqlalchemy/issues/6366 (released in 1.4.12) but apparently our case
    # is different. Opened https://github.com/sqlalchemy/sqlalchemy/issues/7660 to track it
    sqlalchemy>=1.4,<1.4.10
    sqlalchemy_jsonfield>=1.0
    tabulate>=0.7.5
    tenacity>=6.2.0
    termcolor>=1.1.0
    typing-extensions>=3.7.4
    unicodecsv>=0.14.1
    # Werkzeug is known to cause breaking changes and it is very closely tied with FlaskAppBuilder and other
    # Flask dependencies and the limit to 1.* line should be reviewed when we upgrade Flask and remove
    # FlaskAppBuilder.
    werkzeug~=1.0, >=1.0.1

[options.packages.find]
include =
    airflow*

[options.package_data]
airflow=
    py.typed
    alembic.ini
    git_version
    customized_form_field_behaviours.schema.json
    provider_info.schema.json

airflow.api_connexion.openapi=*.yaml
airflow.serialization=*.json
airflow.utils=
    context.pyi

[options.entry_points]
console_scripts=
    airflow=airflow.__main__:main

[bdist_wheel]
python-tag=py3


[files]
packages = airflow

[easy_install]

[mypy]
ignore_missing_imports = True
no_implicit_optional = True
warn_redundant_casts = True
warn_unused_ignores = False
plugins =
  airflow.mypy.plugin.decorators
pretty = True
show_error_codes = True

[mypy-airflow.migrations.*]
ignore_errors = True

# Let's assume all google.cloud packages have no implicit optional
# Most of them don't but even if they do, it does not matter
[mypy-google.cloud.*]
no_implicit_optional = False

[isort]
line_length=110
combine_as_imports = true
default_section = THIRDPARTY
known_first_party=airflow,airflow_breeze,tests
# Need to be consistent with the exclude config defined in pre-commit-config.yaml
skip=build,.tox,venv
profile = black