[tags] Add tags to scrobble media models
Some checks failed
build & deploy / test (push) Failing after 1m19s
build & deploy / deploy (push) Has been skipped

This commit is contained in:
2026-03-26 17:32:47 -04:00
parent 931246e043
commit 3d2f3cbe71
21 changed files with 493 additions and 1 deletions

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("beers", "0006_remove_beer_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="beer",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("boardgames", "0013_boardgame_publishers"),
]
operations = [
migrations.AddField(
model_name="boardgame",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python3
from enum import Enum
BOOKS_TITLES_TO_IGNORE = [
"KOReader Quickstart Guide",
@ -7,3 +8,16 @@ BOOKS_TITLES_TO_IGNORE = [
]
READCOMICSONLINE_URL = "https://readcomicsonline.ru"
class MediaSourceTag(str, Enum):
OPENLIBRARY = "source_openlibrary"
GOOGLE_BOOKS = "source_google_books"
COMICVINE = "source_comicvine"
LOCG = "source_locg"
KOREADER = "source_koreader"
SEMANTIC_SCHOLAR = "source_semantic_scholar"
@classmethod
def choices(cls):
return [(tag.value, tag.name.replace("_", " ").title()) for tag in cls]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:23
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("books", "0033_alter_book_issue_number_alter_book_volume_number"),
]
operations = [
migrations.AddField(
model_name="book",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("books", "0034_book_tags"),
]
operations = [
migrations.AddField(
model_name="paper",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -6,7 +6,7 @@ from typing import Optional
from uuid import uuid4
import requests
from books.constants import READCOMICSONLINE_URL
from books.constants import MediaSourceTag, READCOMICSONLINE_URL
from books.locg import (
lookup_comic_by_locg_slug,
lookup_comic_from_locg,
@ -269,8 +269,11 @@ class Book(LongPlayScrobblableMixin):
return book
book_dict = None
source_tag = None
if READCOMICSONLINE_URL in url:
book_dict = lookup_comic_from_comicvine(title)
if book_dict:
source_tag = MediaSourceTag.COMICVINE
book_dict["readcomics_url"] = get_comic_issue_url(url)
book_dict["next_readcomics_url"] = next_url_if_exists(
book_dict["readcomics_url"]
@ -278,9 +281,13 @@ class Book(LongPlayScrobblableMixin):
if not book_dict:
book_dict = lookup_book_from_ol(title, author=author)
if book_dict:
source_tag = MediaSourceTag.OPENLIBRARY
if not book_dict:
book_dict = lookup_book_from_google(title)
if book_dict:
source_tag = MediaSourceTag.GOOGLE_BOOKS
if not book_dict:
logger.warning(
@ -312,6 +319,8 @@ class Book(LongPlayScrobblableMixin):
if genres:
book.genre.add(*genres)
book.authors.add(*author_list)
if source_tag:
book.tags.add(source_tag.value)
return book

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("bricksets", "0003_remove_brickset_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="brickset",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("foods", "0005_food_nutrition_and_sources"),
]
operations = [
migrations.AddField(
model_name="food",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("lifeevents", "0003_remove_lifeevent_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="lifeevent",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("locations", "0008_remove_geolocation_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="geolocation",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("moods", "0004_remove_mood_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="mood",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("music", "0029_remove_track_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="track",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("podcasts", "0018_remove_podcastepisode_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="podcastepisode",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("puzzles", "0004_remove_puzzle_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="puzzle",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -60,6 +60,7 @@ class ScrobblableMixin(TimeStampedModel):
base_run_time_seconds = models.IntegerField(**BNULL)
genre = TaggableManager(through=ObjectWithGenres, blank=True)
tags = TaggableManager(blank=True)
class Meta:
abstract = True

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("sports", "0016_remove_sportevent_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="sportevent",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("tasks", "0005_remove_task_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="task",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("trails", "0006_remove_trail_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="trail",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("videogames", "0013_remove_videogame_run_time_seconds_and_more"),
]
operations = [
migrations.AddField(
model_name="videogame",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("videos", "0026_unique_imdb_youtube_together"),
]
operations = [
migrations.AddField(
model_name="video",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 4.2.29 on 2026-03-26 21:25
from django.db import migrations
import taggit.managers
class Migration(migrations.Migration):
dependencies = [
("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"),
("webpages", "0007_webpage_image"),
]
operations = [
migrations.AddField(
model_name="webpage",
name="tags",
field=taggit.managers.TaggableManager(
blank=True,
help_text="A comma-separated list of tags.",
through="taggit.TaggedItem",
to="taggit.Tag",
verbose_name="Tags",
),
),
]