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