Source code for django_musicbrainz_connector.models.recording

"""
CREATE TABLE recording ( -- replicate (verbose)
    id                  SERIAL,
    gid                 UUID NOT NULL,
    name                VARCHAR NOT NULL,
    artist_credit       INTEGER NOT NULL, -- references artist_credit.id
    length              INTEGER CHECK (length IS NULL OR length > 0),
    comment             VARCHAR(255) NOT NULL DEFAULT '',
    edits_pending       INTEGER NOT NULL DEFAULT 0 CHECK (edits_pending >= 0),
    last_updated        TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    video               BOOLEAN NOT NULL DEFAULT FALSE
);
"""

from django.db import models

from django_musicbrainz_connector.models.link_type import LinkType
from django_musicbrainz_connector.models.recording_work_link import RecordingWorkLink


[docs] class Recording(models.Model): id = models.IntegerField("ID", primary_key=True, db_column="id") gid = models.UUIDField("GID", db_column="gid") name = models.CharField(max_length=255, db_column="name") artist_credit = models.ForeignKey( "ArtistCredit", verbose_name="Artist Credit", related_name="recordings", on_delete=models.PROTECT, db_column="artist_credit", ) length = models.PositiveIntegerField(null=True, db_column="length") comment = models.CharField("Comment", max_length=255, default="", db_column="comment") edits_pending = models.PositiveIntegerField("Edits Pending", db_column="edits_pending", default=0) last_updated = models.DateTimeField("Last Updated", db_column="last_updated") video = models.BooleanField(default=False, db_column="video") def __str__(self) -> str: return self.name @property def musicbrainz_url(self) -> str: """Returns a URL to open the recording on the MusicBrainz website.""" return f"https://musicbrainz.org/recording/{self.gid}" @property def recording_of(self): """Return the works that this recording is a recording of.""" performance = LinkType.objects.get(name="performance", entity_type0="recording", entity_type1="work") recording_work_links = RecordingWorkLink.objects.filter(recording=self, link__link_type=performance) return [link.work for link in recording_work_links] class Meta: managed = False db_table = "recording" verbose_name_plural = "Recordings" ordering = ["name"]