diff --git a/.gitignore b/.gitignore index 75079673..361c034b 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ __pycache__/ # VS Code configuration files .vscode/ +# Zed settings +.zed + # flake8 tox.ini diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d0e468ed..280b6771 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,31 +1,31 @@ exclude: ^test_data/ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 + rev: v5.0.0 hooks: - - id: check-yaml + - id: check-yaml args: [--unsafe] - - id: check-json - - id: check-xml - - id: check-toml - - id: check-ast - - id: check-docstring-first - - id: check-executables-have-shebangs - - id: check-symlinks - - id: check-added-large-files + - id: check-json + - id: check-xml + - id: check-toml + - id: check-ast + - id: check-docstring-first + - id: check-executables-have-shebangs + - id: check-symlinks + - id: check-added-large-files args: [--maxkb=1024] - - id: detect-private-key - - id: end-of-file-fixer - - id: fix-byte-order-marker - - id: debug-statements - - id: check-merge-conflict - - id: end-of-file-fixer - - id: trailing-whitespace - - id: requirements-txt-fixer - - id: mixed-line-ending + - id: detect-private-key + - id: end-of-file-fixer + - id: fix-byte-order-marker + - id: debug-statements + - id: check-merge-conflict + - id: end-of-file-fixer + - id: trailing-whitespace + - id: requirements-txt-fixer + - id: mixed-line-ending - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.4.7 + rev: v0.7.1 hooks: - id: ruff # - id: ruff-format @@ -39,14 +39,19 @@ repos: - repo: https://github.com/psf/black rev: 24.4.2 hooks: - - id: black + - id: black - repo: https://github.com/Riverside-Healthcare/djLint - rev: v1.34.1 + rev: v1.35.2 hooks: - id: djlint-reformat-django - id: djlint-django + # - repo: https://github.com/RobertCraigie/pyright-python + # rev: v1.1.386 + # hooks: + # - id: pyright + - repo: local hooks: - id: pyright diff --git a/boofilsic/settings.py b/boofilsic/settings.py index e645fb37..d685a01d 100644 --- a/boofilsic/settings.py +++ b/boofilsic/settings.py @@ -110,8 +110,6 @@ IGDB_API_CLIENT_SECRET=(str, ""), # Discord webhooks DISCORD_WEBHOOKS=(dict, {"user-report": None}), - # Slack API token, for sending exceptions to Slack, may deprecate in future - SLACK_API_TOKEN=(str, ""), THREADS_APP_ID=(str, ""), THREADS_APP_SECRET=(str, ""), NEODB_ENABLE_LOGIN_BLUESKY=(bool, False), @@ -276,8 +274,6 @@ DISCOGS_API_KEY = env("DISCOGS_API_KEY") IGDB_CLIENT_ID = env("IGDB_API_CLIENT_ID") IGDB_CLIENT_SECRET = env("IGDB_API_CLIENT_SECRET") -SLACK_TOKEN = env("SLACK_API_TOKEN") -SLACK_CHANNEL = "alert" DOWNLOADER_PROXY_LIST = env("NEODB_DOWNLOADER_PROXY_LIST") DOWNLOADER_BACKUP_PROXY = env("NEODB_DOWNLOADER_BACKUP_PROXY", default="") # type: ignore @@ -412,15 +408,6 @@ logging.getLogger("httpx").setLevel(logging.WARNING) logging.getLogger("httpcore").setLevel(logging.WARNING) -if SLACK_TOKEN: - INSTALLED_APPS += [ - "django_slack", - ] - LOGGING["handlers"]["slack"] = { - "level": "ERROR", - "class": "django_slack.log.SlackExceptionHandler", - } - LOGGING["loggers"]["django"] = {"handlers": ["slack"], "level": "ERROR"} MARKDOWNX_MARKDOWNIFY_FUNCTION = "journal.models.render_md" diff --git a/catalog/migrations/0001_initial.py b/catalog/migrations/0001_initial.py index 2a17a1c5..28c5c4a8 100644 --- a/catalog/migrations/0001_initial.py +++ b/catalog/migrations/0001_initial.py @@ -3,7 +3,6 @@ import uuid import django.db.models.deletion -import simple_history.models from django.db import migrations, models import catalog.common.utils @@ -101,76 +100,6 @@ class Migration(migrations.Migration): ("edited_time", models.DateTimeField(auto_now=True)), ], ), - migrations.CreateModel( - name="HistoricalItem", - fields=[ - ( - "id", - models.BigIntegerField( - auto_created=True, blank=True, db_index=True, verbose_name="ID" - ), - ), - ( - "uid", - models.UUIDField(db_index=True, default=uuid.uuid4, editable=False), - ), - ( - "title", - models.CharField(default="", max_length=1000, verbose_name="标题"), - ), - ( - "brief", - models.TextField(blank=True, default="", verbose_name="简介"), - ), - ( - "primary_lookup_id_type", - models.CharField( - max_length=50, null=True, verbose_name="主要标识类型" - ), - ), - ( - "primary_lookup_id_value", - models.CharField( - max_length=1000, null=True, verbose_name="主要标识数值" - ), - ), - ( - "metadata", - models.JSONField( - blank=True, default=dict, null=True, verbose_name="其它信息" - ), - ), - ( - "cover", - models.TextField( - blank=True, - default="item/default.svg", - max_length=100, - verbose_name="封面", - ), - ), - ("created_time", models.DateTimeField(blank=True, editable=False)), - ("edited_time", models.DateTimeField(blank=True, editable=False)), - ("is_deleted", models.BooleanField(db_index=True, default=False)), - ("history_id", models.AutoField(primary_key=True, serialize=False)), - ("history_date", models.DateTimeField(db_index=True)), - ("history_change_reason", models.CharField(max_length=100, null=True)), - ( - "history_type", - models.CharField( - choices=[("+", "Created"), ("~", "Changed"), ("-", "Deleted")], - max_length=1, - ), - ), - ], - options={ - "verbose_name": "historical item", - "verbose_name_plural": "historical items", - "ordering": ("-history_date", "-history_id"), - "get_latest_by": ("history_date", "history_id"), - }, - bases=(simple_history.models.HistoricalChanges, models.Model), - ), migrations.CreateModel( name="Item", fields=[ diff --git a/catalog/migrations/0002_initial.py b/catalog/migrations/0002_initial.py index 2a5d62e8..d4a622e9 100644 --- a/catalog/migrations/0002_initial.py +++ b/catalog/migrations/0002_initial.py @@ -47,54 +47,6 @@ class Migration(migrations.Migration): to="contenttypes.contenttype", ), ), - migrations.AddField( - model_name="historicalitem", - name="history_user", - field=models.ForeignKey( - null=True, - on_delete=django.db.models.deletion.SET_NULL, - related_name="+", - to=settings.AUTH_USER_MODEL, - ), - ), - migrations.AddField( - model_name="historicalitem", - name="last_editor", - field=models.ForeignKey( - blank=True, - db_constraint=False, - null=True, - on_delete=django.db.models.deletion.DO_NOTHING, - related_name="+", - to=settings.AUTH_USER_MODEL, - ), - ), - migrations.AddField( - model_name="historicalitem", - name="merged_to_item", - field=models.ForeignKey( - blank=True, - db_constraint=False, - default=None, - null=True, - on_delete=django.db.models.deletion.DO_NOTHING, - related_name="+", - to="catalog.item", - ), - ), - migrations.AddField( - model_name="historicalitem", - name="polymorphic_ctype", - field=models.ForeignKey( - blank=True, - db_constraint=False, - editable=False, - null=True, - on_delete=django.db.models.deletion.DO_NOTHING, - related_name="+", - to="contenttypes.contenttype", - ), - ), migrations.AddField( model_name="externalresource", name="item", diff --git a/catalog/migrations/0012_alter_model_i18n.py b/catalog/migrations/0012_alter_model_i18n.py index 7ef50ed1..bae8c7b9 100644 --- a/catalog/migrations/0012_alter_model_i18n.py +++ b/catalog/migrations/0012_alter_model_i18n.py @@ -55,55 +55,13 @@ class Migration(migrations.Migration): ("apple_podcast", "Apple Podcast"), ("apple_music", "Apple Music"), ("fedi", "Fediverse"), + ("qidian", "Qidian"), + ("ypshuo", "Ypshuo"), ], max_length=50, verbose_name="IdType of the source site", ), ), - migrations.AlterField( - model_name="item", - name="brief", - field=models.TextField(blank=True, default="", verbose_name="description"), - ), - migrations.AlterField( - model_name="item", - name="cover", - field=models.ImageField( - blank=True, - default="item/default.svg", - upload_to=catalog.common.utils.item_cover_path, - verbose_name="cover", - ), - ), - migrations.AlterField( - model_name="item", - name="metadata", - field=models.JSONField( - blank=True, default=dict, null=True, verbose_name="metadata" - ), - ), - migrations.AlterField( - model_name="item", - name="primary_lookup_id_type", - field=models.CharField( - max_length=50, null=True, verbose_name="Primary ID Type" - ), - ), - migrations.AlterField( - model_name="item", - name="primary_lookup_id_value", - field=models.CharField( - help_text="automatically detected, usually no change necessary, left empty if unsure", - max_length=1000, - null=True, - verbose_name="Primary ID Value", - ), - ), - migrations.AlterField( - model_name="item", - name="title", - field=models.CharField(default="", max_length=1000, verbose_name="title"), - ), migrations.AlterField( model_name="itemlookupid", name="id_type", @@ -148,11 +106,57 @@ class Migration(migrations.Migration): ("apple_podcast", "Apple Podcast"), ("apple_music", "Apple Music"), ("fedi", "Fediverse"), + ("qidian", "Qidian"), + ("ypshuo", "Ypshuo"), ], max_length=50, verbose_name="source site", ), ), + migrations.AlterField( + model_name="item", + name="brief", + field=models.TextField(blank=True, default="", verbose_name="description"), + ), + migrations.AlterField( + model_name="item", + name="cover", + field=models.ImageField( + blank=True, + default="item/default.svg", + upload_to=catalog.common.utils.item_cover_path, + verbose_name="cover", + ), + ), + migrations.AlterField( + model_name="item", + name="metadata", + field=models.JSONField( + blank=True, default=dict, null=True, verbose_name="metadata" + ), + ), + migrations.AlterField( + model_name="item", + name="primary_lookup_id_type", + field=models.CharField( + max_length=50, null=True, verbose_name="Primary ID Type" + ), + ), + migrations.AlterField( + model_name="item", + name="primary_lookup_id_value", + field=models.CharField( + help_text="automatically detected, usually no change necessary, left empty if unsure", + max_length=1000, + null=True, + verbose_name="Primary ID Value", + ), + ), + migrations.AlterField( + model_name="item", + name="title", + field=models.CharField(default="", max_length=1000, verbose_name="title"), + ), migrations.AlterField( model_name="itemlookupid", name="id_value", diff --git a/catalog/sites/bandcamp.py b/catalog/sites/bandcamp.py index 80164189..ce3c5dc5 100644 --- a/catalog/sites/bandcamp.py +++ b/catalog/sites/bandcamp.py @@ -34,15 +34,15 @@ def validate_url_fallback(cls, url): hostname = parsed_url.netloc try: answers = dns.resolver.query(hostname, "CNAME") - for rdata in answers: # type:ignore - if str(rdata.target) == "dom.bandcamp.com.": + for rdata in answers: + if str(rdata.target) == "dom.bandcamp.com.": # type:ignore return True except Exception: pass try: answers = dns.resolver.query(hostname, "A") - for rdata in answers: # type:ignore - if str(rdata.address) == "35.241.62.186": + for rdata in answers: + if str(rdata.address) == "35.241.62.186": # type:ignore return True except Exception: pass diff --git a/catalog/sites/bangumi.py b/catalog/sites/bangumi.py index bd1b8d2b..60a675e5 100644 --- a/catalog/sites/bangumi.py +++ b/catalog/sites/bangumi.py @@ -77,7 +77,7 @@ def scrape(self): case "别名": other_title = ( [d["v"] for d in v] - if type(v) == list + if isinstance(v, list) else ([v] if isinstance(v, str) else []) ) case "imdb_id": @@ -93,13 +93,13 @@ def scrape(self): case "作者": authors = ( [d["v"] for d in v] - if type(v) == list + if isinstance(v, list) else ([v] if isinstance(v, str) else []) ) case "平台": platform = ( [d["v"] for d in v] - if type(v) == list + if isinstance(v, list) else ([v] if isinstance(v, str) else []) ) case "游戏类型": @@ -109,7 +109,7 @@ def scrape(self): else ([v] if isinstance(v, str) else []) ) case "官方网站" | "website": - site = v[0] if type(v) == list else v + site = v[0] if isinstance(v, list) else v img_url = o["images"].get("large") or o["images"].get("common") raw_img = None diff --git a/catalog/sites/steam.py b/catalog/sites/steam.py index 398ddb0d..22bd7351 100644 --- a/catalog/sites/steam.py +++ b/catalog/sites/steam.py @@ -16,12 +16,12 @@ def _get_preferred_languages(): langs = {} - for l in PREFERRED_LANGUAGES: - if l == "zh": + for la in PREFERRED_LANGUAGES: + if la == "zh": langs.update({"zh-cn": "zh-CN", "zh-tw": "zh-TW"}) # zh-HK data is not good else: - langs[l] = l + langs[la] = la return langs diff --git a/pyproject.toml b/pyproject.toml index 61c6b77a..78336116 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,95 +5,123 @@ description = "🧩 self-hosted server tracking what you read/watch/listen/play, readme = "README.md" requires-python = ">= 3.12" dependencies = [ - "blurhash-python", - "cachetools", - "dateparser", - "discord.py", + "blurhash-python>=1.2.2", + "cachetools>=5.5.0", + "dateparser>=1.2.0", "django<5.0", - "django-anymail", + "django-anymail>=12.0", "django-auditlog>=3.0.0", - "django-bleach", + "django-bleach>=3.1.0", "django-compressor", "django-cors-headers", - "django-environ", - "django-hijack>=3.5.4", - "django-jsonform", + "django-environ>=0.11.2", + "django-hijack>=3.7.0", + "django-jsonform>=2.23.1", "django-maintenance-mode", - "django-markdownx", - "django-ninja>=1.2.2", - "django-oauth-toolkit==2.3.0", + "django-markdownx>=4.0.7", + "django-ninja>=1.3.0", "django-polymorphic @ git+https://github.com/jazzband/django-polymorphic/@v4.0.0a", - "django-redis", - "django-rq", - "django-sass-processor", - "django-simple-history ", - "django-slack", - "django-tz-detect", - "django-user-messages", - "dnspython", - "easy-thumbnails", - "filetype", - "gunicorn", - "httpx", - "igdb-api-v4", - "langdetect", - "libsass", - "listparser", - "loguru", - "lxml", - "markdownify", - "mistune", - "openpyxl", - "podcastparser", + "django-redis>=5.4.0", + "django-rq>=2.10.2", + "django-sass-processor>=1.4.1", + "django-tz-detect>=0.5.0", + "django-user-messages>=1.1.0", + "dnspython>=2.7.0", + "easy-thumbnails>=2.10", + "filetype>=1.2.0", + "gunicorn>=23.0.0", + "httpx>=0.27.2", + "igdb-api-v4>=0.3.3", + "langdetect>=1.0.9", + "listparser>=0.20", + "loguru>=0.7.2", + "lxml>=5.3.0", + "markdownify>=0.13.1", + "mistune>=3.0.2", + "openpyxl>=3.1.5", + "podcastparser>=0.6.10", "psycopg2-binary", - "requests", - "rq", - "sentry-sdk", - "setproctitle", - "tqdm", - "typesense", - "urlman", - "validators", + "requests>=2.32.3", + "sentry-sdk>=2.17.0", + "setproctitle>=1.3.3", + "tqdm>=4.66.6", + "typesense>=0.21.0", + "urlman>=2.0.2", + "validators>=0.34.0", "deepmerge>=1.1.1", "django-typed-models @ git+https://github.com/alphatownsman/django-typed-models.git", - "atproto>=0.0.49", + "atproto>=0.0.55", + "discord-py>=2.4.0", ] [tool.rye] managed = true virtual = true dev-dependencies = [ - "pre-commit>=3.7.0", + "pre-commit>=4.0.1", "black~=24.4.2", "django-stubs>=5.1.0", - "djlint~=1.34.1", + "djlint>=1.35.2", "isort~=5.13.2", "lxml-stubs>=0.5.1", - "pyright>=1.1.384", - "ruff", - "mkdocs-material>=9.5.25", + "pyright>=1.1.386", + "ruff>=0.7.1", + "mkdocs-material>=9.5.42", ] [tool.pyright] -exclude = [ "media", ".venv", ".git", "playground", "catalog/*/tests.py", "journal/tests.py", "neodb", "**/migrations", "**/sites/douban_*", "neodb-takahe" ] +exclude = [ + "media", + ".venv", + ".git", + "playground", + "catalog/*/tests.py", + "journal/tests.py", + "neodb", + "**/migrations", + "**/sites/douban_*", + "neodb-takahe", +] reportIncompatibleVariableOverride = false [tool.djlint] -ignore="T002,T003,H005,H006,H019,H020,H021,H023,H030,H031,D018" -indent=2 +ignore = "T002,T003,H005,H006,H019,H020,H021,H023,H030,H031,D018" +indent = 2 [tool.isort] profile = "black" [tool.mypy] -exclude = ['^neodb-takahe/', '^legacy/', '^media/', '^playground/', '^catalog/*/tests.py', '^journal/tests.py', '^neodb/', '.*migrations.*', '.*sites/douban_.*' ] +exclude = [ + '^neodb-takahe/', + '^legacy/', + '^media/', + '^playground/', + '^catalog/*/tests.py', + '^journal/tests.py', + '^neodb/', + '.*migrations.*', + '.*sites/douban_.*', +] plugins = ["mypy_django_plugin.main"] [tool.django-stubs] django_settings_module = "boofilsic.settings" [tool.ruff] -exclude = ["neodb-takahe/*", "media", ".venv", ".git", "playground", "**/tests.py", "neodb", "**/migrations", "**/commands", "**/importers", "legacy" ] +exclude = [ + "neodb-takahe/*", + "media", + ".venv", + ".git", + "playground", + "**/tests.py", + "neodb", + "**/migrations", + "**/commands", + "**/importers", + "legacy", +] lint.ignore = ["F401", "F403", "F405"] [tool.setuptools] diff --git a/requirements-dev.lock b/requirements-dev.lock index af45e1ad..fb53506f 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -21,7 +21,7 @@ asgiref==3.8.1 # via django # via django-cors-headers # via django-stubs -atproto==0.0.49 +atproto==0.0.55 attrs==23.2.0 # via aiohttp babel==2.15.0 @@ -32,7 +32,7 @@ black==24.4.2 bleach==5.0.1 # via django-bleach blurhash-python==1.2.2 -cachetools==5.3.3 +cachetools==5.5.0 certifi==2024.6.2 # via httpcore # via httpx @@ -56,12 +56,11 @@ colorama==0.4.6 # via mkdocs-material cryptography==42.0.8 # via atproto - # via jwcrypto cssbeautifier==1.15.1 # via djlint dateparser==1.2.0 deepmerge==1.1.1 -discord-py==2.3.2 +discord-py==2.4.0 distlib==0.3.8 # via virtualenv django==4.2.14 @@ -74,17 +73,14 @@ django==4.2.14 # via django-jsonform # via django-markdownx # via django-ninja - # via django-oauth-toolkit # via django-polymorphic # via django-redis # via django-rq - # via django-simple-history - # via django-slack # via django-stubs # via django-stubs-ext # via django-tz-detect # via easy-thumbnails -django-anymail==10.3 +django-anymail==12.0 django-appconf==1.0.6 # via django-compressor django-auditlog==3.0.0 @@ -92,28 +88,25 @@ django-bleach==3.1.0 django-compressor==4.4 django-cors-headers==4.3.1 django-environ==0.11.2 -django-hijack==3.5.4 -django-jsonform==2.22.0 +django-hijack==3.7.0 +django-jsonform==2.23.1 django-maintenance-mode==0.21.1 django-markdownx==4.0.7 -django-ninja==1.2.2 -django-oauth-toolkit==2.3.0 +django-ninja==1.3.0 django-polymorphic @ git+https://github.com/jazzband/django-polymorphic/@1039f882b99f97bf657bd958c949ee6a3b00377a django-redis==5.4.0 django-rq==2.10.2 django-sass-processor==1.4.1 -django-simple-history==3.7.0 -django-slack==5.19.0 django-stubs==5.1.0 django-stubs-ext==5.1.0 # via django-stubs django-typed-models @ git+https://github.com/alphatownsman/django-typed-models.git@03921e05b39d07d143519a435259f66387a088bc django-tz-detect==0.5.0 -django-user-messages==1.0.0 -djlint==1.34.1 -dnspython==2.6.1 +django-user-messages==1.1.0 +djlint==1.35.2 +dnspython==2.7.0 # via atproto -easy-thumbnails==2.8.5 +easy-thumbnails==2.10 editorconfig==0.12.4 # via cssbeautifier # via jsbeautifier @@ -127,7 +120,7 @@ frozenlist==1.4.1 # via aiosignal ghp-import==2.1.0 # via mkdocs -gunicorn==22.0.0 +gunicorn==23.0.0 h11==0.14.0 # via httpcore html-tag-names==0.1.2 @@ -136,7 +129,7 @@ html-void-elements==0.1.0 # via djlint httpcore==1.0.5 # via httpx -httpx==0.26.0 +httpx==0.27.2 # via atproto identify==2.5.36 # via pre-commit @@ -145,7 +138,7 @@ idna==3.7 # via httpx # via requests # via yarl -igdb-api-v4==0.3.2 +igdb-api-v4==0.3.3 isort==5.13.2 jinja2==3.1.4 # via mkdocs @@ -155,22 +148,19 @@ jsbeautifier==1.15.1 # via djlint json5==0.9.25 # via djlint -jwcrypto==1.5.6 - # via django-oauth-toolkit langdetect==1.0.9 -libipld==1.2.3 +libipld==3.0.0 # via atproto -libsass==0.23.0 listparser==0.20 loguru==0.7.2 -lxml==5.2.2 +lxml==5.3.0 lxml-stubs==0.5.1 markdown==3.6 # via django-markdownx # via mkdocs # via mkdocs-material # via pymdown-extensions -markdownify==0.12.1 +markdownify==0.13.1 markupsafe==2.1.5 # via jinja2 # via mkdocs @@ -182,7 +172,7 @@ mkdocs==1.6.0 # via mkdocs-material mkdocs-get-deps==0.2.0 # via mkdocs -mkdocs-material==9.5.25 +mkdocs-material==9.5.42 mkdocs-material-extensions==1.3.1 # via mkdocs-material multidict==6.0.5 @@ -193,9 +183,7 @@ mypy-extensions==1.0.0 nodeenv==1.9.1 # via pre-commit # via pyright -oauthlib==3.2.2 - # via django-oauth-toolkit -openpyxl==3.1.3 +openpyxl==3.1.5 packaging==24.0 # via black # via gunicorn @@ -215,7 +203,7 @@ platformdirs==4.2.2 # via mkdocs-get-deps # via virtualenv podcastparser==0.6.10 -pre-commit==3.7.1 +pre-commit==4.0.1 protobuf==5.27.0 # via igdb-api-v4 psycopg2-binary==2.9.9 @@ -230,7 +218,7 @@ pygments==2.18.0 # via mkdocs-material pymdown-extensions==10.8.1 # via mkdocs-material -pyright==1.1.384 +pyright==1.1.386 python-dateutil==2.9.0.post0 # via dateparser # via django-auditlog @@ -261,8 +249,6 @@ regex==2023.12.25 # via mkdocs-material requests==2.32.3 # via django-anymail - # via django-oauth-toolkit - # via django-slack # via igdb-api-v4 # via mkdocs-material # via typesense @@ -270,8 +256,8 @@ rjsmin==1.2.1 # via django-compressor rq==1.16.2 # via django-rq -ruff==0.4.7 -sentry-sdk==2.4.0 +ruff==0.7.1 +sentry-sdk==2.17.0 setproctitle==1.3.3 six==1.16.0 # via bleach @@ -290,7 +276,7 @@ sqlparse==0.5.0 # via django tinycss2==1.1.1 # via bleach -tqdm==4.66.4 +tqdm==4.66.6 # via djlint types-pyyaml==6.0.12.20240311 # via django-stubs @@ -299,7 +285,6 @@ typing-extensions==4.12.1 # via atproto # via django-stubs # via django-stubs-ext - # via jwcrypto # via pydantic # via pydantic-core # via pyright @@ -310,7 +295,7 @@ urllib3==2.2.1 # via requests # via sentry-sdk urlman==2.0.2 -validators==0.28.3 +validators==0.34.0 virtualenv==20.26.2 # via pre-commit watchdog==4.0.1 diff --git a/requirements.lock b/requirements.lock index 344bf766..afb80985 100644 --- a/requirements.lock +++ b/requirements.lock @@ -20,7 +20,7 @@ anyio==4.4.0 asgiref==3.8.1 # via django # via django-cors-headers -atproto==0.0.49 +atproto==0.0.55 attrs==23.2.0 # via aiohttp beautifulsoup4==4.12.3 @@ -28,7 +28,7 @@ beautifulsoup4==4.12.3 bleach==5.0.1 # via django-bleach blurhash-python==1.2.2 -cachetools==5.3.3 +cachetools==5.5.0 certifi==2024.6.2 # via httpcore # via httpx @@ -44,10 +44,9 @@ click==8.1.7 # via rq cryptography==42.0.8 # via atproto - # via jwcrypto dateparser==1.2.0 deepmerge==1.1.1 -discord-py==2.3.2 +discord-py==2.4.0 django==4.2.16 # via django-anymail # via django-appconf @@ -58,15 +57,12 @@ django==4.2.16 # via django-jsonform # via django-markdownx # via django-ninja - # via django-oauth-toolkit # via django-polymorphic # via django-redis # via django-rq - # via django-simple-history - # via django-slack # via django-tz-detect # via easy-thumbnails -django-anymail==10.3 +django-anymail==12.0 django-appconf==1.0.6 # via django-compressor django-auditlog==3.0.0 @@ -74,62 +70,54 @@ django-bleach==3.1.0 django-compressor==4.4 django-cors-headers==4.3.1 django-environ==0.11.2 -django-hijack==3.5.4 -django-jsonform==2.22.0 +django-hijack==3.7.0 +django-jsonform==2.23.1 django-maintenance-mode==0.21.1 django-markdownx==4.0.7 -django-ninja==1.2.2 -django-oauth-toolkit==2.3.0 +django-ninja==1.3.0 django-polymorphic @ git+https://github.com/jazzband/django-polymorphic/@1039f882b99f97bf657bd958c949ee6a3b00377a django-redis==5.4.0 django-rq==2.10.2 django-sass-processor==1.4.1 -django-simple-history==3.7.0 -django-slack==5.19.0 django-typed-models @ git+https://github.com/alphatownsman/django-typed-models.git@03921e05b39d07d143519a435259f66387a088bc django-tz-detect==0.5.0 -django-user-messages==1.0.0 -dnspython==2.6.1 +django-user-messages==1.1.0 +dnspython==2.7.0 # via atproto -easy-thumbnails==2.8.5 +easy-thumbnails==2.10 et-xmlfile==1.1.0 # via openpyxl filetype==1.2.0 frozenlist==1.4.1 # via aiohttp # via aiosignal -gunicorn==22.0.0 +gunicorn==23.0.0 h11==0.14.0 # via httpcore httpcore==1.0.5 # via httpx -httpx==0.26.0 +httpx==0.27.2 # via atproto idna==3.7 # via anyio # via httpx # via requests # via yarl -igdb-api-v4==0.3.2 -jwcrypto==1.5.6 - # via django-oauth-toolkit +igdb-api-v4==0.3.3 langdetect==1.0.9 -libipld==1.2.3 +libipld==3.0.0 # via atproto -libsass==0.23.0 listparser==0.20 loguru==0.7.2 -lxml==5.2.2 +lxml==5.3.0 markdown==3.6 # via django-markdownx -markdownify==0.12.1 +markdownify==0.13.1 mistune==3.0.2 multidict==6.0.5 # via aiohttp # via yarl -oauthlib==3.2.2 - # via django-oauth-toolkit -openpyxl==3.1.3 +openpyxl==3.1.5 packaging==24.0 # via gunicorn pillow==10.3.0 @@ -165,15 +153,13 @@ regex==2024.5.15 # via dateparser requests==2.32.3 # via django-anymail - # via django-oauth-toolkit - # via django-slack # via igdb-api-v4 # via typesense rjsmin==1.2.1 # via django-compressor rq==1.16.2 # via django-rq -sentry-sdk==2.4.0 +sentry-sdk==2.17.0 setproctitle==1.3.3 six==1.16.0 # via bleach @@ -190,11 +176,10 @@ sqlparse==0.5.0 # via django tinycss2==1.1.1 # via bleach -tqdm==4.66.4 +tqdm==4.66.6 typesense==0.21.0 typing-extensions==4.12.1 # via atproto - # via jwcrypto # via pydantic # via pydantic-core tzlocal==5.2 @@ -204,7 +189,7 @@ urllib3==2.2.1 # via requests # via sentry-sdk urlman==2.0.2 -validators==0.28.3 +validators==0.34.0 webencodings==0.5.1 # via bleach # via tinycss2