mirror of
https://github.com/checktheroads/hyperglass
synced 2024-05-11 05:55:08 +00:00
start automated installer; improve ci testing
This commit is contained in:
@@ -22,5 +22,5 @@ RUN poetry install --no-ansi
|
||||
|
||||
FROM install as setup
|
||||
WORKDIR /tmp/hyperglass
|
||||
COPY .tests/dockersetup.sh /tmp/dockersetup.sh
|
||||
COPY .tests/app/setup.sh /tmp/setup.sh
|
||||
RUN ls -lsah /tmp
|
8
.tests/install/ubuntu/Dockerfile
Normal file
8
.tests/install/ubuntu/Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
||||
FROM ubuntu:bionic as base
|
||||
WORKDIR /tmp
|
||||
COPY ./install.sh /tmp/install.sh
|
||||
RUN apt-get update && apt-get install -y apt-utils \
|
||||
&& apt-get install -y curl gnupg build-essential
|
||||
|
||||
# FROM base as install
|
||||
# RUN bash /tmp/install.sh
|
24
.travis.yml
24
.travis.yml
@@ -1,14 +1,24 @@
|
||||
---
|
||||
language: minimal
|
||||
services:
|
||||
- docker
|
||||
- redis
|
||||
before_install:
|
||||
- docker build -t hyperglass/ubuntu -f .tests/DockerfileUbuntu .
|
||||
|
||||
jobs:
|
||||
include:
|
||||
- stage: Lint
|
||||
services:
|
||||
- docker
|
||||
before_install:
|
||||
- docker build -t hyperglass/ubuntu -f .tests/app/ubuntu/Dockerfile .
|
||||
script: docker run hyperglass/ubuntu /bin/sh -c "cd /tmp/hyperglass; poetry run flake8 hyperglass"
|
||||
- stage: Test
|
||||
script: docker run hyperglass/ubuntu /tmp/dockersetup.sh
|
||||
- stage: Installer - Ubuntu
|
||||
services:
|
||||
- docker
|
||||
before_install:
|
||||
- docker build -t install_ubuntu -f .tests/install/ubuntu/Dockerfile .
|
||||
script: docker run install_ubuntu /bin/bash /tmp/install.sh
|
||||
- stage: App - Ubuntu
|
||||
services:
|
||||
- docker
|
||||
- redis
|
||||
before_install:
|
||||
- docker build -t hyperglass/ubuntu -f .tests/app/ubuntu/Dockerfile .
|
||||
script: docker run hyperglass/ubuntu /tmp/setup.sh
|
||||
|
@@ -1,23 +0,0 @@
|
||||
---
|
||||
|
||||
language: python
|
||||
python:
|
||||
- '3.7'
|
||||
before_install:
|
||||
- sudo add-apt-repository universe -y
|
||||
- sudo apt-get update -q
|
||||
- sudo apt-get install -y redis-server
|
||||
- sudo systemctl start redis-server
|
||||
- sudo systemctl status redis-server
|
||||
install:
|
||||
- pip3 install -r requirements.txt
|
||||
before_script:
|
||||
- pip3 uninstall -y -r ./tests/requirements_dev.txt
|
||||
- pip3 install -r ./tests/requirements_dev.txt
|
||||
- isort -rc hyperglass
|
||||
- flake8 hyperglass
|
||||
- python3 ./tests/ci_prepare.py
|
||||
script:
|
||||
- nohup python3 ./tests/ci_dev_server.py &
|
||||
- sleep 20
|
||||
- python3 ./tests/ci_test.py
|
449
install.sh
Executable file
449
install.sh
Executable file
@@ -0,0 +1,449 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
MIN_PYTHON_MAJOR="3"
|
||||
MIN_PYTHON_MINOR="6"
|
||||
MIN_NODE_MAJOR="13"
|
||||
MIN_YARN_MAJOR="1"
|
||||
MIN_REDIS_MAJOR="4"
|
||||
|
||||
APT_INSTALL="apt-get install -y"
|
||||
APT_UPDATE="apt update"
|
||||
YUM_INSTALL="yum install -y"
|
||||
YUM_UPDATE="yum update"
|
||||
BREW_INSTALL="brew install"
|
||||
BREW_UPDATE="brew update"
|
||||
|
||||
INSTALL_MAP=(["apt"]="$APT_INSTALL" ["yum"]="$YUM_INSTALL" ["brew"]="$BREW_INSTALL")
|
||||
UPDATE_MAP=(["apt"]="$APT_UPDATE" ["yum"]="$YUM_UPDATE" ["brew"]="$BREW_UPDATE")
|
||||
|
||||
INSTALLER=""
|
||||
NEEDS_UPDATE="0"
|
||||
NEEDS_PYTHON="1"
|
||||
NEEDS_NODE="1"
|
||||
NEEDS_YARN="1"
|
||||
NEEDS_REDIS="1"
|
||||
|
||||
has_cmd () {
|
||||
which $1 > /dev/null
|
||||
|
||||
if [[ $? == 0 ]]; then
|
||||
echo "0"
|
||||
else
|
||||
echo "1"
|
||||
fi
|
||||
}
|
||||
|
||||
semver () {
|
||||
local ver_raw=$(echo "$1" | egrep -o '\d+\.\d+\.\d+')
|
||||
local ver_digits=( ${ver_raw//./ } )
|
||||
echo ${ver_digits[@]}
|
||||
}
|
||||
|
||||
parse_redis_version () {
|
||||
local one=$(echo "$@" | egrep -o 'v=\d+\.\d+\.\d+')
|
||||
local two=$(echo $one | egrep -o '\d+\.\d+\.\d+')
|
||||
echo $two
|
||||
}
|
||||
|
||||
python3_version () {
|
||||
local ver_digits=($(semver "$(python3 --version)"))
|
||||
local major="${ver_digits[0]}"
|
||||
local minor="${ver_digits[1]}"
|
||||
|
||||
if [[ $major != $MIN_PYTHON_MAJOR ]]; then
|
||||
echo "1"
|
||||
return 1
|
||||
elif [[ $major == $MIN_PYTHON_MAJOR && $minor -lt $MIN_PYTHON_MINOR ]]; then
|
||||
echo "1"
|
||||
return 1
|
||||
elif [[ $major == $MIN_PYTHON_MAJOR && $minor -ge $MIN_PYTHON_MINOR ]]; then
|
||||
echo "0"
|
||||
return 0
|
||||
else
|
||||
echo "1"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
node_version () {
|
||||
local ver_digits=($(semver "$(node --version)"))
|
||||
local major=${ver_digits[0]}
|
||||
|
||||
if [[ $major < $MIN_NODE_MAJOR ]]; then
|
||||
echo "1"
|
||||
elif [[ $major -ge $MIN_NODE_MAJOR ]]; then
|
||||
echo "0"
|
||||
else
|
||||
echo "1"
|
||||
fi
|
||||
}
|
||||
|
||||
needs_python () {
|
||||
local has_python3=$(has_cmd "python3")
|
||||
if [[ $has_python3 == 1 ]]; then
|
||||
NEEDS_PYTHON="1"
|
||||
elif [[ $has_python3 == 0 ]]; then
|
||||
local needs_upgrade=$(python3_version)
|
||||
if [[ $needs_upgrade == 1 ]]; then
|
||||
NEEDS_PYTHON="1"
|
||||
elif [[ $needs_upgrade == 0 ]]; then
|
||||
NEEDS_PYTHON="0"
|
||||
else
|
||||
NEEDS_PYTHON="1"
|
||||
fi
|
||||
else
|
||||
NEEDS_PYTHON="1"
|
||||
fi
|
||||
}
|
||||
|
||||
needs_node () {
|
||||
local has_node=$(has_cmd node)
|
||||
if [[ $has_node == 1 ]]; then
|
||||
NEEDS_NODE="1"
|
||||
elif [[ $has_node == 0 ]]; then
|
||||
local needs_upgrade=$(node_version)
|
||||
if [[ $needs_upgrade == 1 ]]; then
|
||||
NEEDS_NODE="1"
|
||||
elif [[ $needs_upgrade == 0 ]]; then
|
||||
NEEDS_NODE="0"
|
||||
else
|
||||
NEEDS_NODE="1"
|
||||
fi
|
||||
else
|
||||
NEEDS_NODE="1"
|
||||
fi
|
||||
}
|
||||
|
||||
needs_yarn () {
|
||||
local has_yarn=$(has_cmd yarn)
|
||||
if [[ $has_yarn == 1 ]]; then
|
||||
NEEDS_YARN="1"
|
||||
elif [[ $has_yarn == 0 ]]; then
|
||||
NEEDS_YARN="0"
|
||||
else
|
||||
NEEDS_YARN="1"
|
||||
fi
|
||||
}
|
||||
|
||||
needs_redis () {
|
||||
local has_redis=$(has_cmd redis-server)
|
||||
if [[ $has_redis == 1 ]]; then
|
||||
NEEDS_REDIS="1"
|
||||
elif [[ $has_redis == 0 ]]; then
|
||||
NEEDS_REDIS="0"
|
||||
else
|
||||
NEEDS_REDIS="1"
|
||||
fi
|
||||
}
|
||||
|
||||
get_platform () {
|
||||
local use_apt=$(has_cmd apt-get)
|
||||
local use_yum=$(has_cmd yum)
|
||||
local use_brew=$(has_cmd brew)
|
||||
|
||||
if [[ $use_apt == 0 ]]; then
|
||||
INSTALLER="apt"
|
||||
elif [[ $use_yum == 0 ]]; then
|
||||
INSTALLER="yum"
|
||||
elif [[ $use_brew == 0 ]]; then
|
||||
INSTALLER="brew"
|
||||
else
|
||||
echo "[ERROR] Unable to identify this system's package manager"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
python_post () {
|
||||
if [[ $1 == 0 ]]; then
|
||||
local successful=$(needs_python)
|
||||
if [[ $successful == 0 ]]; then
|
||||
echo "[SUCCESS] Installed $(python --version)"
|
||||
else
|
||||
echo "[ERROR] Tried to install Python 3, but post-install check failed."
|
||||
fi
|
||||
else
|
||||
echo "[ERROR] Tried to install Python 3, but encountered an error. Consult the Python 3 installation instructions for your system."
|
||||
fi
|
||||
}
|
||||
|
||||
node_post () {
|
||||
if [[ $1 == 0 ]]; then
|
||||
local successful=$(needs_node)
|
||||
if [[ $successful == 0 ]]; then
|
||||
echo "[SUCCESS] Installed NodeJS $(node --version | egrep -o '\d+\.\d+\.\d+')"
|
||||
else
|
||||
echo "[ERROR] Tried to install NodeJS, but post-install check failed."
|
||||
fi
|
||||
else
|
||||
echo "[ERROR] Tried to install NodeJS, but encountered an error. Try running `${INSTALL_MAP[$INSTALLER]} nodejs` to investigate."
|
||||
fi
|
||||
}
|
||||
|
||||
yarn_post () {
|
||||
if [[ $1 == 0 ]]; then
|
||||
local successful=$(needs_yarn)
|
||||
if [[ $successful == 0 ]]; then
|
||||
echo "[SUCCESS] Installed Yarn $(yarn --version | egrep -o '\d+\.\d+\.\d+')"
|
||||
else
|
||||
echo "[ERROR] Tried to install Yarn, but post-install check failed."
|
||||
fi
|
||||
else
|
||||
echo "[ERROR] Tried to install Yarn, but encountered an error. Try running `${INSTALL_MAP[$INSTALLER]} yarn` to investigate."
|
||||
fi
|
||||
}
|
||||
|
||||
redis_post () {
|
||||
if [[ $1 == 0 ]]; then
|
||||
local successful=$(needs_redis)
|
||||
if [[ $successful == 0 ]]; then
|
||||
echo "[SUCCESS] Installed Redis $(parse_redis_version $(redis-server --version))"
|
||||
else
|
||||
echo "[ERROR] Tried to install Redis, but post-install check failed."
|
||||
fi
|
||||
else
|
||||
echo "[ERROR] Tried to install Redis, but encountered an error. Try running `${INSTALL_MAP[$INSTALLER]} $redis_name` to investigate."
|
||||
fi
|
||||
}
|
||||
|
||||
node_apt_prepare () {
|
||||
curl -sL https://deb.nodesource.com/setup_13.x -o /tmp/nodesetup.sh
|
||||
sleep 1
|
||||
bash /tmp/nodesetup.sh
|
||||
NEEDS_UPDATE="1"
|
||||
}
|
||||
|
||||
yarn_apt_prepare () {
|
||||
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg -o /tmp/yarnkey.gpg
|
||||
sleep 1
|
||||
apt-key add /tmp/yarnkey.gpg
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
|
||||
NEEDS_UPDATE="1"
|
||||
}
|
||||
|
||||
node_yum_prepare () {
|
||||
curl -sL https://rpm.nodesource.com/setup_13.x -o /tmp/nodesetup.sh
|
||||
bash /tmp/nodesetup.sh
|
||||
sleep 1
|
||||
NEEDS_UPDATE="1"
|
||||
}
|
||||
|
||||
yarn_yum_prepare () {
|
||||
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo
|
||||
sleep 1
|
||||
NEEDS_UPDATE="1"
|
||||
}
|
||||
|
||||
node_apt () {
|
||||
apt-get install -y nodejs
|
||||
node_post $?
|
||||
}
|
||||
|
||||
node_yum () {
|
||||
yum -y install gcc-c++ make nodejs
|
||||
node_post $?
|
||||
}
|
||||
|
||||
node_brew () {
|
||||
brew install node
|
||||
node_post $?
|
||||
}
|
||||
|
||||
yarn_apt () {
|
||||
apt-get install -y yarn
|
||||
yarn_post $?
|
||||
}
|
||||
|
||||
yarn_yum () {
|
||||
yum -y install gcc-c++ make yarn
|
||||
yarn_post $?
|
||||
}
|
||||
|
||||
yarn_brew () {
|
||||
brew install yarn
|
||||
yarn_post $?
|
||||
}
|
||||
|
||||
python_apt () {
|
||||
apt-get install -y python3.6-dev python3-pip
|
||||
python_post $?
|
||||
}
|
||||
|
||||
python_yum () {
|
||||
yum install centos-release-scl
|
||||
yum install rh-python36
|
||||
python_post $?
|
||||
}
|
||||
|
||||
python_brew () {
|
||||
brew install python3
|
||||
python_post $?
|
||||
}
|
||||
|
||||
redis_apt () {
|
||||
apt-get install -y redis-server
|
||||
redis_post $?
|
||||
}
|
||||
|
||||
redis_yum () {
|
||||
yum -y install redis
|
||||
redis_post $?
|
||||
}
|
||||
|
||||
redis_brew () {
|
||||
brew install redis
|
||||
redis_post $?
|
||||
}
|
||||
|
||||
update_repo () {
|
||||
if [[ $INSTALLER == "apt" ]]; then
|
||||
apt-get update
|
||||
elif [[ $INSTALLER == "yum" ]]; then
|
||||
yum update
|
||||
elif [[ $INSTALLER == "brew" ]]; then
|
||||
brew update
|
||||
fi
|
||||
}
|
||||
|
||||
install_python () {
|
||||
if [[ $NEEDS_PYTHON == "1" ]]; then
|
||||
echo "[INFO] Installing Python..."
|
||||
|
||||
if [[ $INSTALLER == "apt" ]]; then
|
||||
python_apt
|
||||
elif [[ $INSTALLER == "yum" ]]; then
|
||||
python_yum
|
||||
elif [[ $INSTALLER == "brew" ]]; then
|
||||
python_brew
|
||||
fi
|
||||
|
||||
elif [[ $NEEDS_PYTHON == "0" ]]; then
|
||||
echo "[INFO] Your system is running $(python3 --version) (Minimum is $MIN_PYTHON_MAJOR.$MIN_PYTHON_MINOR+)."
|
||||
|
||||
else
|
||||
echo "[ERROR] Unable to determine if your system needs Python."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
install_node () {
|
||||
if [[ $NEEDS_NODE == "1" ]]; then
|
||||
echo "[INFO] Installing NodeJS..."
|
||||
|
||||
if [[ $INSTALLER == "apt" ]]; then
|
||||
node_apt
|
||||
elif [[ $INSTALLER == "yum" ]]; then
|
||||
node_yum
|
||||
elif [[ $INSTALLER == "brew" ]]; then
|
||||
node_brew
|
||||
fi
|
||||
|
||||
elif [[ $NEEDS_NODE == "0" ]]; then
|
||||
echo "[INFO] Your system is running NodeJS $(node --version) (Minimum is $MIN_NODE_MAJOR+)."
|
||||
|
||||
else
|
||||
echo "[ERROR] Unable to determine if your system needs NodeJS."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
install_yarn () {
|
||||
if [[ $NEEDS_YARN == "1" ]]; then
|
||||
echo "[INFO] Installing Yarn..."
|
||||
|
||||
if [[ $INSTALLER == "apt" ]]; then
|
||||
yarn_apt
|
||||
elif [[ $INSTALLER == "yum" ]]; then
|
||||
yarn_yum
|
||||
elif [[ $INSTALLER == "brew" ]]; then
|
||||
yarn_brew
|
||||
fi
|
||||
|
||||
elif [[ $NEEDS_YARN == "0" ]]; then
|
||||
echo "[INFO] Your system is running Yarn $(yarn --version) (Minimum is $MIN_YARN_MAJOR+)."
|
||||
|
||||
else
|
||||
echo "[ERROR] Unable to determine if your system needs Yarn."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
install_redis () {
|
||||
if [[ $NEEDS_REDIS == "1" ]]; then
|
||||
echo "[INFO] Installing Redis..."
|
||||
|
||||
if [[ $INSTALLER == "apt" ]]; then
|
||||
redis_apt
|
||||
elif [[ $INSTALLER == "yum" ]]; then
|
||||
redis_yum
|
||||
elif [[ $INSTALLER == "brew" ]]; then
|
||||
redis_brew
|
||||
fi
|
||||
|
||||
elif [[ $NEEDS_REDIS == "0" ]]; then
|
||||
echo "[INFO] Your system is running Redis $(parse_redis_version $(redis-server --version)) (Minimum is $MIN_REDIS_MAJOR+)."
|
||||
|
||||
else
|
||||
echo "[ERROR] Unable to determine if your system needs Redis."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
clean_temp () {
|
||||
echo "Cleaning up temporary files..."
|
||||
rm -rf /tmp/yarnkey.gpg
|
||||
rm -rf /tmp/nodesetup.sh
|
||||
}
|
||||
|
||||
catch_interrupt () {
|
||||
kill $PID
|
||||
exit
|
||||
}
|
||||
|
||||
trap catch_interrupt SIGINT
|
||||
|
||||
while true; do
|
||||
PID=$!
|
||||
|
||||
if (($EUID != 0)); then
|
||||
echo 'hyperglass installer must be run with root privileges. Try running with `sudo`'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
get_platform
|
||||
|
||||
needs_python
|
||||
needs_node
|
||||
needs_yarn
|
||||
needs_redis
|
||||
|
||||
if [[ $NEEDS_YARN == "1" && $INSTALLER == "apt" ]]; then
|
||||
yarn_apt_prepare
|
||||
elif [[ $NEEDS_YARN == "1" && $INSTALLER == "yum" ]]; then
|
||||
yarn_yum_prepare
|
||||
fi
|
||||
|
||||
if [[ $NEEDS_NODE == "1" && $INSTALLER == "apt" ]]; then
|
||||
node_apt_prepare
|
||||
elif [[ $NEEDS_NODE == "1" && $INSTALLER == "yum" ]]; then
|
||||
node_yum_prepare
|
||||
fi
|
||||
|
||||
if [[ $NEEDS_UPDATE == "1" ]]; then
|
||||
update_repo
|
||||
fi
|
||||
|
||||
install_python
|
||||
install_node
|
||||
install_yarn
|
||||
install_redis
|
||||
|
||||
if [[ $? == 0 ]]; then
|
||||
clean_temp
|
||||
echo "[SUCCESS] Finished installed dependencies."
|
||||
exit 0
|
||||
else
|
||||
clean_temp
|
||||
echo "[ERROR] An error occurred while attempting to install dependencies."
|
||||
exit 1
|
||||
fi
|
||||
done
|
153
poetry.lock
generated
153
poetry.lock
generated
@@ -500,13 +500,24 @@ version = "0.18.2"
|
||||
[[package]]
|
||||
category = "dev"
|
||||
description = "Git Object Database"
|
||||
name = "gitdb2"
|
||||
name = "gitdb"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
version = "2.0.6"
|
||||
python-versions = ">=3.4"
|
||||
version = "4.0.0"
|
||||
|
||||
[package.dependencies]
|
||||
smmap2 = ">=2.0.0"
|
||||
smmap = ">=3"
|
||||
|
||||
[[package]]
|
||||
category = "dev"
|
||||
description = "Git Object Database"
|
||||
name = "gitdb2"
|
||||
optional = false
|
||||
python-versions = ">=3.4"
|
||||
version = "4.0.1"
|
||||
|
||||
[package.dependencies]
|
||||
gitdb = ">=4"
|
||||
|
||||
[[package]]
|
||||
category = "dev"
|
||||
@@ -514,10 +525,10 @@ description = "Python Git Library"
|
||||
name = "gitpython"
|
||||
optional = false
|
||||
python-versions = ">=3.4"
|
||||
version = "3.0.7"
|
||||
version = "3.0.8"
|
||||
|
||||
[package.dependencies]
|
||||
gitdb2 = ">=2.0.0"
|
||||
gitdb2 = ">=3"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
@@ -553,16 +564,19 @@ description = "Chromium HSTS Preload list as a Python package and updated daily"
|
||||
name = "hstspreload"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "2020.2.5"
|
||||
version = "2020.2.21"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "A collection of framework independent HTTP protocol utils."
|
||||
marker = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"pypy\""
|
||||
marker = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\""
|
||||
name = "httptools"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "0.0.13"
|
||||
version = "0.1.1"
|
||||
|
||||
[package.extras]
|
||||
test = ["Cython (0.29.14)"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
@@ -608,7 +622,7 @@ description = "Internationalized Domain Names in Applications (IDNA)"
|
||||
name = "idna"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
version = "2.8"
|
||||
version = "2.9"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
@@ -924,7 +938,7 @@ description = "Alternative regular expression module, to replace re."
|
||||
name = "regex"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "2020.1.8"
|
||||
version = "2020.2.20"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
@@ -959,10 +973,10 @@ version = "1.14.0"
|
||||
[[package]]
|
||||
category = "dev"
|
||||
description = "A pure Python implementation of a sliding window memory map manager"
|
||||
name = "smmap2"
|
||||
name = "smmap"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
version = "2.0.5"
|
||||
version = "3.0.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
@@ -1038,12 +1052,12 @@ description = "A collection of helpers and mock objects for unit tests and doc t
|
||||
name = "testfixtures"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "6.12.0"
|
||||
version = "6.13.1"
|
||||
|
||||
[package.extras]
|
||||
build = ["setuptools-git", "wheel", "twine"]
|
||||
docs = ["sphinx"]
|
||||
test = ["pytest (>=3.6)", "pytest-cov", "pytest-django", "sybil", "zope.component", "twisted", "mock", "django (<2)", "django"]
|
||||
docs = ["sphinx", "zope.component", "sybil", "twisted", "mock", "django (<2)", "django"]
|
||||
test = ["pytest (>=3.6)", "pytest-cov", "pytest-django", "zope.component", "sybil", "twisted", "mock", "django (<2)", "django"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
@@ -1100,12 +1114,12 @@ description = "The lightning-fast ASGI server."
|
||||
name = "uvicorn"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "0.11.2"
|
||||
version = "0.11.3"
|
||||
|
||||
[package.dependencies]
|
||||
click = ">=7.0.0,<8.0.0"
|
||||
h11 = ">=0.8,<0.10"
|
||||
httptools = "0.0.13"
|
||||
httptools = ">=0.1.0,<0.2.0"
|
||||
uvloop = ">=0.14.0"
|
||||
websockets = ">=8.0.0,<9.0.0"
|
||||
|
||||
@@ -1123,13 +1137,13 @@ description = "Virtual Python Environment builder"
|
||||
name = "virtualenv"
|
||||
optional = false
|
||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
|
||||
version = "20.0.3"
|
||||
version = "20.0.5"
|
||||
|
||||
[package.dependencies]
|
||||
appdirs = ">=1.4.3,<2"
|
||||
distlib = ">=0.3.0,<1"
|
||||
filelock = ">=3.0.0,<4"
|
||||
six = ">=1.12.0,<2"
|
||||
six = ">=1.9.0,<2"
|
||||
|
||||
[package.dependencies.importlib-metadata]
|
||||
python = "<3.8"
|
||||
@@ -1170,11 +1184,11 @@ marker = "python_version < \"3.8\""
|
||||
name = "zipp"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "2.2.0"
|
||||
version = "3.0.0"
|
||||
|
||||
[package.extras]
|
||||
docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
|
||||
testing = ["jaraco.itertools"]
|
||||
testing = ["jaraco.itertools", "func-timeout"]
|
||||
|
||||
[metadata]
|
||||
content-hash = "416c043c10ed68323afdf9aa286261be5b7787e6408b4a3b056286129871e303"
|
||||
@@ -1412,13 +1426,17 @@ flake8-return = [
|
||||
future = [
|
||||
{file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"},
|
||||
]
|
||||
gitdb = [
|
||||
{file = "gitdb-4.0.0-py2.py3-none-any.whl", hash = "sha256:03013fe466cff860ce0dd12d666e4ca0be4c8b2ad611727fb524ba519eec905c"},
|
||||
{file = "gitdb-4.0.0.tar.gz", hash = "sha256:1bad024b93eb39e01641acf88809b25293d7f4d8fa4d2ff229069a91130a8e2c"},
|
||||
]
|
||||
gitdb2 = [
|
||||
{file = "gitdb2-2.0.6-py2.py3-none-any.whl", hash = "sha256:96bbb507d765a7f51eb802554a9cfe194a174582f772e0d89f4e87288c288b7b"},
|
||||
{file = "gitdb2-2.0.6.tar.gz", hash = "sha256:1b6df1433567a51a4a9c1a5a0de977aa351a405cc56d7d35f3388bad1f630350"},
|
||||
{file = "gitdb2-4.0.1-py2.py3-none-any.whl", hash = "sha256:db61e0786993eb2bf11fe79d76f90eaba2ec1fc3104e450f5117c1dd23a4ba65"},
|
||||
{file = "gitdb2-4.0.1.tar.gz", hash = "sha256:06045ac819e8a30ee12eb17f84e7dc0a2a1d91c6240add65a4b065c8358ad2ec"},
|
||||
]
|
||||
gitpython = [
|
||||
{file = "GitPython-3.0.7-py3-none-any.whl", hash = "sha256:99c77677f31f255e130f3fed4c8e0eebb35f1a09df98ff965fff6774f71688cf"},
|
||||
{file = "GitPython-3.0.7.tar.gz", hash = "sha256:99cd0403cecd8a13b95d2e045b9fcaa7837137fcc5ec3105f2c413305d82c143"},
|
||||
{file = "GitPython-3.0.8-py3-none-any.whl", hash = "sha256:a43a5d88a5bbc3cf32bb5223e4b4e68fd716db5e9996cad6e561bbfee6e5f4af"},
|
||||
{file = "GitPython-3.0.8.tar.gz", hash = "sha256:620b3c729bbc143b498cfea77e302999deedc55faec5b1067086c9ef90e101bc"},
|
||||
]
|
||||
h11 = [
|
||||
{file = "h11-0.9.0-py2.py3-none-any.whl", hash = "sha256:4bc6d6a1238b7615b266ada57e0618568066f57dd6fa967d1290ec9309b2f2f1"},
|
||||
@@ -1433,10 +1451,21 @@ hpack = [
|
||||
{file = "hpack-3.0.0.tar.gz", hash = "sha256:8eec9c1f4bfae3408a3f30500261f7e6a65912dc138526ea054f9ad98892e9d2"},
|
||||
]
|
||||
hstspreload = [
|
||||
{file = "hstspreload-2020.2.5.tar.gz", hash = "sha256:e1fc3184ddf1c8b1af7143b28d76cf648fe385cf29b6d4e7bc9d8fbab98867be"},
|
||||
{file = "hstspreload-2020.2.21.tar.gz", hash = "sha256:6759706864a830ad46cecb8485bec68a32dd8b2a2a389572634a2765cc6e2334"},
|
||||
]
|
||||
httptools = [
|
||||
{file = "httptools-0.0.13.tar.gz", hash = "sha256:e00cbd7ba01ff748e494248183abc6e153f49181169d8a3d41bb49132ca01dfc"},
|
||||
{file = "httptools-0.1.1-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:a2719e1d7a84bb131c4f1e0cb79705034b48de6ae486eb5297a139d6a3296dce"},
|
||||
{file = "httptools-0.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:fa3cd71e31436911a44620473e873a256851e1f53dee56669dae403ba41756a4"},
|
||||
{file = "httptools-0.1.1-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:86c6acd66765a934e8730bf0e9dfaac6fdcf2a4334212bd4a0a1c78f16475ca6"},
|
||||
{file = "httptools-0.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bc3114b9edbca5a1eb7ae7db698c669eb53eb8afbbebdde116c174925260849c"},
|
||||
{file = "httptools-0.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:ac0aa11e99454b6a66989aa2d44bca41d4e0f968e395a0a8f164b401fefe359a"},
|
||||
{file = "httptools-0.1.1-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:96da81e1992be8ac2fd5597bf0283d832287e20cb3cfde8996d2b00356d4e17f"},
|
||||
{file = "httptools-0.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:56b6393c6ac7abe632f2294da53f30d279130a92e8ae39d8d14ee2e1b05ad1f2"},
|
||||
{file = "httptools-0.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:96eb359252aeed57ea5c7b3d79839aaa0382c9d3149f7d24dd7172b1bcecb009"},
|
||||
{file = "httptools-0.1.1-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:fea04e126014169384dee76a153d4573d90d0cbd1d12185da089f73c78390437"},
|
||||
{file = "httptools-0.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3592e854424ec94bd17dc3e0c96a64e459ec4147e6d53c0a42d0ebcef9cb9c5d"},
|
||||
{file = "httptools-0.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:0a4b1b2012b28e68306575ad14ad5e9120b34fccd02a81eb08838d7e3bbb48be"},
|
||||
{file = "httptools-0.1.1.tar.gz", hash = "sha256:41b573cf33f64a8f8f3400d0a7faf48e1888582b6f6e02b82b9bd4f0bf7497ce"},
|
||||
]
|
||||
httpx = [
|
||||
{file = "httpx-0.11.1-py2.py3-none-any.whl", hash = "sha256:1d3893d3e4244c569764a6bae5c5a9fbbc4a6ec3825450b5696602af7a275576"},
|
||||
@@ -1451,8 +1480,8 @@ identify = [
|
||||
{file = "identify-1.4.11.tar.gz", hash = "sha256:d824ebe21f38325c771c41b08a95a761db1982f1fc0eee37c6c97df3f1636b96"},
|
||||
]
|
||||
idna = [
|
||||
{file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"},
|
||||
{file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"},
|
||||
{file = "idna-2.9-py2.py3-none-any.whl", hash = "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"},
|
||||
{file = "idna-2.9.tar.gz", hash = "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb"},
|
||||
]
|
||||
immutables = [
|
||||
{file = "immutables-0.11-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:bce27277a2fe91509cca69181971ab509c2ee862e8b37b09f26b64f90e8fe8fb"},
|
||||
@@ -1634,27 +1663,27 @@ readchar = [
|
||||
{file = "readchar-2.0.1-py3-none-any.whl", hash = "sha256:3ac34aab28563bc895f73233d5c08b28f951ca190d5850b8d4bec973132a8dca"},
|
||||
]
|
||||
regex = [
|
||||
{file = "regex-2020.1.8-cp27-cp27m-win32.whl", hash = "sha256:4e8f02d3d72ca94efc8396f8036c0d3bcc812aefc28ec70f35bb888c74a25161"},
|
||||
{file = "regex-2020.1.8-cp27-cp27m-win_amd64.whl", hash = "sha256:e6c02171d62ed6972ca8631f6f34fa3281d51db8b326ee397b9c83093a6b7242"},
|
||||
{file = "regex-2020.1.8-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4eae742636aec40cf7ab98171ab9400393360b97e8f9da67b1867a9ee0889b26"},
|
||||
{file = "regex-2020.1.8-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bd25bb7980917e4e70ccccd7e3b5740614f1c408a642c245019cff9d7d1b6149"},
|
||||
{file = "regex-2020.1.8-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3e77409b678b21a056415da3a56abfd7c3ad03da71f3051bbcdb68cf44d3c34d"},
|
||||
{file = "regex-2020.1.8-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:07b39bf943d3d2fe63d46281d8504f8df0ff3fe4c57e13d1656737950e53e525"},
|
||||
{file = "regex-2020.1.8-cp36-cp36m-win32.whl", hash = "sha256:23e2c2c0ff50f44877f64780b815b8fd2e003cda9ce817a7fd00dea5600c84a0"},
|
||||
{file = "regex-2020.1.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27429b8d74ba683484a06b260b7bb00f312e7c757792628ea251afdbf1434003"},
|
||||
{file = "regex-2020.1.8-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0e182d2f097ea8549a249040922fa2b92ae28be4be4895933e369a525ba36576"},
|
||||
{file = "regex-2020.1.8-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e3cd21cc2840ca67de0bbe4071f79f031c81418deb544ceda93ad75ca1ee9f7b"},
|
||||
{file = "regex-2020.1.8-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ecc6de77df3ef68fee966bb8cb4e067e84d4d1f397d0ef6fce46913663540d77"},
|
||||
{file = "regex-2020.1.8-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:26ff99c980f53b3191d8931b199b29d6787c059f2e029b2b0c694343b1708c35"},
|
||||
{file = "regex-2020.1.8-cp37-cp37m-win32.whl", hash = "sha256:7bcd322935377abcc79bfe5b63c44abd0b29387f267791d566bbb566edfdd146"},
|
||||
{file = "regex-2020.1.8-cp37-cp37m-win_amd64.whl", hash = "sha256:10671601ee06cf4dc1bc0b4805309040bb34c9af423c12c379c83d7895622bb5"},
|
||||
{file = "regex-2020.1.8-cp38-cp38-manylinux1_i686.whl", hash = "sha256:98b8ed7bb2155e2cbb8b76f627b2fd12cf4b22ab6e14873e8641f266e0fb6d8f"},
|
||||
{file = "regex-2020.1.8-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6a6ba91b94427cd49cd27764679024b14a96874e0dc638ae6bdd4b1a3ce97be1"},
|
||||
{file = "regex-2020.1.8-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:6a6ae17bf8f2d82d1e8858a47757ce389b880083c4ff2498dba17c56e6c103b9"},
|
||||
{file = "regex-2020.1.8-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:0932941cdfb3afcbc26cc3bcf7c3f3d73d5a9b9c56955d432dbf8bbc147d4c5b"},
|
||||
{file = "regex-2020.1.8-cp38-cp38-win32.whl", hash = "sha256:d58e4606da2a41659c84baeb3cfa2e4c87a74cec89a1e7c56bee4b956f9d7461"},
|
||||
{file = "regex-2020.1.8-cp38-cp38-win_amd64.whl", hash = "sha256:e7c7661f7276507bce416eaae22040fd91ca471b5b33c13f8ff21137ed6f248c"},
|
||||
{file = "regex-2020.1.8.tar.gz", hash = "sha256:d0f424328f9822b0323b3b6f2e4b9c90960b24743d220763c7f07071e0778351"},
|
||||
{file = "regex-2020.2.20-cp27-cp27m-win32.whl", hash = "sha256:99272d6b6a68c7ae4391908fc15f6b8c9a6c345a46b632d7fdb7ef6c883a2bbb"},
|
||||
{file = "regex-2020.2.20-cp27-cp27m-win_amd64.whl", hash = "sha256:974535648f31c2b712a6b2595969f8ab370834080e00ab24e5dbb9d19b8bfb74"},
|
||||
{file = "regex-2020.2.20-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5de40649d4f88a15c9489ed37f88f053c15400257eeb18425ac7ed0a4e119400"},
|
||||
{file = "regex-2020.2.20-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:82469a0c1330a4beb3d42568f82dffa32226ced006e0b063719468dcd40ffdf0"},
|
||||
{file = "regex-2020.2.20-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d58a4fa7910102500722defbde6e2816b0372a4fcc85c7e239323767c74f5cbc"},
|
||||
{file = "regex-2020.2.20-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f1ac2dc65105a53c1c2d72b1d3e98c2464a133b4067a51a3d2477b28449709a0"},
|
||||
{file = "regex-2020.2.20-cp36-cp36m-win32.whl", hash = "sha256:8c2b7fa4d72781577ac45ab658da44c7518e6d96e2a50d04ecb0fd8f28b21d69"},
|
||||
{file = "regex-2020.2.20-cp36-cp36m-win_amd64.whl", hash = "sha256:269f0c5ff23639316b29f31df199f401e4cb87529eafff0c76828071635d417b"},
|
||||
{file = "regex-2020.2.20-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:bed7986547ce54d230fd8721aba6fd19459cdc6d315497b98686d0416efaff4e"},
|
||||
{file = "regex-2020.2.20-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:046e83a8b160aff37e7034139a336b660b01dbfe58706f9d73f5cdc6b3460242"},
|
||||
{file = "regex-2020.2.20-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:b33ebcd0222c1d77e61dbcd04a9fd139359bded86803063d3d2d197b796c63ce"},
|
||||
{file = "regex-2020.2.20-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bba52d72e16a554d1894a0cc74041da50eea99a8483e591a9edf1025a66843ab"},
|
||||
{file = "regex-2020.2.20-cp37-cp37m-win32.whl", hash = "sha256:01b2d70cbaed11f72e57c1cfbaca71b02e3b98f739ce33f5f26f71859ad90431"},
|
||||
{file = "regex-2020.2.20-cp37-cp37m-win_amd64.whl", hash = "sha256:113309e819634f499d0006f6200700c8209a2a8bf6bd1bdc863a4d9d6776a5d1"},
|
||||
{file = "regex-2020.2.20-cp38-cp38-manylinux1_i686.whl", hash = "sha256:25f4ce26b68425b80a233ce7b6218743c71cf7297dbe02feab1d711a2bf90045"},
|
||||
{file = "regex-2020.2.20-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9b64a4cc825ec4df262050c17e18f60252cdd94742b4ba1286bcfe481f1c0f26"},
|
||||
{file = "regex-2020.2.20-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:9ff16d994309b26a1cdf666a6309c1ef51ad4f72f99d3392bcd7b7139577a1f2"},
|
||||
{file = "regex-2020.2.20-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:c7f58a0e0e13fb44623b65b01052dae8e820ed9b8b654bb6296bc9c41f571b70"},
|
||||
{file = "regex-2020.2.20-cp38-cp38-win32.whl", hash = "sha256:200539b5124bc4721247a823a47d116a7a23e62cc6695744e3eb5454a8888e6d"},
|
||||
{file = "regex-2020.2.20-cp38-cp38-win_amd64.whl", hash = "sha256:7f78f963e62a61e294adb6ff5db901b629ef78cb2a1cfce3cf4eeba80c1c67aa"},
|
||||
{file = "regex-2020.2.20.tar.gz", hash = "sha256:9e9624440d754733eddbcd4614378c18713d2d9d0dc647cf9c72f64e39671be5"},
|
||||
]
|
||||
rfc3986 = [
|
||||
{file = "rfc3986-1.3.2-py2.py3-none-any.whl", hash = "sha256:df4eba676077cefb86450c8f60121b9ae04b94f65f85b69f3f731af0516b7b18"},
|
||||
@@ -1668,9 +1697,9 @@ six = [
|
||||
{file = "six-1.14.0-py2.py3-none-any.whl", hash = "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"},
|
||||
{file = "six-1.14.0.tar.gz", hash = "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a"},
|
||||
]
|
||||
smmap2 = [
|
||||
{file = "smmap2-2.0.5-py2.py3-none-any.whl", hash = "sha256:0555a7bf4df71d1ef4218e4807bbf9b201f910174e6e08af2e138d4e517b4dde"},
|
||||
{file = "smmap2-2.0.5.tar.gz", hash = "sha256:29a9ffa0497e7f2be94ca0ed1ca1aa3cd4cf25a1f6b4f5f87f74b46ed91d609a"},
|
||||
smmap = [
|
||||
{file = "smmap-3.0.0-py2.py3-none-any.whl", hash = "sha256:7845d7d51201380e857420bf11e169a936e27b9764ac118310999d1c1ae58b82"},
|
||||
{file = "smmap-3.0.0.tar.gz", hash = "sha256:cc601e2d7bb9e9218f83f0ce8b6d3a4da614acd5e41ac694eb34a030329ad723"},
|
||||
]
|
||||
sniffio = [
|
||||
{file = "sniffio-1.1.0-py3-none-any.whl", hash = "sha256:20ed6d5b46f8ae136d00b9dcb807615d83ed82ceea6b2058cecb696765246da5"},
|
||||
@@ -1695,8 +1724,8 @@ stevedore = [
|
||||
{file = "stevedore-1.32.0.tar.gz", hash = "sha256:18afaf1d623af5950cc0f7e75e70f917784c73b652a34a12d90b309451b5500b"},
|
||||
]
|
||||
testfixtures = [
|
||||
{file = "testfixtures-6.12.0-py2.py3-none-any.whl", hash = "sha256:76eef0c048d6c1ad28bb74ae2b28fa9e3ea3a2f42a56715a4102480b8188e588"},
|
||||
{file = "testfixtures-6.12.0.tar.gz", hash = "sha256:c352760016f0e5579a3e5565387e6d582ccad4db9791b6a293fdfc59d4591b97"},
|
||||
{file = "testfixtures-6.13.1-py2.py3-none-any.whl", hash = "sha256:ed7f36c5d426a4271368569d3b2d35590eeaf340ee9653cc3dd06ba2e21c6ba8"},
|
||||
{file = "testfixtures-6.13.1.tar.gz", hash = "sha256:6edef5d0d39b4a11ada53307379c07c38d69db4a684d40d4e3e08ec7ba66187e"},
|
||||
]
|
||||
textfsm = [
|
||||
{file = "textfsm-1.1.0-py2.py3-none-any.whl", hash = "sha256:0aef3f9cad3d03905915fd62bff358c42b7dc35c863ff2cb0b5324c2b746cc24"},
|
||||
@@ -1737,8 +1766,8 @@ urllib3 = [
|
||||
{file = "urllib3-1.25.8.tar.gz", hash = "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"},
|
||||
]
|
||||
uvicorn = [
|
||||
{file = "uvicorn-0.11.2-py3-none-any.whl", hash = "sha256:4a35496af38e4deeec911f4af99b0bace19669c986210b0a950ad2b7bfd5737a"},
|
||||
{file = "uvicorn-0.11.2.tar.gz", hash = "sha256:11f397855c7f35dc034a3d288883382a4c16afdfe6675b70896f55bd6051da64"},
|
||||
{file = "uvicorn-0.11.3-py3-none-any.whl", hash = "sha256:0f58170165c4495f563d8224b2f415a0829af0412baa034d6f777904613087fd"},
|
||||
{file = "uvicorn-0.11.3.tar.gz", hash = "sha256:6fdaf8e53bf1b2ddf0fe9ed06079b5348d7d1d87b3365fe2549e6de0d49e631c"},
|
||||
]
|
||||
uvloop = [
|
||||
{file = "uvloop-0.14.0-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:08b109f0213af392150e2fe6f81d33261bb5ce968a288eb698aad4f46eb711bd"},
|
||||
@@ -1752,8 +1781,8 @@ uvloop = [
|
||||
{file = "uvloop-0.14.0.tar.gz", hash = "sha256:123ac9c0c7dd71464f58f1b4ee0bbd81285d96cdda8bc3519281b8973e3a461e"},
|
||||
]
|
||||
virtualenv = [
|
||||
{file = "virtualenv-20.0.3-py2.py3-none-any.whl", hash = "sha256:ec376274f5abb6da25e0ef81d082d2884cda8fd924e1ff73b4c2bb5416d48c87"},
|
||||
{file = "virtualenv-20.0.3.tar.gz", hash = "sha256:526484e29a9a12f0680d251331e7841b36f1e2b918935377f173f764b1b8be89"},
|
||||
{file = "virtualenv-20.0.5-py2.py3-none-any.whl", hash = "sha256:5dd42a9f56307542bddc446cfd10ef6576f11910366a07609fe8d0d88fa8fb7e"},
|
||||
{file = "virtualenv-20.0.5.tar.gz", hash = "sha256:531b142e300d405bb9faedad4adbeb82b4098b918e35209af2adef3129274aae"},
|
||||
]
|
||||
websockets = [
|
||||
{file = "websockets-8.0.2-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:e906128532a14b9d264a43eb48f9b3080d53a9bda819ab45bf56b8039dc606ac"},
|
||||
@@ -1773,6 +1802,6 @@ win32-setctime = [
|
||||
{file = "win32_setctime-1.0.1.tar.gz", hash = "sha256:b47e5023ec7f0b4962950902b15bc56464a380d869f59d27dbf9ab423b23e8f9"},
|
||||
]
|
||||
zipp = [
|
||||
{file = "zipp-2.2.0-py36-none-any.whl", hash = "sha256:d65287feb793213ffe11c0f31b81602be31448f38aeb8ffc2eb286c4f6f6657e"},
|
||||
{file = "zipp-2.2.0.tar.gz", hash = "sha256:5c56e330306215cd3553342cfafc73dda2c60792384117893f3a83f8a1209f50"},
|
||||
{file = "zipp-3.0.0-py3-none-any.whl", hash = "sha256:12248a63bbdf7548f89cb4c7cda4681e537031eda29c02ea29674bc6854460c2"},
|
||||
{file = "zipp-3.0.0.tar.gz", hash = "sha256:7c0f8e91abc0dc07a5068f315c52cb30c66bfbc581e5b50704c8a2f6ebae794a"},
|
||||
]
|
||||
|
Reference in New Issue
Block a user