Add docker-compose usage

pull/7/head
JensDiemer 2020-10-20 17:38:08 +02:00
rodzic faafab9271
commit 4a1c0842d5
18 zmienionych plików z 754 dodań i 52 usunięć

Wyświetl plik

@ -23,5 +23,5 @@ indent_style = tab
insert_final_newline = false
[*.yml]
indent_style = space
indent_size = 2
indent_style = tab
indent_size = 4

3
.gitignore vendored
Wyświetl plik

@ -13,6 +13,9 @@
/media/
*.sqlite3
# docker-compose usage:
volumes
# Coverage HTML Report files:
htmlcov

19
Dockerfile 100644
Wyświetl plik

@ -0,0 +1,19 @@
FROM python:3.7-slim-buster
# Install deps
RUN apt-get update \
&& apt-mark auto $(apt-mark showinstall) \
&& apt-get install -y python3-pip \
&& apt autoremove \
&& apt -y full-upgrade \
&& rm -rf /var/lib/apt \
&& python3 -m pip install -U pip \
&& python3 -m pip install poetry
WORKDIR /PyInventory
COPY . .
RUN poetry install --extras "postgres"

Wyświetl plik

@ -1,6 +1,7 @@
SHELL := /bin/bash
MAX_LINE_LENGTH := 119
POETRY_VERSION := $(shell poetry --version 2>/dev/null)
COMPOSE_VERSION := $(shell poetry run docker-compose --version 2>/dev/null)
help: ## List all commands
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9 -]+:.*?## / {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
@ -90,5 +91,72 @@ backup: ## Backup everything
create-starter: ## Create starter file.
poetry run inventory create-starter
##############################################################################
# docker-compose usage
check-compose:
@if [[ "${COMPOSE_VERSION}" == *"docker-compose version"* ]] ; \
then \
echo "Found ${COMPOSE_VERSION}, ok." ; \
else \
echo 'Please install extras first, with e.g.:' ; \
echo 'make install-compose' ; \
exit 1 ; \
fi
install-compose: check-poetry ## Install "docker-compose", too
poetry install --extras "docker"
up: check-compose ## Start containers via docker-compose
./compose.sh up -d
./compose.sh logs --tail=500 --follow
down: ## Stop all containers
./compose.sh down
prune: ## Cleanup docker
docker system prune --force --all --filter until=4464h
build: check-compose ## Update docker container build
./compose.sh build --pull
init_postgres: ## Create postgres database
./compose.sh exec postgres ./docker/postgres_init.sh
##############################################################################
docker_createsuperuser: ## Create super user
./compose.sh exec inventory ./manage.sh createsuperuser
shell_inventory: ## Go into bash shell in inventory container
./compose.sh exec inventory /bin/bash
shell_postgres: ## Go into bash shell in postgres container
./compose.sh exec postgres /bin/bash
##############################################################################
logs: ## Display docker logs from all containers
./compose.sh logs --tail=500 --follow
logs_postgres: ## Display docker logs from postgres container
./compose.sh logs --tail=500 --follow postgres
logs_inventory: ## Display docker logs from postgres container
./compose.sh logs --tail=500 --follow inventory
##############################################################################
restart: down up ## Restart all containers
upgrade_inventory: ## Upgrade "inventory" container and restart it
$(MAKE) build
./compose.sh stop inventory
$(MAKE) up
reload_inventory: ## Reload server in "inventory" container
./compose.sh exec inventory ./docker/kill_python.sh
./compose.sh logs --tail=500 --follow inventory
.PHONY: help install lint fix test publish

Wyświetl plik

