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

# To download requirements use the download_requirements script in this dir.

# Remember, all modules below need to support python 2.6.

# Dependents are indented. Dependents that have multiple parents are not listed
# multiple times (though maybe they could be).

allpairs == 2.0.1
# TODO: boto3 is now unused, it can be removed.
boto3 == 1.2.3
  simplejson == 3.3.0 # For python version 2.6
  botocore == 1.3.30
  python_dateutil == 2.5.2
    six == 1.11.0
  docutils == 0.12
  jmespath == 0.9.0
  futures == 3.0.5
cm-api == 10.0.0
  # Already available as part of python on Linux.
  readline == 6.2.4.1; sys_platform == 'darwin'
flake8 == 2.6.2
  mccabe == 0.3.1
  pycodestyle == 2.0.0
  pyflakes == 1.2.3
gcovr == 3.4
kazoo == 2.2.1
ordereddict == 1.1
pexpect == 3.3
pg8000 == 1.10.2
prettytable == 0.7.2
pyparsing == 2.0.3
python-magic == 0.4.11
# pbr is required for pywebhdfs but must be installed in a separate call to pip before
# attempting to install pywebhdfs (https://github.com/pywebhdfs/pywebhdfs/issues/52).
# pywebhdfs itself will be installed in stage 2.
  pbr == 3.1.1
requests == 2.7.0
# Newer versions of setuptools don't support Python 2.6
setuptools == 36.8.0
setuptools-scm == 1.15.4
sh == 1.11
# Note: This version for sqlparse is not what is used for the shell. The shell uses
# a checked-in version of sqlparse (see shell/ext-py). This version is used primarily
# for dataload.
sqlparse == 0.1.19
texttable == 0.8.3

# For dev purposes, not used in scripting. Version 1.2.1 is the latest that supports 2.6.
ipython == 1.2.1
  apipkg == 1.4

virtualenv == 13.1.0
