├── .gitignore ├── Makefile ├── PyCon_2021.zip ├── README.md ├── admin ├── app.py ├── templates │ └── individual_edit.html └── views │ ├── income.py │ └── individual.py ├── api ├── __init__.py ├── app.py ├── handlers.py └── individ_info.py ├── db ├── __init__.py ├── individ.py └── utils │ ├── __init__.py │ ├── base.py │ ├── db_tools.py │ ├── init-db.sql │ ├── settings.py │ └── utils.py ├── docker-compose.yml ├── mypy.ini ├── poetry.lock ├── pyproject.toml └── setup.cfg /.gitignore: -------------------------------------------------------------------------------- 1 | /.venv/ 2 | /__pycache__/ 3 | /.mypy_cache/ 4 | /.idea/ -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | PYTHON_DIR := ~/.pyenv/versions/3.7.10/bin/python3 2 | VENV = .venv 3 | DB := postgresql://postgres:postgres@localhost/db 4 | 5 | CODE = \ 6 | admin \ 7 | api \ 8 | db 9 | 10 | JOBS ?= 4 11 | 12 | init: 13 | $(PYTHON_DIR) -m venv .venv 14 | $(VENV)/bin/python -m pip install --upgrade pip 15 | $(VENV)/bin/python -m pip install poetry 16 | $(VENV)/bin/poetry install 17 | 18 | prepare-db: 19 | docker-compose down -v 20 | docker-compose up -d db 21 | 22 | run-db: 23 | DB_URL=$(DB) python db/utils/db_tools.py 24 | 25 | run-admin: 26 | DB_URL=$(DB) python admin/app.py 27 | 28 | run-api: 29 | DB_URL=$(DB) python api/app.py 30 | 31 | lint: 32 | $(VENV)/bin/black --check $(CODE) 33 | $(VENV)/bin/flake8 --jobs $(JOBS) --statistics $(CODE) 34 | $(VENV)/bin/mypy --config-file mypy.ini $(CODE) 35 | 36 | pretty: 37 | $(VENV)/bin/black --target-version py37 --skip-string-normalization $(CODE) 38 | $(VENV)/bin/isort $(CODE) 39 | $(VENV)/bin/unify --in-place --recursive $(CODE) 40 | -------------------------------------------------------------------------------- /PyCon_2021.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cormac0221/pycon_2021/57f75d64e8b536800a5da77d2e2745244287654a/PyCon_2021.zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Репозиторий проекта МК Pycon 2021 "Flask-Admin, SQLAlchemy и FastAPI" 2 | 3 | ## Подготовка к МК 4 | Что потребуется: 5 | 1. Компьютер с MacOS или Linux 6 | 2. Доступ в интернет 7 | 3. Установить Docker 8 | 9 | Порядок действий для подготовки к МК: 10 | 1. Установить Python 3.7.10 через pyenv: https://github.com/pyenv/pyenv 11 | 2. Запустить команду: `make init` 12 | 13 | ### Начало МК 14 | Перед началом МК запустите Docker и введите команду: 15 | 16 | `. .venv/bin/activate` 17 | 18 | Затем `make prepare-db` 19 | 20 | 21 | При ошибке импортов экспортируйте PYTHONPATH: 22 | 23 | `export PYTHONPATH=.` 24 | -------------------------------------------------------------------------------- /admin/app.py: -------------------------------------------------------------------------------- 1 | from typing import cast 2 | 3 | from flask import Flask 4 | from flask_admin import Admin, AdminIndexView 5 | 6 | from db import current_session 7 | from db.individ import Individual, TaxableIncome 8 | 9 | 10 | def create_app() -> Flask: 11 | app = Flask(__name__) 12 | 13 | app.config['FLASK_ADMIN_SWATCH'] = 'Cosmo' 14 | app.secret_key = 'kek' 15 | 16 | admin = Admin(app, name='2 НДФЛ', index_view=AdminIndexView(name='📃', url='/'), template_mode='bootstrap4') 17 | 18 | from admin.views.income import IncomeView 19 | from admin.views.individual import IndividualView 20 | 21 | admin.add_view(IndividualView(Individual, current_session, name='Физлицо')) 22 | admin.add_view(IncomeView(TaxableIncome, current_session, name='Облагаемый доход')) 23 | 24 | return cast(Flask, admin.app) 25 | 26 | 27 | if __name__ == '__main__': 28 | from db import DBSettings 29 | 30 | DBSettings().setup_db() 31 | 32 | app = create_app() 33 | app.run(host='0.0.0.0', port=5000, debug=True) 34 | -------------------------------------------------------------------------------- /admin/templates/individual_edit.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/model/edit.html" %} 2 | 3 | {% block title %} 4 | Физлицо / {{ model.name }} / {{ model.inn }} 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /admin/views/income.py: -------------------------------------------------------------------------------- 1 | from typing import Any, cast 2 | 3 | from flask_admin.contrib.sqla import ModelView 4 | from flask_admin.model.form import InlineFormAdmin 5 | from markupsafe import Markup 6 | 7 | from db import TaxableIncome 8 | 9 | 10 | def individ_formatter(view: 'IncomeView', context: Any, model: TaxableIncome, name: str) -> Markup: 11 | return cast(Markup, f'{model.individual.name} {model.individual.family_name} {model.individual.forname}') 12 | 13 | 14 | class IncomeView(ModelView): 15 | can_edit = True 16 | can_create = True 17 | can_delete = True 18 | can_view_details = True 19 | 20 | form_columns = ['individual', 'month', 'sum'] 21 | 22 | column_sortable_list = ['created_at', 'month'] 23 | 24 | column_formatters = {'individual': individ_formatter} 25 | 26 | 27 | class IncomeInlineAdmin(InlineFormAdmin): 28 | form_excluded_columns = ['individual', 'individual_id', 'created_at'] 29 | -------------------------------------------------------------------------------- /admin/views/individual.py: -------------------------------------------------------------------------------- 1 | from flask_admin.contrib.sqla import ModelView 2 | 3 | from admin.views.income import IncomeInlineAdmin 4 | from db.individ import TaxableIncome 5 | 6 | 7 | class IndividualView(ModelView): 8 | can_edit = True 9 | can_create = True 10 | can_delete = True 11 | can_view_details = True 12 | 13 | form_columns = ['name', 'family_name', 'forname', 'birth_date', 'inn'] 14 | 15 | column_sortable_list = ['created_at'] 16 | 17 | edit_template = 'individual_edit.html' 18 | 19 | inline_models = (IncomeInlineAdmin(TaxableIncome),) 20 | -------------------------------------------------------------------------------- /api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cormac0221/pycon_2021/57f75d64e8b536800a5da77d2e2745244287654a/api/__init__.py -------------------------------------------------------------------------------- /api/app.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter, FastAPI 2 | 3 | from api.handlers import get_individ_info, get_readiness 4 | 5 | 6 | def create_app() -> FastAPI: 7 | app = FastAPI() 8 | 9 | router = APIRouter() 10 | router.add_api_route('/readiness', get_readiness, methods=['GET']) 11 | app.include_router(router) 12 | 13 | individ_router = APIRouter() 14 | individ_router.add_api_route('/{inn}/info', get_individ_info, methods=['GET']) 15 | app.include_router(individ_router, prefix='/individ') 16 | 17 | return app 18 | 19 | 20 | if __name__ == '__main__': 21 | import uvicorn 22 | 23 | from db import DBSettings 24 | 25 | DBSettings().setup_db() 26 | 27 | app = create_app() 28 | uvicorn.run(app, host='0.0.0.0', port=8000, debug=True) 29 | -------------------------------------------------------------------------------- /api/handlers.py: -------------------------------------------------------------------------------- 1 | from http import HTTPStatus 2 | from typing import Union 3 | 4 | from starlette.responses import Response 5 | 6 | from api import individ_info 7 | 8 | 9 | def get_readiness() -> Response: 10 | return Response(content='Ok', status_code=HTTPStatus.OK) 11 | 12 | 13 | def get_individ_info(inn: int) -> Union[Response, individ_info.IndividInfo]: 14 | try: 15 | return individ_info.get_individ_info(inn=inn) 16 | except individ_info.UserNotFoundError: 17 | return Response(status_code=HTTPStatus.NOT_FOUND) 18 | -------------------------------------------------------------------------------- /api/individ_info.py: -------------------------------------------------------------------------------- 1 | from typing import List, Optional 2 | 3 | from pydantic import BaseModel 4 | from sqlalchemy.orm import joinedload 5 | 6 | from admin.app import Individual 7 | from db import create_session 8 | 9 | 10 | class Income(BaseModel): 11 | month: str 12 | sum: int 13 | 14 | 15 | class IndividInfo(BaseModel): 16 | name: str 17 | family_name: str 18 | forname: Optional[str] 19 | inn: int 20 | 21 | income: List[Income] 22 | 23 | 24 | class UserNotFoundError(Exception): 25 | pass 26 | 27 | 28 | def get_individ_info(inn: int) -> IndividInfo: 29 | with create_session() as session: 30 | individ = ( 31 | session.query(Individual).options(joinedload(Individual.income)).filter(Individual.inn == inn) 32 | ).one_or_none() 33 | 34 | if individ is None: 35 | raise UserNotFoundError 36 | 37 | incomes = [] 38 | for income in individ.income: 39 | incomes.append(Income(month=income.month, sum=income.sum)) 40 | 41 | return IndividInfo( 42 | inn=individ.inn, name=individ.name, family_name=individ.family_name, forname=individ.forname, income=incomes 43 | ) 44 | -------------------------------------------------------------------------------- /db/__init__.py: -------------------------------------------------------------------------------- 1 | from db.individ import Individual, TaxableIncome 2 | from db.utils.base import current_session, metadata 3 | from db.utils.settings import DBSettings 4 | from db.utils.utils import create_session 5 | -------------------------------------------------------------------------------- /db/individ.py: -------------------------------------------------------------------------------- 1 | import sqlalchemy as sa 2 | import sqlalchemy.orm as so 3 | 4 | from db.utils.base import BaseTable 5 | 6 | 7 | class Individual(BaseTable): 8 | """Данные о физическом лице""" 9 | 10 | name = sa.Column(sa.Text, nullable=False, doc='Имя') 11 | family_name = sa.Column(sa.Text, nullable=False, doc='Фамилия') 12 | forname = sa.Column(sa.Text, doc='Отчество') 13 | birth_date = sa.Column(sa.Date, nullable=False, doc='Дата рождения') 14 | inn = sa.Column(sa.Integer, nullable=False, unique=True, doc='ИНН в РФ') 15 | 16 | 17 | class TaxableIncome(BaseTable): 18 | """Данные о доходах""" 19 | 20 | month = sa.Column(sa.Text, nullable=False, doc='Месяц') 21 | sum = sa.Column(sa.Integer, nullable=False, doc='Сумма дохода') 22 | 23 | individual_id = sa.Column( 24 | sa.Integer(), sa.ForeignKey(Individual.id, ondelete='CASCADE'), index=True, nullable=False 25 | ) 26 | individual = so.relationship(Individual, backref='income') 27 | -------------------------------------------------------------------------------- /db/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cormac0221/pycon_2021/57f75d64e8b536800a5da77d2e2745244287654a/db/utils/__init__.py -------------------------------------------------------------------------------- /db/utils/base.py: -------------------------------------------------------------------------------- 1 | import re 2 | from typing import Any, List, Optional, Tuple, Type, Union 3 | 4 | import sqlalchemy as sa 5 | from sqlalchemy import MetaData 6 | from sqlalchemy.ext.declarative import as_declarative, declared_attr 7 | from sqlalchemy.orm import Mapper, Query, Session, scoped_session, sessionmaker 8 | from sqlalchemy_utils import generic_repr 9 | 10 | convention = { 11 | 'ix': 'ix_%(column_0_label)s', 12 | 'uq': 'uq_%(table_name)s_%(column_0_name)s', 13 | 'ck': 'ck_%(table_name)s_%(constraint_name)s', 14 | 'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s', 15 | 'pk': 'pk_%(table_name)s', 16 | } 17 | metadata = MetaData(naming_convention=convention) 18 | 19 | 20 | def classname_to_tablename(name: str) -> str: 21 | result: List[str] = [] 22 | 23 | last_index = 0 24 | for match in re.finditer(r'(?P[A-Z]+(?![a-z]))|(?P[A-Za-z][a-z]+)|(?P\d+)', name): 25 | if match.start() != last_index: 26 | raise ValueError(f'Could not translate class name "{name}" to table name') 27 | 28 | last_index = match.end() 29 | result.append(match.group().lower()) 30 | 31 | return '_'.join(result) 32 | 33 | 34 | @as_declarative(metadata=metadata) 35 | @generic_repr 36 | class BaseTable: 37 | @declared_attr 38 | def __tablename__(cls) -> Optional[str]: # noqa 39 | return classname_to_tablename(cls.__name__) # type: ignore #pylint: disable=E1101 40 | 41 | id = sa.Column(sa.Integer(), primary_key=True) 42 | created_at = sa.Column(sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()) 43 | 44 | 45 | def _get_query_cls(mapper: Union[Tuple[Type[Any], ...], Mapper], session: Session) -> Query: 46 | if mapper: 47 | m = mapper 48 | if isinstance(m, tuple): 49 | m = mapper[0] # type: ignore 50 | if isinstance(m, Mapper): 51 | m = m.entity 52 | 53 | try: 54 | return m.__query_cls__(mapper, session) # type: ignore 55 | except AttributeError: 56 | pass 57 | 58 | return Query(mapper, session) 59 | 60 | 61 | current_session = scoped_session(sessionmaker()) 62 | -------------------------------------------------------------------------------- /db/utils/db_tools.py: -------------------------------------------------------------------------------- 1 | from typer import echo 2 | 3 | 4 | def create_all() -> None: 5 | from db import metadata 6 | from db.utils.settings import DBSettings 7 | 8 | db_settings = DBSettings() 9 | 10 | db_settings.setup_db() 11 | echo('creating') 12 | metadata.create_all() 13 | echo('complete!') 14 | 15 | 16 | if __name__ == '__main__': 17 | create_all() 18 | -------------------------------------------------------------------------------- /db/utils/init-db.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE db; 2 | GRANT ALL PRIVILEGES ON DATABASE db TO postgres; 3 | -------------------------------------------------------------------------------- /db/utils/settings.py: -------------------------------------------------------------------------------- 1 | import json 2 | import re 3 | import socket 4 | from functools import partial 5 | from typing import Any, Dict 6 | 7 | from pydantic import BaseModel, BaseSettings 8 | from pydantic.json import custom_pydantic_encoder 9 | from sqlalchemy import create_engine 10 | from sqlalchemy.engine import Engine 11 | 12 | from db import metadata 13 | 14 | JsonSerializer = partial( 15 | json.dumps, 16 | ensure_ascii=False, 17 | indent=True, 18 | default=partial(custom_pydantic_encoder, {type(re.compile('')): lambda v: v.pattern}), 19 | ) 20 | 21 | 22 | class BaseDBModel(BaseModel): 23 | url: str 24 | engine_config: Dict[str, Any] = {} 25 | echo: int = 0 26 | 27 | @property 28 | def engine(self) -> Engine: 29 | self.engine_config.setdefault('json_serializer', JsonSerializer) 30 | self.engine_config.setdefault('executemany_mode', 'values') 31 | self.engine_config.setdefault('connect_args', {}) 32 | self.engine_config['connect_args'].setdefault('application_name', socket.gethostname()) 33 | return create_engine(str(self.url), **self.engine_config, echo=self.echo) 34 | 35 | def setup_db(self) -> None: 36 | pass 37 | 38 | 39 | class DBSettings(BaseDBModel, BaseSettings): 40 | class Config: 41 | env_prefix = 'DB_' 42 | 43 | def setup_db(self) -> None: 44 | metadata.bind = self.engine 45 | -------------------------------------------------------------------------------- /db/utils/utils.py: -------------------------------------------------------------------------------- 1 | from contextlib import contextmanager 2 | from typing import Any, Iterator 3 | 4 | from sqlalchemy.orm import Session 5 | 6 | 7 | @contextmanager 8 | def create_session(session: Any = Session, **kwargs: Any) -> Iterator[Session]: 9 | """Provide a transactional scope around a series of operations.""" 10 | new_session = session(**kwargs) 11 | try: 12 | yield new_session 13 | new_session.commit() 14 | except Exception: 15 | new_session.rollback() 16 | raise 17 | finally: 18 | new_session.close() 19 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3.4" 2 | 3 | services: 4 | db: 5 | image: postgres:11.6 6 | command: ["-c", "fsync=${FSYNC:-off}"] 7 | volumes: 8 | - ./db/utils/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql 9 | environment: 10 | POSTGRES_USER: postgres 11 | POSTGRES_PASSWORD: postgres 12 | ports: 13 | - 5432:5432 14 | -------------------------------------------------------------------------------- /mypy.ini: -------------------------------------------------------------------------------- 1 | [mypy] 2 | exclude = versions 3 | plugins = pydantic.mypy, sqlmypy 4 | python_version = 3.7 5 | ignore_missing_imports = True 6 | warn_unused_configs = True 7 | show_error_codes = true 8 | show_column_numbers = true 9 | pretty = True 10 | 11 | check_untyped_defs = true 12 | strict_optional = true 13 | disallow_any_generics = true 14 | disallow_incomplete_defs = true 15 | disallow_untyped_defs = true 16 | no_implicit_optional = true 17 | warn_unused_ignores = true 18 | warn_return_any = true 19 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "alchemy-mock" 3 | version = "0.4.3" 4 | description = "SQLAlchemy mock helpers." 5 | category = "dev" 6 | optional = false 7 | python-versions = "*" 8 | 9 | [package.dependencies] 10 | six = "*" 11 | sqlalchemy = "*" 12 | 13 | [[package]] 14 | name = "alembic" 15 | version = "1.5.8" 16 | description = "A database migration tool for SQLAlchemy." 17 | category = "main" 18 | optional = false 19 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" 20 | 21 | [package.dependencies] 22 | Mako = "*" 23 | python-dateutil = "*" 24 | python-editor = ">=0.3" 25 | SQLAlchemy = ">=1.3.0" 26 | 27 | [[package]] 28 | name = "allure-pytest" 29 | version = "2.9.43" 30 | description = "Allure pytest integration" 31 | category = "dev" 32 | optional = false 33 | python-versions = "*" 34 | 35 | [package.dependencies] 36 | allure-python-commons = "2.9.43" 37 | pytest = ">=4.5.0" 38 | six = ">=1.9.0" 39 | 40 | [[package]] 41 | name = "allure-python-commons" 42 | version = "2.9.43" 43 | description = "Common module for integrate allure with python-based frameworks" 44 | category = "dev" 45 | optional = false 46 | python-versions = "*" 47 | 48 | [package.dependencies] 49 | attrs = ">=16.0.0" 50 | pluggy = ">=0.4.0" 51 | six = ">=1.9.0" 52 | 53 | [[package]] 54 | name = "appdirs" 55 | version = "1.4.4" 56 | description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 57 | category = "dev" 58 | optional = false 59 | python-versions = "*" 60 | 61 | [[package]] 62 | name = "atomicwrites" 63 | version = "1.4.0" 64 | description = "Atomic file writes." 65 | category = "dev" 66 | optional = false 67 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 68 | 69 | [[package]] 70 | name = "attrs" 71 | version = "21.2.0" 72 | description = "Classes Without Boilerplate" 73 | category = "dev" 74 | optional = false 75 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 76 | 77 | [package.extras] 78 | dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] 79 | docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] 80 | tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] 81 | tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] 82 | 83 | [[package]] 84 | name = "black" 85 | version = "19.10b0" 86 | description = "The uncompromising code formatter." 87 | category = "dev" 88 | optional = false 89 | python-versions = ">=3.6" 90 | 91 | [package.dependencies] 92 | appdirs = "*" 93 | attrs = ">=18.1.0" 94 | click = ">=6.5" 95 | pathspec = ">=0.6,<1" 96 | regex = "*" 97 | toml = ">=0.9.4" 98 | typed-ast = ">=1.4.0" 99 | 100 | [package.extras] 101 | d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] 102 | 103 | [[package]] 104 | name = "cached-property" 105 | version = "1.5.2" 106 | description = "A decorator for caching properties in classes." 107 | category = "main" 108 | optional = false 109 | python-versions = "*" 110 | 111 | [[package]] 112 | name = "cachetools" 113 | version = "4.2.2" 114 | description = "Extensible memoizing collections and decorators" 115 | category = "main" 116 | optional = false 117 | python-versions = "~=3.5" 118 | 119 | [[package]] 120 | name = "certifi" 121 | version = "2021.5.30" 122 | description = "Python package for providing Mozilla's CA Bundle." 123 | category = "main" 124 | optional = false 125 | python-versions = "*" 126 | 127 | [[package]] 128 | name = "charset-normalizer" 129 | version = "2.0.4" 130 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 131 | category = "main" 132 | optional = false 133 | python-versions = ">=3.5.0" 134 | 135 | [package.extras] 136 | unicode_backport = ["unicodedata2"] 137 | 138 | [[package]] 139 | name = "click" 140 | version = "7.1.2" 141 | description = "Composable command line interface toolkit" 142 | category = "main" 143 | optional = false 144 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 145 | 146 | [[package]] 147 | name = "colorama" 148 | version = "0.4.4" 149 | description = "Cross-platform colored terminal text." 150 | category = "main" 151 | optional = false 152 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 153 | 154 | [[package]] 155 | name = "contextvars" 156 | version = "2.4" 157 | description = "PEP 567 Backport" 158 | category = "main" 159 | optional = false 160 | python-versions = "*" 161 | 162 | [package.dependencies] 163 | immutables = ">=0.9" 164 | 165 | [[package]] 166 | name = "dawg" 167 | version = "0.8.0" 168 | description = "Fast and memory efficient DAWG (DAFSA) for Python" 169 | category = "main" 170 | optional = false 171 | python-versions = "*" 172 | 173 | [[package]] 174 | name = "dawg-python" 175 | version = "0.7.2" 176 | description = "Pure-python reader for DAWGs (DAFSAs) created by dawgdic C++ library or DAWG Python extension." 177 | category = "main" 178 | optional = false 179 | python-versions = "*" 180 | 181 | [[package]] 182 | name = "deprecated" 183 | version = "1.2.12" 184 | description = "Python @deprecated decorator to deprecate old python classes, functions or methods." 185 | category = "main" 186 | optional = false 187 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 188 | 189 | [package.dependencies] 190 | wrapt = ">=1.10,<2" 191 | 192 | [package.extras] 193 | dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] 194 | 195 | [[package]] 196 | name = "docopt" 197 | version = "0.6.2" 198 | description = "Pythonic argument parser, that will make you smile" 199 | category = "main" 200 | optional = false 201 | python-versions = "*" 202 | 203 | [[package]] 204 | name = "eradicate" 205 | version = "2.0.0" 206 | description = "Removes commented-out code." 207 | category = "dev" 208 | optional = false 209 | python-versions = "*" 210 | 211 | [[package]] 212 | name = "execnet" 213 | version = "1.9.0" 214 | description = "execnet: rapid multi-Python deployment" 215 | category = "dev" 216 | optional = false 217 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 218 | 219 | [package.extras] 220 | testing = ["pre-commit"] 221 | 222 | [[package]] 223 | name = "expiringdict" 224 | version = "1.2.1" 225 | description = "Dictionary with auto-expiring values for caching purposes" 226 | category = "main" 227 | optional = false 228 | python-versions = "*" 229 | 230 | [package.extras] 231 | tests = ["dill", "coverage", "coveralls", "mock", "nose"] 232 | 233 | [[package]] 234 | name = "fakeredis" 235 | version = "1.6.0" 236 | description = "Fake implementation of redis API for testing purposes." 237 | category = "main" 238 | optional = false 239 | python-versions = ">=3.5" 240 | 241 | [package.dependencies] 242 | redis = "<3.6.0" 243 | six = ">=1.12" 244 | sortedcontainers = "*" 245 | 246 | [package.extras] 247 | aioredis = ["aioredis"] 248 | lua = ["lupa"] 249 | 250 | [[package]] 251 | name = "fastapi" 252 | version = "0.61.2" 253 | description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" 254 | category = "main" 255 | optional = false 256 | python-versions = ">=3.6" 257 | 258 | [package.dependencies] 259 | pydantic = ">=1.0.0,<2.0.0" 260 | starlette = "0.13.6" 261 | 262 | [package.extras] 263 | all = ["requests (>=2.24.0,<3.0.0)", "aiofiles (>=0.5.0,<0.6.0)", "jinja2 (>=2.11.2,<3.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "itsdangerous (>=1.1.0,<2.0.0)", "pyyaml (>=5.3.1,<6.0.0)", "graphene (>=2.1.8,<3.0.0)", "ujson (>=3.0.0,<4.0.0)", "orjson (>=3.2.1,<4.0.0)", "email_validator (>=1.1.1,<2.0.0)", "uvicorn (>=0.11.5,<0.12.0)", "async_exit_stack (>=1.0.1,<2.0.0)", "async_generator (>=1.10,<2.0.0)"] 264 | dev = ["python-jose[cryptography] (>=3.1.0,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "uvicorn (>=0.11.5,<0.12.0)", "graphene (>=2.1.8,<3.0.0)"] 265 | doc = ["mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=5.5.0,<6.0.0)", "markdown-include (>=0.5.1,<0.6.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.2.0)", "typer (>=0.3.0,<0.4.0)", "typer-cli (>=0.0.9,<0.0.10)", "pyyaml (>=5.3.1,<6.0.0)"] 266 | test = ["pytest (==5.4.3)", "pytest-cov (==2.10.0)", "pytest-asyncio (>=0.14.0,<0.15.0)", "mypy (==0.782)", "flake8 (>=3.8.3,<4.0.0)", "black (==19.10b0)", "isort (>=5.0.6,<6.0.0)", "requests (>=2.24.0,<3.0.0)", "httpx (>=0.14.0,<0.15.0)", "email_validator (>=1.1.1,<2.0.0)", "sqlalchemy (>=1.3.18,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "databases[sqlite] (>=0.3.2,<0.4.0)", "orjson (>=3.2.1,<4.0.0)", "async_exit_stack (>=1.0.1,<2.0.0)", "async_generator (>=1.10,<2.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "aiofiles (>=0.5.0,<0.6.0)", "flask (>=1.1.2,<2.0.0)"] 267 | 268 | [[package]] 269 | name = "fastapi-utils" 270 | version = "0.2.1" 271 | description = "Reusable utilities for FastAPI" 272 | category = "main" 273 | optional = false 274 | python-versions = ">=3.6,<4.0" 275 | 276 | [package.dependencies] 277 | fastapi = "*" 278 | pydantic = ">=1.0,<2.0" 279 | sqlalchemy = ">=1.3.12,<2.0.0" 280 | 281 | [[package]] 282 | name = "filelock" 283 | version = "3.0.12" 284 | description = "A platform independent file lock." 285 | category = "dev" 286 | optional = false 287 | python-versions = "*" 288 | 289 | [[package]] 290 | name = "flake8" 291 | version = "3.9.2" 292 | description = "the modular source code checker: pep8 pyflakes and co" 293 | category = "dev" 294 | optional = false 295 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" 296 | 297 | [package.dependencies] 298 | importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} 299 | mccabe = ">=0.6.0,<0.7.0" 300 | pycodestyle = ">=2.7.0,<2.8.0" 301 | pyflakes = ">=2.3.0,<2.4.0" 302 | 303 | [[package]] 304 | name = "flake8-awesome" 305 | version = "1.2.1" 306 | description = "Flake8 awesome plugins pack" 307 | category = "dev" 308 | optional = false 309 | python-versions = ">=3.6,<4.0" 310 | 311 | [package.dependencies] 312 | flake8 = "*" 313 | flake8-breakpoint = "*" 314 | flake8-builtins = "*" 315 | flake8-comprehensions = "*" 316 | flake8-eradicate = "*" 317 | flake8-if-expr = "*" 318 | flake8-isort = "*" 319 | flake8-logging-format = "*" 320 | flake8-print = "*" 321 | flake8-pytest = "*" 322 | flake8-pytest-style = ">=0.1.3" 323 | flake8-return = "*" 324 | pep8-naming = "*" 325 | 326 | [[package]] 327 | name = "flake8-breakpoint" 328 | version = "1.1.0" 329 | description = "Flake8 plugin that check forgotten breakpoints" 330 | category = "dev" 331 | optional = false 332 | python-versions = ">=3.6,<4.0" 333 | 334 | [package.dependencies] 335 | flake8-plugin-utils = ">=1.0,<2.0" 336 | 337 | [[package]] 338 | name = "flake8-builtins" 339 | version = "1.5.3" 340 | description = "Check for python builtins being used as variables or parameters." 341 | category = "dev" 342 | optional = false 343 | python-versions = "*" 344 | 345 | [package.dependencies] 346 | flake8 = "*" 347 | 348 | [package.extras] 349 | test = ["coverage", "coveralls", "mock", "pytest", "pytest-cov"] 350 | 351 | [[package]] 352 | name = "flake8-comprehensions" 353 | version = "3.6.1" 354 | description = "A flake8 plugin to help you write better list/set/dict comprehensions." 355 | category = "dev" 356 | optional = false 357 | python-versions = ">=3.6" 358 | 359 | [package.dependencies] 360 | flake8 = ">=3.0,<3.2.0 || >3.2.0,<4" 361 | importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} 362 | 363 | [[package]] 364 | name = "flake8-eradicate" 365 | version = "1.1.0" 366 | description = "Flake8 plugin to find commented out code" 367 | category = "dev" 368 | optional = false 369 | python-versions = ">=3.6,<4.0" 370 | 371 | [package.dependencies] 372 | attrs = "*" 373 | eradicate = ">=2.0,<3.0" 374 | flake8 = ">=3.5,<4.0" 375 | 376 | [[package]] 377 | name = "flake8-if-expr" 378 | version = "1.0.4" 379 | description = "The plugin checks `if expressions` (ternary operator)" 380 | category = "dev" 381 | optional = false 382 | python-versions = ">=3.6,<4.0" 383 | 384 | [package.dependencies] 385 | flake8-plugin-utils = ">=1.0,<2.0" 386 | 387 | [[package]] 388 | name = "flake8-isort" 389 | version = "4.0.0" 390 | description = "flake8 plugin that integrates isort ." 391 | category = "dev" 392 | optional = false 393 | python-versions = "*" 394 | 395 | [package.dependencies] 396 | flake8 = ">=3.2.1,<4" 397 | isort = ">=4.3.5,<6" 398 | testfixtures = ">=6.8.0,<7" 399 | 400 | [package.extras] 401 | test = ["pytest (>=4.0.2,<6)", "toml"] 402 | 403 | [[package]] 404 | name = "flake8-logging-format" 405 | version = "0.6.0" 406 | description = "Flake8 extension to validate (lack of) logging format strings" 407 | category = "dev" 408 | optional = false 409 | python-versions = "*" 410 | 411 | [[package]] 412 | name = "flake8-plugin-utils" 413 | version = "1.3.2" 414 | description = "The package provides base classes and utils for flake8 plugin writing" 415 | category = "dev" 416 | optional = false 417 | python-versions = ">=3.6,<4.0" 418 | 419 | [[package]] 420 | name = "flake8-polyfill" 421 | version = "1.0.2" 422 | description = "Polyfill package for Flake8 plugins" 423 | category = "dev" 424 | optional = false 425 | python-versions = "*" 426 | 427 | [package.dependencies] 428 | flake8 = "*" 429 | 430 | [[package]] 431 | name = "flake8-print" 432 | version = "4.0.0" 433 | description = "print statement checker plugin for flake8" 434 | category = "dev" 435 | optional = false 436 | python-versions = ">=3.6" 437 | 438 | [package.dependencies] 439 | flake8 = ">=3.0" 440 | pycodestyle = "*" 441 | six = "*" 442 | 443 | [[package]] 444 | name = "flake8-pytest" 445 | version = "1.3" 446 | description = "pytest assert checker plugin for flake8" 447 | category = "dev" 448 | optional = false 449 | python-versions = "*" 450 | 451 | [package.dependencies] 452 | flake8 = "*" 453 | 454 | [[package]] 455 | name = "flake8-pytest-style" 456 | version = "1.5.0" 457 | description = "A flake8 plugin checking common style issues or inconsistencies with pytest-based tests." 458 | category = "dev" 459 | optional = false 460 | python-versions = ">=3.6,<4.0" 461 | 462 | [package.dependencies] 463 | flake8-plugin-utils = ">=1.3.2,<2.0.0" 464 | 465 | [[package]] 466 | name = "flake8-return" 467 | version = "1.1.3" 468 | description = "Flake8 plugin that checks return values" 469 | category = "dev" 470 | optional = false 471 | python-versions = ">=3.6,<4.0" 472 | 473 | [package.dependencies] 474 | flake8-plugin-utils = ">=1.0,<2.0" 475 | 476 | [[package]] 477 | name = "flask" 478 | version = "1.1.4" 479 | description = "A simple framework for building complex web applications." 480 | category = "main" 481 | optional = false 482 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 483 | 484 | [package.dependencies] 485 | click = ">=5.1,<8.0" 486 | itsdangerous = ">=0.24,<2.0" 487 | Jinja2 = ">=2.10.1,<3.0" 488 | Werkzeug = ">=0.15,<2.0" 489 | 490 | [package.extras] 491 | dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"] 492 | docs = ["sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"] 493 | dotenv = ["python-dotenv"] 494 | 495 | [[package]] 496 | name = "flask-admin" 497 | version = "1.5.8" 498 | description = "Simple and extensible admin interface framework for Flask" 499 | category = "main" 500 | optional = false 501 | python-versions = "*" 502 | 503 | [package.dependencies] 504 | Flask = ">=0.7" 505 | wtforms = "*" 506 | 507 | [package.extras] 508 | aws = ["boto"] 509 | azure = ["azure-storage-blob"] 510 | 511 | [[package]] 512 | name = "freezegun" 513 | version = "1.1.0" 514 | description = "Let your Python tests travel through time" 515 | category = "dev" 516 | optional = false 517 | python-versions = ">=3.5" 518 | 519 | [package.dependencies] 520 | python-dateutil = ">=2.7" 521 | 522 | [[package]] 523 | name = "gunicorn" 524 | version = "19.9.0" 525 | description = "WSGI HTTP Server for UNIX" 526 | category = "main" 527 | optional = false 528 | python-versions = ">=2.6, !=3.0.*, !=3.1.*" 529 | 530 | [package.extras] 531 | eventlet = ["eventlet (>=0.9.7)"] 532 | gevent = ["gevent (>=0.13)"] 533 | tornado = ["tornado (>=0.2)"] 534 | 535 | [[package]] 536 | name = "h11" 537 | version = "0.8.1" 538 | description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" 539 | category = "main" 540 | optional = false 541 | python-versions = "*" 542 | 543 | [[package]] 544 | name = "httptools" 545 | version = "0.0.13" 546 | description = "A collection of framework independent HTTP protocol utils." 547 | category = "main" 548 | optional = false 549 | python-versions = "*" 550 | 551 | [[package]] 552 | name = "idna" 553 | version = "3.2" 554 | description = "Internationalized Domain Names in Applications (IDNA)" 555 | category = "main" 556 | optional = false 557 | python-versions = ">=3.5" 558 | 559 | [[package]] 560 | name = "immutables" 561 | version = "0.16" 562 | description = "Immutable Collections" 563 | category = "main" 564 | optional = false 565 | python-versions = ">=3.6" 566 | 567 | [package.dependencies] 568 | typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} 569 | 570 | [package.extras] 571 | test = ["flake8 (>=3.8.4,<3.9.0)", "pycodestyle (>=2.6.0,<2.7.0)", "mypy (>=0.910)", "pytest (>=6.2.4,<6.3.0)"] 572 | 573 | [[package]] 574 | name = "importlib-metadata" 575 | version = "1.7.0" 576 | description = "Read metadata from Python packages" 577 | category = "main" 578 | optional = false 579 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" 580 | 581 | [package.dependencies] 582 | zipp = ">=0.5" 583 | 584 | [package.extras] 585 | docs = ["sphinx", "rst.linker"] 586 | testing = ["packaging", "pep517", "importlib-resources (>=1.3)"] 587 | 588 | [[package]] 589 | name = "iniconfig" 590 | version = "1.1.1" 591 | description = "iniconfig: brain-dead simple config-ini parsing" 592 | category = "dev" 593 | optional = false 594 | python-versions = "*" 595 | 596 | [[package]] 597 | name = "isort" 598 | version = "5.9.3" 599 | description = "A Python utility / library to sort Python imports." 600 | category = "dev" 601 | optional = false 602 | python-versions = ">=3.6.1,<4.0" 603 | 604 | [package.extras] 605 | pipfile_deprecated_finder = ["pipreqs", "requirementslib"] 606 | requirements_deprecated_finder = ["pipreqs", "pip-api"] 607 | colors = ["colorama (>=0.4.3,<0.5.0)"] 608 | plugins = ["setuptools"] 609 | 610 | [[package]] 611 | name = "itsdangerous" 612 | version = "1.1.0" 613 | description = "Various helpers to pass data to untrusted environments and back." 614 | category = "main" 615 | optional = false 616 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 617 | 618 | [[package]] 619 | name = "jinja2" 620 | version = "2.11.3" 621 | description = "A very fast and expressive template engine." 622 | category = "main" 623 | optional = false 624 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 625 | 626 | [package.dependencies] 627 | MarkupSafe = ">=0.23" 628 | 629 | [package.extras] 630 | i18n = ["Babel (>=0.8)"] 631 | 632 | [[package]] 633 | name = "kaptan" 634 | version = "0.5.12" 635 | description = "Configuration manager" 636 | category = "dev" 637 | optional = false 638 | python-versions = "*" 639 | 640 | [package.dependencies] 641 | PyYAML = ">=3.13,<6" 642 | 643 | [[package]] 644 | name = "lazy" 645 | version = "1.4" 646 | description = "Lazy attributes for Python objects" 647 | category = "main" 648 | optional = false 649 | python-versions = "*" 650 | 651 | [[package]] 652 | name = "libtmux" 653 | version = "0.10.1" 654 | description = "scripting library / orm for tmux" 655 | category = "dev" 656 | optional = false 657 | python-versions = "*" 658 | 659 | [[package]] 660 | name = "lru-dict" 661 | version = "1.1.7" 662 | description = "An Dict like LRU container." 663 | category = "main" 664 | optional = false 665 | python-versions = "*" 666 | 667 | [[package]] 668 | name = "mako" 669 | version = "1.1.5" 670 | description = "A super-fast templating language that borrows the best ideas from the existing templating languages." 671 | category = "main" 672 | optional = false 673 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 674 | 675 | [package.dependencies] 676 | MarkupSafe = ">=0.9.2" 677 | 678 | [package.extras] 679 | babel = ["babel"] 680 | lingua = ["lingua"] 681 | 682 | [[package]] 683 | name = "markupsafe" 684 | version = "2.0.1" 685 | description = "Safely add untrusted strings to HTML/XML markup." 686 | category = "main" 687 | optional = false 688 | python-versions = ">=3.6" 689 | 690 | [[package]] 691 | name = "mccabe" 692 | version = "0.6.1" 693 | description = "McCabe checker, plugin for flake8" 694 | category = "dev" 695 | optional = false 696 | python-versions = "*" 697 | 698 | [[package]] 699 | name = "more-itertools" 700 | version = "8.9.0" 701 | description = "More routines for operating on iterables, beyond itertools" 702 | category = "main" 703 | optional = false 704 | python-versions = ">=3.5" 705 | 706 | [[package]] 707 | name = "multidict" 708 | version = "5.1.0" 709 | description = "multidict implementation" 710 | category = "main" 711 | optional = false 712 | python-versions = ">=3.6" 713 | 714 | [[package]] 715 | name = "mypy" 716 | version = "0.910" 717 | description = "Optional static typing for Python" 718 | category = "dev" 719 | optional = false 720 | python-versions = ">=3.5" 721 | 722 | [package.dependencies] 723 | mypy-extensions = ">=0.4.3,<0.5.0" 724 | toml = "*" 725 | typed-ast = {version = ">=1.4.0,<1.5.0", markers = "python_version < \"3.8\""} 726 | typing-extensions = ">=3.7.4" 727 | 728 | [package.extras] 729 | dmypy = ["psutil (>=4.0)"] 730 | python2 = ["typed-ast (>=1.4.0,<1.5.0)"] 731 | 732 | [[package]] 733 | name = "mypy-extensions" 734 | version = "0.4.3" 735 | description = "Experimental type system extensions for programs checked with the mypy typechecker." 736 | category = "dev" 737 | optional = false 738 | python-versions = "*" 739 | 740 | [[package]] 741 | name = "packaging" 742 | version = "21.0" 743 | description = "Core utilities for Python packages" 744 | category = "dev" 745 | optional = false 746 | python-versions = ">=3.6" 747 | 748 | [package.dependencies] 749 | pyparsing = ">=2.0.2" 750 | 751 | [[package]] 752 | name = "pathspec" 753 | version = "0.9.0" 754 | description = "Utility library for gitignore style pattern matching of file paths." 755 | category = "dev" 756 | optional = false 757 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" 758 | 759 | [[package]] 760 | name = "pep8-naming" 761 | version = "0.12.1" 762 | description = "Check PEP-8 naming conventions, plugin for flake8" 763 | category = "dev" 764 | optional = false 765 | python-versions = "*" 766 | 767 | [package.dependencies] 768 | flake8 = ">=3.9.1" 769 | flake8-polyfill = ">=1.0.2,<2" 770 | 771 | [[package]] 772 | name = "pluggy" 773 | version = "1.0.0" 774 | description = "plugin and hook calling mechanisms for python" 775 | category = "dev" 776 | optional = false 777 | python-versions = ">=3.6" 778 | 779 | [package.dependencies] 780 | importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} 781 | 782 | [package.extras] 783 | dev = ["pre-commit", "tox"] 784 | testing = ["pytest", "pytest-benchmark"] 785 | 786 | [[package]] 787 | name = "prometheus-client" 788 | version = "0.8.0" 789 | description = "Python client for the Prometheus monitoring system." 790 | category = "main" 791 | optional = false 792 | python-versions = "*" 793 | 794 | [package.extras] 795 | twisted = ["twisted"] 796 | 797 | [[package]] 798 | name = "psycopg2-binary" 799 | version = "2.9.1" 800 | description = "psycopg2 - Python-PostgreSQL Database Adapter" 801 | category = "main" 802 | optional = false 803 | python-versions = ">=3.6" 804 | 805 | [[package]] 806 | name = "py" 807 | version = "1.10.0" 808 | description = "library with cross-python path, ini-parsing, io, code, log facilities" 809 | category = "dev" 810 | optional = false 811 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 812 | 813 | [[package]] 814 | name = "pycodestyle" 815 | version = "2.7.0" 816 | description = "Python style guide checker" 817 | category = "dev" 818 | optional = false 819 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 820 | 821 | [[package]] 822 | name = "pydantic" 823 | version = "1.8.1" 824 | description = "Data validation and settings management using python 3.6 type hinting" 825 | category = "main" 826 | optional = false 827 | python-versions = ">=3.6.1" 828 | 829 | [package.dependencies] 830 | typing-extensions = ">=3.7.4.3" 831 | 832 | [package.extras] 833 | dotenv = ["python-dotenv (>=0.10.4)"] 834 | email = ["email-validator (>=1.0.3)"] 835 | 836 | [[package]] 837 | name = "pyflakes" 838 | version = "2.3.1" 839 | description = "passive checker of Python programs" 840 | category = "dev" 841 | optional = false 842 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 843 | 844 | [[package]] 845 | name = "pymorphy2" 846 | version = "0.9.1" 847 | description = "Morphological analyzer (POS tagger + inflection engine) for Russian language." 848 | category = "main" 849 | optional = false 850 | python-versions = "*" 851 | 852 | [package.dependencies] 853 | DAWG = {version = ">=0.8", optional = true, markers = "extra == \"fast\""} 854 | dawg-python = ">=0.7.1" 855 | docopt = ">=0.6" 856 | pymorphy2-dicts-ru = ">=2.4,<3.0" 857 | 858 | [package.extras] 859 | fast = ["DAWG (>=0.8)"] 860 | 861 | [[package]] 862 | name = "pymorphy2-dicts" 863 | version = "2.4.393442.3710985" 864 | description = "OpenCorpora.org dictionaries pre-compiled for pymorphy2" 865 | category = "main" 866 | optional = false 867 | python-versions = "*" 868 | 869 | [[package]] 870 | name = "pymorphy2-dicts-ru" 871 | version = "2.4.393658.3725883" 872 | description = "Russian dictionaries for pymorphy2" 873 | category = "main" 874 | optional = false 875 | python-versions = "*" 876 | 877 | [[package]] 878 | name = "pymorphy2-dicts-uk" 879 | version = "2.4.1.1.1460299261" 880 | description = "Ukrainian dictionaries for pymorphy2" 881 | category = "main" 882 | optional = false 883 | python-versions = "*" 884 | 885 | [[package]] 886 | name = "pyparsing" 887 | version = "2.4.7" 888 | description = "Python parsing module" 889 | category = "dev" 890 | optional = false 891 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 892 | 893 | [[package]] 894 | name = "pytest" 895 | version = "6.2.5" 896 | description = "pytest: simple powerful testing with Python" 897 | category = "dev" 898 | optional = false 899 | python-versions = ">=3.6" 900 | 901 | [package.dependencies] 902 | atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} 903 | attrs = ">=19.2.0" 904 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 905 | importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} 906 | iniconfig = "*" 907 | packaging = "*" 908 | pluggy = ">=0.12,<2.0" 909 | py = ">=1.8.2" 910 | toml = "*" 911 | 912 | [package.extras] 913 | testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] 914 | 915 | [[package]] 916 | name = "pytest-custom-exit-code" 917 | version = "0.3.0" 918 | description = "Exit pytest test session with custom exit code in different scenarios" 919 | category = "dev" 920 | optional = false 921 | python-versions = ">2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 922 | 923 | [package.dependencies] 924 | pytest = ">=4.0.2" 925 | 926 | [[package]] 927 | name = "pytest-forked" 928 | version = "1.3.0" 929 | description = "run tests in isolated forked subprocesses" 930 | category = "dev" 931 | optional = false 932 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 933 | 934 | [package.dependencies] 935 | py = "*" 936 | pytest = ">=3.10" 937 | 938 | [[package]] 939 | name = "pytest-freezegun" 940 | version = "0.3.0.post1" 941 | description = "Wrap tests with fixtures in freeze_time" 942 | category = "dev" 943 | optional = false 944 | python-versions = "*" 945 | 946 | [package.dependencies] 947 | freezegun = ">0.3" 948 | pytest = ">=3.0.0" 949 | 950 | [[package]] 951 | name = "pytest-lazy-fixture" 952 | version = "0.6.2" 953 | description = "It helps to use fixtures in pytest.mark.parametrize" 954 | category = "dev" 955 | optional = false 956 | python-versions = "*" 957 | 958 | [package.dependencies] 959 | pytest = ">=3.2.5" 960 | 961 | [[package]] 962 | name = "pytest-mock" 963 | version = "3.6.1" 964 | description = "Thin-wrapper around the mock package for easier use with pytest" 965 | category = "dev" 966 | optional = false 967 | python-versions = ">=3.6" 968 | 969 | [package.dependencies] 970 | pytest = ">=5.0" 971 | 972 | [package.extras] 973 | dev = ["pre-commit", "tox", "pytest-asyncio"] 974 | 975 | [[package]] 976 | name = "pytest-timeout" 977 | version = "1.4.2" 978 | description = "py.test plugin to abort hanging tests" 979 | category = "dev" 980 | optional = false 981 | python-versions = "*" 982 | 983 | [package.dependencies] 984 | pytest = ">=3.6.0" 985 | 986 | [[package]] 987 | name = "pytest-xdist" 988 | version = "2.3.0" 989 | description = "pytest xdist plugin for distributed testing and loop-on-failing modes" 990 | category = "dev" 991 | optional = false 992 | python-versions = ">=3.6" 993 | 994 | [package.dependencies] 995 | execnet = ">=1.1" 996 | pytest = ">=6.0.0" 997 | pytest-forked = "*" 998 | 999 | [package.extras] 1000 | psutil = ["psutil (>=3.0)"] 1001 | testing = ["filelock"] 1002 | 1003 | [[package]] 1004 | name = "python-dateutil" 1005 | version = "2.8.2" 1006 | description = "Extensions to the standard Python datetime module" 1007 | category = "main" 1008 | optional = false 1009 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" 1010 | 1011 | [package.dependencies] 1012 | six = ">=1.5" 1013 | 1014 | [[package]] 1015 | name = "python-editor" 1016 | version = "1.0.4" 1017 | description = "Programmatically open an editor, capture the result." 1018 | category = "main" 1019 | optional = false 1020 | python-versions = "*" 1021 | 1022 | [[package]] 1023 | name = "pyyaml" 1024 | version = "5.4.1" 1025 | description = "YAML parser and emitter for Python" 1026 | category = "main" 1027 | optional = false 1028 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" 1029 | 1030 | [[package]] 1031 | name = "razdel" 1032 | version = "0.5.0" 1033 | description = "Splits russian text into tokens, sentences, section. Rule-based" 1034 | category = "main" 1035 | optional = false 1036 | python-versions = "*" 1037 | 1038 | [[package]] 1039 | name = "redis" 1040 | version = "3.5.3" 1041 | description = "Python client for Redis key-value store" 1042 | category = "main" 1043 | optional = false 1044 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 1045 | 1046 | [package.extras] 1047 | hiredis = ["hiredis (>=0.1.3)"] 1048 | 1049 | [[package]] 1050 | name = "regex" 1051 | version = "2021.8.28" 1052 | description = "Alternative regular expression module, to replace re." 1053 | category = "dev" 1054 | optional = false 1055 | python-versions = "*" 1056 | 1057 | [[package]] 1058 | name = "requests" 1059 | version = "2.26.0" 1060 | description = "Python HTTP for Humans." 1061 | category = "main" 1062 | optional = false 1063 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" 1064 | 1065 | [package.dependencies] 1066 | certifi = ">=2017.4.17" 1067 | charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} 1068 | idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} 1069 | urllib3 = ">=1.21.1,<1.27" 1070 | 1071 | [package.extras] 1072 | socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] 1073 | use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] 1074 | 1075 | [[package]] 1076 | name = "requests-mock" 1077 | version = "1.9.3" 1078 | description = "Mock out responses from the requests package" 1079 | category = "dev" 1080 | optional = false 1081 | python-versions = "*" 1082 | 1083 | [package.dependencies] 1084 | requests = ">=2.3,<3" 1085 | six = "*" 1086 | 1087 | [package.extras] 1088 | fixture = ["fixtures"] 1089 | test = ["fixtures", "mock", "purl", "pytest", "sphinx", "testrepository (>=0.0.18)", "testtools"] 1090 | 1091 | [[package]] 1092 | name = "selenium" 1093 | version = "3.141.0" 1094 | description = "Python bindings for Selenium" 1095 | category = "dev" 1096 | optional = false 1097 | python-versions = "*" 1098 | 1099 | [package.dependencies] 1100 | urllib3 = "*" 1101 | 1102 | [[package]] 1103 | name = "shellingham" 1104 | version = "1.4.0" 1105 | description = "Tool to Detect Surrounding Shell" 1106 | category = "main" 1107 | optional = false 1108 | python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6" 1109 | 1110 | [[package]] 1111 | name = "six" 1112 | version = "1.16.0" 1113 | description = "Python 2 and 3 compatibility utilities" 1114 | category = "main" 1115 | optional = false 1116 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 1117 | 1118 | [[package]] 1119 | name = "sortedcontainers" 1120 | version = "2.4.0" 1121 | description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" 1122 | category = "main" 1123 | optional = false 1124 | python-versions = "*" 1125 | 1126 | [[package]] 1127 | name = "sqlalchemy" 1128 | version = "1.3.23" 1129 | description = "Database Abstraction Library" 1130 | category = "main" 1131 | optional = false 1132 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 1133 | 1134 | [package.extras] 1135 | mssql = ["pyodbc"] 1136 | mssql_pymssql = ["pymssql"] 1137 | mssql_pyodbc = ["pyodbc"] 1138 | mysql = ["mysqlclient"] 1139 | oracle = ["cx-oracle"] 1140 | postgresql = ["psycopg2"] 1141 | postgresql_pg8000 = ["pg8000 (<1.16.6)"] 1142 | postgresql_psycopg2binary = ["psycopg2-binary"] 1143 | postgresql_psycopg2cffi = ["psycopg2cffi"] 1144 | pymysql = ["pymysql (<1)", "pymysql"] 1145 | 1146 | [[package]] 1147 | name = "sqlalchemy-stubs" 1148 | version = "0.3" 1149 | description = "SQLAlchemy stubs and mypy plugin" 1150 | category = "dev" 1151 | optional = false 1152 | python-versions = "*" 1153 | 1154 | [package.dependencies] 1155 | mypy = ">=0.720" 1156 | typing-extensions = ">=3.7.4" 1157 | 1158 | [[package]] 1159 | name = "sqlalchemy-utc" 1160 | version = "0.11.0" 1161 | description = "SQLAlchemy type to store aware datetime values" 1162 | category = "main" 1163 | optional = false 1164 | python-versions = "*" 1165 | 1166 | [package.dependencies] 1167 | SQLAlchemy = ">=0.9.0" 1168 | 1169 | [[package]] 1170 | name = "sqlalchemy-utils" 1171 | version = "0.36.8" 1172 | description = "Various utility functions for SQLAlchemy." 1173 | category = "main" 1174 | optional = false 1175 | python-versions = "*" 1176 | 1177 | [package.dependencies] 1178 | six = "*" 1179 | SQLAlchemy = ">=1.0" 1180 | 1181 | [package.extras] 1182 | anyjson = ["anyjson (>=0.3.3)"] 1183 | arrow = ["arrow (>=0.3.4)"] 1184 | babel = ["Babel (>=1.3)"] 1185 | color = ["colour (>=0.0.4)"] 1186 | encrypted = ["cryptography (>=0.6)"] 1187 | intervals = ["intervals (>=0.7.1)"] 1188 | password = ["passlib (>=1.6,<2.0)"] 1189 | pendulum = ["pendulum (>=2.0.5)"] 1190 | phone = ["phonenumbers (>=5.9.2)"] 1191 | test = ["pytest (>=2.7.1)", "Pygments (>=1.2)", "Jinja2 (>=2.3)", "docutils (>=0.10)", "flexmock (>=0.9.7)", "mock (==2.0.0)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pg8000 (>=1.12.4)", "pytz (>=2014.2)", "python-dateutil (>=2.6)", "pymysql", "flake8 (>=2.4.0)", "isort (>=4.2.2)", "pyodbc"] 1192 | test_all = ["anyjson (>=0.3.3)", "arrow (>=0.3.4)", "Babel (>=1.3)", "colour (>=0.0.4)", "cryptography (>=0.6)", "intervals (>=0.7.1)", "passlib (>=1.6,<2.0)", "pendulum (>=2.0.5)", "phonenumbers (>=5.9.2)", "pytest (>=2.7.1)", "Pygments (>=1.2)", "Jinja2 (>=2.3)", "docutils (>=0.10)", "flexmock (>=0.9.7)", "mock (==2.0.0)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pg8000 (>=1.12.4)", "pytz (>=2014.2)", "python-dateutil (>=2.6)", "pymysql", "flake8 (>=2.4.0)", "isort (>=4.2.2)", "pyodbc", "python-dateutil", "furl (>=0.4.1)"] 1193 | timezone = ["python-dateutil"] 1194 | url = ["furl (>=0.4.1)"] 1195 | 1196 | [[package]] 1197 | name = "starlette" 1198 | version = "0.13.6" 1199 | description = "The little ASGI library that shines." 1200 | category = "main" 1201 | optional = false 1202 | python-versions = ">=3.6" 1203 | 1204 | [package.extras] 1205 | full = ["aiofiles", "graphene", "itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests", "ujson"] 1206 | 1207 | [[package]] 1208 | name = "tenacity" 1209 | version = "8.0.1" 1210 | description = "Retry code until it succeeds" 1211 | category = "main" 1212 | optional = false 1213 | python-versions = ">=3.6" 1214 | 1215 | [package.extras] 1216 | doc = ["reno", "sphinx", "tornado (>=4.5)"] 1217 | 1218 | [[package]] 1219 | name = "testfixtures" 1220 | version = "6.18.1" 1221 | description = "A collection of helpers and mock objects for unit tests and doc tests." 1222 | category = "dev" 1223 | optional = false 1224 | python-versions = "*" 1225 | 1226 | [package.extras] 1227 | build = ["setuptools-git", "wheel", "twine"] 1228 | docs = ["sphinx", "zope.component", "sybil", "twisted", "mock", "django (<2)", "django"] 1229 | test = ["pytest (>=3.6)", "pytest-cov", "pytest-django", "zope.component", "sybil", "twisted", "mock", "django (<2)", "django"] 1230 | 1231 | [[package]] 1232 | name = "timeout-decorator" 1233 | version = "0.5.0" 1234 | description = "Timeout decorator" 1235 | category = "main" 1236 | optional = false 1237 | python-versions = "*" 1238 | 1239 | [[package]] 1240 | name = "tmuxp" 1241 | version = "1.9.2" 1242 | description = "tmux session manager" 1243 | category = "dev" 1244 | optional = false 1245 | python-versions = "*" 1246 | 1247 | [package.dependencies] 1248 | click = ">=7,<8.1" 1249 | colorama = ">=0.3.9" 1250 | kaptan = ">=0.5.10" 1251 | libtmux = ">=0.10.1,<0.11" 1252 | 1253 | [[package]] 1254 | name = "toml" 1255 | version = "0.10.2" 1256 | description = "Python Library for Tom's Obvious, Minimal Language" 1257 | category = "dev" 1258 | optional = false 1259 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 1260 | 1261 | [[package]] 1262 | name = "transliterate" 1263 | version = "1.10.2" 1264 | description = "Bi-directional transliterator for Python" 1265 | category = "main" 1266 | optional = false 1267 | python-versions = "*" 1268 | 1269 | [package.dependencies] 1270 | six = ">=1.1.0" 1271 | 1272 | [[package]] 1273 | name = "typed-ast" 1274 | version = "1.4.3" 1275 | description = "a fork of Python 2 and 3 ast modules with type comment support" 1276 | category = "dev" 1277 | optional = false 1278 | python-versions = "*" 1279 | 1280 | [[package]] 1281 | name = "typer" 1282 | version = "0.3.2" 1283 | description = "Typer, build great CLIs. Easy to code. Based on Python type hints." 1284 | category = "main" 1285 | optional = false 1286 | python-versions = ">=3.6" 1287 | 1288 | [package.dependencies] 1289 | click = ">=7.1.1,<7.2.0" 1290 | colorama = {version = ">=0.4.3,<0.5.0", optional = true, markers = "extra == \"all\""} 1291 | shellingham = {version = ">=1.3.0,<2.0.0", optional = true, markers = "extra == \"all\""} 1292 | 1293 | [package.extras] 1294 | test = ["pytest-xdist (>=1.32.0,<2.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "mypy (==0.782)", "black (>=19.10b0,<20.0b0)", "isort (>=5.0.6,<6.0.0)", "shellingham (>=1.3.0,<2.0.0)", "pytest (>=4.4.0,<5.4.0)", "pytest-cov (>=2.10.0,<3.0.0)", "coverage (>=5.2,<6.0)"] 1295 | all = ["colorama (>=0.4.3,<0.5.0)", "shellingham (>=1.3.0,<2.0.0)"] 1296 | dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)"] 1297 | doc = ["mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=5.4.0,<6.0.0)", "markdown-include (>=0.5.1,<0.6.0)"] 1298 | 1299 | [[package]] 1300 | name = "types-cachetools" 1301 | version = "0.1.10" 1302 | description = "Typing stubs for cachetools" 1303 | category = "dev" 1304 | optional = false 1305 | python-versions = "*" 1306 | 1307 | [[package]] 1308 | name = "types-click" 1309 | version = "7.1.5" 1310 | description = "Typing stubs for click" 1311 | category = "dev" 1312 | optional = false 1313 | python-versions = "*" 1314 | 1315 | [[package]] 1316 | name = "types-flask" 1317 | version = "1.1.3" 1318 | description = "Typing stubs for Flask" 1319 | category = "dev" 1320 | optional = false 1321 | python-versions = "*" 1322 | 1323 | [package.dependencies] 1324 | types-click = "*" 1325 | types-Jinja2 = "*" 1326 | types-Werkzeug = "*" 1327 | 1328 | [[package]] 1329 | name = "types-jinja2" 1330 | version = "2.11.6" 1331 | description = "Typing stubs for Jinja2" 1332 | category = "dev" 1333 | optional = false 1334 | python-versions = "*" 1335 | 1336 | [package.dependencies] 1337 | types-MarkupSafe = "*" 1338 | 1339 | [[package]] 1340 | name = "types-markupsafe" 1341 | version = "1.1.6" 1342 | description = "Typing stubs for MarkupSafe" 1343 | category = "dev" 1344 | optional = false 1345 | python-versions = "*" 1346 | 1347 | [[package]] 1348 | name = "types-orjson" 1349 | version = "0.1.1" 1350 | description = "Typing stubs for orjson" 1351 | category = "dev" 1352 | optional = false 1353 | python-versions = "*" 1354 | 1355 | [[package]] 1356 | name = "types-pytz" 1357 | version = "0.1.2" 1358 | description = "Typing stubs for pytz" 1359 | category = "dev" 1360 | optional = false 1361 | python-versions = "*" 1362 | 1363 | [[package]] 1364 | name = "types-pyyaml" 1365 | version = "5.4.10" 1366 | description = "Typing stubs for PyYAML" 1367 | category = "dev" 1368 | optional = false 1369 | python-versions = "*" 1370 | 1371 | [[package]] 1372 | name = "types-redis" 1373 | version = "3.5.7" 1374 | description = "Typing stubs for redis" 1375 | category = "dev" 1376 | optional = false 1377 | python-versions = "*" 1378 | 1379 | [[package]] 1380 | name = "types-requests" 1381 | version = "0.1.13" 1382 | description = "Typing stubs for requests" 1383 | category = "dev" 1384 | optional = false 1385 | python-versions = "*" 1386 | 1387 | [[package]] 1388 | name = "types-werkzeug" 1389 | version = "1.0.5" 1390 | description = "Typing stubs for Werkzeug" 1391 | category = "dev" 1392 | optional = false 1393 | python-versions = "*" 1394 | 1395 | [[package]] 1396 | name = "typing-extensions" 1397 | version = "3.10.0.2" 1398 | description = "Backported and Experimental Type Hints for Python 3.5+" 1399 | category = "main" 1400 | optional = false 1401 | python-versions = "*" 1402 | 1403 | [[package]] 1404 | name = "unify" 1405 | version = "0.5" 1406 | description = "Modifies strings to all use the same (single/double) quote where possible." 1407 | category = "dev" 1408 | optional = false 1409 | python-versions = "*" 1410 | 1411 | [package.dependencies] 1412 | untokenize = "*" 1413 | 1414 | [[package]] 1415 | name = "untokenize" 1416 | version = "0.1.1" 1417 | description = "Transforms tokens into original source code (while preserving whitespace)." 1418 | category = "dev" 1419 | optional = false 1420 | python-versions = "*" 1421 | 1422 | [[package]] 1423 | name = "urllib3" 1424 | version = "1.26.6" 1425 | description = "HTTP library with thread-safe connection pooling, file post, and more." 1426 | category = "main" 1427 | optional = false 1428 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" 1429 | 1430 | [package.extras] 1431 | brotli = ["brotlipy (>=0.6.0)"] 1432 | secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] 1433 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] 1434 | 1435 | [[package]] 1436 | name = "uvicorn" 1437 | version = "0.8.6" 1438 | description = "The lightning-fast ASGI server." 1439 | category = "main" 1440 | optional = false 1441 | python-versions = "*" 1442 | 1443 | [package.dependencies] 1444 | click = ">=7.0.0,<8.0.0" 1445 | h11 = ">=0.8.0,<0.9.0" 1446 | httptools = {version = "0.0.13", markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"pypy\""} 1447 | uvloop = {version = ">=0.12.0,<0.13.0", markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"pypy\""} 1448 | websockets = ">=7.0.0,<8.0.0" 1449 | 1450 | [[package]] 1451 | name = "uvloop" 1452 | version = "0.12.2" 1453 | description = "Fast implementation of asyncio event loop on top of libuv" 1454 | category = "main" 1455 | optional = false 1456 | python-versions = "*" 1457 | 1458 | [[package]] 1459 | name = "websockets" 1460 | version = "7.0" 1461 | description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" 1462 | category = "main" 1463 | optional = false 1464 | python-versions = ">=3.4" 1465 | 1466 | [[package]] 1467 | name = "werkzeug" 1468 | version = "1.0.1" 1469 | description = "The comprehensive WSGI web application library." 1470 | category = "main" 1471 | optional = false 1472 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 1473 | 1474 | [package.extras] 1475 | dev = ["pytest", "pytest-timeout", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"] 1476 | watchdog = ["watchdog"] 1477 | 1478 | [[package]] 1479 | name = "wrapt" 1480 | version = "1.12.1" 1481 | description = "Module for decorators, wrappers and monkey patching." 1482 | category = "main" 1483 | optional = false 1484 | python-versions = "*" 1485 | 1486 | [[package]] 1487 | name = "wtforms" 1488 | version = "2.3.3" 1489 | description = "A flexible forms validation and rendering library for Python web development." 1490 | category = "main" 1491 | optional = false 1492 | python-versions = "*" 1493 | 1494 | [package.dependencies] 1495 | MarkupSafe = "*" 1496 | 1497 | [package.extras] 1498 | email = ["email-validator"] 1499 | ipaddress = ["ipaddress"] 1500 | locale = ["Babel (>=1.3)"] 1501 | 1502 | [[package]] 1503 | name = "yarl" 1504 | version = "1.1.1" 1505 | description = "Yet another URL library" 1506 | category = "main" 1507 | optional = false 1508 | python-versions = "*" 1509 | 1510 | [package.dependencies] 1511 | idna = ">=2.0" 1512 | multidict = ">=4.0" 1513 | 1514 | [[package]] 1515 | name = "zipp" 1516 | version = "3.5.0" 1517 | description = "Backport of pathlib-compatible object wrapper for zip files" 1518 | category = "main" 1519 | optional = false 1520 | python-versions = ">=3.6" 1521 | 1522 | [package.extras] 1523 | docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] 1524 | testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] 1525 | 1526 | [metadata] 1527 | lock-version = "1.1" 1528 | python-versions = "~3.7" 1529 | content-hash = "6f9cea6bb04f2d634e9f697abd8bbbe15347c630e968f2a96fa6849593137218" 1530 | 1531 | [metadata.files] 1532 | alchemy-mock = [ 1533 | {file = "alchemy-mock-0.4.3.tar.gz", hash = "sha256:7914c3f56aa7dd793d31a5ea3816972ff57de6e3c82651febfaab135e8f39d7a"}, 1534 | {file = "alchemy_mock-0.4.3-py2.py3-none-any.whl", hash = "sha256:e076b11cdef76638f4de70d50f0d8cb851d69c41346d984371f757c8fb4a0efa"}, 1535 | ] 1536 | alembic = [ 1537 | {file = "alembic-1.5.8-py2.py3-none-any.whl", hash = "sha256:8a259f0a4c8b350b03579d77ce9e810b19c65bf0af05f84efb69af13ad50801e"}, 1538 | {file = "alembic-1.5.8.tar.gz", hash = "sha256:e27fd67732c97a1c370c33169ef4578cf96436fa0e7dcfaeeef4a917d0737d56"}, 1539 | ] 1540 | allure-pytest = [ 1541 | {file = "allure-pytest-2.9.43.tar.gz", hash = "sha256:9ba613858a33c6becba539966116be5720c15f8c0427122e03c41082cfaa173a"}, 1542 | {file = "allure_pytest-2.9.43-py3-none-any.whl", hash = "sha256:b2ba613fe33b53924fdef2f21ee72cf14c2cc39a0ee8dadefd5d6ed7c927f430"}, 1543 | ] 1544 | allure-python-commons = [ 1545 | {file = "allure-python-commons-2.9.43.tar.gz", hash = "sha256:461bdd17c6514e130cfbb01d7060c82821a5ae1d2e049daefe64c4738d865cef"}, 1546 | {file = "allure_python_commons-2.9.43-py3-none-any.whl", hash = "sha256:07e366f099c5ae248a1e8c56713bc9c25316ce8269944b4b038c62d2aacd8dbb"}, 1547 | ] 1548 | appdirs = [ 1549 | {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, 1550 | {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, 1551 | ] 1552 | atomicwrites = [ 1553 | {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, 1554 | {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, 1555 | ] 1556 | attrs = [ 1557 | {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, 1558 | {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, 1559 | ] 1560 | black = [ 1561 | {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, 1562 | {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, 1563 | ] 1564 | cached-property = [ 1565 | {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, 1566 | {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, 1567 | ] 1568 | cachetools = [ 1569 | {file = "cachetools-4.2.2-py3-none-any.whl", hash = "sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001"}, 1570 | {file = "cachetools-4.2.2.tar.gz", hash = "sha256:61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff"}, 1571 | ] 1572 | certifi = [ 1573 | {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, 1574 | {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"}, 1575 | ] 1576 | charset-normalizer = [ 1577 | {file = "charset-normalizer-2.0.4.tar.gz", hash = "sha256:f23667ebe1084be45f6ae0538e4a5a865206544097e4e8bbcacf42cd02a348f3"}, 1578 | {file = "charset_normalizer-2.0.4-py3-none-any.whl", hash = "sha256:0c8911edd15d19223366a194a513099a302055a962bca2cec0f54b8b63175d8b"}, 1579 | ] 1580 | click = [ 1581 | {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, 1582 | {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, 1583 | ] 1584 | colorama = [ 1585 | {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, 1586 | {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, 1587 | ] 1588 | contextvars = [ 1589 | {file = "contextvars-2.4.tar.gz", hash = "sha256:f38c908aaa59c14335eeea12abea5f443646216c4e29380d7bf34d2018e2c39e"}, 1590 | ] 1591 | dawg = [ 1592 | {file = "DAWG-0.8.0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:7aecc4c89243edaf1efe7a4d769d993a7cd9307a8a04f48e07c4fc7c44bdd38f"}, 1593 | {file = "DAWG-0.8.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:83ce4a73f7632b0ed31af16c2750533ecbed347bad1148a52f6436e348b5b7ac"}, 1594 | {file = "DAWG-0.8.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:fb90b799fb7d6d728531840529c812a9ee17736da71e8a596ede8bfd6c62bf36"}, 1595 | {file = "DAWG-0.8.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:73760ad1272b1b47997f1a768b8f3bf547c92475bcd62185f4ab7e1bc691964e"}, 1596 | {file = "DAWG-0.8.0.tar.gz", hash = "sha256:34881e06278d4a54cf0b402c0c8b587bef0caa78f0eee595adc7a2aa530e48ce"}, 1597 | ] 1598 | dawg-python = [ 1599 | {file = "DAWG-Python-0.7.2.tar.gz", hash = "sha256:4a5e3286e6261cca02f205cfd5516a7ab10190fa30c51c28d345808f595e3421"}, 1600 | {file = "DAWG_Python-0.7.2-py2.py3-none-any.whl", hash = "sha256:4941d5df081b8d6fcb4597e073a9f60d5c1ccc9d17cd733e8744d7ecfec94ef3"}, 1601 | ] 1602 | deprecated = [ 1603 | {file = "Deprecated-1.2.12-py2.py3-none-any.whl", hash = "sha256:08452d69b6b5bc66e8330adde0a4f8642e969b9e1702904d137eeb29c8ffc771"}, 1604 | {file = "Deprecated-1.2.12.tar.gz", hash = "sha256:6d2de2de7931a968874481ef30208fd4e08da39177d61d3d4ebdf4366e7dbca1"}, 1605 | ] 1606 | docopt = [ 1607 | {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, 1608 | ] 1609 | eradicate = [ 1610 | {file = "eradicate-2.0.0.tar.gz", hash = "sha256:27434596f2c5314cc9b31410c93d8f7e8885747399773cd088d3adea647a60c8"}, 1611 | ] 1612 | execnet = [ 1613 | {file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"}, 1614 | {file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"}, 1615 | ] 1616 | expiringdict = [ 1617 | {file = "expiringdict-1.2.1.tar.gz", hash = "sha256:fe2ba427220425c3c8a3d29f6d2e2985bcee323f8bcd4021e68ebefbd90d8250"}, 1618 | ] 1619 | fakeredis = [ 1620 | {file = "fakeredis-1.6.0-py3-none-any.whl", hash = "sha256:3449b306f3a85102b28f8180c24722ef966fcb1e3c744758b6f635ec80321a5c"}, 1621 | {file = "fakeredis-1.6.0.tar.gz", hash = "sha256:11ccfc9769d718d37e45b382e64a6ba02586b622afa0371a6bd85766d72255f3"}, 1622 | ] 1623 | fastapi = [ 1624 | {file = "fastapi-0.61.2-py3-none-any.whl", hash = "sha256:8c8517680a221e69eb34073adf46c503092db2f24845b7bdc7f85b54f24ff0df"}, 1625 | {file = "fastapi-0.61.2.tar.gz", hash = "sha256:9e0494fcbba98f85b8cc9b2606bb6b625246e1b12f79ca61f508b0b00843eca6"}, 1626 | ] 1627 | fastapi-utils = [ 1628 | {file = "fastapi-utils-0.2.1.tar.gz", hash = "sha256:0e6c7fc1870b80e681494957abf65d4f4f42f4c7f70005918e9181b22f1bd759"}, 1629 | {file = "fastapi_utils-0.2.1-py3-none-any.whl", hash = "sha256:dd0be7dc7f03fa681b25487a206651d99f2330d5a567fb8ab6cb5f8a06a29360"}, 1630 | ] 1631 | filelock = [ 1632 | {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, 1633 | {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, 1634 | ] 1635 | flake8 = [ 1636 | {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, 1637 | {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, 1638 | ] 1639 | flake8-awesome = [ 1640 | {file = "flake8-awesome-1.2.1.tar.gz", hash = "sha256:bada1eef925b93234ebc0293179f0e85d79f5406212f93eb81793daa72f11c13"}, 1641 | {file = "flake8_awesome-1.2.1-py3-none-any.whl", hash = "sha256:b6eb6e95249f00477c98f7df7007d7396965e5aa069ed6202fea7c6aaca58e86"}, 1642 | ] 1643 | flake8-breakpoint = [ 1644 | {file = "flake8-breakpoint-1.1.0.tar.gz", hash = "sha256:5bc70d478f0437a3655d094e1d2fca81ddacabaa84d99db45ad3630bf2004064"}, 1645 | {file = "flake8_breakpoint-1.1.0-py3-none-any.whl", hash = "sha256:27e0cb132647f9ef348b4a3c3126e7350bedbb22e8e221cd11712a223855ea0b"}, 1646 | ] 1647 | flake8-builtins = [ 1648 | {file = "flake8-builtins-1.5.3.tar.gz", hash = "sha256:09998853b2405e98e61d2ff3027c47033adbdc17f9fe44ca58443d876eb00f3b"}, 1649 | {file = "flake8_builtins-1.5.3-py2.py3-none-any.whl", hash = "sha256:7706babee43879320376861897e5d1468e396a40b8918ed7bccf70e5f90b8687"}, 1650 | ] 1651 | flake8-comprehensions = [ 1652 | {file = "flake8-comprehensions-3.6.1.tar.gz", hash = "sha256:4888de89248b7f7535159189ff693c77f8354f6d37a02619fa28c9921a913aa0"}, 1653 | {file = "flake8_comprehensions-3.6.1-py3-none-any.whl", hash = "sha256:e9a010b99aa90c05790d45281ad9953df44a4a08a1a8f6cd41f98b4fc6a268a0"}, 1654 | ] 1655 | flake8-eradicate = [ 1656 | {file = "flake8-eradicate-1.1.0.tar.gz", hash = "sha256:f5917d6dbca352efcd10c15fdab9c55c48f0f26f6a8d47898b25d39101f170a8"}, 1657 | {file = "flake8_eradicate-1.1.0-py3-none-any.whl", hash = "sha256:d8e39b684a37c257a53cda817d86e2d96c9ba3450ddc292742623a5dfee04d9e"}, 1658 | ] 1659 | flake8-if-expr = [ 1660 | {file = "flake8-if-expr-1.0.4.tar.gz", hash = "sha256:e0050b59b46114b6e20628d61175a7a608d3eb55fb5b90d87db0f9352a91a491"}, 1661 | {file = "flake8_if_expr-1.0.4-py3-none-any.whl", hash = "sha256:3f2d45cc1e48b4cdf22377ca1624b2a59b6f1c7825ba1cdee99ff1e647e7ae3f"}, 1662 | ] 1663 | flake8-isort = [ 1664 | {file = "flake8-isort-4.0.0.tar.gz", hash = "sha256:2b91300f4f1926b396c2c90185844eb1a3d5ec39ea6138832d119da0a208f4d9"}, 1665 | {file = "flake8_isort-4.0.0-py2.py3-none-any.whl", hash = "sha256:729cd6ef9ba3659512dee337687c05d79c78e1215fdf921ed67e5fe46cce2f3c"}, 1666 | ] 1667 | flake8-logging-format = [ 1668 | {file = "flake8-logging-format-0.6.0.tar.gz", hash = "sha256:ca5f2b7fc31c3474a0aa77d227e022890f641a025f0ba664418797d979a779f8"}, 1669 | ] 1670 | flake8-plugin-utils = [ 1671 | {file = "flake8-plugin-utils-1.3.2.tar.gz", hash = "sha256:20fa2a8ca2decac50116edb42e6af0a1253ef639ad79941249b840531889c65a"}, 1672 | {file = "flake8_plugin_utils-1.3.2-py3-none-any.whl", hash = "sha256:1fe43e3e9acf3a7c0f6b88f5338cad37044d2f156c43cb6b080b5f9da8a76f06"}, 1673 | ] 1674 | flake8-polyfill = [ 1675 | {file = "flake8-polyfill-1.0.2.tar.gz", hash = "sha256:e44b087597f6da52ec6393a709e7108b2905317d0c0b744cdca6208e670d8eda"}, 1676 | {file = "flake8_polyfill-1.0.2-py2.py3-none-any.whl", hash = "sha256:12be6a34ee3ab795b19ca73505e7b55826d5f6ad7230d31b18e106400169b9e9"}, 1677 | ] 1678 | flake8-print = [ 1679 | {file = "flake8-print-4.0.0.tar.gz", hash = "sha256:5afac374b7dc49aac2c36d04b5eb1d746d72e6f5df75a6ecaecd99e9f79c6516"}, 1680 | {file = "flake8_print-4.0.0-py3-none-any.whl", hash = "sha256:6c0efce658513169f96d7a24cf136c434dc711eb00ebd0a985eb1120103fe584"}, 1681 | ] 1682 | flake8-pytest = [ 1683 | {file = "flake8-pytest-1.3.tar.gz", hash = "sha256:b4d6703f7d7b646af1e2660809e795886dd349df11843613dbe6515efa82c0f3"}, 1684 | {file = "flake8_pytest-1.3-py2.py3-none-any.whl", hash = "sha256:61686128a79e1513db575b2bcac351081d5a293811ddce2d5dfc25e8c762d33e"}, 1685 | ] 1686 | flake8-pytest-style = [ 1687 | {file = "flake8-pytest-style-1.5.0.tar.gz", hash = "sha256:668ce8f55edf7db4ac386d2735c3b354b5cb47aa341a4655d91a5788dd03124b"}, 1688 | {file = "flake8_pytest_style-1.5.0-py3-none-any.whl", hash = "sha256:ec287a7dc4fe95082af5e408c8b2f8f4b6bcb366d5a17ff6c34112eb03446580"}, 1689 | ] 1690 | flake8-return = [ 1691 | {file = "flake8-return-1.1.3.tar.gz", hash = "sha256:13a31edeb0c6157dd4f77166cdaa6141703d2b8b24def5558ae659852a003cb4"}, 1692 | {file = "flake8_return-1.1.3-py3-none-any.whl", hash = "sha256:4a266191f7ed69aa26b835ec90c5a5522fa8f79f5cf6363a877ac499f8eb418b"}, 1693 | ] 1694 | flask = [ 1695 | {file = "Flask-1.1.4-py2.py3-none-any.whl", hash = "sha256:c34f04500f2cbbea882b1acb02002ad6fe6b7ffa64a6164577995657f50aed22"}, 1696 | {file = "Flask-1.1.4.tar.gz", hash = "sha256:0fbeb6180d383a9186d0d6ed954e0042ad9f18e0e8de088b2b419d526927d196"}, 1697 | ] 1698 | flask-admin = [ 1699 | {file = "Flask-Admin-1.5.8.tar.gz", hash = "sha256:eb06a1f31b98881dee53a55c64faebd1990d6aac38826364b280df0b2679ff74"}, 1700 | ] 1701 | freezegun = [ 1702 | {file = "freezegun-1.1.0-py2.py3-none-any.whl", hash = "sha256:2ae695f7eb96c62529f03a038461afe3c692db3465e215355e1bb4b0ab408712"}, 1703 | {file = "freezegun-1.1.0.tar.gz", hash = "sha256:177f9dd59861d871e27a484c3332f35a6e3f5d14626f2bf91be37891f18927f3"}, 1704 | ] 1705 | gunicorn = [ 1706 | {file = "gunicorn-19.9.0-py2.py3-none-any.whl", hash = "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471"}, 1707 | {file = "gunicorn-19.9.0.tar.gz", hash = "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"}, 1708 | ] 1709 | h11 = [ 1710 | {file = "h11-0.8.1-py2.py3-none-any.whl", hash = "sha256:f2b1ca39bfed357d1f19ac732913d5f9faa54a5062eca7d2ec3a916cfb7ae4c7"}, 1711 | {file = "h11-0.8.1.tar.gz", hash = "sha256:acca6a44cb52a32ab442b1779adf0875c443c689e9e028f8d831a3769f9c5208"}, 1712 | ] 1713 | httptools = [ 1714 | {file = "httptools-0.0.13.tar.gz", hash = "sha256:e00cbd7ba01ff748e494248183abc6e153f49181169d8a3d41bb49132ca01dfc"}, 1715 | ] 1716 | idna = [ 1717 | {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, 1718 | {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, 1719 | ] 1720 | immutables = [ 1721 | {file = "immutables-0.16-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:acbfa79d44228d96296279068441f980dc63dbed52522d9227ff9f4d96c6627e"}, 1722 | {file = "immutables-0.16-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c9ed003eacb92e630ef200e31f47236c2139b39476894f7963b32bd39bafa3"}, 1723 | {file = "immutables-0.16-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a396314b9024fa55bf83a27813fd76cf9f27dce51f53b0f19b51de035146251"}, 1724 | {file = "immutables-0.16-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4a2a71678348fb95b13ca108d447f559a754c41b47bd1e7e4fb23974e735682d"}, 1725 | {file = "immutables-0.16-cp36-cp36m-win32.whl", hash = "sha256:064001638ab5d36f6aa05b6101446f4a5793fb71e522bc81b8fc65a1894266ff"}, 1726 | {file = "immutables-0.16-cp36-cp36m-win_amd64.whl", hash = "sha256:1de393f1b188740ca7b38f946f2bbc7edf3910d2048f03bbb8d01f17a038d67c"}, 1727 | {file = "immutables-0.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fcf678a3074613119385a02a07c469ec5130559f5ea843c85a0840c80b5b71c6"}, 1728 | {file = "immutables-0.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a307eb0984eb43e815dcacea3ac50c11d00a936ecf694c46991cd5a23bcb0ec0"}, 1729 | {file = "immutables-0.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7a58825ff2254e2612c5a932174398a4ea8fbddd8a64a02c880cc32ee28b8820"}, 1730 | {file = "immutables-0.16-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:798b095381eb42cf40db6876339e7bed84093e5868018a9e73d8e1f7ab4bb21e"}, 1731 | {file = "immutables-0.16-cp37-cp37m-win32.whl", hash = "sha256:19bdede174847c2ef1292df0f23868ab3918b560febb09fcac6eec621bd4812b"}, 1732 | {file = "immutables-0.16-cp37-cp37m-win_amd64.whl", hash = "sha256:9ccf4c0e3e2e3237012b516c74c49de8872ccdf9129739f7a0b9d7444a8c4862"}, 1733 | {file = "immutables-0.16-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d59beef203a3765db72b1d0943547425c8318ecf7d64c451fd1e130b653c2fbb"}, 1734 | {file = "immutables-0.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0020aaa4010b136056c20a46ce53204e1407a9e4464246cb2cf95b90808d9161"}, 1735 | {file = "immutables-0.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edd9f67671555af1eb99ad3c7550238487dd7ac0ac5205b40204ed61c9a922ac"}, 1736 | {file = "immutables-0.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:298a301f85f307b4c056a0825eb30f060e64d73605e783289f3df37dd762bab8"}, 1737 | {file = "immutables-0.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b779617f5b94486bfd0f22162cd72eb5f2beb0214a14b75fdafb7b2c908ed0cb"}, 1738 | {file = "immutables-0.16-cp38-cp38-win32.whl", hash = "sha256:511c93d8b1bbbf103ff3f1f120c5a68a9866ce03dea6ac406537f93ca9b19139"}, 1739 | {file = "immutables-0.16-cp38-cp38-win_amd64.whl", hash = "sha256:b651b61c1af6cda2ee201450f2ffe048a5959bc88e43e6c312f4c93e69c9e929"}, 1740 | {file = "immutables-0.16-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aa7bf572ae1e006104c584be70dc634849cf0dc62f42f4ee194774f97e7fd17d"}, 1741 | {file = "immutables-0.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50793a44ba0d228ed8cad4d0925e00dfd62ea32f44ddee8854f8066447272d05"}, 1742 | {file = "immutables-0.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:799621dcdcdcbb2516546a40123b87bf88de75fe7459f7bd8144f079ace6ec3e"}, 1743 | {file = "immutables-0.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7bcf52aeb983bd803b7c6106eae1b2d9a0c7ab1241bc6b45e2174ba2b7283031"}, 1744 | {file = "immutables-0.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:734c269e82e5f307fb6e17945953b67659d1731e65309787b8f7ba267d1468f2"}, 1745 | {file = "immutables-0.16-cp39-cp39-win32.whl", hash = "sha256:a454d5d3fee4b7cc627345791eb2ca4b27fa3bbb062ccf362ecaaa51679a07ed"}, 1746 | {file = "immutables-0.16-cp39-cp39-win_amd64.whl", hash = "sha256:2505d93395d3f8ae4223e21465994c3bc6952015a38dc4f03cb3e07a2b8d8325"}, 1747 | {file = "immutables-0.16.tar.gz", hash = "sha256:d67e86859598eed0d926562da33325dac7767b7b1eff84e232c22abea19f4360"}, 1748 | ] 1749 | importlib-metadata = [ 1750 | {file = "importlib_metadata-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"}, 1751 | {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"}, 1752 | ] 1753 | iniconfig = [ 1754 | {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, 1755 | {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, 1756 | ] 1757 | isort = [ 1758 | {file = "isort-5.9.3-py3-none-any.whl", hash = "sha256:e17d6e2b81095c9db0a03a8025a957f334d6ea30b26f9ec70805411e5c7c81f2"}, 1759 | {file = "isort-5.9.3.tar.gz", hash = "sha256:9c2ea1e62d871267b78307fe511c0838ba0da28698c5732d54e2790bf3ba9899"}, 1760 | ] 1761 | itsdangerous = [ 1762 | {file = "itsdangerous-1.1.0-py2.py3-none-any.whl", hash = "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"}, 1763 | {file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"}, 1764 | ] 1765 | jinja2 = [ 1766 | {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, 1767 | {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, 1768 | ] 1769 | kaptan = [ 1770 | {file = "kaptan-0.5.12.tar.gz", hash = "sha256:1abd1f56731422fce5af1acc28801677a51e56f5d3c3e8636db761ed143c3dd2"}, 1771 | ] 1772 | lazy = [ 1773 | {file = "lazy-1.4-py2.py3-none-any.whl", hash = "sha256:9f293fd531546f3eda039da8f919b513b94f219e562764e3ceefc26fa503bf03"}, 1774 | {file = "lazy-1.4.zip", hash = "sha256:2c6d27a5ab130fb85435320651a47403adcb37ecbcc501b0c6606391f65f5b43"}, 1775 | ] 1776 | libtmux = [ 1777 | {file = "libtmux-0.10.1-py3-none-any.whl", hash = "sha256:db307412e58214e0ca2db32ecdbe2649ae8f38c6540279624367681dcdbe3014"}, 1778 | {file = "libtmux-0.10.1.tar.gz", hash = "sha256:c8bc81499616ba899538704e419463a1c83ba7ca21e53b1efc6abbe98eb26b61"}, 1779 | ] 1780 | lru-dict = [ 1781 | {file = "lru-dict-1.1.7.tar.gz", hash = "sha256:45b81f67d75341d4433abade799a47e9c42a9e22a118531dcb5e549864032d7c"}, 1782 | ] 1783 | mako = [ 1784 | {file = "Mako-1.1.5-py2.py3-none-any.whl", hash = "sha256:6804ee66a7f6a6416910463b00d76a7b25194cd27f1918500c5bd7be2a088a23"}, 1785 | {file = "Mako-1.1.5.tar.gz", hash = "sha256:169fa52af22a91900d852e937400e79f535496191c63712e3b9fda5a9bed6fc3"}, 1786 | ] 1787 | markupsafe = [ 1788 | {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, 1789 | {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, 1790 | {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, 1791 | {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, 1792 | {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, 1793 | {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, 1794 | {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, 1795 | {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, 1796 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, 1797 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, 1798 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, 1799 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, 1800 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, 1801 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, 1802 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, 1803 | {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, 1804 | {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, 1805 | {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, 1806 | {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, 1807 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, 1808 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, 1809 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, 1810 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, 1811 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, 1812 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, 1813 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, 1814 | {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, 1815 | {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, 1816 | {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, 1817 | {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, 1818 | {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, 1819 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, 1820 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, 1821 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, 1822 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, 1823 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, 1824 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, 1825 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, 1826 | {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, 1827 | {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, 1828 | {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, 1829 | {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, 1830 | {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, 1831 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, 1832 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, 1833 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, 1834 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, 1835 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, 1836 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, 1837 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, 1838 | {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, 1839 | {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, 1840 | {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, 1841 | {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, 1842 | ] 1843 | mccabe = [ 1844 | {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, 1845 | {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, 1846 | ] 1847 | more-itertools = [ 1848 | {file = "more-itertools-8.9.0.tar.gz", hash = "sha256:8c746e0d09871661520da4f1241ba6b908dc903839733c8203b552cffaf173bd"}, 1849 | {file = "more_itertools-8.9.0-py3-none-any.whl", hash = "sha256:70401259e46e216056367a0a6034ee3d3f95e0bf59d3aa6a4eb77837171ed996"}, 1850 | ] 1851 | multidict = [ 1852 | {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"}, 1853 | {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"}, 1854 | {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"}, 1855 | {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"}, 1856 | {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"}, 1857 | {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"}, 1858 | {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"}, 1859 | {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"}, 1860 | {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"}, 1861 | {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"}, 1862 | {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"}, 1863 | {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"}, 1864 | {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"}, 1865 | {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"}, 1866 | {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"}, 1867 | {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"}, 1868 | {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"}, 1869 | {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"}, 1870 | {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"}, 1871 | {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"}, 1872 | {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"}, 1873 | {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"}, 1874 | {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"}, 1875 | {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"}, 1876 | {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"}, 1877 | {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"}, 1878 | {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"}, 1879 | {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"}, 1880 | {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"}, 1881 | {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"}, 1882 | {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"}, 1883 | {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"}, 1884 | {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"}, 1885 | {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"}, 1886 | {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"}, 1887 | {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"}, 1888 | {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"}, 1889 | ] 1890 | mypy = [ 1891 | {file = "mypy-0.910-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457"}, 1892 | {file = "mypy-0.910-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb"}, 1893 | {file = "mypy-0.910-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9"}, 1894 | {file = "mypy-0.910-cp35-cp35m-win_amd64.whl", hash = "sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e"}, 1895 | {file = "mypy-0.910-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921"}, 1896 | {file = "mypy-0.910-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6"}, 1897 | {file = "mypy-0.910-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212"}, 1898 | {file = "mypy-0.910-cp36-cp36m-win_amd64.whl", hash = "sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885"}, 1899 | {file = "mypy-0.910-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0"}, 1900 | {file = "mypy-0.910-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de"}, 1901 | {file = "mypy-0.910-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703"}, 1902 | {file = "mypy-0.910-cp37-cp37m-win_amd64.whl", hash = "sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a"}, 1903 | {file = "mypy-0.910-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504"}, 1904 | {file = "mypy-0.910-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9"}, 1905 | {file = "mypy-0.910-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072"}, 1906 | {file = "mypy-0.910-cp38-cp38-win_amd64.whl", hash = "sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811"}, 1907 | {file = "mypy-0.910-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e"}, 1908 | {file = "mypy-0.910-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b"}, 1909 | {file = "mypy-0.910-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2"}, 1910 | {file = "mypy-0.910-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97"}, 1911 | {file = "mypy-0.910-cp39-cp39-win_amd64.whl", hash = "sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8"}, 1912 | {file = "mypy-0.910-py3-none-any.whl", hash = "sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d"}, 1913 | {file = "mypy-0.910.tar.gz", hash = "sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"}, 1914 | ] 1915 | mypy-extensions = [ 1916 | {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, 1917 | {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, 1918 | ] 1919 | packaging = [ 1920 | {file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"}, 1921 | {file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"}, 1922 | ] 1923 | pathspec = [ 1924 | {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, 1925 | {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, 1926 | ] 1927 | pep8-naming = [ 1928 | {file = "pep8-naming-0.12.1.tar.gz", hash = "sha256:bb2455947757d162aa4cad55dba4ce029005cd1692f2899a21d51d8630ca7841"}, 1929 | {file = "pep8_naming-0.12.1-py2.py3-none-any.whl", hash = "sha256:4a8daeaeb33cfcde779309fc0c9c0a68a3bbe2ad8a8308b763c5068f86eb9f37"}, 1930 | ] 1931 | pluggy = [ 1932 | {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, 1933 | {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, 1934 | ] 1935 | prometheus-client = [ 1936 | {file = "prometheus_client-0.8.0-py2.py3-none-any.whl", hash = "sha256:983c7ac4b47478720db338f1491ef67a100b474e3bc7dafcbaefb7d0b8f9b01c"}, 1937 | {file = "prometheus_client-0.8.0.tar.gz", hash = "sha256:c6e6b706833a6bd1fd51711299edee907857be10ece535126a158f911ee80915"}, 1938 | ] 1939 | psycopg2-binary = [ 1940 | {file = "psycopg2-binary-2.9.1.tar.gz", hash = "sha256:b0221ca5a9837e040ebf61f48899926b5783668b7807419e4adae8175a31f773"}, 1941 | {file = "psycopg2_binary-2.9.1-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:c250a7ec489b652c892e4f0a5d122cc14c3780f9f643e1a326754aedf82d9a76"}, 1942 | {file = "psycopg2_binary-2.9.1-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aef9aee84ec78af51107181d02fe8773b100b01c5dfde351184ad9223eab3698"}, 1943 | {file = "psycopg2_binary-2.9.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123c3fb684e9abfc47218d3784c7b4c47c8587951ea4dd5bc38b6636ac57f616"}, 1944 | {file = "psycopg2_binary-2.9.1-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:995fc41ebda5a7a663a254a1dcac52638c3e847f48307b5416ee373da15075d7"}, 1945 | {file = "psycopg2_binary-2.9.1-cp36-cp36m-manylinux_2_24_ppc64le.whl", hash = "sha256:fbb42a541b1093385a2d8c7eec94d26d30437d0e77c1d25dae1dcc46741a385e"}, 1946 | {file = "psycopg2_binary-2.9.1-cp36-cp36m-win32.whl", hash = "sha256:20f1ab44d8c352074e2d7ca67dc00843067788791be373e67a0911998787ce7d"}, 1947 | {file = "psycopg2_binary-2.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f6fac64a38f6768e7bc7b035b9e10d8a538a9fadce06b983fb3e6fa55ac5f5ce"}, 1948 | {file = "psycopg2_binary-2.9.1-cp37-cp37m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:1e3a362790edc0a365385b1ac4cc0acc429a0c0d662d829a50b6ce743ae61b5a"}, 1949 | {file = "psycopg2_binary-2.9.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8559617b1fcf59a9aedba2c9838b5b6aa211ffedecabca412b92a1ff75aac1a"}, 1950 | {file = "psycopg2_binary-2.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a36c7eb6152ba5467fb264d73844877be8b0847874d4822b7cf2d3c0cb8cdcb0"}, 1951 | {file = "psycopg2_binary-2.9.1-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:2f62c207d1740b0bde5c4e949f857b044818f734a3d57f1d0d0edc65050532ed"}, 1952 | {file = "psycopg2_binary-2.9.1-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:cfc523edecddaef56f6740d7de1ce24a2fdf94fd5e704091856a201872e37f9f"}, 1953 | {file = "psycopg2_binary-2.9.1-cp37-cp37m-win32.whl", hash = "sha256:1e85b74cbbb3056e3656f1cc4781294df03383127a8114cbc6531e8b8367bf1e"}, 1954 | {file = "psycopg2_binary-2.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1473c0215b0613dd938db54a653f68251a45a78b05f6fc21af4326f40e8360a2"}, 1955 | {file = "psycopg2_binary-2.9.1-cp38-cp38-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:35c4310f8febe41f442d3c65066ca93cccefd75013df3d8c736c5b93ec288140"}, 1956 | {file = "psycopg2_binary-2.9.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c13d72ed6af7fd2c8acbd95661cf9477f94e381fce0792c04981a8283b52917"}, 1957 | {file = "psycopg2_binary-2.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14db1752acdd2187d99cb2ca0a1a6dfe57fc65c3281e0f20e597aac8d2a5bd90"}, 1958 | {file = "psycopg2_binary-2.9.1-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:aed4a9a7e3221b3e252c39d0bf794c438dc5453bc2963e8befe9d4cd324dff72"}, 1959 | {file = "psycopg2_binary-2.9.1-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:da113b70f6ec40e7d81b43d1b139b9db6a05727ab8be1ee559f3a69854a69d34"}, 1960 | {file = "psycopg2_binary-2.9.1-cp38-cp38-win32.whl", hash = "sha256:4235f9d5ddcab0b8dbd723dca56ea2922b485ea00e1dafacf33b0c7e840b3d32"}, 1961 | {file = "psycopg2_binary-2.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:988b47ac70d204aed01589ed342303da7c4d84b56c2f4c4b8b00deda123372bf"}, 1962 | {file = "psycopg2_binary-2.9.1-cp39-cp39-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:7360647ea04db2e7dff1648d1da825c8cf68dc5fbd80b8fb5b3ee9f068dcd21a"}, 1963 | {file = "psycopg2_binary-2.9.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca86db5b561b894f9e5f115d6a159fff2a2570a652e07889d8a383b5fae66eb4"}, 1964 | {file = "psycopg2_binary-2.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ced67f1e34e1a450cdb48eb53ca73b60aa0af21c46b9b35ac3e581cf9f00e31"}, 1965 | {file = "psycopg2_binary-2.9.1-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:0f2e04bd2a2ab54fa44ee67fe2d002bb90cee1c0f1cc0ebc3148af7b02034cbd"}, 1966 | {file = "psycopg2_binary-2.9.1-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:3242b9619de955ab44581a03a64bdd7d5e470cc4183e8fcadd85ab9d3756ce7a"}, 1967 | {file = "psycopg2_binary-2.9.1-cp39-cp39-win32.whl", hash = "sha256:0b7dae87f0b729922e06f85f667de7bf16455d411971b2043bbd9577af9d1975"}, 1968 | {file = "psycopg2_binary-2.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:b4d7679a08fea64573c969f6994a2631908bb2c0e69a7235648642f3d2e39a68"}, 1969 | ] 1970 | py = [ 1971 | {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, 1972 | {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, 1973 | ] 1974 | pycodestyle = [ 1975 | {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, 1976 | {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, 1977 | ] 1978 | pydantic = [ 1979 | {file = "pydantic-1.8.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0c40162796fc8d0aa744875b60e4dc36834db9f2a25dbf9ba9664b1915a23850"}, 1980 | {file = "pydantic-1.8.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:fff29fe54ec419338c522b908154a2efabeee4f483e48990f87e189661f31ce3"}, 1981 | {file = "pydantic-1.8.1-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:fbfb608febde1afd4743c6822c19060a8dbdd3eb30f98e36061ba4973308059e"}, 1982 | {file = "pydantic-1.8.1-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:eb8ccf12295113ce0de38f80b25f736d62f0a8d87c6b88aca645f168f9c78771"}, 1983 | {file = "pydantic-1.8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:20d42f1be7c7acc352b3d09b0cf505a9fab9deb93125061b376fbe1f06a5459f"}, 1984 | {file = "pydantic-1.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dde4ca368e82791de97c2ec019681ffb437728090c0ff0c3852708cf923e0c7d"}, 1985 | {file = "pydantic-1.8.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:3bbd023c981cbe26e6e21c8d2ce78485f85c2e77f7bab5ec15b7d2a1f491918f"}, 1986 | {file = "pydantic-1.8.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:830ef1a148012b640186bf4d9789a206c56071ff38f2460a32ae67ca21880eb8"}, 1987 | {file = "pydantic-1.8.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:fb77f7a7e111db1832ae3f8f44203691e15b1fa7e5a1cb9691d4e2659aee41c4"}, 1988 | {file = "pydantic-1.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:3bcb9d7e1f9849a6bdbd027aabb3a06414abd6068cb3b21c49427956cce5038a"}, 1989 | {file = "pydantic-1.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2287ebff0018eec3cc69b1d09d4b7cebf277726fa1bd96b45806283c1d808683"}, 1990 | {file = "pydantic-1.8.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:4bbc47cf7925c86a345d03b07086696ed916c7663cb76aa409edaa54546e53e2"}, 1991 | {file = "pydantic-1.8.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:6388ef4ef1435364c8cc9a8192238aed030595e873d8462447ccef2e17387125"}, 1992 | {file = "pydantic-1.8.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:dd4888b300769ecec194ca8f2699415f5f7760365ddbe243d4fd6581485fa5f0"}, 1993 | {file = "pydantic-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:8fbb677e4e89c8ab3d450df7b1d9caed23f254072e8597c33279460eeae59b99"}, 1994 | {file = "pydantic-1.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2f2736d9a996b976cfdfe52455ad27462308c9d3d0ae21a2aa8b4cd1a78f47b9"}, 1995 | {file = "pydantic-1.8.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:3114d74329873af0a0e8004627f5389f3bb27f956b965ddd3e355fe984a1789c"}, 1996 | {file = "pydantic-1.8.1-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:258576f2d997ee4573469633592e8b99aa13bda182fcc28e875f866016c8e07e"}, 1997 | {file = "pydantic-1.8.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c17a0b35c854049e67c68b48d55e026c84f35593c66d69b278b8b49e2484346f"}, 1998 | {file = "pydantic-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:e8bc082afef97c5fd3903d05c6f7bb3a6af9fc18631b4cc9fedeb4720efb0c58"}, 1999 | {file = "pydantic-1.8.1-py3-none-any.whl", hash = "sha256:e3f8790c47ac42549dc8b045a67b0ca371c7f66e73040d0197ce6172b385e520"}, 2000 | {file = "pydantic-1.8.1.tar.gz", hash = "sha256:26cf3cb2e68ec6c0cfcb6293e69fb3450c5fd1ace87f46b64f678b0d29eac4c3"}, 2001 | ] 2002 | pyflakes = [ 2003 | {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, 2004 | {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, 2005 | ] 2006 | pymorphy2 = [ 2007 | {file = "pymorphy2-0.9.1-py3-none-any.whl", hash = "sha256:a5224ec153cd6920a33961ae636793ad5185143bc8045b3f9a9f8bd62ecacf68"}, 2008 | {file = "pymorphy2-0.9.1.tar.gz", hash = "sha256:86c447157dee2eb2341efbe4538e1281a754756ba1aa32da77a89614c58b560c"}, 2009 | ] 2010 | pymorphy2-dicts = [ 2011 | {file = "pymorphy2-dicts-2.4.393442.3710985.tar.bz2", hash = "sha256:d563f2c7673fc28583550780e21440764eb0168b57d498ec07e346da70ce0b3c"}, 2012 | {file = "pymorphy2-dicts-2.4.393442.3710985.tar.gz", hash = "sha256:be7c6402b5f0919c1c942f07f89a7f53c70f6266a035fa0a561b23807ac79e4a"}, 2013 | {file = "pymorphy2_dicts-2.4.393442.3710985-py2.py3-none-any.whl", hash = "sha256:70d3e33fa28108a2dfcded787c7a5946c6ab88bb669b3afb20f8c447aadec924"}, 2014 | ] 2015 | pymorphy2-dicts-ru = [ 2016 | {file = "pymorphy2-dicts-ru-2.4.393658.3725883.tar.bz2", hash = "sha256:eaec32a2f8c49ea44d136f118b824fd07b01aca557bfcb6d9a8c0ec3ee512081"}, 2017 | {file = "pymorphy2-dicts-ru-2.4.393658.3725883.tar.gz", hash = "sha256:c59d7b3e6e0c82f420bf4a7fbd533d792c96e24c452944af9366d3cfb5629e73"}, 2018 | {file = "pymorphy2_dicts_ru-2.4.393658.3725883-py2.py3-none-any.whl", hash = "sha256:d46407034f8d030a810af92db877d688a92b78a4e093f64ffca2246f409a8ec8"}, 2019 | ] 2020 | pymorphy2-dicts-uk = [ 2021 | {file = "pymorphy2-dicts-uk-2.4.1.1.1460299261.tar.bz2", hash = "sha256:0bab7923ca6090b3c7cbd4dbc4433bcdadaf32ec8633c4ba04a8b838a3c47b53"}, 2022 | {file = "pymorphy2-dicts-uk-2.4.1.1.1460299261.tar.gz", hash = "sha256:9ed9f5332d46a9d4c74ca418bc2cc7427ee7822dff2ca2c666ace186d47b2245"}, 2023 | {file = "pymorphy2_dicts_uk-2.4.1.1.1460299261-py2.py3-none-any.whl", hash = "sha256:b8f713eb32c704e97347361c20cfc1782731600ce187fe2d66fd427c71481d0e"}, 2024 | ] 2025 | pyparsing = [ 2026 | {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, 2027 | {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, 2028 | ] 2029 | pytest = [ 2030 | {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, 2031 | {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, 2032 | ] 2033 | pytest-custom-exit-code = [ 2034 | {file = "pytest-custom_exit_code-0.3.0.tar.gz", hash = "sha256:51ffff0ee2c1ddcc1242e2ddb2a5fd02482717e33a2326ef330e3aa430244635"}, 2035 | {file = "pytest_custom_exit_code-0.3.0-py3-none-any.whl", hash = "sha256:6e0ce6e57ce3a583cb7e5023f7d1021e19dfec22be41d9ad345bae2fc61caf3b"}, 2036 | ] 2037 | pytest-forked = [ 2038 | {file = "pytest-forked-1.3.0.tar.gz", hash = "sha256:6aa9ac7e00ad1a539c41bec6d21011332de671e938c7637378ec9710204e37ca"}, 2039 | {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"}, 2040 | ] 2041 | pytest-freezegun = [ 2042 | {file = "pytest-freezegun-0.3.0.post1.zip", hash = "sha256:b86b13ef75959bedf4c32f1fd81fec66fa4502d9892e0ef6ad1717a34fe1560e"}, 2043 | {file = "pytest_freezegun-0.3.0.post1-py2.py3-none-any.whl", hash = "sha256:94c370a2cd3db9692962522cb74525d908e669df7cb53a448e01bb47c21a8173"}, 2044 | ] 2045 | pytest-lazy-fixture = [ 2046 | {file = "pytest-lazy-fixture-0.6.2.tar.gz", hash = "sha256:eb2f4573b371c690b91e637d09dfa30e2d6ba1234833df1920fc8b7b0d0fcebb"}, 2047 | {file = "pytest_lazy_fixture-0.6.2-py3-none-any.whl", hash = "sha256:bcdc184ef988abbde2d906330a7f681595c8e9753a5ff07c5a9860389aa3b766"}, 2048 | ] 2049 | pytest-mock = [ 2050 | {file = "pytest-mock-3.6.1.tar.gz", hash = "sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62"}, 2051 | {file = "pytest_mock-3.6.1-py3-none-any.whl", hash = "sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3"}, 2052 | ] 2053 | pytest-timeout = [ 2054 | {file = "pytest-timeout-1.4.2.tar.gz", hash = "sha256:20b3113cf6e4e80ce2d403b6fb56e9e1b871b510259206d40ff8d609f48bda76"}, 2055 | {file = "pytest_timeout-1.4.2-py2.py3-none-any.whl", hash = "sha256:541d7aa19b9a6b4e475c759fd6073ef43d7cdc9a92d95644c260076eb257a063"}, 2056 | ] 2057 | pytest-xdist = [ 2058 | {file = "pytest-xdist-2.3.0.tar.gz", hash = "sha256:e8ecde2f85d88fbcadb7d28cb33da0fa29bca5cf7d5967fa89fc0e97e5299ea5"}, 2059 | {file = "pytest_xdist-2.3.0-py3-none-any.whl", hash = "sha256:ed3d7da961070fce2a01818b51f6888327fb88df4379edeb6b9d990e789d9c8d"}, 2060 | ] 2061 | python-dateutil = [ 2062 | {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, 2063 | {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, 2064 | ] 2065 | python-editor = [ 2066 | {file = "python-editor-1.0.4.tar.gz", hash = "sha256:51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b"}, 2067 | {file = "python_editor-1.0.4-py2-none-any.whl", hash = "sha256:5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8"}, 2068 | {file = "python_editor-1.0.4-py2.7.egg", hash = "sha256:ea87e17f6ec459e780e4221f295411462e0d0810858e055fc514684350a2f522"}, 2069 | {file = "python_editor-1.0.4-py3-none-any.whl", hash = "sha256:1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d"}, 2070 | {file = "python_editor-1.0.4-py3.5.egg", hash = "sha256:c3da2053dbab6b29c94e43c486ff67206eafbe7eb52dbec7390b5e2fb05aac77"}, 2071 | ] 2072 | pyyaml = [ 2073 | {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, 2074 | {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, 2075 | {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, 2076 | {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, 2077 | {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, 2078 | {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, 2079 | {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, 2080 | {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, 2081 | {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, 2082 | {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, 2083 | {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, 2084 | {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, 2085 | {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, 2086 | {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, 2087 | {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, 2088 | {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, 2089 | {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, 2090 | {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, 2091 | {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, 2092 | {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, 2093 | {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, 2094 | {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, 2095 | {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, 2096 | {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, 2097 | {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, 2098 | {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, 2099 | {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, 2100 | {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, 2101 | {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, 2102 | ] 2103 | razdel = [ 2104 | {file = "razdel-0.5.0-py3-none-any.whl", hash = "sha256:76f59691c3216b47d32fef6274c18c12d61f602f1444b7ef4b135b03801f6d37"}, 2105 | {file = "razdel-0.5.0.tar.gz", hash = "sha256:4334c0fdfe34d4e888cf0ed854968c9df14f0a547df909a77f4634f9ffe626e6"}, 2106 | ] 2107 | redis = [ 2108 | {file = "redis-3.5.3-py2.py3-none-any.whl", hash = "sha256:432b788c4530cfe16d8d943a09d40ca6c16149727e4afe8c2c9d5580c59d9f24"}, 2109 | {file = "redis-3.5.3.tar.gz", hash = "sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2"}, 2110 | ] 2111 | regex = [ 2112 | {file = "regex-2021.8.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d05ad5367c90814099000442b2125535e9d77581855b9bee8780f1b41f2b1a2"}, 2113 | {file = "regex-2021.8.28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3bf1bc02bc421047bfec3343729c4bbbea42605bcfd6d6bfe2c07ade8b12d2a"}, 2114 | {file = "regex-2021.8.28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f6a808044faae658f546dd5f525e921de9fa409de7a5570865467f03a626fc0"}, 2115 | {file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a617593aeacc7a691cc4af4a4410031654f2909053bd8c8e7db837f179a630eb"}, 2116 | {file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79aef6b5cd41feff359acaf98e040844613ff5298d0d19c455b3d9ae0bc8c35a"}, 2117 | {file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0fc1f8f06977c2d4f5e3d3f0d4a08089be783973fc6b6e278bde01f0544ff308"}, 2118 | {file = "regex-2021.8.28-cp310-cp310-win32.whl", hash = "sha256:6eebf512aa90751d5ef6a7c2ac9d60113f32e86e5687326a50d7686e309f66ed"}, 2119 | {file = "regex-2021.8.28-cp310-cp310-win_amd64.whl", hash = "sha256:ac88856a8cbccfc14f1b2d0b829af354cc1743cb375e7f04251ae73b2af6adf8"}, 2120 | {file = "regex-2021.8.28-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c206587c83e795d417ed3adc8453a791f6d36b67c81416676cad053b4104152c"}, 2121 | {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8690ed94481f219a7a967c118abaf71ccc440f69acd583cab721b90eeedb77c"}, 2122 | {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:328a1fad67445550b982caa2a2a850da5989fd6595e858f02d04636e7f8b0b13"}, 2123 | {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c7cb4c512d2d3b0870e00fbbac2f291d4b4bf2634d59a31176a87afe2777c6f0"}, 2124 | {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66256b6391c057305e5ae9209941ef63c33a476b73772ca967d4a2df70520ec1"}, 2125 | {file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8e44769068d33e0ea6ccdf4b84d80c5afffe5207aa4d1881a629cf0ef3ec398f"}, 2126 | {file = "regex-2021.8.28-cp36-cp36m-win32.whl", hash = "sha256:08d74bfaa4c7731b8dac0a992c63673a2782758f7cfad34cf9c1b9184f911354"}, 2127 | {file = "regex-2021.8.28-cp36-cp36m-win_amd64.whl", hash = "sha256:abb48494d88e8a82601af905143e0de838c776c1241d92021e9256d5515b3645"}, 2128 | {file = "regex-2021.8.28-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b4c220a1fe0d2c622493b0a1fd48f8f991998fb447d3cd368033a4b86cf1127a"}, 2129 | {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a332404baa6665b54e5d283b4262f41f2103c255897084ec8f5487ce7b9e8e"}, 2130 | {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c61dcc1cf9fd165127a2853e2c31eb4fb961a4f26b394ac9fe5669c7a6592892"}, 2131 | {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ee329d0387b5b41a5dddbb6243a21cb7896587a651bebb957e2d2bb8b63c0791"}, 2132 | {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60667673ff9c249709160529ab39667d1ae9fd38634e006bec95611f632e759"}, 2133 | {file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b844fb09bd9936ed158ff9df0ab601e2045b316b17aa8b931857365ea8586906"}, 2134 | {file = "regex-2021.8.28-cp37-cp37m-win32.whl", hash = "sha256:4cde065ab33bcaab774d84096fae266d9301d1a2f5519d7bd58fc55274afbf7a"}, 2135 | {file = "regex-2021.8.28-cp37-cp37m-win_amd64.whl", hash = "sha256:1413b5022ed6ac0d504ba425ef02549a57d0f4276de58e3ab7e82437892704fc"}, 2136 | {file = "regex-2021.8.28-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ed4b50355b066796dacdd1cf538f2ce57275d001838f9b132fab80b75e8c84dd"}, 2137 | {file = "regex-2021.8.28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28fc475f560d8f67cc8767b94db4c9440210f6958495aeae70fac8faec631797"}, 2138 | {file = "regex-2021.8.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdc178caebd0f338d57ae445ef8e9b737ddf8fbc3ea187603f65aec5b041248f"}, 2139 | {file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:999ad08220467b6ad4bd3dd34e65329dd5d0df9b31e47106105e407954965256"}, 2140 | {file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:808ee5834e06f57978da3e003ad9d6292de69d2bf6263662a1a8ae30788e080b"}, 2141 | {file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d5111d4c843d80202e62b4fdbb4920db1dcee4f9366d6b03294f45ed7b18b42e"}, 2142 | {file = "regex-2021.8.28-cp38-cp38-win32.whl", hash = "sha256:473858730ef6d6ff7f7d5f19452184cd0caa062a20047f6d6f3e135a4648865d"}, 2143 | {file = "regex-2021.8.28-cp38-cp38-win_amd64.whl", hash = "sha256:31a99a4796bf5aefc8351e98507b09e1b09115574f7c9dbb9cf2111f7220d2e2"}, 2144 | {file = "regex-2021.8.28-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04f6b9749e335bb0d2f68c707f23bb1773c3fb6ecd10edf0f04df12a8920d468"}, 2145 | {file = "regex-2021.8.28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b006628fe43aa69259ec04ca258d88ed19b64791693df59c422b607b6ece8bb"}, 2146 | {file = "regex-2021.8.28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:121f4b3185feaade3f85f70294aef3f777199e9b5c0c0245c774ae884b110a2d"}, 2147 | {file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a577a21de2ef8059b58f79ff76a4da81c45a75fe0bfb09bc8b7bb4293fa18983"}, 2148 | {file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1743345e30917e8c574f273f51679c294effba6ad372db1967852f12c76759d8"}, 2149 | {file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e1e8406b895aba6caa63d9fd1b6b1700d7e4825f78ccb1e5260551d168db38ed"}, 2150 | {file = "regex-2021.8.28-cp39-cp39-win32.whl", hash = "sha256:ed283ab3a01d8b53de3a05bfdf4473ae24e43caee7dcb5584e86f3f3e5ab4374"}, 2151 | {file = "regex-2021.8.28-cp39-cp39-win_amd64.whl", hash = "sha256:610b690b406653c84b7cb6091facb3033500ee81089867ee7d59e675f9ca2b73"}, 2152 | {file = "regex-2021.8.28.tar.gz", hash = "sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1"}, 2153 | ] 2154 | requests = [ 2155 | {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, 2156 | {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, 2157 | ] 2158 | requests-mock = [ 2159 | {file = "requests-mock-1.9.3.tar.gz", hash = "sha256:8d72abe54546c1fc9696fa1516672f1031d72a55a1d66c85184f972a24ba0eba"}, 2160 | {file = "requests_mock-1.9.3-py2.py3-none-any.whl", hash = "sha256:0a2d38a117c08bb78939ec163522976ad59a6b7fdd82b709e23bb98004a44970"}, 2161 | ] 2162 | selenium = [ 2163 | {file = "selenium-3.141.0-py2.py3-none-any.whl", hash = "sha256:2d7131d7bc5a5b99a2d9b04aaf2612c411b03b8ca1b1ee8d3de5845a9be2cb3c"}, 2164 | {file = "selenium-3.141.0.tar.gz", hash = "sha256:deaf32b60ad91a4611b98d8002757f29e6f2c2d5fcaf202e1c9ad06d6772300d"}, 2165 | ] 2166 | shellingham = [ 2167 | {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, 2168 | {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, 2169 | ] 2170 | six = [ 2171 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 2172 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 2173 | ] 2174 | sortedcontainers = [ 2175 | {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, 2176 | {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, 2177 | ] 2178 | sqlalchemy = [ 2179 | {file = "SQLAlchemy-1.3.23-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:fd3b96f8c705af8e938eaa99cbd8fd1450f632d38cad55e7367c33b263bf98ec"}, 2180 | {file = "SQLAlchemy-1.3.23-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:29cccc9606750fe10c5d0e8bd847f17a97f3850b8682aef1f56f5d5e1a5a64b1"}, 2181 | {file = "SQLAlchemy-1.3.23-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:927ce09e49bff3104459e1451ce82983b0a3062437a07d883a4c66f0b344c9b5"}, 2182 | {file = "SQLAlchemy-1.3.23-cp27-cp27m-win32.whl", hash = "sha256:b4b0e44d586cd64b65b507fa116a3814a1a53d55dce4836d7c1a6eb2823ff8d1"}, 2183 | {file = "SQLAlchemy-1.3.23-cp27-cp27m-win_amd64.whl", hash = "sha256:6b8b8c80c7f384f06825612dd078e4a31f0185e8f1f6b8c19e188ff246334205"}, 2184 | {file = "SQLAlchemy-1.3.23-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9e9c25522933e569e8b53ccc644dc993cab87e922fb7e142894653880fdd419d"}, 2185 | {file = "SQLAlchemy-1.3.23-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:a0e306e9bb76fd93b29ae3a5155298e4c1b504c7cbc620c09c20858d32d16234"}, 2186 | {file = "SQLAlchemy-1.3.23-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:6c9e6cc9237de5660bcddea63f332428bb83c8e2015c26777281f7ffbd2efb84"}, 2187 | {file = "SQLAlchemy-1.3.23-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:94f667d86be82dd4cb17d08de0c3622e77ca865320e0b95eae6153faa7b4ecaf"}, 2188 | {file = "SQLAlchemy-1.3.23-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:751934967f5336a3e26fc5993ccad1e4fee982029f9317eb6153bc0bc3d2d2da"}, 2189 | {file = "SQLAlchemy-1.3.23-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:63677d0c08524af4c5893c18dbe42141de7178001360b3de0b86217502ed3601"}, 2190 | {file = "SQLAlchemy-1.3.23-cp35-cp35m-win32.whl", hash = "sha256:ddfb511e76d016c3a160910642d57f4587dc542ce5ee823b0d415134790eeeb9"}, 2191 | {file = "SQLAlchemy-1.3.23-cp35-cp35m-win_amd64.whl", hash = "sha256:040bdfc1d76a9074717a3f43455685f781c581f94472b010cd6c4754754e1862"}, 2192 | {file = "SQLAlchemy-1.3.23-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:d1a85dfc5dee741bf49cb9b6b6b8d2725a268e4992507cf151cba26b17d97c37"}, 2193 | {file = "SQLAlchemy-1.3.23-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:639940bbe1108ac667dcffc79925db2966826c270112e9159439ab6bb14f8d80"}, 2194 | {file = "SQLAlchemy-1.3.23-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e8a1750b44ad6422ace82bf3466638f1aa0862dbb9689690d5f2f48cce3476c8"}, 2195 | {file = "SQLAlchemy-1.3.23-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e5bb3463df697279e5459a7316ad5a60b04b0107f9392e88674d0ece70e9cf70"}, 2196 | {file = "SQLAlchemy-1.3.23-cp36-cp36m-win32.whl", hash = "sha256:e273367f4076bd7b9a8dc2e771978ef2bfd6b82526e80775a7db52bff8ca01dd"}, 2197 | {file = "SQLAlchemy-1.3.23-cp36-cp36m-win_amd64.whl", hash = "sha256:ac2244e64485c3778f012951fdc869969a736cd61375fde6096d08850d8be729"}, 2198 | {file = "SQLAlchemy-1.3.23-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:23927c3981d1ec6b4ea71eb99d28424b874d9c696a21e5fbd9fa322718be3708"}, 2199 | {file = "SQLAlchemy-1.3.23-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d90010304abb4102123d10cbad2cdf2c25a9f2e66a50974199b24b468509bad5"}, 2200 | {file = "SQLAlchemy-1.3.23-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a8bfc1e1afe523e94974132d7230b82ca7fa2511aedde1f537ec54db0399541a"}, 2201 | {file = "SQLAlchemy-1.3.23-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:269990b3ab53cb035d662dcde51df0943c1417bdab707dc4a7e4114a710504b4"}, 2202 | {file = "SQLAlchemy-1.3.23-cp37-cp37m-win32.whl", hash = "sha256:fdd2ed7395df8ac2dbb10cefc44737b66c6a5cd7755c92524733d7a443e5b7e2"}, 2203 | {file = "SQLAlchemy-1.3.23-cp37-cp37m-win_amd64.whl", hash = "sha256:6a939a868fdaa4b504e8b9d4a61f21aac11e3fecc8a8214455e144939e3d2aea"}, 2204 | {file = "SQLAlchemy-1.3.23-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:24f9569e82a009a09ce2d263559acb3466eba2617203170e4a0af91e75b4f075"}, 2205 | {file = "SQLAlchemy-1.3.23-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2578dbdbe4dbb0e5126fb37ffcd9793a25dcad769a95f171a2161030bea850ff"}, 2206 | {file = "SQLAlchemy-1.3.23-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:1fe5d8d39118c2b018c215c37b73fd6893c3e1d4895be745ca8ff6eb83333ed3"}, 2207 | {file = "SQLAlchemy-1.3.23-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:c7dc052432cd5d060d7437e217dd33c97025287f99a69a50e2dc1478dd610d64"}, 2208 | {file = "SQLAlchemy-1.3.23-cp38-cp38-win32.whl", hash = "sha256:ecce8c021894a77d89808222b1ff9687ad84db54d18e4bd0500ca766737faaf6"}, 2209 | {file = "SQLAlchemy-1.3.23-cp38-cp38-win_amd64.whl", hash = "sha256:37b83bf81b4b85dda273aaaed5f35ea20ad80606f672d94d2218afc565fb0173"}, 2210 | {file = "SQLAlchemy-1.3.23-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:8be835aac18ec85351385e17b8665bd4d63083a7160a017bef3d640e8e65cadb"}, 2211 | {file = "SQLAlchemy-1.3.23-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6ec1044908414013ebfe363450c22f14698803ce97fbb47e53284d55c5165848"}, 2212 | {file = "SQLAlchemy-1.3.23-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:eab063a70cca4a587c28824e18be41d8ecc4457f8f15b2933584c6c6cccd30f0"}, 2213 | {file = "SQLAlchemy-1.3.23-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:baeb451ee23e264de3f577fee5283c73d9bbaa8cb921d0305c0bbf700094b65b"}, 2214 | {file = "SQLAlchemy-1.3.23-cp39-cp39-win32.whl", hash = "sha256:94208867f34e60f54a33a37f1c117251be91a47e3bfdb9ab8a7847f20886ad06"}, 2215 | {file = "SQLAlchemy-1.3.23-cp39-cp39-win_amd64.whl", hash = "sha256:f4d972139d5000105fcda9539a76452039434013570d6059993120dc2a65e447"}, 2216 | {file = "SQLAlchemy-1.3.23.tar.gz", hash = "sha256:6fca33672578666f657c131552c4ef8979c1606e494f78cd5199742dfb26918b"}, 2217 | ] 2218 | sqlalchemy-stubs = [ 2219 | {file = "sqlalchemy-stubs-0.3.tar.gz", hash = "sha256:a3318c810697164e8c818aa2d90bac570c1a0e752ced3ec25455b309c0bee8fd"}, 2220 | {file = "sqlalchemy_stubs-0.3-py3-none-any.whl", hash = "sha256:ca1250605a39648cc433f5c70cb1a6f9fe0b60bdda4c51e1f9a2ab3651daadc8"}, 2221 | ] 2222 | sqlalchemy-utc = [ 2223 | {file = "SQLAlchemy-Utc-0.11.0.tar.gz", hash = "sha256:62e1a62ce7a2379a4655a9edb21a9bc1b292383f6f774a713dd5068dd152918a"}, 2224 | {file = "SQLAlchemy_Utc-0.11.0-py2.py3-none-any.whl", hash = "sha256:b0bdda2d442d40b02559e2a7ad28f40e867abd0f8c4f513fefc63c8a02935158"}, 2225 | ] 2226 | sqlalchemy-utils = [ 2227 | {file = "SQLAlchemy-Utils-0.36.8.tar.gz", hash = "sha256:fb66e9956e41340011b70b80f898fde6064ec1817af77199ee21ace71d7d6ab0"}, 2228 | ] 2229 | starlette = [ 2230 | {file = "starlette-0.13.6-py3-none-any.whl", hash = "sha256:bd2ffe5e37fb75d014728511f8e68ebf2c80b0fa3d04ca1479f4dc752ae31ac9"}, 2231 | {file = "starlette-0.13.6.tar.gz", hash = "sha256:ebe8ee08d9be96a3c9f31b2cb2a24dbdf845247b745664bd8a3f9bd0c977fdbc"}, 2232 | ] 2233 | tenacity = [ 2234 | {file = "tenacity-8.0.1-py3-none-any.whl", hash = "sha256:f78f4ea81b0fabc06728c11dc2a8c01277bfc5181b321a4770471902e3eb844a"}, 2235 | {file = "tenacity-8.0.1.tar.gz", hash = "sha256:43242a20e3e73291a28bcbcacfd6e000b02d3857a9a9fff56b297a27afdc932f"}, 2236 | ] 2237 | testfixtures = [ 2238 | {file = "testfixtures-6.18.1-py2.py3-none-any.whl", hash = "sha256:486be7b01eb71326029811878a3317b7e7994324621c0ec633c8e24499d8d5b3"}, 2239 | {file = "testfixtures-6.18.1.tar.gz", hash = "sha256:0a6422737f6d89b45cdef1e2df5576f52ad0f507956002ce1020daa9f44211d6"}, 2240 | ] 2241 | timeout-decorator = [ 2242 | {file = "timeout-decorator-0.5.0.tar.gz", hash = "sha256:6a2f2f58db1c5b24a2cc79de6345760377ad8bdc13813f5265f6c3e63d16b3d7"}, 2243 | ] 2244 | tmuxp = [ 2245 | {file = "tmuxp-1.9.2-py3-none-any.whl", hash = "sha256:711382be3e106519cddbc45ee84d685efa16c93bb48e63e8bddb4a15a5cceedb"}, 2246 | {file = "tmuxp-1.9.2.tar.gz", hash = "sha256:dd19536c8abb506bc411232f9dcabdedb863270f0ee26fb468555980140ec243"}, 2247 | ] 2248 | toml = [ 2249 | {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, 2250 | {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, 2251 | ] 2252 | transliterate = [ 2253 | {file = "transliterate-1.10.2-py2.py3-none-any.whl", hash = "sha256:010a5021bf6021689c4fade0985f3f7b3db1f2f16a48a09a56797f171c08ed42"}, 2254 | {file = "transliterate-1.10.2.tar.gz", hash = "sha256:bc608e0d48e687db9c2b1d7ea7c381afe0d1849cad216087d8e03d8d06a57c85"}, 2255 | ] 2256 | typed-ast = [ 2257 | {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6"}, 2258 | {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075"}, 2259 | {file = "typed_ast-1.4.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528"}, 2260 | {file = "typed_ast-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428"}, 2261 | {file = "typed_ast-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3"}, 2262 | {file = "typed_ast-1.4.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f"}, 2263 | {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341"}, 2264 | {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace"}, 2265 | {file = "typed_ast-1.4.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f"}, 2266 | {file = "typed_ast-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363"}, 2267 | {file = "typed_ast-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7"}, 2268 | {file = "typed_ast-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266"}, 2269 | {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e"}, 2270 | {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04"}, 2271 | {file = "typed_ast-1.4.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899"}, 2272 | {file = "typed_ast-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c"}, 2273 | {file = "typed_ast-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805"}, 2274 | {file = "typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a"}, 2275 | {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff"}, 2276 | {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41"}, 2277 | {file = "typed_ast-1.4.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39"}, 2278 | {file = "typed_ast-1.4.3-cp38-cp38-win32.whl", hash = "sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927"}, 2279 | {file = "typed_ast-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40"}, 2280 | {file = "typed_ast-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3"}, 2281 | {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4"}, 2282 | {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0"}, 2283 | {file = "typed_ast-1.4.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3"}, 2284 | {file = "typed_ast-1.4.3-cp39-cp39-win32.whl", hash = "sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808"}, 2285 | {file = "typed_ast-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c"}, 2286 | {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, 2287 | ] 2288 | typer = [ 2289 | {file = "typer-0.3.2-py3-none-any.whl", hash = "sha256:ba58b920ce851b12a2d790143009fa00ac1d05b3ff3257061ff69dbdfc3d161b"}, 2290 | {file = "typer-0.3.2.tar.gz", hash = "sha256:5455d750122cff96745b0dec87368f56d023725a7ebc9d2e54dd23dc86816303"}, 2291 | ] 2292 | types-cachetools = [ 2293 | {file = "types-cachetools-0.1.10.tar.gz", hash = "sha256:f2727cf379989ba4d081f9ed11ec28c6730adbd120dc0deb2036c5ef69e515e0"}, 2294 | {file = "types_cachetools-0.1.10-py3-none-any.whl", hash = "sha256:76d312d6e55fe19f7a2ea9a3271945e6f5c56f4fd76cc3cb2366109785f3462b"}, 2295 | ] 2296 | types-click = [ 2297 | {file = "types-click-7.1.5.tar.gz", hash = "sha256:ced04123d857f5b05df7c6b10e9710e66cf2ec7d99d4ee48d04a07f4c1a83ad4"}, 2298 | {file = "types_click-7.1.5-py3-none-any.whl", hash = "sha256:3547c4346884551d8c5a6320aa26a26f16a3257aebd975843fdeb2cbaf156911"}, 2299 | ] 2300 | types-flask = [ 2301 | {file = "types-Flask-1.1.3.tar.gz", hash = "sha256:c9e476d9e584d804b5ddd5a35ac8b7f46dba13560a43fd0e1b1215419fd992aa"}, 2302 | {file = "types_Flask-1.1.3-py3-none-any.whl", hash = "sha256:07558b77d418004e011561abacd5d1f1e1419ae77c8866d57ce08806ef8cffee"}, 2303 | ] 2304 | types-jinja2 = [ 2305 | {file = "types-Jinja2-2.11.6.tar.gz", hash = "sha256:93450ccfaea23c3c7f5a80f65d744f26d317c1a8608c15d49af63d40eafc6fd1"}, 2306 | {file = "types_Jinja2-2.11.6-py3-none-any.whl", hash = "sha256:4e1f31d0e31a564a44b0b0f9b8392f890806ad974f41490c1279b72aff9c5be4"}, 2307 | ] 2308 | types-markupsafe = [ 2309 | {file = "types-MarkupSafe-1.1.6.tar.gz", hash = "sha256:7014f5b578b419967c64ff65cb230636ec20c37b6e22e58a88969b1f78f029c4"}, 2310 | {file = "types_MarkupSafe-1.1.6-py3-none-any.whl", hash = "sha256:1dd3c3f6e913434282a37f847be51bf6d40117b16b6b2e84b79d568275f21784"}, 2311 | ] 2312 | types-orjson = [ 2313 | {file = "types-orjson-0.1.1.tar.gz", hash = "sha256:7454bfbaed27900a844bb9d8e211b69f1c335f0b9e3541d4950a793db41c104d"}, 2314 | {file = "types_orjson-0.1.1-py2.py3-none-any.whl", hash = "sha256:92f85986261ea1a5cb215e4b35e4016631d35163a372f023918750f340ea737f"}, 2315 | ] 2316 | types-pytz = [ 2317 | {file = "types-pytz-0.1.2.tar.gz", hash = "sha256:923976ea4b55c00a5b51daad8f497519780315f7b298a49550e22176f5a8f6d5"}, 2318 | {file = "types_pytz-0.1.2-py2.py3-none-any.whl", hash = "sha256:e2fb8cc82d8dc1d2f20b2776645cf74a65a8dfc9bd26a33adb9ebd2c03e0f8f8"}, 2319 | ] 2320 | types-pyyaml = [ 2321 | {file = "types-PyYAML-5.4.10.tar.gz", hash = "sha256:1d9e431e9f1f78a65ea957c558535a3b15ad67ea4912bce48a6c1b613dcf81ad"}, 2322 | {file = "types_PyYAML-5.4.10-py3-none-any.whl", hash = "sha256:f1d1357168988e45fa20c65aecb3911462246a84809015dd889ebf8b1db74124"}, 2323 | ] 2324 | types-redis = [ 2325 | {file = "types-redis-3.5.7.tar.gz", hash = "sha256:da4d966e9fd6b1d80af82fadfbf1f7843119742dc24039663b896c0c574e4b34"}, 2326 | {file = "types_redis-3.5.7-py3-none-any.whl", hash = "sha256:40b0b4b6ddb107a5c5fcf1d7bdfc7ebd6832b9ea644f8e32c1ab007575377951"}, 2327 | ] 2328 | types-requests = [ 2329 | {file = "types-requests-0.1.13.tar.gz", hash = "sha256:917d6d0a8d8fe2d084ab6dc28d379ec4e6fa34738e905908680bbfa0ce2d8485"}, 2330 | {file = "types_requests-0.1.13-py3-none-any.whl", hash = "sha256:f7e611082208358045fdeac6edb5d20422ce8cfc935d57dbbef6a6b3a59bfae2"}, 2331 | ] 2332 | types-werkzeug = [ 2333 | {file = "types-Werkzeug-1.0.5.tar.gz", hash = "sha256:f6216ab0e0211fe73ebdb4ae0e414113d4d8a2f783a15c2d8550e06d0fd8e7f9"}, 2334 | {file = "types_Werkzeug-1.0.5-py3-none-any.whl", hash = "sha256:428a07d828a2c3dc6979b2ef2a79345ab33c54e070d5af319c038e6ccdfd3387"}, 2335 | ] 2336 | typing-extensions = [ 2337 | {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, 2338 | {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, 2339 | {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, 2340 | ] 2341 | unify = [ 2342 | {file = "unify-0.5.tar.gz", hash = "sha256:8ddce812b2457212b7598fe574c9e6eb3ad69710f445391338270c7f8a71723c"}, 2343 | ] 2344 | untokenize = [ 2345 | {file = "untokenize-0.1.1.tar.gz", hash = "sha256:3865dbbbb8efb4bb5eaa72f1be7f3e0be00ea8b7f125c69cbd1f5fda926f37a2"}, 2346 | ] 2347 | urllib3 = [ 2348 | {file = "urllib3-1.26.6-py2.py3-none-any.whl", hash = "sha256:39fb8672126159acb139a7718dd10806104dec1e2f0f6c88aab05d17df10c8d4"}, 2349 | {file = "urllib3-1.26.6.tar.gz", hash = "sha256:f57b4c16c62fa2760b7e3d97c35b255512fb6b59a259730f36ba32ce9f8e342f"}, 2350 | ] 2351 | uvicorn = [ 2352 | {file = "uvicorn-0.8.6.tar.gz", hash = "sha256:8aa44f9d9c3082ef693950387ea25d376e32944df6d4071dbd8edc3c25a40c74"}, 2353 | ] 2354 | uvloop = [ 2355 | {file = "uvloop-0.12.2-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:ac1dca3d8f3ef52806059e81042ee397ac939e5a86c8a3cea55d6b087db66115"}, 2356 | {file = "uvloop-0.12.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c200457e6847f28d8bb91c5e5039d301716f5f2fce25646f5fb3fd65eda4a26"}, 2357 | {file = "uvloop-0.12.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:fefc3b2b947c99737c348887db2c32e539160dcbeb7af9aa6b53db7a283538fe"}, 2358 | {file = "uvloop-0.12.2-cp36-cp36m-macosx_10_11_x86_64.whl", hash = "sha256:958906b9ca39eb158414fbb7d6b8ef1b7aee4db5c8e8e5d00fcbb69a1ce9dca7"}, 2359 | {file = "uvloop-0.12.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:67867aafd6e0bc2c30a079603a85d83b94f23c5593b3cc08ec7e58ac18bf48e5"}, 2360 | {file = "uvloop-0.12.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2f31de1742c059c96cb76b91c5275b22b22b965c886ee1fced093fa27dde9e64"}, 2361 | {file = "uvloop-0.12.2-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:b284c22d8938866318e3b9d178142b8be316c52d16fcfe1560685a686718a021"}, 2362 | {file = "uvloop-0.12.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0fcd894f6fc3226a962ee7ad895c4f52e3f5c3c55098e21efb17c071849a0573"}, 2363 | {file = "uvloop-0.12.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:459e4649fcd5ff719523de33964aa284898e55df62761e7773d088823ccbd3e0"}, 2364 | {file = "uvloop-0.12.2.tar.gz", hash = "sha256:c48692bf4587ce281d641087658eca275a5ad3b63c78297bbded96570ae9ce8f"}, 2365 | ] 2366 | websockets = [ 2367 | {file = "websockets-7.0-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:8e447e05ec88b1b408a4c9cde85aa6f4b04f06aa874b9f0b8e8319faf51b1fee"}, 2368 | {file = "websockets-7.0-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:5eda665f6789edb9b57b57a159b9c55482cbe5b046d7db458948370554b16439"}, 2369 | {file = "websockets-7.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:5edb2524d4032be4564c65dc4f9d01e79fe8fad5f966e5b552f4e5164fef0885"}, 2370 | {file = "websockets-7.0-cp34-cp34m-win32.whl", hash = "sha256:e98d0cec437097f09c7834a11c69d79fe6241729b23f656cfc227e93294fc242"}, 2371 | {file = "websockets-7.0-cp34-cp34m-win_amd64.whl", hash = "sha256:90ea6b3e7787620bb295a4ae050d2811c807d65b1486749414f78cfd6fb61489"}, 2372 | {file = "websockets-7.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:55d86102282a636e195dad68aaaf85b81d0bef449d7e2ef2ff79ac450bb25d53"}, 2373 | {file = "websockets-7.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e1df1a58ed2468c7b7ce9a2f9752a32ad08eac2bcd56318625c3647c2cd2da6f"}, 2374 | {file = "websockets-7.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:10d89d4326045bf5e15e83e9867c85d686b612822e4d8f149cf4840aab5f46e0"}, 2375 | {file = "websockets-7.0-cp35-cp35m-win32.whl", hash = "sha256:564d2675682bd497b59907d2205031acbf7d3fadf8c763b689b9ede20300b215"}, 2376 | {file = "websockets-7.0-cp35-cp35m-win_amd64.whl", hash = "sha256:d40f081187f7b54d7a99d8a5c782eaa4edc335a057aa54c85059272ed826dc09"}, 2377 | {file = "websockets-7.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:4bf4c8097440eff22bc78ec76fe2a865a6e658b6977a504679aaf08f02c121da"}, 2378 | {file = "websockets-7.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:51642ea3a00772d1e48fb0c492f0d3ae3b6474f34d20eca005a83f8c9c06c561"}, 2379 | {file = "websockets-7.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:79691794288bc51e2a3b8de2bc0272ca8355d0b8503077ea57c0716e840ebaef"}, 2380 | {file = "websockets-7.0-cp36-cp36m-win32.whl", hash = "sha256:5d13bf5197a92149dc0badcc2b699267ff65a867029f465accfca8abab95f412"}, 2381 | {file = "websockets-7.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7fcc8681e9981b9b511cdee7c580d5b005f3bb86b65bde2188e04a29f1d63317"}, 2382 | {file = "websockets-7.0-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:fc30cdf2e949a2225b012a7911d1d031df3d23e99b7eda7dfc982dc4a860dae9"}, 2383 | {file = "websockets-7.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f8d59627702d2ff27cb495ca1abdea8bd8d581de425c56e93bff6517134e0a9b"}, 2384 | {file = "websockets-7.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:232fac8a1978fc1dead4b1c2fa27c7756750fb393eb4ac52f6bc87ba7242b2fa"}, 2385 | {file = "websockets-7.0-cp37-cp37m-win32.whl", hash = "sha256:04b42a1b57096ffa5627d6a78ea1ff7fad3bc2c0331ffc17bc32a4024da7fea0"}, 2386 | {file = "websockets-7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9e13239952694b8b831088431d15f771beace10edfcf9ef230cefea14f18508f"}, 2387 | {file = "websockets-7.0.tar.gz", hash = "sha256:08e3c3e0535befa4f0c4443824496c03ecc25062debbcf895874f8a0b4c97c9f"}, 2388 | ] 2389 | werkzeug = [ 2390 | {file = "Werkzeug-1.0.1-py2.py3-none-any.whl", hash = "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43"}, 2391 | {file = "Werkzeug-1.0.1.tar.gz", hash = "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"}, 2392 | ] 2393 | wrapt = [ 2394 | {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, 2395 | ] 2396 | wtforms = [ 2397 | {file = "WTForms-2.3.3-py2.py3-none-any.whl", hash = "sha256:7b504fc724d0d1d4d5d5c114e778ec88c37ea53144683e084215eed5155ada4c"}, 2398 | {file = "WTForms-2.3.3.tar.gz", hash = "sha256:81195de0ac94fbc8368abbaf9197b88c4f3ffd6c2719b5bf5fc9da744f3d829c"}, 2399 | ] 2400 | yarl = [ 2401 | {file = "yarl-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:d9ca55a5a297408f08e5401c23ad22bd9f580dab899212f0d5dc1830f0909404"}, 2402 | {file = "yarl-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:17e57a495efea42bcfca08b49e16c6d89e003acd54c99c903ea1cb3de0ba1248"}, 2403 | {file = "yarl-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:3353fae45d93cc3e7e41bfcb1b633acc37db821d368e660b03068dbfcf68f8c8"}, 2404 | {file = "yarl-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:51a084ff8756811101f8b5031a14d1c2dd26c666976e1b18579c6b1c8761a102"}, 2405 | {file = "yarl-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:045dbba18c9142278113d5dc62622978a6f718ba662392d406141c59b540c514"}, 2406 | {file = "yarl-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:213e8f54b4a942532d6ac32314c69a147d3b82fa1725ca05061b7c1a19a1d9b1"}, 2407 | {file = "yarl-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:7236eba4911a5556b497235828e7a4bc5d90957efa63b7c4b3e744d2d2cf1b94"}, 2408 | {file = "yarl-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:e9a6a319c4bbfb57618f207e86a7c519ab0f637be3d2366e4cdac271577834b8"}, 2409 | {file = "yarl-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:6e75753065c310befab71c5077a59b7cb638d2146b1cfbb1c3b8f08b51362714"}, 2410 | {file = "yarl-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:64727a2593fdba5d6ef69e94eba793a196deeda7152c7bd3a64edda6b1f95f6e"}, 2411 | {file = "yarl-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:5580f22ac1298261cd24e8e584180d83e2cca9a6167113466d2d16cb2aa1f7b1"}, 2412 | {file = "yarl-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e072edbd1c5628c0b8f97d00cf6c9fcd6a4ee2b5ded10d463fcb6eaa066cf40c"}, 2413 | {file = "yarl-1.1.1.tar.gz", hash = "sha256:a69dd7e262cdb265ac7d5e929d55f2f3d07baaadd158c8f19caebf8dde08dfe8"}, 2414 | ] 2415 | zipp = [ 2416 | {file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"}, 2417 | {file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"}, 2418 | ] 2419 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "wizard" 3 | version = "1.0.0" 4 | description = "Wizard admin" 5 | authors = [ 6 | "Iya Ivanikov ", 7 | "Tinkoff Dialog System Backend Team " 8 | ] 9 | 10 | [tool.poetry.scripts] 11 | chatbot = 'cli:main_app' 12 | 13 | 14 | [tool.poetry.dependencies] 15 | python = "~3.7" 16 | 17 | pyyaml = "*" 18 | gunicorn = "~19.9.0" 19 | fastapi = "0.61.2" 20 | uvicorn = "^0.8.4" 21 | click = {version = "*", optional = true} 22 | pymorphy2 = {version = '>=0.8',extras = ['fast']} 23 | pymorphy2-dicts = '==2.4.393442.3710985' 24 | pymorphy2-dicts-ru = '==2.4.393658.3725883' 25 | pymorphy2-dicts-uk = '==2.4.1.1.1460299261' 26 | requests = '*' 27 | yarl = "<=1.1.1" 28 | lazy = "*" 29 | tenacity = "*" 30 | razdel = "^0.5.0" 31 | fakeredis = "^1.0" 32 | redis = "^3.3" 33 | importlib_metadata = "^1.7.0" 34 | pydantic = "1.8.1" 35 | sqlalchemy = "1.3.23" 36 | psycopg2-binary = "^2.8" 37 | expiringdict = "^1.2" 38 | sqlalchemy-utils = "^0.36.4" 39 | transliterate = "^1.10" 40 | alembic = "==1.5.8" 41 | deprecated = "^1.2" 42 | typer = {extras = ["all"], version = "^0.3.2"} 43 | flask = '^1.0' 44 | contextvars = '*' 45 | lru-dict = "*" 46 | flask-admin = "^1.5.6" 47 | 48 | prometheus_client = "^0.8.0" 49 | fastapi-utils = "^0.2.1" 50 | timeout-decorator = "*" 51 | typing-extensions = "^3.7.4" 52 | sqlalchemy-utc = "^0.11.0" 53 | cached-property = "^1.5.2" 54 | more-itertools = "^8.8.0" 55 | cachetools = "^4.2.2" 56 | 57 | 58 | [tool.poetry.dev-dependencies] 59 | pytest = ">=6.0.0" 60 | pytest-timeout = "^1.4.2" 61 | mypy = "*" 62 | flake8-awesome = "<1.3" 63 | pep8-naming = "*" 64 | black = "^19.10b0" 65 | isort = "*" 66 | unify = "*" 67 | requests-mock = '*' 68 | pytest-mock = '*' 69 | pytest-freezegun = "^0.3.0" 70 | pytest-lazy-fixture = "0.6.2" 71 | pytest-custom_exit_code = "^0.3.0" 72 | sqlalchemy-stubs = "^0.3.0" 73 | tmuxp = "*" 74 | filelock = "^3.0.12" 75 | types-pytz = "^0.1.1" 76 | types-werkzeug = "^1.0.1" 77 | types-flask = "^1.1.0" 78 | types-requests = "^0.1.11" 79 | types-redis = "^3.5.1" 80 | types-pyyaml = "^5.4.0" 81 | types-orjson = "^0.1.1" 82 | types-cachetools = "^0.1.9" 83 | selenium = "^3.141.0" 84 | allure-pytest = "^2.9.43" 85 | pytest-xdist = "^2.3.0" 86 | alchemy-mock = "^0.4.3" 87 | 88 | [tool.black] 89 | line-length = 120 90 | target-version = ['py37'] 91 | skip-string-normalization = true 92 | exclude = ".*db/versions" 93 | 94 | [build-system] 95 | requires = ["poetry>=1.1.1"] 96 | build-backend = "poetry.masonry.api" 97 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [tool:pytest] 2 | python_files = test_*.py 3 | python_functions = test_* 4 | python_classes = *Test Test* 5 | filterwarnings = 6 | ignore::DeprecationWarning 7 | ignore::FutureWarning 8 | log_level = INFO 9 | markers = 10 | freeze_time: pytest-freezegun 11 | addopts = --suppress-no-test-exit-code 12 | 13 | [flake8] 14 | max-line-length = 120 15 | max-complexity = 20 16 | show-source = true 17 | exclude = 18 | __init__.py 19 | .git 20 | .venv 21 | */db/versions 22 | enable-extensions = G 23 | 24 | ignore = 25 | E203 ; whitespace before ':' 26 | E231 ; whitespace before ':' 27 | C901 ; 'NumeralNormalizer.normalize_numbers_by_tokens' is too complex (21) 28 | W503 ; line break before binary operator 29 | A003 ; XXX is a python builtin, consider renaming the class attribute 30 | A001 ; "id" is a python builtin and is being shadowed, consider renaming the variable 31 | N805 ; first argument of a method should be named 'self' 32 | PT004 ; fixture does not return anything, add leading underscore 33 | PT011 ; set the match parameter in pytest.raises(ValueError) 34 | PT012 ; pytest.raises() block should contain a single simple statement 35 | PT019 ; fixture ... without value is injected as parameter, use @pytest.mark.usefixtures instead 36 | PT023 ; use @pytest.mark 37 | D100 ; Missing docstring in public module 38 | D101 ; Missing docstring in public class 39 | D102 ; Missing docstring in public method 40 | D103 ; Missing docstring in public function 41 | D104 ; Missing docstring in public package 42 | D105 ; Missing docstring in magic method 43 | D106 ; Missing docstring in public nested class 44 | D107 ; Missing docstring in __init__ 45 | D205 ; 1 blank line required between summary line and description 46 | D210 ; No whitespaces allowed surrounding docstring text 47 | D401 ; First line should be in imperative mood; try rephrasing 48 | C408 ; Unnecessary dict call - rewrite as a literal 49 | PT018 ; assertion should be broken down into multiple parts 50 | PT019 ; fixture without value is injected as parameter 51 | F821 ; 52 | PT006 ; wrong name(s) type in @pytest.mark.parametrize, expected tuple 53 | PT007 ; wrong values type in @pytest.mark.parametrize, expected list of tuples 54 | IF100 ; don`t use "[on_true] if [expression] else [on_false]" syntax 55 | PT014 ; found duplicate test cases (5, 8) in @pytest.mark.parametrize 56 | G200 ; Logging statement uses exception in arguments 57 | R504 ; you shouldn`t assign value to variable if it will be use only as return value 58 | 59 | per-file-ignores = 60 | wizard/admin/views/**.py:E800, A002 61 | __init__.py:F401 62 | guldan/guldan/pages/*/locators.py:N802 63 | 64 | [isort] 65 | multi_line_output=3 66 | include_trailing_comma=True 67 | force_grid_wrap=0 68 | use_parentheses=True 69 | line_length=120 70 | balanced_wrapping = true 71 | default_section = THIRDPARTY 72 | known_first_party = admin,db,api 73 | skip = __init__.py 74 | --------------------------------------------------------------------------------