# 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-connexion.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
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.6
    Programming Language :: Python :: 3.7
    Programming Language :: Python :: 3.8
    Programming Language :: Python :: 3.9
    Topic :: System :: Monitoring
project_urls =
    Documentation=https://airflow.apache.org/docs/
    Bug Tracker=https://github.com/apache/airflow/issues
    Source Code=https://github.com/apache/airflow

[options]
zip_safe = False
include_package_data = True
python_requires = ~=3.6
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>=1.2, <2.0
    argcomplete~=1.10
    attrs>=20.0, <21.0
    blinker
    cached_property~=1.5;python_version<="3.7"
    # cattrs >= 1.1.0 dropped support for Python 3.6
    cattrs>=1.0, <1.1.0;python_version<="3.6"
    # cattrs >= 1.7.0 break lineage - see https://github.com/apache/airflow/issues/16172
    cattrs~=1.1, <1.7.0;python_version>"3.6"
    # Required by vendored-in connexion
    clickclick>=1.2
    colorlog>=4.0.2
    croniter>=0.3.17, <1.1
    cryptography>=0.9.3
    dataclasses;python_version<"3.7"
    dill>=0.2.2, <0.4
    # Sphinx RTD theme 0.5.2. introduced limitation to docutils to account for some docutils markup
    # change:
    #      https://github.com/readthedocs/sphinx_rtd_theme/issues/1112
    # This limitation can be removed after this issue is closed:
    #      https://github.com/readthedocs/sphinx_rtd_theme/issues/1115
    docutils<0.17
    flask>=1.1.0, <2.0
    flask-appbuilder~=3.3
    flask-caching>=1.5.0, <2.0.0
    flask-login>=0.3, <0.5
    flask-wtf>=0.14.3, <0.15
    graphviz>=0.12
    gunicorn>=19.5.0
    httpx
    importlib_metadata>=1.7;python_version<"3.9"
    importlib_resources~=1.4
    # Required by vendored-in connexion
    inflection>=0.3.1
    iso8601>=0.1.12
    # Logging is broken with itsdangerous > 2
    itsdangerous>=1.1.0, <2.0
    jinja2>=2.10.1,<4
    jsonschema~=3.0
    lazy-object-proxy
    lockfile>=0.12.2
    markdown>=2.5.2, <4.0
    markupsafe>=1.1.1, <2.0
    marshmallow-oneofschema>=2.0.1
    # Numpy stopped releasing 3.6 binaries for 1.20.* series.
    numpy<1.20;python_version<"3.7"
    numpy;python_version>="3.7"
    # Required by vendored-in connexion
    openapi-spec-validator>=0.2.4
    # Pandas stopped releasing 3.6 binaries for 1.2.* series.
    pandas>=0.17.1, <1.2;python_version<"3.7"
    pandas>=0.17.1, <2.0;python_version>="3.7"
    pendulum~=2.0
    pep562~=1.0;python_version<"3.7"
    psutil>=4.2.0, <6.0.0
    pygments>=2.0.1, <3.0
    # Required for flask-jwt-extended and msal
    pyjwt<2
    # 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, <3
    python-nvd3~=0.15.0
    python-slugify>=3.0.0,<5.0
    # Required for flask-openID which comes with flask-appbuilder in case of poetry installation
    # earlier versions of the dependency are installed but they do not work for Python 3
    # (pip installs the right version).
    # More info: https://github.com/apache/airflow/issues/13149#issuecomment-748705193
    python3-openid~=3.2
    # Required by vendored-in connexion
    pyyaml>=5.1
    rich>=9.2.0
    setproctitle>=1.1.8, <2
    sqlalchemy>=1.3.18
    sqlalchemy_jsonfield~=1.0
    # Required by vendored-in connexion
    swagger-ui-bundle>=0.0.2
    tabulate>=0.7.5, <0.9
    tenacity~=6.2.0
    termcolor>=1.1.0
    typing-extensions>=3.7.4;python_version<"3.8"
    unicodecsv>=0.14.1
    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

[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

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

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