# 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
    configupdater>=3.1.1
    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 2.3 is scheduled to introduce a number of deprecation removals - some of them might be breaking
    # for our dependencies - notably `_app_ctx_stack` and `_request_ctx_stack` removals.
    # We should remove the limitation after 2.3 is released and our dependencies are updated to handle it
    flask>=2.0,<2.3
    # 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==4.1.3
    flask-caching>=1.5.0
    flask-login>=0.6.2
    flask-session>=0.4.0
    flask-wtf>=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"
    itsdangerous>=2.0
    jinja2>=2.10.1
    jsonschema>=3.2.0
    lazy-object-proxy
    linkify-it-py>=2.0.0
    lockfile>=0.12.2
    markdown>=3.0
    markdown-it-py>=2.1.0
    markupsafe>=1.1.1
    marshmallow-oneofschema>=2.0.1
    mdit-py-plugins>=0.3.0
    packaging>=14.0
    pathspec~=0.9.0
    pendulum>=2.0
    pluggy>=1.0
    psutil>=4.2.0
    pygments>=2.0.1
    pyjwt>=2.0.0
    python-daemon>=2.2.4
    python-dateutil>=2.3
    python-nvd3>=0.15.0
    python-slugify>=5.0
    rich>=12.4.4
    rich-click>=1.3.1
    setproctitle>=1.1.8
    sqlalchemy>=1.4
    sqlalchemy_jsonfield>=1.0
    tabulate>=0.7.5
    tenacity>=6.2.0
    termcolor>=1.1.0
    typing-extensions>=4.0.0
    unicodecsv>=0.14.1
    werkzeug>=2.0

[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.data_files]
generated=
    generated/provider_dependencies.json

[options.entry_points]
console_scripts=
    airflow=airflow.__main__:main
    airflow-ng=airflow.cli.__main__:airflow_cmd

[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,docs
# Need to be consistent with the exclude config defined in pre-commit-config.yaml
skip=build,.tox,venv
profile = black
