update dependencies (#766)
* update dependencies * fix lint * sync migration --------- Co-authored-by: mein Name <ich@example.com>
This commit is contained in:
parent
7293e6c4bd
commit
4c5c9703f5
12 changed files with 215 additions and 337 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -13,6 +13,9 @@ __pycache__/
|
|||
# VS Code configuration files
|
||||
.vscode/
|
||||
|
||||
# Zed settings
|
||||
.zed
|
||||
|
||||
# flake8
|
||||
tox.ini
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
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
|
||||
args: [--unsafe]
|
||||
|
@ -25,7 +25,7 @@ repos:
|
|||
- 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
|
||||
|
@ -42,11 +42,16 @@ repos:
|
|||
- 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
|
||||
|
|
|
@ -110,8 +110,6 @@ env = environ.FileAwareEnv(
|
|||
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 @@ GOOGLE_API_KEY = env("GOOGLE_API_KEY")
|
|||
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("urllib3").setLevel(logging.WARNING)
|
|||
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"
|
||||
|
||||
|
|
|
@ -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=[
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -34,15 +34,15 @@ class Bandcamp(AbstractSite):
|
|||
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
|
||||
|
|
|
@ -77,7 +77,7 @@ class Bangumi(AbstractSite):
|
|||
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 @@ class Bangumi(AbstractSite):
|
|||
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 @@ class Bangumi(AbstractSite):
|
|||
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
|
||||
|
|
|
@ -16,12 +16,12 @@ _logger = logging.getLogger(__name__)
|
|||
|
||||
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
|
||||
|
||||
|
||||
|
|
130
pyproject.toml
130
pyproject.toml
|
@ -5,77 +5,83 @@ 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]
|
||||
|
@ -86,14 +92,36 @@ indent=2
|
|||
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]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue