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

backports.shutil_get_terminal_size>=1, <2
blinker>=1.4, <1.5
bottle>=0.12, <0.13
CacheControl[filecache]>=0.11.0, <0.13
click>=6, < 7
click_didyoumean>=0.0.3, <0.1
colorama>=0.3, <=0.4
Jinja2>=2.9, <3.0
jsonpickle>=0.9, <=1.0
logutils>=0.3, <0.4
networkx>=2.0, <2.1
PrettyTable>=0.7, <0.8
psutil>=5.4, <5.5
requests>=2.3, <2.14
retrying>=1.3, <1.4
ruamel.yaml>=0.15, <0.16
setuptools>=36, <37
shortuuid>=0.5, <0.6
SQLAlchemy>=1.1, <1.2
wagon>=0.6, <0.7
