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

# In order to create the requirements.txt file, execute
# pip-compile --output-file requirements.txt requirements.in (pip-tools package is needed).

requests>=2.3.0, <2.14.0
networkx>=1.9, <1.10 # version 1.10 dropped support of python 2.6
retrying>=1.3.0, <1.4.0
blinker>1.3, <1.5
jsonpickle>0.9.0, <=0.9.4
ruamel.yaml>=0.11.12, <0.12.0  # version 0.12.0 dropped support of python 2.6
Jinja2>=2.8, <2.9
shortuuid>=0.5, <0.6
CacheControl[filecache]>=0.11.0, <0.13
clint>=0.5.0, <0.6
SQLAlchemy>=1.1.0, <1.2  # version 1.2 dropped support of python 2.6
wagon==0.6.0
bottle>=0.12.0, <0.13
setuptools>=35.0.0, <36.0.0
click>=6.0, < 7.0
colorama>=0.3.7, <=0.3.9
PrettyTable>=0.7,<0.8
click_didyoumean==0.0.3
backports.shutil_get_terminal_size==1.0.0
logutils==0.3.4.1
psutil>=5.2.2, < 6.0.0
importlib ; python_version < '2.7'
ordereddict ; python_version < '2.7'
total-ordering ; python_version < '2.7'  # only one version on pypi