@ -39,7 +39,12 @@ any many more... ;)
== install
tbd
There exists two kind of installation/usage:
* local virtualenv (without docker)
* docker-compose
=== prepare
{{{
~$ git clone https://github.com/jedie/PyInventory.git
@ -48,6 +53,7 @@ tbd
help List all commands
install-poetry install or update poetry
install install PyInventory via poetry
manage-update Collectstatic + makemigration + migrate
update update the sources and installation
lint Run code formatters and linter
fix-code-style Fix code formatting
@ -60,13 +66,67 @@ pytest Run pytest
update-rst-readme update README.rst from README.creole
publish Release new version to PyPi
run-dev-server Run the django dev server in endless loop.
messages Make and compile locales message files
run-server Run the gunicorn server in endless loop.
backup Backup everything
create-starter Create starter file.
install-compose Install "docker-compose", too
up Start containers via docker-compose
down Stop all containers
prune Cleanup docker
build Update docker container build
restart Restart all containers
}}}
=== .env
Create a {{{.env}}} file, for some settings, e.g.:
{{{
# enable Django-Debug-Toolbar:
ENABLE_DJDT=1
}}}
=== local install without docker
{{{
# install or update poetry:
~/PyInventory$ make install-poetry
# install PyInventory via poetry:
~/PyInventory$ make install
...
# Collectstatic + makemigration + migrate:
~/PyInventory$ make manage-update
# Create a django super user:
~/PyInventory$ ./manage.sh createsuperuser
# start local dev. web server:
~/PyInventory$ make run-dev-server
}}}
=== docker-compose usage
Install docker, e.g.: https://docs.docker.com/engine/install/ubuntu/
{{{
# Install "docker-compose" via poetry extras:
~/PyInventory$ make install-compose
# Start containers via docker-compose:
~/PyInventory$ make up
}}}
Notes:
* at the first start it takes a little while until the database is created
* The web page is available via: {{{http://localhost:8000/}}}
== Screenshots
{{https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/PyInventory/PyInventory v0.1.0 screenshot 1.png|PyInventory v0.1.0 screenshot 1.png}}

Wyświetl plik

@ -73,7 +73,14 @@ any many more... ;)
install
-------
tbd
There exists two kind of installation/usage:
* local virtualenv (without docker)
* docker-compose
prepare
=======
::
@ -83,6 +90,7 @@ tbd
help List all commands
install-poetry install or update poetry
install install PyInventory via poetry
manage-update Collectstatic + makemigration + migrate
update update the sources and installation
lint Run code formatters and linter
fix-code-style Fix code formatting
@ -95,11 +103,66 @@ tbd
update-rst-readme update README.rst from README.creole
publish Release new version to PyPi
run-dev-server Run the django dev server in endless loop.
messages Make and compile locales message files
run-server Run the gunicorn server in endless loop.
backup Backup everything
create-starter Create starter file.
install-compose Install "docker-compose", too
up Start containers via docker-compose
down Stop all containers
prune Cleanup docker
build Update docker container build
restart Restart all containers
.env
====
Create a ``.env`` file, for some settings, e.g.:
::
# enable Django-Debug-Toolbar:
ENABLE_DJDT=1
local install without docker
============================
::
# install or update poetry:
~/PyInventory$ make install-poetry
# install PyInventory via poetry:
~/PyInventory$ make install
...
# Collectstatic + makemigration + migrate:
~/PyInventory$ make manage-update
# Create a django super user:
~/PyInventory$ ./manage.sh createsuperuser
# start local dev. web server:
~/PyInventory$ make run-dev-server
docker-compose usage
====================
Install docker, e.g.: `https://docs.docker.com/engine/install/ubuntu/ <https://docs.docker.com/engine/install/ubuntu/>`_
::
# Install "docker-compose" via poetry extras:
~/PyInventory$ make install-compose
# Start containers via docker-compose:
~/PyInventory$ make up
Notes:
* at the first start it takes a little while until the database is created
* The web page is available via: ``http://localhost:8000/``
-----------
Screenshots
@ -170,4 +233,4 @@ donation
------------
``Note: this file is generated from README.creole 2020-10-17 22:30:59 with "python-creole"``
``Note: this file is generated from README.creole 2020-10-24 13:38:24 with "python-creole"``

5
compose.sh 100755
Wyświetl plik

@ -0,0 +1,5 @@
#!/bin/sh
set -ex
exec poetry run docker-compose "$@"

38
docker-compose.yml 100644
Wyświetl plik

@ -0,0 +1,38 @@
version: "3.7"
services:
inventory:
build:
context: .
dockerfile: Dockerfile
restart: "no"
hostname: inventory
ports:
- "8000:8000"
env_file: ./docker/common.env
environment:
- ENABLE_DJDT=$ENABLE_DJDT
links:
- postgres:postgres
depends_on:
- postgres
volumes:
- .:/PyInventory
- ./volumes/static/:/PyInventory/static/:rw
# e.g.: pip cache must be the same value as $XDG_CACHE_HOME !
- ./volumes/cache/:/var/cache/:rw
entrypoint: /PyInventory/docker/entrypoint.sh
postgres:
# https://hub.docker.com/_/postgres
image: postgres:13-alpine
restart: "no"
hostname: postgres
ports:
- "5432:5432"
env_file: ./docker/common.env
environment:
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
- ./docker/init-postgres-user-db.sh:/docker-entrypoint-initdb.d/init-user-db.sh:ro
- ./volumes/postgresql/data/:/var/lib/postgresql/data/:rw

10
docker/common.env 100644
Wyświetl plik

@ -0,0 +1,10 @@
DB_NAME=pyinventory
DB_USER=postgres
DB_PASS=postgres
DB_HOST=postgres
DB_PORT=5432
PYTHONUNBUFFERED=1
# e.g.: pip cache:
XDG_CACHE_HOME="/var/cache"

Wyświetl plik

@ -0,0 +1,34 @@
#!/bin/sh
set -e
restart_error_handler() {
(
echo "Restart ${0} in 3 sec..."
sleep 1
echo "Restart ${0} in 2 sec..."
sleep 1
echo "Restart ${0} in 1 sec..."
sleep 1
)
exec ${0}
}
trap restart_error_handler 0
echo "_______________________________________________________________________"
echo "$(date +%c) - ${0}"
(
set -x
./manage.sh collectstatic --noinput --link
./manage.sh makemigrations
./manage.sh migrate
./manage.sh runserver 0.0.0.0:8000
echo "runserver terminated with exit code: $?"
sleep 3
exit 1
)
exit 2

Wyświetl plik

@ -0,0 +1,5 @@
#!/bin/bash
set -ex
psql -U postgres -c "CREATE DATABASE $DB_NAME OWNER $DB_USER"

Wyświetl plik

@ -0,0 +1,5 @@
#!/bin/sh
set -ex
for pid in $(pidof python3); do kill $pid; done

Wyświetl plik

@ -13,3 +13,6 @@ from django.apps import AppConfig
class InventoryConfig(AppConfig):
name = "inventory"
verbose_name = "Inventory"
def ready(self):
import inventory.checks # noqa

Wyświetl plik

@ -0,0 +1,17 @@
from pathlib import Path
from django.core.checks import Error, register
@register()
def inventory_checks(app_configs, **kwargs):
errors = []
if not Path('.env').is_file():
errors.append(
Error(
'No ".env" file found!',
hint='Create a ".env" file. See README for details',
id='pyinventory.E001',
)
)
return errors

Wyświetl plik

@ -0,0 +1,23 @@
import logging
from pathlib import Path
from debug_toolbar.middleware import show_toolbar
from django.conf import settings
logger = logging.getLogger(__name__)
def djdt_show(request):
"""
Determining whether the Django Debug Toolbar should show or not.
"""
if not settings.DEBUG:
return False
if Path('/.dockerenv').exists():
# We run in a docker container
# skip the `request.META['REMOTE_ADDR'] in settings.INTERNAL_IPS` check.
return True
return show_toolbar(request)

Wyświetl plik

@ -3,9 +3,10 @@
"""
import logging
import os as __os
from pathlib import Path as __Path
from debug_toolbar.settings import CONFIG_DEFAULTS as DEBUG_TOOLBAR_CONFIG
from django.utils.translation import ugettext_lazy as _
@ -21,25 +22,22 @@ SECRET_KEY = 'TODO: Read secret.txt ;)'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
SITE_ID = 1
# Required for the debug toolbar to be displayed:
INTERNAL_IPS = '*'
INTERNAL_IPS = ('127.0.0.1', '0.0.0.0', 'localhost')
ALLOWED_HOSTS = INTERNAL_IPS
# Application definition
INSTALLED_APPS = (
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'debug_toolbar', # https://github.com/jazzband/django-debug-toolbar
'bx_py_utils', # https://github.com/boxine/bx_py_utils
'import_export', # https://github.com/django-import-export/django-import-export
'ckeditor', # https://github.com/django-ckeditor/django-ckeditor
@ -49,14 +47,12 @@ INSTALLED_APPS = (
'adminsortable2', # https://github.com/jrief/django-admin-sortable2
'inventory.apps.InventoryConfig',
)
]
ROOT_URLCONF = 'inventory_project.urls'
WSGI_APPLICATION = 'inventory_project.wsgi.application'
MIDDLEWARE = (
'debug_toolbar.middleware.DebugToolbarMiddleware',
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
@ -66,7 +62,7 @@ MIDDLEWARE = (
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware',
)
]
TEMPLATES = [
{
@ -93,15 +89,32 @@ if DEBUG:
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': str(__Path(BASE_PATH.parent, 'PyInventory-database.sqlite3')),
# 'NAME': ':memory:'
# https://docs.djangoproject.com/en/dev/ref/databases/#database-is-locked-errors
'timeout': 30,
if 'DB_HOST' in __os.environ:
# docker-compose usage with postgres database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': __os.environ['DB_NAME'],
'USER': __os.environ['DB_USER'],
'PASSWORD': __os.environ['DB_PASS'],
'HOST': __os.environ['DB_HOST'],
'PORT': __os.environ['DB_PORT'],
'DEBUG_NAME': 'default',
'CONN_MAX_AGE': 600,
},
}
else:
# local run with SQLite
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': str(__Path(BASE_PATH.parent, 'PyInventory-database.sqlite3')),
# 'NAME': ':memory:'
# https://docs.djangoproject.com/en/dev/ref/databases/#database-is-locked-errors
'timeout': 30,
}
}
}
print(f'Use Database: {DATABASES["default"]["NAME"]!r}')
# _____________________________________________________________________________
@ -133,14 +146,25 @@ MEDIA_ROOT = str(__Path(BASE_PATH, 'media'))
# _____________________________________________________________________________
# Django-Debug-Toolbar
# Disable some more panels that will slow down the page:
DEBUG_TOOLBAR_CONFIG['DISABLE_PANELS'].add('debug_toolbar.panels.sql.SQLPanel')
DEBUG_TOOLBAR_CONFIG['DISABLE_PANELS'].add('debug_toolbar.panels.cache.CachePanel')
ENABLE_DJDT = __os.environ.get('ENABLE_DJDT') in ('true', '1')
if ENABLE_DJDT:
print('Enable Django-Debug-Toolbar')
INSTALLED_APPS += ['debug_toolbar']
MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware']
# don't load jquery from ajax.googleapis.com, just use django's version:
DEBUG_TOOLBAR_CONFIG['JQUERY_URL'] = STATIC_URL + 'admin/js/vendor/jquery/jquery.min.js'
DEBUG_TOOLBAR_PATCH_SETTINGS = True
from debug_toolbar.settings import CONFIG_DEFAULTS as DEBUG_TOOLBAR_CONFIG
DEBUG_TOOLBAR_CONFIG['SHOW_COLLAPSED'] = True # Show toolbar collapsed by default.
# Disable some more panels that will slow down the page:
DEBUG_TOOLBAR_CONFIG['DISABLE_PANELS'].add('debug_toolbar.panels.sql.SQLPanel')
DEBUG_TOOLBAR_CONFIG['DISABLE_PANELS'].add('debug_toolbar.panels.cache.CachePanel')
# don't load jquery from ajax.googleapis.com, just use django's version:
DEBUG_TOOLBAR_CONFIG['JQUERY_URL'] = STATIC_URL + 'admin/js/vendor/jquery/jquery.min.js'
DEBUG_TOOLBAR_CONFIG['SHOW_TEMPLATE_CONTEXT'] = True
DEBUG_TOOLBAR_CONFIG['SHOW_COLLAPSED'] = True # Show toolbar collapsed by default.
DEBUG_TOOLBAR_CONFIG['SHOW_TOOLBAR_CALLBACK'] = 'inventory_project.middlewares.djdt_show'
# _____________________________________________________________________________
# django-ckeditor

361
poetry.lock wygenerowano
Wyświetl plik

@ -26,7 +26,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
name = "attrs"
version = "20.2.0"
description = "Classes Without Boilerplate"
category = "dev"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
@ -48,6 +48,22 @@ python-versions = "*"
pycodestyle = ">=2.6.0"
toml = "*"
[[package]]
name = "bcrypt"
version = "3.2.0"
description = "Modern password hashing for your software and your servers"
category = "main"
optional = true
python-versions = ">=3.6"
[package.dependencies]
cffi = ">=1.1"
six = ">=1.4.1"
[package.extras]
tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)"]
typecheck = ["mypy"]
[[package]]
name = "bleach"
version = "3.2.1"
@ -72,6 +88,14 @@ python-versions = ">=3.6,<4.0.0"
[package.dependencies]
django = "*"
[[package]]
name = "cached-property"
version = "1.5.2"
description = "A decorator for caching properties in classes."
category = "main"
optional = true
python-versions = "*"
[[package]]
name = "certifi"
version = "2020.6.20"
@ -84,7 +108,7 @@ python-versions = "*"
name = "cffi"
version = "1.14.3"
description = "Foreign Function Interface for Python calling C code."
category = "dev"
category = "main"
optional = false
python-versions = "*"
@ -149,7 +173,7 @@ yaml = ["PyYAML (>=3.10)"]
name = "cryptography"
version = "3.1.1"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "dev"
category = "main"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
@ -188,6 +212,14 @@ category = "dev"
optional = false
python-versions = "*"
[[package]]
name = "distro"
version = "1.5.0"
description = "Distro - an OS platform information API"
category = "main"
optional = true
python-versions = "*"
[[package]]
name = "django"
version = "2.2.16"
@ -313,11 +345,67 @@ django = "*"
icdiff = "*"
pprintpp = "*"
[[package]]
name = "docker"
version = "4.3.1"
description = "A Python library for the Docker Engine API."
category = "main"
optional = true
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.dependencies]
paramiko = {version = ">=2.4.2", optional = true, markers = "extra == \"ssh\""}
pywin32 = {version = "227", markers = "sys_platform == \"win32\""}
requests = ">=2.14.2,<2.18.0 || >2.18.0"
six = ">=1.4.0"
websocket-client = ">=0.32.0"
[package.extras]
ssh = ["paramiko (>=2.4.2)"]
tls = ["pyOpenSSL (>=17.5.0)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"]
[[package]]
name = "docker-compose"
version = "1.27.4"
description = "Multi-container orchestration for Docker"
category = "main"
optional = true
python-versions = ">=3.4"
[package.dependencies]
cached-property = ">=1.2.0,<2"
colorama = {version = ">=0.4,<1", markers = "sys_platform == \"win32\""}
distro = ">=1.5.0,<2"
docker = {version = ">=4.3.1,<5", extras = ["ssh"]}
dockerpty = ">=0.4.1,<1"
docopt = ">=0.6.1,<1"
jsonschema = ">=2.5.1,<4"
python-dotenv = ">=0.13.0,<1"
PyYAML = ">=3.10,<6"
requests = ">=2.20.0,<3"
texttable = ">=0.9.0,<2"
websocket-client = ">=0.32.0,<1"
[package.extras]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2)"]
tests = ["ddt (>=1.2.2,<2)", "pytest (<6)"]
[[package]]
name = "dockerpty"
version = "0.4.1"
description = "Python library to use the pseudo-tty of a docker container"
category = "main"
optional = true
python-versions = "*"
[package.dependencies]
six = ">=1.3.0"
[[package]]
name = "docopt"
version = "0.6.2"
description = "Pythonic argument parser, that will make you smile"
category = "dev"
category = "main"
optional = false
python-versions = "*"
@ -404,7 +492,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
name = "importlib-metadata"
version = "2.0.0"
description = "Read metadata from Python packages"
category = "dev"
category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
@ -455,6 +543,24 @@ python-versions = ">=3.5"
[package.extras]
dev = ["testpath"]
[[package]]
name = "jsonschema"
version = "3.2.0"
description = "An implementation of JSON Schema validation for Python"
category = "main"
optional = true
python-versions = "*"
[package.dependencies]
attrs = ">=17.4.0"
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
pyrsistent = ">=0.14.0"
six = ">=1.11.0"
[package.extras]
format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
[[package]]
name = "keyring"
version = "21.4.0"
@ -524,9 +630,28 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
pyparsing = ">=2.0.2"
six = "*"
[[package]]
name = "paramiko"
version = "2.7.2"
description = "SSH2 protocol library"
category = "main"
optional = true
python-versions = "*"
[package.dependencies]
bcrypt = ">=3.1.3"
cryptography = ">=2.5"
pynacl = ">=1.0.1"
[package.extras]
all = ["pyasn1 (>=0.1.7)", "pynacl (>=1.0.1)", "bcrypt (>=3.1.3)", "invoke (>=1.3)", "gssapi (>=1.4.1)", "pywin32 (>=2.1.8)"]
ed25519 = ["pynacl (>=1.0.1)", "bcrypt (>=3.1.3)"]
gssapi = ["pyasn1 (>=0.1.7)", "gssapi (>=1.4.1)", "pywin32 (>=2.1.8)"]
invoke = ["invoke (>=1.3)"]
[[package]]
name = "pkginfo"
version = "1.5.0.1"
version = "1.6.0"
description = "Query metadatdata from sdists / bdists / installed packages."
category = "dev"
optional = false
@ -551,7 +676,7 @@ dev = ["pre-commit", "tox"]
[[package]]
name = "poetry-publish"
version = "0.3.2"
version = "0.4.0"
description = "Helper to build and upload a project that used poetry to PyPi, with prechecks"
category = "dev"
optional = false
@ -569,6 +694,14 @@ category = "main"
optional = false
python-versions = "*"
[[package]]
name = "psycopg2-binary"
version = "2.8.6"
description = "psycopg2 - Python-PostgreSQL Database Adapter"
category = "main"
optional = true
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
[[package]]
name = "py"
version = "1.9.0"
@ -589,7 +722,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
name = "pycparser"
version = "2.20"
description = "C parser in Python"
category = "dev"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
@ -609,6 +742,22 @@ category = "dev"
optional = false
python-versions = ">=3.5"
[[package]]
name = "pynacl"
version = "1.4.0"
description = "Python binding to the Networking and Cryptography (NaCl) library"
category = "main"
optional = true
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.dependencies]
cffi = ">=1.4.1"
six = "*"
[package.extras]
docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"]
tests = ["pytest (>=3.2.1,<3.3.0 || >3.3.0)", "hypothesis (>=3.27.0)"]
[[package]]
name = "pyparsing"
version = "2.4.7"
@ -617,6 +766,14 @@ category = "main"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "pyrsistent"
version = "0.17.3"
description = "Persistent/Functional/Immutable data structures"
category = "main"
optional = true
python-versions = ">=3.5"
[[package]]
name = "pytest"
version = "6.1.1"
@ -684,7 +841,7 @@ pytest = "*"
[[package]]
name = "python-creole"
version = "1.4.7"
version = "1.4.8"
description = "python-creole is an open-source (GPL) markup converter in pure Python for: creole2html, html2creole, html2ReSt, html2textile"
category = "dev"
optional = false
@ -693,6 +850,17 @@ python-versions = ">=3.6,<4.0.0"
[package.dependencies]
docutils = "*"
[[package]]
name = "python-dotenv"
version = "0.14.0"
description = "Add .env support to your django/flask apps in development and deployments"
category = "main"
optional = true
python-versions = "*"
[package.extras]
cli = ["click (>=5.0)"]
[[package]]
name = "pytz"
version = "2020.1"
@ -712,6 +880,14 @@ python-versions = ">=3.6.1"
[package.dependencies]
tokenize-rt = ">=3.2.0"
[[package]]
name = "pywin32"
version = "227"
description = "Python for Window Extensions"
category = "main"
optional = true
python-versions = "*"
[[package]]
name = "pywin32-ctypes"
version = "0.2.0"
@ -839,6 +1015,14 @@ xls = ["xlrd", "xlwt"]
xlsx = ["openpyxl (>=2.6.0)"]
yaml = ["pyyaml"]
[[package]]
name = "texttable"
version = "1.6.3"
description = "module for creating simple ASCII tables"
category = "main"
optional = true
python-versions = "*"
[[package]]
name = "tokenize-rt"
version = "4.0.0"
@ -910,7 +1094,7 @@ tqdm = ">=4.14"
[[package]]
name = "urllib3"
version = "1.25.10"
version = "1.25.11"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
@ -918,7 +1102,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
brotli = ["brotlipy (>=0.6.0)"]
secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)", "ipaddress"]
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"]
[[package]]
@ -948,6 +1132,17 @@ category = "main"
optional = false
python-versions = "*"
[[package]]
name = "websocket-client"
version = "0.57.0"
description = "WebSocket client for Python. hybi13 is supported."
category = "main"
optional = true
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[package.dependencies]
six = "*"
[[package]]
name = "xlrd"
version = "1.2.0"
@ -968,7 +1163,7 @@ python-versions = "*"
name = "zipp"
version = "3.3.1"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "dev"
category = "main"
optional = false
python-versions = ">=3.6"
@ -976,10 +1171,14 @@ python-versions = ">=3.6"
docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[extras]
docker = ["docker-compose"]
postgres = ["psycopg2-binary"]
[metadata]
lock-version = "1.1"
python-versions = ">=3.7,<4.0.0"
content-hash = "1d04353be2d22444baeac57568ab372c021a7735bd893245887a8a342589f19f"
content-hash = "4ad32caba18b4f973eee3d59a129b1ccd5750289a60c07939e1ab2f973fb4940"
[metadata.files]
appdirs = [
@ -1001,6 +1200,15 @@ attrs = [
autopep8 = [
{file = "autopep8-1.5.4.tar.gz", hash = "sha256:d21d3901cb0da6ebd1e83fc9b0dfbde8b46afc2ede4fe32fbda0c7c6118ca094"},
]
bcrypt = [
{file = "bcrypt-3.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c95d4cbebffafcdd28bd28bb4e25b31c50f6da605c81ffd9ad8a3d1b2ab7b1b6"},
{file = "bcrypt-3.2.0-cp36-abi3-manylinux1_x86_64.whl", hash = "sha256:63d4e3ff96188e5898779b6057878fecf3f11cfe6ec3b313ea09955d587ec7a7"},
{file = "bcrypt-3.2.0-cp36-abi3-manylinux2010_x86_64.whl", hash = "sha256:cd1ea2ff3038509ea95f687256c46b79f5fc382ad0aa3664d200047546d511d1"},
{file = "bcrypt-3.2.0-cp36-abi3-manylinux2014_aarch64.whl", hash = "sha256:cdcdcb3972027f83fe24a48b1e90ea4b584d35f1cc279d76de6fc4b13376239d"},
{file = "bcrypt-3.2.0-cp36-abi3-win32.whl", hash = "sha256:a67fb841b35c28a59cebed05fbd3e80eea26e6d75851f0574a9273c80f3e9b55"},
{file = "bcrypt-3.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:81fec756feff5b6818ea7ab031205e1d323d8943d237303baca2c5f9c7846f34"},
{file = "bcrypt-3.2.0.tar.gz", hash = "sha256:5b93c1726e50a93a033c36e5ca7fdcd29a5c7395af50a6892f5d9e7c6cfbfb29"},
]
bleach = [
{file = "bleach-3.2.1-py2.py3-none-any.whl", hash = "sha256:9f8ccbeb6183c6e6cddea37592dfb0167485c1e3b13b3363bc325aa8bda3adbd"},
{file = "bleach-3.2.1.tar.gz", hash = "sha256:52b5919b81842b1854196eaae5ca29679a2f2e378905c346d3ca8227c2c66080"},
@ -1009,6 +1217,10 @@ bx-py-utils = [
{file = "bx_py_utils-0.0.2-py3-none-any.whl", hash = "sha256:c39c6be8d18c959dd314febfc8a3b7d8f73315cd1cba91fbbb4e602e5e97fd0c"},
{file = "bx_py_utils-0.0.2.tar.gz", hash = "sha256:f956772cbf84329c3d9cd22b00d5e01a37ca578104bd9474e15dabc6e6bf6529"},
]
cached-property = [
{file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"},
{file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"},
]
certifi = [
{file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"},
{file = "certifi-2020.6.20.tar.gz", hash = "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3"},
@ -1138,6 +1350,10 @@ distlib = [
{file = "distlib-0.3.1-py2.py3-none-any.whl", hash = "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb"},
{file = "distlib-0.3.1.zip", hash = "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1"},
]
distro = [
{file = "distro-1.5.0-py2.py3-none-any.whl", hash = "sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799"},
{file = "distro-1.5.0.tar.gz", hash = "sha256:0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92"},
]
django = [
{file = "Django-2.2.16-py3-none-any.whl", hash = "sha256:83ced795a0f239f41d8ecabf51cc5fad4b97462a6008dc12e5af3cb9288724ec"},
{file = "Django-2.2.16.tar.gz", hash = "sha256:62cf45e5ee425c52e411c0742e641a6588b7e8af0d2c274a27940931b2786594"},
@ -1176,6 +1392,17 @@ django-tools = [
{file = "django-tools-0.46.1.tar.gz", hash = "sha256:0a289c230d908417a0a72d1a7884ebc0508894b1ac7be888ed333170d4c97291"},
{file = "django_tools-0.46.1-py3-none-any.whl", hash = "sha256:e10c13b382b14ecfb589fd194719d44210a26a542869cbb298e0c2a1ede7f90d"},
]
docker = [
{file = "docker-4.3.1-py2.py3-none-any.whl", hash = "sha256:13966471e8bc23b36bfb3a6fb4ab75043a5ef1dac86516274777576bed3b9828"},
{file = "docker-4.3.1.tar.gz", hash = "sha256:bad94b8dd001a8a4af19ce4becc17f41b09f228173ffe6a4e0355389eef142f2"},
]
docker-compose = [
{file = "docker-compose-1.27.4.tar.gz", hash = "sha256:5a5690f24c27d4b43dcbe6b3fae91ba680713208e99ee863352b3bae37bcaa83"},
{file = "docker_compose-1.27.4-py2.py3-none-any.whl", hash = "sha256:84ca2edad226435e3a378ea24ca2ca4e1a77cc7c8de057e2812124c6dcb55147"},
]
dockerpty = [
{file = "dockerpty-0.4.1.tar.gz", hash = "sha256:69a9d69d573a0daa31bcd1c0774eeed5c15c295fe719c61aca550ed1393156ce"},
]
docopt = [
{file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"},
]
@ -1228,6 +1455,10 @@ jeepney = [
{file = "jeepney-0.4.3-py3-none-any.whl", hash = "sha256:d6c6b49683446d2407d2fe3acb7a368a77ff063f9182fe427da15d622adc24cf"},
{file = "jeepney-0.4.3.tar.gz", hash = "sha256:3479b861cc2b6407de5188695fa1a8d57e5072d7059322469b62628869b8e36e"},
]
jsonschema = [
{file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
{file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
]
keyring = [
{file = "keyring-21.4.0-py3-none-any.whl", hash = "sha256:4e34ea2fdec90c1c43d6610b5a5fafa1b9097db1802948e90caf5763974b8f8d"},
{file = "keyring-21.4.0.tar.gz", hash = "sha256:9aeadd006a852b78f4b4ef7c7556c2774d2432bbef8ee538a3e9089ac8b11466"},
@ -1251,22 +1482,61 @@ packaging = [
{file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"},
{file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"},
]
paramiko = [
{file = "paramiko-2.7.2-py2.py3-none-any.whl", hash = "sha256:4f3e316fef2ac628b05097a637af35685183111d4bc1b5979bd397c2ab7b5898"},
{file = "paramiko-2.7.2.tar.gz", hash = "sha256:7f36f4ba2c0d81d219f4595e35f70d56cc94f9ac40a6acdf51d6ca210ce65035"},
]
pkginfo = [
{file = "pkginfo-1.5.0.1-py2.py3-none-any.whl", hash = "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"},
{file = "pkginfo-1.5.0.1.tar.gz", hash = "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb"},
{file = "pkginfo-1.6.0-py2.py3-none-any.whl", hash = "sha256:78d032b5888ec06d7f9d18fbf8c0549a6a3477081b34cb769119a07183624fc1"},
{file = "pkginfo-1.6.0.tar.gz", hash = "sha256:dd008e95b13141ddd05d7e8881f0c0366a998ab90b25c2db794a1714b71583cc"},
]
pluggy = [
{file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
{file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
]
poetry-publish = [
{file = "poetry-publish-0.3.2.tar.gz", hash = "sha256:28dd696f0c0948f9fea3cbd203e9971e41b8623ca65200e5ecac347a21c5a911"},
{file = "poetry_publish-0.3.2-py3-none-any.whl", hash = "sha256:b388b4d506ae0110642768419a1167412bbb6b72d5fe7df7cab9b26627eea604"},
{file = "poetry-publish-0.4.0.tar.gz", hash = "sha256:9936ac587d9b94fa735ef53226f5f21242c8ecb0321195cc3c5cc55d4fda4bae"},
{file = "poetry_publish-0.4.0-py3-none-any.whl", hash = "sha256:de449fe0ff24f753e2d62e7dc7812b328b32df6fd3f3e6e84ec3d8cf352239f5"},
]
pprintpp = [
{file = "pprintpp-0.4.0-py2.py3-none-any.whl", hash = "sha256:b6b4dcdd0c0c0d75e4d7b2f21a9e933e5b2ce62b26e1a54537f9651ae5a5c01d"},
{file = "pprintpp-0.4.0.tar.gz", hash = "sha256:ea826108e2c7f49dc6d66c752973c3fc9749142a798d6b254e1e301cfdbc6403"},
]
psycopg2-binary = [
{file = "psycopg2-binary-2.8.6.tar.gz", hash = "sha256:11b9c0ebce097180129e422379b824ae21c8f2a6596b159c7659e2e5a00e1aa0"},
{file = "psycopg2_binary-2.8.6-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:d14b140a4439d816e3b1229a4a525df917d6ea22a0771a2a78332273fd9528a4"},
{file = "psycopg2_binary-2.8.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1fabed9ea2acc4efe4671b92c669a213db744d2af8a9fc5d69a8e9bc14b7a9db"},
{file = "psycopg2_binary-2.8.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f5ab93a2cb2d8338b1674be43b442a7f544a0971da062a5da774ed40587f18f5"},
{file = "psycopg2_binary-2.8.6-cp27-cp27m-win32.whl", hash = "sha256:b4afc542c0ac0db720cf516dd20c0846f71c248d2b3d21013aa0d4ef9c71ca25"},
{file = "psycopg2_binary-2.8.6-cp27-cp27m-win_amd64.whl", hash = "sha256:e74a55f6bad0e7d3968399deb50f61f4db1926acf4a6d83beaaa7df986f48b1c"},
{file = "psycopg2_binary-2.8.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:0deac2af1a587ae12836aa07970f5cb91964f05a7c6cdb69d8425ff4c15d4e2c"},
{file = "psycopg2_binary-2.8.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ad20d2eb875aaa1ea6d0f2916949f5c08a19c74d05b16ce6ebf6d24f2c9f75d1"},
{file = "psycopg2_binary-2.8.6-cp34-cp34m-win32.whl", hash = "sha256:950bc22bb56ee6ff142a2cb9ee980b571dd0912b0334aa3fe0fe3788d860bea2"},
{file = "psycopg2_binary-2.8.6-cp34-cp34m-win_amd64.whl", hash = "sha256:b8a3715b3c4e604bcc94c90a825cd7f5635417453b253499664f784fc4da0152"},
{file = "psycopg2_binary-2.8.6-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:d1b4ab59e02d9008efe10ceabd0b31e79519da6fb67f7d8e8977118832d0f449"},
{file = "psycopg2_binary-2.8.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:ac0c682111fbf404525dfc0f18a8b5f11be52657d4f96e9fcb75daf4f3984859"},
{file = "psycopg2_binary-2.8.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7d92a09b788cbb1aec325af5fcba9fed7203897bbd9269d5691bb1e3bce29550"},
{file = "psycopg2_binary-2.8.6-cp35-cp35m-win32.whl", hash = "sha256:aaa4213c862f0ef00022751161df35804127b78adf4a2755b9f991a507e425fd"},
{file = "psycopg2_binary-2.8.6-cp35-cp35m-win_amd64.whl", hash = "sha256:c2507d796fca339c8fb03216364cca68d87e037c1f774977c8fc377627d01c71"},
{file = "psycopg2_binary-2.8.6-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:ee69dad2c7155756ad114c02db06002f4cded41132cc51378e57aad79cc8e4f4"},
{file = "psycopg2_binary-2.8.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:e82aba2188b9ba309fd8e271702bd0d0fc9148ae3150532bbb474f4590039ffb"},
{file = "psycopg2_binary-2.8.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d5227b229005a696cc67676e24c214740efd90b148de5733419ac9aaba3773da"},
{file = "psycopg2_binary-2.8.6-cp36-cp36m-win32.whl", hash = "sha256:a0eb43a07386c3f1f1ebb4dc7aafb13f67188eab896e7397aa1ee95a9c884eb2"},
{file = "psycopg2_binary-2.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:e1f57aa70d3f7cc6947fd88636a481638263ba04a742b4a37dd25c373e41491a"},
{file = "psycopg2_binary-2.8.6-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:833709a5c66ca52f1d21d41865a637223b368c0ee76ea54ca5bad6f2526c7679"},
{file = "psycopg2_binary-2.8.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ba28584e6bca48c59eecbf7efb1576ca214b47f05194646b081717fa628dfddf"},
{file = "psycopg2_binary-2.8.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6a32f3a4cb2f6e1a0b15215f448e8ce2da192fd4ff35084d80d5e39da683e79b"},
{file = "psycopg2_binary-2.8.6-cp37-cp37m-win32.whl", hash = "sha256:0e4dc3d5996760104746e6cfcdb519d9d2cd27c738296525d5867ea695774e67"},
{file = "psycopg2_binary-2.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:cec7e622ebc545dbb4564e483dd20e4e404da17ae07e06f3e780b2dacd5cee66"},
{file = "psycopg2_binary-2.8.6-cp38-cp38-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:ba381aec3a5dc29634f20692349d73f2d21f17653bda1decf0b52b11d694541f"},
{file = "psycopg2_binary-2.8.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:a0c50db33c32594305b0ef9abc0cb7db13de7621d2cadf8392a1d9b3c437ef77"},
{file = "psycopg2_binary-2.8.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2dac98e85565d5688e8ab7bdea5446674a83a3945a8f416ad0110018d1501b94"},
{file = "psycopg2_binary-2.8.6-cp38-cp38-win32.whl", hash = "sha256:bd1be66dde2b82f80afb9459fc618216753f67109b859a361cf7def5c7968729"},
{file = "psycopg2_binary-2.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:8cd0fb36c7412996859cb4606a35969dd01f4ea34d9812a141cd920c3b18be77"},
{file = "psycopg2_binary-2.8.6-cp39-cp39-macosx_10_9_x86_64.macosx_10_9_intel.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:89705f45ce07b2dfa806ee84439ec67c5d9a0ef20154e0e475e2b2ed392a5b83"},
{file = "psycopg2_binary-2.8.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:42ec1035841b389e8cc3692277a0bd81cdfe0b65d575a2c8862cec7a80e62e52"},
{file = "psycopg2_binary-2.8.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7312e931b90fe14f925729cde58022f5d034241918a5c4f9797cac62f6b3a9dd"},
]
py = [
{file = "py-1.9.0-py2.py3-none-any.whl", hash = "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2"},
{file = "py-1.9.0.tar.gz", hash = "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"},
@ -1287,10 +1557,33 @@ pygments = [
{file = "Pygments-2.7.1-py3-none-any.whl", hash = "sha256:307543fe65c0947b126e83dd5a61bd8acbd84abec11f43caebaf5534cbc17998"},
{file = "Pygments-2.7.1.tar.gz", hash = "sha256:926c3f319eda178d1bd90851e4317e6d8cdb5e292a3386aac9bd75eca29cf9c7"},
]
pynacl = [
{file = "PyNaCl-1.4.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:ea6841bc3a76fa4942ce00f3bda7d436fda21e2d91602b9e21b7ca9ecab8f3ff"},
{file = "PyNaCl-1.4.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:d452a6746f0a7e11121e64625109bc4468fc3100452817001dbe018bb8b08514"},
{file = "PyNaCl-1.4.0-cp27-cp27m-win32.whl", hash = "sha256:2fe0fc5a2480361dcaf4e6e7cea00e078fcda07ba45f811b167e3f99e8cff574"},
{file = "PyNaCl-1.4.0-cp27-cp27m-win_amd64.whl", hash = "sha256:f8851ab9041756003119368c1e6cd0b9c631f46d686b3904b18c0139f4419f80"},
{file = "PyNaCl-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:7757ae33dae81c300487591c68790dfb5145c7d03324000433d9a2c141f82af7"},
{file = "PyNaCl-1.4.0-cp35-abi3-macosx_10_10_x86_64.whl", hash = "sha256:757250ddb3bff1eecd7e41e65f7f833a8405fede0194319f87899690624f2122"},
{file = "PyNaCl-1.4.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:30f9b96db44e09b3304f9ea95079b1b7316b2b4f3744fe3aaecccd95d547063d"},
{file = "PyNaCl-1.4.0-cp35-abi3-win32.whl", hash = "sha256:4e10569f8cbed81cb7526ae137049759d2a8d57726d52c1a000a3ce366779634"},
{file = "PyNaCl-1.4.0-cp35-abi3-win_amd64.whl", hash = "sha256:c914f78da4953b33d4685e3cdc7ce63401247a21425c16a39760e282075ac4a6"},
{file = "PyNaCl-1.4.0-cp35-cp35m-win32.whl", hash = "sha256:06cbb4d9b2c4bd3c8dc0d267416aaed79906e7b33f114ddbf0911969794b1cc4"},
{file = "PyNaCl-1.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:511d269ee845037b95c9781aa702f90ccc36036f95d0f31373a6a79bd8242e25"},
{file = "PyNaCl-1.4.0-cp36-cp36m-win32.whl", hash = "sha256:11335f09060af52c97137d4ac54285bcb7df0cef29014a1a4efe64ac065434c4"},
{file = "PyNaCl-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:cd401ccbc2a249a47a3a1724c2918fcd04be1f7b54eb2a5a71ff915db0ac51c6"},
{file = "PyNaCl-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:8122ba5f2a2169ca5da936b2e5a511740ffb73979381b4229d9188f6dcb22f1f"},
{file = "PyNaCl-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:537a7ccbea22905a0ab36ea58577b39d1fa9b1884869d173b5cf111f006f689f"},
{file = "PyNaCl-1.4.0-cp38-cp38-win32.whl", hash = "sha256:9c4a7ea4fb81536c1b1f5cc44d54a296f96ae78c1ebd2311bd0b60be45a48d96"},
{file = "PyNaCl-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7c6092102219f59ff29788860ccb021e80fffd953920c4a8653889c029b2d420"},
{file = "PyNaCl-1.4.0.tar.gz", hash = "sha256:54e9a2c849c742006516ad56a88f5c74bf2ce92c9f67435187c3c5953b346505"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
{file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
]
pyrsistent = [
{file = "pyrsistent-0.17.3.tar.gz", hash = "sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"},
]
pytest = [
{file = "pytest-6.1.1-py3-none-any.whl", hash = "sha256:7a8190790c17d79a11f847fba0b004ee9a8122582ebff4729a082c109e81a4c9"},
{file = "pytest-6.1.1.tar.gz", hash = "sha256:8f593023c1a0f916110285b6efd7f99db07d59546e3d8c36fc60e2ab05d3be92"},
@ -1308,8 +1601,12 @@ pytest-randomly = [
{file = "pytest_randomly-3.4.1-py3-none-any.whl", hash = "sha256:2c4df1390db72a33a4f44fac0c780e7883cd5968238efa2a2bdbdd54e3fc6681"},
]
python-creole = [
{file = "python-creole-1.4.7.tar.gz", hash = "sha256:eb27bc3f31a4dcd896ab47098c283fed738993be1c1d91b3e33cbdf31e85910d"},
{file = "python_creole-1.4.7-py3-none-any.whl", hash = "sha256:9f7c59b16a07cd26de971b5bc6e648e4ce8f60c926f0d65ef33b3f819cc04b6e"},
{file = "python-creole-1.4.8.tar.gz", hash = "sha256:ea3a6d4db3fc028fd4fe524c8ff1080181fdc3efa8aacacc7f55e136ac7abb1a"},
{file = "python_creole-1.4.8-py3-none-any.whl", hash = "sha256:b1c509f559457321a0228b12621261ff3a53316eb537892ac70e23193cb6cb85"},
]
python-dotenv = [
{file = "python-dotenv-0.14.0.tar.gz", hash = "sha256:8c10c99a1b25d9a68058a1ad6f90381a62ba68230ca93966882a4dbc3bc9c33d"},
{file = "python_dotenv-0.14.0-py2.py3-none-any.whl", hash = "sha256:c10863aee750ad720f4f43436565e4c1698798d763b63234fb5021b6c616e423"},
]
pytz = [
{file = "pytz-2020.1-py2.py3-none-any.whl", hash = "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed"},
@ -1319,6 +1616,20 @@ pyupgrade = [
{file = "pyupgrade-2.7.2-py2.py3-none-any.whl", hash = "sha256:24cbd268be09c3df8ab431dfb31d7c84dee7adccfa27b8af4443386484ad736d"},
{file = "pyupgrade-2.7.2.tar.gz", hash = "sha256:44df36f581fa4c61f599993595c23a46d79e4f67e3768aeaf789e42422b94900"},
]
pywin32 = [
{file = "pywin32-227-cp27-cp27m-win32.whl", hash = "sha256:371fcc39416d736401f0274dd64c2302728c9e034808e37381b5e1b22be4a6b0"},
{file = "pywin32-227-cp27-cp27m-win_amd64.whl", hash = "sha256:4cdad3e84191194ea6d0dd1b1b9bdda574ff563177d2adf2b4efec2a244fa116"},
{file = "pywin32-227-cp35-cp35m-win32.whl", hash = "sha256:f4c5be1a293bae0076d93c88f37ee8da68136744588bc5e2be2f299a34ceb7aa"},
{file = "pywin32-227-cp35-cp35m-win_amd64.whl", hash = "sha256:a929a4af626e530383a579431b70e512e736e9588106715215bf685a3ea508d4"},
{file = "pywin32-227-cp36-cp36m-win32.whl", hash = "sha256:300a2db938e98c3e7e2093e4491439e62287d0d493fe07cce110db070b54c0be"},
{file = "pywin32-227-cp36-cp36m-win_amd64.whl", hash = "sha256:9b31e009564fb95db160f154e2aa195ed66bcc4c058ed72850d047141b36f3a2"},
{file = "pywin32-227-cp37-cp37m-win32.whl", hash = "sha256:47a3c7551376a865dd8d095a98deba954a98f326c6fe3c72d8726ca6e6b15507"},
{file = "pywin32-227-cp37-cp37m-win_amd64.whl", hash = "sha256:31f88a89139cb2adc40f8f0e65ee56a8c585f629974f9e07622ba80199057511"},
{file = "pywin32-227-cp38-cp38-win32.whl", hash = "sha256:7f18199fbf29ca99dff10e1f09451582ae9e372a892ff03a28528a24d55875bc"},
{file = "pywin32-227-cp38-cp38-win_amd64.whl", hash = "sha256:7c1ae32c489dc012930787f06244426f8356e129184a02c25aef163917ce158e"},
{file = "pywin32-227-cp39-cp39-win32.whl", hash = "sha256:c054c52ba46e7eb6b7d7dfae4dbd987a1bb48ee86debe3f245a2884ece46e295"},
{file = "pywin32-227-cp39-cp39-win_amd64.whl", hash = "sha256:f27cec5e7f588c3d1051651830ecc00294f90728d19c3bf6916e6dba93ea357c"},
]
pywin32-ctypes = [
{file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"},
{file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"},
@ -1368,6 +1679,10 @@ tablib = [
{file = "tablib-2.0.0-py3-none-any.whl", hash = "sha256:c5a77c96ad306d5b380def1309d521ad5e98b4f83726f84857ad87e142d13279"},
{file = "tablib-2.0.0.tar.gz", hash = "sha256:8cc2fa10bc37219ac5e76850eb7fbd50de313c7a1a7895c44af2a8dd206b7be7"},
]
texttable = [
{file = "texttable-1.6.3-py2.py3-none-any.whl", hash = "sha256:f802f2ef8459058736264210f716c757cbf85007a30886d8541aa8c3404f1dda"},
{file = "texttable-1.6.3.tar.gz", hash = "sha256:ce0faf21aa77d806bbff22b107cc22cce68dc9438f97a2df32c93e9afa4ce436"},
]
tokenize-rt = [
{file = "tokenize_rt-4.0.0-py2.py3-none-any.whl", hash = "sha256:c47d3bd00857c24edefccdd6dc99c19d4ceed77c5971a3e2fac007fb0c02e39d"},
{file = "tokenize_rt-4.0.0.tar.gz", hash = "sha256:07d5f88b6a953612159b160129bcf9425677c8d062b0cb83250968ba803e1c64"},
@ -1389,8 +1704,8 @@ twine = [
{file = "twine-3.2.0.tar.gz", hash = "sha256:34352fd52ec3b9d29837e6072d5a2a7c6fe4290e97bba46bb8d478b5c598f7ab"},
]
urllib3 = [
{file = "urllib3-1.25.10-py2.py3-none-any.whl", hash = "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461"},
{file = "urllib3-1.25.10.tar.gz", hash = "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a"},
{file = "urllib3-1.25.11-py2.py3-none-any.whl", hash = "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e"},
{file = "urllib3-1.25.11.tar.gz", hash = "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2"},
]
virtualenv = [
{file = "virtualenv-20.0.35-py2.py3-none-any.whl", hash = "sha256:0ebc633426d7468664067309842c81edab11ae97fcaf27e8ad7f5748c89b431b"},
@ -1400,6 +1715,10 @@ webencodings = [
{file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
{file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
]
websocket-client = [
{file = "websocket_client-0.57.0-py2.py3-none-any.whl", hash = "sha256:0fc45c961324d79c781bab301359d5a1b00b13ad1b10415a4780229ef71a5549"},
{file = "websocket_client-0.57.0.tar.gz", hash = "sha256:d735b91d6d1692a6a181f2a8c9e0238e5f6373356f561bb9dc4c7af36f452010"},
]
xlrd = [
{file = "xlrd-1.2.0-py2.py3-none-any.whl", hash = "sha256:e551fb498759fa3a5384a94ccd4c3c02eb7c00ea424426e212ac0c57be9dfbde"},
{file = "xlrd-1.2.0.tar.gz", hash = "sha256:546eb36cee8db40c3eaa46c351e67ffee6eeb5fa2650b71bc4c758a29a1b29b2"},

Wyświetl plik

@ -52,6 +52,12 @@ bx_py_utils = "*" # https://github.com/boxine/bx_py_utils
django-tagulous = "*" # https://github.com/radiac/django-tagulous
django-admin-sortable2 = "*" # https://github.com/jrief/django-admin-sortable2
requests = "*" # https://github.com/psf/requests
docker-compose = { version = "*", optional = true } # install via: poetry install --extras "docker"
psycopg2-binary = { version = "*", optional = true } # install via: poetry install --extras "postgres"
[tool.poetry.extras]
docker = ["docker-compose"]
postgres = ["psycopg2-binary"]
[tool.poetry.dev-dependencies]
poetry-publish = "*" # https://github.com/jedie/poetry-publish