3 Commits

Author SHA1 Message Date
dependabot[bot]
1ba384baef Merge b7a0ca0fe8 into db23064929 2023-08-28 10:15:07 +00:00
Peter Dwyer
db23064929 library bumps
version bump.
added inital build action
2023-08-28 11:14:53 +01:00
dependabot[bot]
b7a0ca0fe8 Bump django from 4.1.9 to 4.1.10
Bumps [django](https://github.com/django/django) from 4.1.9 to 4.1.10.
- [Commits](https://github.com/django/django/compare/4.1.9...4.1.10)

---
updated-dependencies:
- dependency-name: django
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-06 00:00:47 +00:00
10 changed files with 82 additions and 187 deletions

View File

@@ -0,0 +1,19 @@
name: Build and push image
on:
push:
branches: [main]
jobs:
deploy:
runs-on: self-hosted
defaults:
run:
working-directory: /repo
steps:
- name: Checkout repo
run: git pull
- name: Deploy
run: |
docker build . --no-cache -t ajurna/cbwebreader

View File

@@ -6,6 +6,7 @@ Django settings for cbreader project.
import os import os
from datetime import timedelta from datetime import timedelta
from pathlib import Path from pathlib import Path
from typing import Dict, List
import dj_database_url import dj_database_url
from dotenv import load_dotenv from dotenv import load_dotenv
@@ -27,7 +28,7 @@ ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "localhost").split(",")
# Application definition # Application definition
INSTALLED_APPS = ( INSTALLED_APPS = [
"django.contrib.admin", "django.contrib.admin",
"django.contrib.auth", "django.contrib.auth",
"django.contrib.contenttypes", "django.contrib.contenttypes",
@@ -46,7 +47,7 @@ INSTALLED_APPS = (
'django_filters', 'django_filters',
'rest_framework', 'rest_framework',
# 'silk' # 'silk'
) ]
MIDDLEWARE = [ MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware", "django.middleware.security.SecurityMiddleware",
@@ -58,8 +59,7 @@ MIDDLEWARE = [
"django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware", "django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware",
# 'silk.middleware.SilkyMiddleware', 'csp.middleware.CSPMiddleware',
# 'csp.middleware.CSPMiddleware',
] ]
ROOT_URLCONF = "cbreader.urls" ROOT_URLCONF = "cbreader.urls"
@@ -197,10 +197,10 @@ CSP_FONT_SRC = ("'self'",)
CSP_SCRIPT_SRC = ("'self'",) CSP_SCRIPT_SRC = ("'self'",)
CSP_CONNECT_SRC = ("'self'",) CSP_CONNECT_SRC = ("'self'",)
CSP_INCLUDE_NONCE_IN = ['script-src'] CSP_INCLUDE_NONCE_IN = ['script-src']
CSP_SCRIPT_SRC_ATTR = ("'self'",)# "'unsafe-inline'") CSP_SCRIPT_SRC_ATTR = ("'self'",) # "'unsafe-inline'")
PERMISSIONS_POLICY = { PERMISSIONS_POLICY: Dict[str, List] = {
"accelerometer": [], "accelerometer": [],
"ambient-light-sensor": [], "ambient-light-sensor": [],
"autoplay": [], "autoplay": [],

View File

@@ -1,30 +1,11 @@
from .base import * from .base import INSTALLED_APPS, MIDDLEWARE, SILK_ENABLED
INSTALLED_APPS = ( INSTALLED_APPS += ["silk"]
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
'silk',
"snowpenguin.django.recaptcha2",
'bootstrap4',
"comic",
"comic_auth",
)
MIDDLEWARE = [ MIDDLEWARE += [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
'silk.middleware.SilkyMiddleware', 'silk.middleware.SilkyMiddleware',
] ]
SILK_ENABLED = True SILK_ENABLED = True # noqa: F811
SILKY_PYTHON_PROFILER = True SILKY_PYTHON_PROFILER = True

View File

@@ -1,6 +1,6 @@
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.syndication.views import Feed from django.contrib.syndication.views import Feed
from django.db.models import Case, When, PositiveSmallIntegerField, F from django.db.models import Case, When, PositiveSmallIntegerField, F, QuerySet
from django.http import HttpRequest from django.http import HttpRequest
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
@@ -18,7 +18,7 @@ class RecentComicsAPI(Feed):
self.user = user_misc.user self.user = user_misc.user
return user_misc.user return user_misc.user
def items(self) -> ComicBook: def items(self) -> QuerySet[ComicBook]:
comics = ComicBook.objects.order_by("-date_added") comics = ComicBook.objects.order_by("-date_added")
comics = comics.annotate( comics = comics.annotate(
classification=Case( classification=Case(

View File

@@ -1,11 +1,11 @@
from typing import Optional, Union from typing import Optional
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.models import User from django.contrib.auth.base_user import AbstractBaseUser
from django.core.management.base import BaseCommand, CommandParser from django.core.management.base import BaseCommand, CommandParser
from loguru import logger from loguru import logger
from comic.models import ComicBook, Directory from comic.models import Directory
from comic.processing import generate_directory from comic.processing import generate_directory
@@ -27,12 +27,11 @@ class Command(BaseCommand):
self.OUTPUT = options.get('out', False) self.OUTPUT = options.get('out', False)
self.scan_directory() self.scan_directory()
def scan_directory(self, user: Optional[User] = None, directory: Optional[Directory] = None) -> None: def scan_directory(self, user: Optional[AbstractBaseUser] = None, directory: Optional[Directory] = None) -> None:
if not user: if not user:
user_model = get_user_model() user_model = get_user_model()
user = user_model.objects.first() user: AbstractBaseUser = user_model.objects.first()
for item in generate_directory(user, directory): for item in generate_directory(user, directory):
item: Union[Directory, ComicBook] if item is Directory:
if item.type == 'Directory':
logger.info(item) logger.info(item)
self.scan_directory(user, item) self.scan_directory(user, item)

View File

@@ -6,7 +6,7 @@ from typing import NamedTuple, List, Optional, Union
import rarfile import rarfile
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.base_user import AbstractBaseUser
from django.db.models import Count, Q, F, Case, When, PositiveSmallIntegerField, QuerySet, ExpressionWrapper, \ from django.db.models import Count, Q, F, Case, When, PositiveSmallIntegerField, QuerySet, ExpressionWrapper, \
IntegerField IntegerField
@@ -14,7 +14,8 @@ from comic import models
from comic.errors import NotCompatibleArchive from comic.errors import NotCompatibleArchive
def generate_directory(user: User, directory: Optional[models.Directory] = None) -> List[QuerySet]: def generate_directory(user: AbstractBaseUser, directory: Optional[models.Directory] = None) \
-> List[Union[models.Directory, models.ComicBook]]:
dir_path = Path(settings.COMIC_BOOK_VOLUME, directory.path) if directory else settings.COMIC_BOOK_VOLUME dir_path = Path(settings.COMIC_BOOK_VOLUME, directory.path) if directory else settings.COMIC_BOOK_VOLUME
files = [] files = []
@@ -74,7 +75,8 @@ def clean_directories(directories: QuerySet, dir_path: Path, directory: Optional
models.Directory.objects.get(name=stale_directory.name, parent=directory).delete() models.Directory.objects.get(name=stale_directory.name, parent=directory).delete()
def clean_files(files: QuerySet, user: User, dir_path: Path, directory: Optional[models.Directory] = None) -> None: def clean_files(files: QuerySet, user: AbstractBaseUser, dir_path: Path, directory: Optional[models.Directory] = None) \
-> None:
file_list = set(x for x in sorted(dir_path.glob('*')) if x.is_file()) file_list = set(x for x in sorted(dir_path.glob('*')) if x.is_file())
files_db_set = set(Path(dir_path, x.file_name) for x in files) files_db_set = set(Path(dir_path, x.file_name) for x in files)

0
mypy.ini Normal file
View File

122
poetry.lock generated
View File

@@ -1,10 +1,9 @@
# This file is automatically @generated by Poetry and should not be changed by hand. # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
[[package]] [[package]]
name = "appnope" name = "appnope"
version = "0.1.3" version = "0.1.3"
description = "Disable App Nap on macOS >= 10.9" description = "Disable App Nap on macOS >= 10.9"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -16,7 +15,6 @@ files = [
name = "asgiref" name = "asgiref"
version = "3.6.0" version = "3.6.0"
description = "ASGI specs, helper code, and adapters" description = "ASGI specs, helper code, and adapters"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -31,7 +29,6 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"]
name = "astroid" name = "astroid"
version = "2.14.2" version = "2.14.2"
description = "An abstract syntax tree for Python with inference support." description = "An abstract syntax tree for Python with inference support."
category = "dev"
optional = false optional = false
python-versions = ">=3.7.2" python-versions = ">=3.7.2"
files = [ files = [
@@ -51,7 +48,6 @@ wrapt = [
name = "asttokens" name = "asttokens"
version = "2.2.1" version = "2.2.1"
description = "Annotate AST trees with source code positions" description = "Annotate AST trees with source code positions"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -69,7 +65,6 @@ test = ["astroid", "pytest"]
name = "attrs" name = "attrs"
version = "22.2.0" version = "22.2.0"
description = "Classes Without Boilerplate" description = "Classes Without Boilerplate"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -88,7 +83,6 @@ tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy
name = "autopep8" name = "autopep8"
version = "2.0.1" version = "2.0.1"
description = "A tool that automatically formats Python code to conform to the PEP 8 style guide" description = "A tool that automatically formats Python code to conform to the PEP 8 style guide"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -104,7 +98,6 @@ tomli = {version = "*", markers = "python_version < \"3.11\""}
name = "backcall" name = "backcall"
version = "0.2.0" version = "0.2.0"
description = "Specifications for callback functions passed in to an API" description = "Specifications for callback functions passed in to an API"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -116,7 +109,6 @@ files = [
name = "beautifulsoup4" name = "beautifulsoup4"
version = "4.11.2" version = "4.11.2"
description = "Screen-scraping library" description = "Screen-scraping library"
category = "main"
optional = false optional = false
python-versions = ">=3.6.0" python-versions = ">=3.6.0"
files = [ files = [
@@ -135,7 +127,6 @@ lxml = ["lxml"]
name = "certifi" name = "certifi"
version = "2022.12.7" version = "2022.12.7"
description = "Python package for providing Mozilla's CA Bundle." description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -147,7 +138,6 @@ files = [
name = "cffi" name = "cffi"
version = "1.15.1" version = "1.15.1"
description = "Foreign Function Interface for Python calling C code." description = "Foreign Function Interface for Python calling C code."
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -224,7 +214,6 @@ pycparser = "*"
name = "cfgv" name = "cfgv"
version = "3.3.1" version = "3.3.1"
description = "Validate configuration and produce human readable error messages." description = "Validate configuration and produce human readable error messages."
category = "dev"
optional = false optional = false
python-versions = ">=3.6.1" python-versions = ">=3.6.1"
files = [ files = [
@@ -236,7 +225,6 @@ files = [
name = "charset-normalizer" name = "charset-normalizer"
version = "3.0.1" version = "3.0.1"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -334,7 +322,6 @@ files = [
name = "colorama" name = "colorama"
version = "0.4.6" version = "0.4.6"
description = "Cross-platform colored terminal text." description = "Cross-platform colored terminal text."
category = "main"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [ files = [
@@ -346,7 +333,6 @@ files = [
name = "coreapi" name = "coreapi"
version = "2.3.3" version = "2.3.3"
description = "Python client library for Core API." description = "Python client library for Core API."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -364,7 +350,6 @@ uritemplate = "*"
name = "coreschema" name = "coreschema"
version = "0.0.4" version = "0.0.4"
description = "Core Schema." description = "Core Schema."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -379,7 +364,6 @@ jinja2 = "*"
name = "coverage" name = "coverage"
version = "7.1.0" version = "7.1.0"
description = "Code coverage measurement for Python" description = "Code coverage measurement for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -443,7 +427,6 @@ toml = ["tomli"]
name = "cryptography" name = "cryptography"
version = "38.0.4" version = "38.0.4"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -490,7 +473,6 @@ test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0
name = "decorator" name = "decorator"
version = "5.1.1" version = "5.1.1"
description = "Decorators for Humans" description = "Decorators for Humans"
category = "dev"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -502,7 +484,6 @@ files = [
name = "dill" name = "dill"
version = "0.3.6" version = "0.3.6"
description = "serialize all of python" description = "serialize all of python"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -517,7 +498,6 @@ graph = ["objgraph (>=1.7.2)"]
name = "distlib" name = "distlib"
version = "0.3.6" version = "0.3.6"
description = "Distribution utilities" description = "Distribution utilities"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -529,7 +509,6 @@ files = [
name = "dj-database-url" name = "dj-database-url"
version = "1.2.0" version = "1.2.0"
description = "Use Database URLs in your Django Application." description = "Use Database URLs in your Django Application."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -542,14 +521,13 @@ Django = ">=3.2"
[[package]] [[package]]
name = "django" name = "django"
version = "4.1.9" version = "4.1.10"
description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
{file = "Django-4.1.9-py3-none-any.whl", hash = "sha256:adae3a952fd86800094ae6f64aa558572e8b4ba8dfe21f0ed8175147e75a72a1"}, {file = "Django-4.1.10-py3-none-any.whl", hash = "sha256:26d0260c2fb8121009e62ffc548b2398dea2522b6454208a852fb0ef264c206c"},
{file = "Django-4.1.9.tar.gz", hash = "sha256:e9f074a84930662104871bfcea55c3c180c50a0a47739db82435deae6cbaf032"}, {file = "Django-4.1.10.tar.gz", hash = "sha256:56343019a9fd839e2e5bf203daf45f25af79d5bffa4c71d56eae4f4404d82ade"},
] ]
[package.dependencies] [package.dependencies]
@@ -565,7 +543,6 @@ bcrypt = ["bcrypt"]
name = "django-appconf" name = "django-appconf"
version = "1.0.5" version = "1.0.5"
description = "A helper class for handling configuration defaults of packaged apps gracefully." description = "A helper class for handling configuration defaults of packaged apps gracefully."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -580,7 +557,6 @@ django = "*"
name = "django-boost" name = "django-boost"
version = "2.1" version = "2.1"
description = "Django Extension library" description = "Django Extension library"
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -596,7 +572,6 @@ user-agents = ">=2.0"
name = "django-bootstrap4" name = "django-bootstrap4"
version = "22.3" version = "22.3"
description = "Bootstrap 4 for Django" description = "Bootstrap 4 for Django"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -612,7 +587,6 @@ Django = ">=3.2"
name = "django-cors-headers" name = "django-cors-headers"
version = "3.13.0" version = "3.13.0"
description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -627,7 +601,6 @@ Django = ">=3.2"
name = "django-csp" name = "django-csp"
version = "3.7" version = "3.7"
description = "Django Content Security Policy support." description = "Django Content Security Policy support."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -646,7 +619,6 @@ tests = ["jinja2 (>=2.9.6)", "mock (==1.0.1)", "pep8 (==1.4.6)", "pytest (<4.0)"
name = "django-extensions" name = "django-extensions"
version = "3.2.1" version = "3.2.1"
description = "Extensions for Django" description = "Extensions for Django"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -661,7 +633,6 @@ Django = ">=3.2"
name = "django-filter" name = "django-filter"
version = "22.1" version = "22.1"
description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -676,7 +647,6 @@ Django = ">=3.2"
name = "django-imagekit" name = "django-imagekit"
version = "4.1.0" version = "4.1.0"
description = "Automated image processing for Django models." description = "Automated image processing for Django models."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -698,7 +668,6 @@ async-rq = ["django-rq (>=0.6.0)"]
name = "django-permissions-policy" name = "django-permissions-policy"
version = "4.14.0" version = "4.14.0"
description = "Set the draft security HTTP header Permissions-Policy (previously Feature-Policy) on your Django app." description = "Set the draft security HTTP header Permissions-Policy (previously Feature-Policy) on your Django app."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -713,7 +682,6 @@ Django = ">=3.2"
name = "django-silk" name = "django-silk"
version = "5.0.3" version = "5.0.3"
description = "Silky smooth profiling for the Django Framework" description = "Silky smooth profiling for the Django Framework"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -731,7 +699,6 @@ sqlparse = "*"
name = "django-sri" name = "django-sri"
version = "0.5.0" version = "0.5.0"
description = "Subresource Integrity for Django" description = "Subresource Integrity for Django"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@@ -746,7 +713,6 @@ Django = ">=3.2"
name = "django-webpack-loader" name = "django-webpack-loader"
version = "1.8.1" version = "1.8.1"
description = "Transparently use webpack with django" description = "Transparently use webpack with django"
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -758,7 +724,6 @@ files = [
name = "djangorestframework" name = "djangorestframework"
version = "3.14.0" version = "3.14.0"
description = "Web APIs for Django, made easy." description = "Web APIs for Django, made easy."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -774,7 +739,6 @@ pytz = "*"
name = "djangorestframework-simplejwt" name = "djangorestframework-simplejwt"
version = "5.2.2" version = "5.2.2"
description = "A minimal JSON Web Token authentication plugin for Django REST Framework" description = "A minimal JSON Web Token authentication plugin for Django REST Framework"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -799,7 +763,6 @@ test = ["cryptography", "pytest", "pytest-cov", "pytest-django", "pytest-xdist",
name = "drf-extensions" name = "drf-extensions"
version = "0.7.1" version = "0.7.1"
description = "Extensions for Django REST Framework" description = "Extensions for Django REST Framework"
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -814,7 +777,6 @@ djangorestframework = ">=3.9.3"
name = "drf-yasg" name = "drf-yasg"
version = "1.21.5" version = "1.21.5"
description = "Automated generation of real Swagger/OpenAPI 2.0 schemas from Django Rest Framework code." description = "Automated generation of real Swagger/OpenAPI 2.0 schemas from Django Rest Framework code."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -840,7 +802,6 @@ validation = ["swagger-spec-validator (>=2.1.0)"]
name = "executing" name = "executing"
version = "1.2.0" version = "1.2.0"
description = "Get the currently executing AST node of a frame, and other information" description = "Get the currently executing AST node of a frame, and other information"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -855,7 +816,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"]
name = "filelock" name = "filelock"
version = "3.9.0" version = "3.9.0"
description = "A platform independent file lock." description = "A platform independent file lock."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -871,7 +831,6 @@ testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pyt
name = "flake8" name = "flake8"
version = "6.0.0" version = "6.0.0"
description = "the modular source code checker: pep8 pyflakes and co" description = "the modular source code checker: pep8 pyflakes and co"
category = "dev"
optional = false optional = false
python-versions = ">=3.8.1" python-versions = ">=3.8.1"
files = [ files = [
@@ -888,7 +847,6 @@ pyflakes = ">=3.0.0,<3.1.0"
name = "flake8-annotations" name = "flake8-annotations"
version = "3.0.0" version = "3.0.0"
description = "Flake8 Type Annotation Checks" description = "Flake8 Type Annotation Checks"
category = "dev"
optional = false optional = false
python-versions = ">=3.8.1,<4.0.0" python-versions = ">=3.8.1,<4.0.0"
files = [ files = [
@@ -904,7 +862,6 @@ flake8 = ">=5.0"
name = "gprof2dot" name = "gprof2dot"
version = "2022.7.29" version = "2022.7.29"
description = "Generate a dot graph from the output of several profilers." description = "Generate a dot graph from the output of several profilers."
category = "main"
optional = false optional = false
python-versions = ">=2.7" python-versions = ">=2.7"
files = [ files = [
@@ -916,7 +873,6 @@ files = [
name = "gunicorn" name = "gunicorn"
version = "20.1.0" version = "20.1.0"
description = "WSGI HTTP Server for UNIX" description = "WSGI HTTP Server for UNIX"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -937,7 +893,6 @@ tornado = ["tornado (>=0.2)"]
name = "identify" name = "identify"
version = "2.5.18" version = "2.5.18"
description = "File identification library for Python" description = "File identification library for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -952,7 +907,6 @@ license = ["ukkonen"]
name = "idna" name = "idna"
version = "3.4" version = "3.4"
description = "Internationalized Domain Names in Applications (IDNA)" description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -964,7 +918,6 @@ files = [
name = "inflection" name = "inflection"
version = "0.5.1" version = "0.5.1"
description = "A port of Ruby on Rails inflector to Python" description = "A port of Ruby on Rails inflector to Python"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -976,7 +929,6 @@ files = [
name = "ipython" name = "ipython"
version = "8.10.0" version = "8.10.0"
description = "IPython: Productive Interactive Computing" description = "IPython: Productive Interactive Computing"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@@ -1015,7 +967,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa
name = "isort" name = "isort"
version = "5.12.0" version = "5.12.0"
description = "A Python utility / library to sort Python imports." description = "A Python utility / library to sort Python imports."
category = "dev"
optional = false optional = false
python-versions = ">=3.8.0" python-versions = ">=3.8.0"
files = [ files = [
@@ -1033,7 +984,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"]
name = "itypes" name = "itypes"
version = "1.2.0" version = "1.2.0"
description = "Simple immutable types for python." description = "Simple immutable types for python."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -1045,7 +995,6 @@ files = [
name = "jedi" name = "jedi"
version = "0.18.2" version = "0.18.2"
description = "An autocompletion tool for Python that can be used for text editors." description = "An autocompletion tool for Python that can be used for text editors."
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -1065,7 +1014,6 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
name = "jinja2" name = "jinja2"
version = "3.1.2" version = "3.1.2"
description = "A very fast and expressive template engine." description = "A very fast and expressive template engine."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1083,7 +1031,6 @@ i18n = ["Babel (>=2.7)"]
name = "lazy-object-proxy" name = "lazy-object-proxy"
version = "1.9.0" version = "1.9.0"
description = "A fast and thorough lazy object proxy." description = "A fast and thorough lazy object proxy."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1129,7 +1076,6 @@ files = [
name = "loguru" name = "loguru"
version = "0.6.0" version = "0.6.0"
description = "Python logging made (stupidly) simple" description = "Python logging made (stupidly) simple"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -1148,7 +1094,6 @@ dev = ["Sphinx (>=4.1.1)", "black (>=19.10b0)", "colorama (>=0.3.4)", "docutils
name = "markupsafe" name = "markupsafe"
version = "2.1.2" version = "2.1.2"
description = "Safely add untrusted strings to HTML/XML markup." description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1208,7 +1153,6 @@ files = [
name = "matplotlib-inline" name = "matplotlib-inline"
version = "0.1.6" version = "0.1.6"
description = "Inline Matplotlib backend for Jupyter" description = "Inline Matplotlib backend for Jupyter"
category = "dev"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -1223,7 +1167,6 @@ traitlets = "*"
name = "mccabe" name = "mccabe"
version = "0.7.0" version = "0.7.0"
description = "McCabe checker, plugin for flake8" description = "McCabe checker, plugin for flake8"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -1235,7 +1178,6 @@ files = [
name = "mypy" name = "mypy"
version = "1.0.0" version = "1.0.0"
description = "Optional static typing for Python" description = "Optional static typing for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1282,7 +1224,6 @@ reports = ["lxml"]
name = "mypy-extensions" name = "mypy-extensions"
version = "1.0.0" version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker." description = "Type system extensions for programs checked with the mypy type checker."
category = "dev"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -1294,7 +1235,6 @@ files = [
name = "mysqlclient" name = "mysqlclient"
version = "2.1.1" version = "2.1.1"
description = "Python interface to MySQL" description = "Python interface to MySQL"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -1311,7 +1251,6 @@ files = [
name = "nodeenv" name = "nodeenv"
version = "1.7.0" version = "1.7.0"
description = "Node.js virtual environment builder" description = "Node.js virtual environment builder"
category = "dev"
optional = false optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
files = [ files = [
@@ -1326,7 +1265,6 @@ setuptools = "*"
name = "packaging" name = "packaging"
version = "23.0" version = "23.0"
description = "Core utilities for Python packages" description = "Core utilities for Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1338,7 +1276,6 @@ files = [
name = "parso" name = "parso"
version = "0.8.3" version = "0.8.3"
description = "A Python Parser" description = "A Python Parser"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -1354,7 +1291,6 @@ testing = ["docopt", "pytest (<6.0.0)"]
name = "pexpect" name = "pexpect"
version = "4.8.0" version = "4.8.0"
description = "Pexpect allows easy control of interactive console applications." description = "Pexpect allows easy control of interactive console applications."
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -1369,7 +1305,6 @@ ptyprocess = ">=0.5"
name = "pickleshare" name = "pickleshare"
version = "0.7.5" version = "0.7.5"
description = "Tiny 'shelve'-like database with concurrency support" description = "Tiny 'shelve'-like database with concurrency support"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -1381,7 +1316,6 @@ files = [
name = "pilkit" name = "pilkit"
version = "2.0" version = "2.0"
description = "A collection of utilities and processors for the Python Imaging Libary." description = "A collection of utilities and processors for the Python Imaging Libary."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -1392,7 +1326,6 @@ files = [
name = "pillow" name = "pillow"
version = "9.4.0" version = "9.4.0"
description = "Python Imaging Library (Fork)" description = "Python Imaging Library (Fork)"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1483,7 +1416,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
name = "platformdirs" name = "platformdirs"
version = "3.0.0" version = "3.0.0"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1499,7 +1431,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytes
name = "pre-commit" name = "pre-commit"
version = "3.0.4" version = "3.0.4"
description = "A framework for managing and maintaining multi-language pre-commit hooks." description = "A framework for managing and maintaining multi-language pre-commit hooks."
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@@ -1518,7 +1449,6 @@ virtualenv = ">=20.10.0"
name = "prompt-toolkit" name = "prompt-toolkit"
version = "3.0.36" version = "3.0.36"
description = "Library for building powerful interactive command lines in Python" description = "Library for building powerful interactive command lines in Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.6.2" python-versions = ">=3.6.2"
files = [ files = [
@@ -1533,7 +1463,6 @@ wcwidth = "*"
name = "psycopg2" name = "psycopg2"
version = "2.9.5" version = "2.9.5"
description = "psycopg2 - Python-PostgreSQL Database Adapter" description = "psycopg2 - Python-PostgreSQL Database Adapter"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -1556,7 +1485,6 @@ files = [
name = "ptyprocess" name = "ptyprocess"
version = "0.7.0" version = "0.7.0"
description = "Run a subprocess in a pseudo terminal" description = "Run a subprocess in a pseudo terminal"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -1568,7 +1496,6 @@ files = [
name = "pure-eval" name = "pure-eval"
version = "0.2.2" version = "0.2.2"
description = "Safely evaluate AST nodes without side effects" description = "Safely evaluate AST nodes without side effects"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -1583,7 +1510,6 @@ tests = ["pytest"]
name = "pycodestyle" name = "pycodestyle"
version = "2.10.0" version = "2.10.0"
description = "Python style guide checker" description = "Python style guide checker"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -1595,7 +1521,6 @@ files = [
name = "pycparser" name = "pycparser"
version = "2.21" version = "2.21"
description = "C parser in Python" description = "C parser in Python"
category = "dev"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [ files = [
@@ -1607,7 +1532,6 @@ files = [
name = "pyflakes" name = "pyflakes"
version = "3.0.1" version = "3.0.1"
description = "passive checker of Python programs" description = "passive checker of Python programs"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -1619,7 +1543,6 @@ files = [
name = "pygments" name = "pygments"
version = "2.14.0" version = "2.14.0"
description = "Pygments is a syntax highlighting package written in Python." description = "Pygments is a syntax highlighting package written in Python."
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -1634,7 +1557,6 @@ plugins = ["importlib-metadata"]
name = "pyjwt" name = "pyjwt"
version = "2.6.0" version = "2.6.0"
description = "JSON Web Token implementation in Python" description = "JSON Web Token implementation in Python"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1652,7 +1574,6 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"]
name = "pylint" name = "pylint"
version = "2.16.2" version = "2.16.2"
description = "python code static checker" description = "python code static checker"
category = "dev"
optional = false optional = false
python-versions = ">=3.7.2" python-versions = ">=3.7.2"
files = [ files = [
@@ -1681,7 +1602,6 @@ testutils = ["gitpython (>3)"]
name = "pylint-django" name = "pylint-django"
version = "2.5.3" version = "2.5.3"
description = "A Pylint plugin to help Pylint understand the Django web framework" description = "A Pylint plugin to help Pylint understand the Django web framework"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -1701,7 +1621,6 @@ with-django = ["Django"]
name = "pylint-plugin-utils" name = "pylint-plugin-utils"
version = "0.7" version = "0.7"
description = "Utilities and helpers for writing Pylint plugins" description = "Utilities and helpers for writing Pylint plugins"
category = "dev"
optional = false optional = false
python-versions = ">=3.6.2" python-versions = ">=3.6.2"
files = [ files = [
@@ -1716,7 +1635,6 @@ pylint = ">=1.7"
name = "pymupdf" name = "pymupdf"
version = "1.20.2" version = "1.20.2"
description = "Python bindings for the PDF toolkit and renderer MuPDF" description = "Python bindings for the PDF toolkit and renderer MuPDF"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1747,7 +1665,6 @@ files = [
name = "pyopenssl" name = "pyopenssl"
version = "22.1.0" version = "22.1.0"
description = "Python wrapper module around the OpenSSL library" description = "Python wrapper module around the OpenSSL library"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -1766,7 +1683,6 @@ test = ["flaky", "pretend", "pytest (>=3.0.1)"]
name = "python-dotenv" name = "python-dotenv"
version = "0.21.1" version = "0.21.1"
description = "Read key-value pairs from a .env file and set them as environment variables" description = "Read key-value pairs from a .env file and set them as environment variables"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1781,7 +1697,6 @@ cli = ["click (>=5.0)"]
name = "pytz" name = "pytz"
version = "2022.7.1" version = "2022.7.1"
description = "World timezone definitions, modern and historical" description = "World timezone definitions, modern and historical"
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -1793,7 +1708,6 @@ files = [
name = "pyyaml" name = "pyyaml"
version = "6.0" version = "6.0"
description = "YAML parser and emitter for Python" description = "YAML parser and emitter for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -1843,7 +1757,6 @@ files = [
name = "rarfile" name = "rarfile"
version = "4.0" version = "4.0"
description = "RAR archive reader for Python" description = "RAR archive reader for Python"
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -1855,7 +1768,6 @@ files = [
name = "requests" name = "requests"
version = "2.31.0" version = "2.31.0"
description = "Python HTTP for Humans." description = "Python HTTP for Humans."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1867,7 +1779,7 @@ files = [
certifi = ">=2017.4.17" certifi = ">=2017.4.17"
charset-normalizer = ">=2,<4" charset-normalizer = ">=2,<4"
idna = ">=2.5,<4" idna = ">=2.5,<4"
urllib3 = ">=1.21.1,<1.27" urllib3 = ">=1.21.1,<3"
[package.extras] [package.extras]
socks = ["PySocks (>=1.5.6,!=1.5.7)"] socks = ["PySocks (>=1.5.6,!=1.5.7)"]
@@ -1877,7 +1789,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
name = "ruamel-yaml" name = "ruamel-yaml"
version = "0.17.21" version = "0.17.21"
description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order"
category = "main"
optional = false optional = false
python-versions = ">=3" python-versions = ">=3"
files = [ files = [
@@ -1896,7 +1807,6 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"]
name = "ruamel-yaml-clib" name = "ruamel-yaml-clib"
version = "0.2.7" version = "0.2.7"
description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -1907,7 +1817,8 @@ files = [
{file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"},
{file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"},
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"},
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:1a6391a7cabb7641c32517539ca42cf84b87b667bad38b78d4d42dd23e957c81"},
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9c7617df90c1365638916b98cdd9be833d31d337dbcd722485597b43c4a215bf"},
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"},
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"},
{file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"},
@@ -1942,7 +1853,6 @@ files = [
name = "setuptools" name = "setuptools"
version = "67.3.2" version = "67.3.2"
description = "Easily download, build, install, upgrade, and uninstall Python packages" description = "Easily download, build, install, upgrade, and uninstall Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1959,7 +1869,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (
name = "six" name = "six"
version = "1.16.0" version = "1.16.0"
description = "Python 2 and 3 compatibility utilities" description = "Python 2 and 3 compatibility utilities"
category = "main"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [ files = [
@@ -1971,7 +1880,6 @@ files = [
name = "soupsieve" name = "soupsieve"
version = "2.4" version = "2.4"
description = "A modern CSS selector implementation for Beautiful Soup." description = "A modern CSS selector implementation for Beautiful Soup."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -1983,7 +1891,6 @@ files = [
name = "sqlparse" name = "sqlparse"
version = "0.4.4" version = "0.4.4"
description = "A non-validating SQL parser." description = "A non-validating SQL parser."
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -2000,7 +1907,6 @@ test = ["pytest", "pytest-cov"]
name = "stack-data" name = "stack-data"
version = "0.6.2" version = "0.6.2"
description = "Extract data from python stack frames and tracebacks for informative displays" description = "Extract data from python stack frames and tracebacks for informative displays"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -2020,7 +1926,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
name = "tomli" name = "tomli"
version = "2.0.1" version = "2.0.1"
description = "A lil' TOML parser" description = "A lil' TOML parser"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -2032,7 +1937,6 @@ files = [
name = "tomlkit" name = "tomlkit"
version = "0.11.6" version = "0.11.6"
description = "Style preserving TOML library" description = "Style preserving TOML library"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -2044,7 +1948,6 @@ files = [
name = "traitlets" name = "traitlets"
version = "5.9.0" version = "5.9.0"
description = "Traitlets Python configuration system" description = "Traitlets Python configuration system"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -2060,7 +1963,6 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"]
name = "typing-extensions" name = "typing-extensions"
version = "4.5.0" version = "4.5.0"
description = "Backported and Experimental Type Hints for Python 3.7+" description = "Backported and Experimental Type Hints for Python 3.7+"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -2072,7 +1974,6 @@ files = [
name = "tzdata" name = "tzdata"
version = "2022.7" version = "2022.7"
description = "Provider of IANA time zone data" description = "Provider of IANA time zone data"
category = "main"
optional = false optional = false
python-versions = ">=2" python-versions = ">=2"
files = [ files = [
@@ -2084,7 +1985,6 @@ files = [
name = "ua-parser" name = "ua-parser"
version = "0.16.1" version = "0.16.1"
description = "Python port of Browserscope's user agent parser" description = "Python port of Browserscope's user agent parser"
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -2096,7 +1996,6 @@ files = [
name = "uritemplate" name = "uritemplate"
version = "4.1.1" version = "4.1.1"
description = "Implementation of RFC 6570 URI Templates" description = "Implementation of RFC 6570 URI Templates"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@@ -2108,7 +2007,6 @@ files = [
name = "urllib3" name = "urllib3"
version = "1.26.14" version = "1.26.14"
description = "HTTP library with thread-safe connection pooling, file post, and more." description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [ files = [
@@ -2125,7 +2023,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
name = "user-agents" name = "user-agents"
version = "2.2.0" version = "2.2.0"
description = "A library to identify devices (phones, tablets) and their capabilities by parsing browser user agent strings." description = "A library to identify devices (phones, tablets) and their capabilities by parsing browser user agent strings."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -2140,7 +2037,6 @@ ua-parser = ">=0.10.0"
name = "virtualenv" name = "virtualenv"
version = "20.19.0" version = "20.19.0"
description = "Virtual Python Environment builder" description = "Virtual Python Environment builder"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -2161,7 +2057,6 @@ test = ["covdefaults (>=2.2.2)", "coverage (>=7.1)", "coverage-enable-subprocess
name = "wcwidth" name = "wcwidth"
version = "0.2.6" version = "0.2.6"
description = "Measures the displayed width of unicode strings in a terminal" description = "Measures the displayed width of unicode strings in a terminal"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@@ -2173,7 +2068,6 @@ files = [
name = "werkzeug" name = "werkzeug"
version = "2.2.3" version = "2.2.3"
description = "The comprehensive WSGI web application library." description = "The comprehensive WSGI web application library."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@@ -2191,7 +2085,6 @@ watchdog = ["watchdog"]
name = "win32-setctime" name = "win32-setctime"
version = "1.1.0" version = "1.1.0"
description = "A small Python utility to set file creation time on Windows" description = "A small Python utility to set file creation time on Windows"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@@ -2206,7 +2099,6 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"]
name = "wrapt" name = "wrapt"
version = "1.14.1" version = "1.14.1"
description = "Module for decorators, wrappers and monkey patching." description = "Module for decorators, wrappers and monkey patching."
category = "dev"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
files = [ files = [

View File

@@ -12,43 +12,44 @@ license = "Creative Commons Attribution-ShareAlike 4.0 International License"
python = "^3.10" python = "^3.10"
Django = "^4.1" Django = "^4.1"
gunicorn = "^20.0.4" gunicorn = "^20.0.4"
dj-database-url = "^1.0.0" dj-database-url = "^1.3.0"
python-dotenv = "^0.21.0" python-dotenv = "^1.0.0"
loguru = "^0.6.0" loguru = "^0.7.0"
django-silk = "^5.0.0" django-silk = "^5.0.0"
mysqlclient = "^2.0.1" mysqlclient = "^2.0.1"
psycopg2 = "^2.8.6" psycopg2 = "^2.9.6"
rarfile = "^4.0" rarfile = "^4.0"
django-extensions = "^3.2.1" django-extensions = "^3.2.1"
Pillow = "^9.3.0" Pillow = "^9.3.0"
django-imagekit = "^4.0.2" django-imagekit = "^4.0.2"
PyMuPDF = "~1.20.2" PyMuPDF = "~1.20.2"
django-bootstrap4 = "^22.1" django-bootstrap4 = "^23.1"
django-csp = "^3.7" django-csp = "^3.7"
django-boost = "^2.1" django-boost = "^2.1"
django-sri = "^0.5.0" django-sri = "^0.5.0"
django-permissions-policy = "^4.9.0" django-permissions-policy = "^4.15.0"
djangorestframework = "^3.13.1" djangorestframework = "^3.13.1"
django-filter = "^22.1" django-filter = "^23.1"
django-cors-headers = "^3.13.0" django-cors-headers = "^3.14.0"
djangorestframework-simplejwt = "^5.2.0" djangorestframework-simplejwt = "^5.2.0"
django-webpack-loader = "^1.6.0" django-webpack-loader = "^1.6.0"
drf-yasg = "^1.20.0" drf-yasg = "^1.20.0"
drf-extensions = "^0.7.1" drf-extensions = "^0.7.1"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
mypy = "^1.0.0" mypy = "^1.2.0"
Werkzeug = "^2.2" Werkzeug = "^2.2"
pyOpenSSL = "^22.0.0" pyOpenSSL = "^22.0.0"
ipython = "^8.4.0" ipython = "^8.12.0"
coverage = "^7.1.0" coverage = "^7.2.3"
pre-commit = "^3.0.4" pre-commit = "^3.2.2"
flake8 = "^6.0.0" flake8 = "^6.0.0"
flake8-annotations = "^3.0.0" flake8-annotations = "^3.0.0"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
pylint = "^2.15.0" pylint = "^2.15.0"
pylint-django = "^2.5.3" pylint-django = "^2.5.3"
mypy = "^1.2.0"
[build-system] [build-system]
requires = ["poetry-core>=1.0.0"] requires = ["poetry-core>=1.0.0"]

View File

@@ -1,25 +1,25 @@
asgiref==3.6.0 ; python_version >= "3.10" and python_version < "4.0" asgiref==3.6.0 ; python_version >= "3.10" and python_version < "4.0"
autopep8==2.0.1 ; python_version >= "3.10" and python_version < "4.0" autopep8==2.0.2 ; python_version >= "3.10" and python_version < "4.0"
beautifulsoup4==4.11.2 ; python_version >= "3.10" and python_version < "4.0" beautifulsoup4==4.12.2 ; python_version >= "3.10" and python_version < "4.0"
certifi==2022.12.7 ; python_version >= "3.10" and python_version < "4" certifi==2022.12.7 ; python_version >= "3.10" and python_version < "4"
charset-normalizer==3.0.1 ; python_version >= "3.10" and python_version < "4" charset-normalizer==3.1.0 ; python_version >= "3.10" and python_version < "4"
colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32"
coreapi==2.3.3 ; python_version >= "3.10" and python_version < "4.0" coreapi==2.3.3 ; python_version >= "3.10" and python_version < "4.0"
coreschema==0.0.4 ; python_version >= "3.10" and python_version < "4.0" coreschema==0.0.4 ; python_version >= "3.10" and python_version < "4.0"
dj-database-url==1.2.0 ; python_version >= "3.10" and python_version < "4.0" dj-database-url==1.3.0 ; python_version >= "3.10" and python_version < "4.0"
django-appconf==1.0.5 ; python_version >= "3.10" and python_version < "4.0" django-appconf==1.0.5 ; python_version >= "3.10" and python_version < "4.0"
django-boost==2.1 ; python_version >= "3.10" and python_version < "4.0" django-boost==2.1 ; python_version >= "3.10" and python_version < "4.0"
django-bootstrap4==22.3 ; python_version >= "3.10" and python_version < "4.0" django-bootstrap4==23.1 ; python_version >= "3.10" and python_version < "4.0"
django-cors-headers==3.13.0 ; python_version >= "3.10" and python_version < "4.0" django-cors-headers==3.14.0 ; python_version >= "3.10" and python_version < "4.0"
django-csp==3.7 ; python_version >= "3.10" and python_version < "4.0" django-csp==3.7 ; python_version >= "3.10" and python_version < "4.0"
django-extensions==3.2.1 ; python_version >= "3.10" and python_version < "4.0" django-extensions==3.2.1 ; python_version >= "3.10" and python_version < "4.0"
django-filter==22.1 ; python_version >= "3.10" and python_version < "4.0" django-filter==23.1 ; python_version >= "3.10" and python_version < "4.0"
django-imagekit==4.1.0 ; python_version >= "3.10" and python_version < "4.0" django-imagekit==4.1.0 ; python_version >= "3.10" and python_version < "4.0"
django-permissions-policy==4.14.0 ; python_version >= "3.10" and python_version < "4.0" django-permissions-policy==4.15.0 ; python_version >= "3.10" and python_version < "4.0"
django-silk==5.0.3 ; python_version >= "3.10" and python_version < "4.0" django-silk==5.0.3 ; python_version >= "3.10" and python_version < "4.0"
django-sri==0.5.0 ; python_version >= "3.10" and python_version < "4.0" django-sri==0.5.0 ; python_version >= "3.10" and python_version < "4.0"
django-webpack-loader==1.8.1 ; python_version >= "3.10" and python_version < "4.0" django-webpack-loader==1.8.1 ; python_version >= "3.10" and python_version < "4.0"
django==4.1.7 ; python_version >= "3.10" and python_version < "4.0" django==4.2 ; python_version >= "3.10" and python_version < "4.0"
djangorestframework-simplejwt==5.2.2 ; python_version >= "3.10" and python_version < "4.0" djangorestframework-simplejwt==5.2.2 ; python_version >= "3.10" and python_version < "4.0"
djangorestframework==3.14.0 ; python_version >= "3.10" and python_version < "4.0" djangorestframework==3.14.0 ; python_version >= "3.10" and python_version < "4.0"
drf-extensions==0.7.1 ; python_version >= "3.10" and python_version < "4.0" drf-extensions==0.7.1 ; python_version >= "3.10" and python_version < "4.0"
@@ -30,30 +30,31 @@ idna==3.4 ; python_version >= "3.10" and python_version < "4"
inflection==0.5.1 ; python_version >= "3.10" and python_version < "4.0" inflection==0.5.1 ; python_version >= "3.10" and python_version < "4.0"
itypes==1.2.0 ; python_version >= "3.10" and python_version < "4.0" itypes==1.2.0 ; python_version >= "3.10" and python_version < "4.0"
jinja2==3.1.2 ; python_version >= "3.10" and python_version < "4.0" jinja2==3.1.2 ; python_version >= "3.10" and python_version < "4.0"
loguru==0.6.0 ; python_version >= "3.10" and python_version < "4.0" loguru==0.7.0 ; python_version >= "3.10" and python_version < "4.0"
markupsafe==2.1.2 ; python_version >= "3.10" and python_version < "4.0" markupsafe==2.1.2 ; python_version >= "3.10" and python_version < "4.0"
mysqlclient==2.1.1 ; python_version >= "3.10" and python_version < "4.0" mysqlclient==2.1.1 ; python_version >= "3.10" and python_version < "4.0"
packaging==23.0 ; python_version >= "3.10" and python_version < "4.0" packaging==23.1 ; python_version >= "3.10" and python_version < "4.0"
pilkit==2.0 ; python_version >= "3.10" and python_version < "4.0" pilkit==2.0 ; python_version >= "3.10" and python_version < "4.0"
pillow==9.4.0 ; python_version >= "3.10" and python_version < "4.0" pillow==9.5.0 ; python_version >= "3.10" and python_version < "4.0"
psycopg2==2.9.5 ; python_version >= "3.10" and python_version < "4.0" psycopg2==2.9.6 ; python_version >= "3.10" and python_version < "4.0"
pycodestyle==2.10.0 ; python_version >= "3.10" and python_version < "4.0" pycodestyle==2.10.0 ; python_version >= "3.10" and python_version < "4.0"
pyjwt==2.6.0 ; python_version >= "3.10" and python_version < "4.0" pyjwt==2.6.0 ; python_version >= "3.10" and python_version < "4.0"
pymupdf==1.20.2 ; python_version >= "3.10" and python_version < "4.0" pymupdf==1.20.2 ; python_version >= "3.10" and python_version < "4.0"
python-dotenv==0.21.1 ; python_version >= "3.10" and python_version < "4.0" python-dotenv==1.0.0 ; python_version >= "3.10" and python_version < "4.0"
pytz==2022.7.1 ; python_version >= "3.10" and python_version < "4.0" pytz==2023.3 ; python_version >= "3.10" and python_version < "4.0"
rarfile==4.0 ; python_version >= "3.10" and python_version < "4.0" rarfile==4.0 ; python_version >= "3.10" and python_version < "4.0"
requests==2.28.2 ; python_version >= "3.10" and python_version < "4" requests==2.28.2 ; python_version >= "3.10" and python_version < "4"
ruamel-yaml-clib==0.2.7 ; platform_python_implementation == "CPython" and python_version < "3.11" and python_version >= "3.10" ruamel-yaml-clib==0.2.7 ; platform_python_implementation == "CPython" and python_version < "3.11" and python_version >= "3.10"
ruamel-yaml==0.17.21 ; python_version >= "3.10" and python_version < "4.0" ruamel-yaml==0.17.21 ; python_version >= "3.10" and python_version < "4.0"
setuptools==67.3.2 ; python_version >= "3.10" and python_version < "4.0" setuptools==67.6.1 ; python_version >= "3.10" and python_version < "4.0"
six==1.16.0 ; python_version >= "3.10" and python_version < "4.0" six==1.16.0 ; python_version >= "3.10" and python_version < "4.0"
soupsieve==2.4 ; python_version >= "3.10" and python_version < "4.0" soupsieve==2.4.1 ; python_version >= "3.10" and python_version < "4.0"
sqlparse==0.4.3 ; python_version >= "3.10" and python_version < "4.0" sqlparse==0.4.3 ; python_version >= "3.10" and python_version < "4.0"
tomli==2.0.1 ; python_version >= "3.10" and python_version < "3.11" tomli==2.0.1 ; python_version >= "3.10" and python_version < "3.11"
tzdata==2022.7 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" typing-extensions==4.5.0 ; python_version >= "3.10" and python_version < "4.0"
tzdata==2023.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32"
ua-parser==0.16.1 ; python_version >= "3.10" and python_version < "4.0" ua-parser==0.16.1 ; python_version >= "3.10" and python_version < "4.0"
uritemplate==4.1.1 ; python_version >= "3.10" and python_version < "4.0" uritemplate==4.1.1 ; python_version >= "3.10" and python_version < "4.0"
urllib3==1.26.14 ; python_version >= "3.10" and python_version < "4" urllib3==1.26.15 ; python_version >= "3.10" and python_version < "4"
user-agents==2.2.0 ; python_version >= "3.10" and python_version < "4.0" user-agents==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
win32-setctime==1.1.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" win32-setctime==1.1.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32"