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

docker==4.2.0
apache-airflow==2.1.2
click==7.1.1
Flask==1.1.1
pyyaml==5.4.1
boto3==1.17.112
botocore==1.20.112
wheel==0.38.1
termcolor~=1.1.0
docker-pycreds==0.4.0
typing==3.7.4.1
GitPython==3.1.11
moto==1.3.14
diskcache==3.1.1
croniter==0.3.31
pytz==2020.5
pytzdata==2020.1
freezegun==1.1.0
statsd>=3.3.0, <4.0
sqlalchemy~=1.3.15
flatdict==3.4.0
jinja2>=2.10.1, <2.11.0
python-json-logger==2.0.1
requests==2.26.0
apache-airflow-providers-amazon==1.4.0
apache-airflow-providers-cncf-kubernetes==1.0.2
#apache-airflow-providers-google==4.0.0
#apache-airflow[google,amazon,apache.spark]==2.0.0
cfn-lint==0.53.0
pre-commit==2.16.0
Werkzeug==1.0.1
itsdangerous==1.1.0
MarkupSafe==1.1.1
