Пример #1
0
class Instrument(CarnaticStyle, data.models.Instrument):
    class Meta:
        ordering = ['id']

    fuzzymanager = managers.FuzzySearchManager()
    objects = managers.CarnaticInstrumentManager()

    def ordered_performers(self):
        artists, counts = self.performers()
        artists = sorted(artists, key=lambda a: counts[a], reverse=True)
        return artists

    def performers(self):
        artists = Artist.objects.filter(
            instrumentperformance__instrument=self).annotate(
                num_times=Count('instrumentperformance__instrument'))

        artistcount = {}
        ret = []
        for a in artists:
            ret.append(a)
            artistcount[a] = a.num_times

        return ret, artistcount

    def samples(self, limit=2):
        IPClass = self.get_object_map("performance")
        performances = list(IPClass.objects.filter(instrument=self).all())
        random.shuffle(performances)
        perf = performances[:limit]
        return [p.recording for p in perf]
Пример #2
0
class Raaga(data.models.BaseModel, data.models.ImageMixin):
    class Meta:
        ordering = ['id']

    missing_image = "raaga.jpg"

    name = models.CharField(max_length=50)
    common_name = models.CharField(max_length=50)
    uuid = models.UUIDField(db_index=True)
    image = models.ForeignKey(data.models.Image,
                              blank=True,
                              null=True,
                              related_name="%(app_label)s_%(class)s_image",
                              on_delete=models.CASCADE)

    objects = managers.CarnaticRaagaManager()
    fuzzymanager = managers.FuzzySearchManager()

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        if self.common_name:
            slug = slugify(self.common_name)
        else:
            slug = slugify(self.name)
        return reverse('carnatic-raaga', args=[str(self.uuid), slug])

    def works(self):
        return self.work_set.distinct().all()

    def composers(self):
        return Composer.objects.filter(works__raaga=self).distinct()

    def artists(self):
        artistmap = {}
        artistcounter = collections.Counter()
        artists = Artist.objects.filter(
            primary_concerts__recordings__works__raaga=self).filter(
                main_instrument__in=[1, 2])
        for a in artists:
            artistcounter[a.pk] += 1
            if a.pk not in artistmap:
                artistmap[a.pk] = a
        artists = []
        for aid, count in artistcounter.most_common():
            artists.append(artistmap[aid])
        return artists

    def recordings(self, limit=None):
        recordings = Recording.objects.filter(works__raaga=self)
        if recordings is not None:
            recordings = recordings[:limit]
        return recordings

    def recordings_form(self, form=None):
        ret = Recording.objects.filter(Q(works__raaga=self) | Q(raagas=self))
        if form:
            ret = ret.filter(forms__name=form)
        return ret.all()
Пример #3
0
class Form(models.Model):
    name = models.CharField(max_length=50)
    attrfromrecording = models.BooleanField(default=False)

    objects = managers.CarnaticFormManager()
    fuzzymanager = managers.FuzzySearchManager()

    def __str__(self):
        return self.name
Пример #4
0
class FormAlias(models.Model):
    name = models.CharField(max_length=50)
    form = models.ForeignKey(Form,
                             related_name="aliases",
                             on_delete=models.CASCADE)

    objects = managers.FuzzySearchManager()

    def __str__(self):
        return self.name
Пример #5
0
class TaalaAlias(models.Model):
    name = models.CharField(max_length=50)
    taala = models.ForeignKey("Taala",
                              related_name="aliases",
                              on_delete=models.CASCADE)

    fuzzymanager = managers.FuzzySearchManager()
    objects = models.Manager()

    def __str__(self):
        return self.name
Пример #6
0
class InstrumentAlias(CarnaticStyle, data.models.InstrumentAlias):
    fuzzymanager = managers.FuzzySearchManager()
    objects = models.Manager()