# 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
shortuuid>=0.5, <0.6
SQLAlchemy>=1.1, <1.2
wagon>=0.6, <0.7
