예제 #1
0
 def get_queryset(self):
     collection_ids = get_collection_ids_from_request_or_error(self.request)
     permission = utils.get_user_permissions(self.request.user)
     return models.Recording.objects.with_permissions(
         collection_ids,
         permission).prefetch_related('raags', 'taals', 'layas', 'forms',
                                      'works', 'instrumentperformance_set')
예제 #2
0
 def concert_list(self, ob):
     collection_ids = get_collection_ids_from_request_or_error(
         self.context['request'])
     permission = utils.get_user_permissions(self.context['request'].user)
     concerts = ob.concert_set.with_permissions(collection_ids, permission)
     cs = ConcertInnerSerializer(concerts, many=True)
     return cs.data
예제 #3
0
 def recording_list(self, ob):
     collection_ids = get_collection_ids_from_request_or_error(
         self.context['request'])
     permission = utils.get_user_permissions(self.context['request'].user)
     recordings = ob.recording_set.with_permissions(collection_ids,
                                                    permission)
     return RecordingInnerSerializer(recordings, many=True).data
예제 #4
0
파일: api.py 프로젝트: dbogdanov/dunya
 def concert_list(self, ob):
     collection_ids = self.context['request'].META.get(
         'HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.context['request'].user)
     concerts = ob.concert_set.with_permissions(collection_ids, permission)
     cs = ConcertInnerSerializer(concerts, many=True)
     return cs.data
예제 #5
0
파일: api.py 프로젝트: aguai/dunya
 def release_list(self, ob):
     collection_ids = self.context['request'].META.get(
         'HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.context['request'].user)
     release = ob.release_set.with_permissions(collection_ids, permission)
     cs = ReleaseInnerSerializer(release, many=True)
     return cs.data
예제 #6
0
파일: api.py 프로젝트: dbogdanov/dunya
 def recording_list(self, ob):
     collection_ids = self.context['request'].META.get(
         'HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.context['request'].user)
     recordings = ob.recordings(collection_ids, permission)
     rs = RecordingInnerSerializer(recordings, many=True)
     return rs.data
예제 #7
0
 def release_list(self, ob):
     collection_ids = get_collection_ids_from_request_or_error(
         self.context['request'])
     permission = utils.get_user_permissions(self.context['request'].user)
     release = ob.release_set.with_permissions(collection_ids, permission)
     cs = ReleaseInnerSerializer(release, many=True)
     return cs.data
예제 #8
0
파일: api.py 프로젝트: vishalbelsare/dunya
 def get_queryset(self):
     collection_ids = get_collection_ids_from_request_or_error(self.request)
     permission = utils.get_user_permissions(self.request.user)
     return models.Recording.objects.with_permissions(
         collection_ids, permission).prefetch_related(
             'works__makam', 'works__usul', 'makam', 'artists',
             'instrumentperformance_set__artist',
             'instrumentperformance_set__instrument')
예제 #9
0
파일: api.py 프로젝트: aguai/dunya
 def get_queryset(self):
     collection_ids = self.request.META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.request.user)
     return models.Recording.objects.with_permissions(
         collection_ids,
         permission).prefetch_related('works', 'forms', 'raagas', 'taalas',
                                      'concert_set',
                                      'instrumentperformance_set')
예제 #10
0
파일: api.py 프로젝트: aguai/dunya
 def get_queryset(self):
     collection_ids = self.request.META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.request.user)
     return models.Recording.objects.with_permissions(
         collection_ids, permission).prefetch_related(
             'works__makam', 'works__usul', 'makam', 'artists',
             'instrumentperformance_set__artist',
             'instrumentperformance_set__instrument')
예제 #11
0
 def get_album_artists(self, ob):
     collection_ids = get_collection_ids_from_request_or_error(self.context['request'])
     permission = utils.get_user_permissions(self.context['request'].user)
     releases = ob.release_set.with_permissions(collection_ids, permission)
     ret = []
     if len(releases):
         ret = releases[0].artists
     arts = ArtistInnerSerializer(ret, many=True)
     return arts.data
예제 #12
0
 def get_album_artists(self, ob):
     collection_ids = self.context['request'].META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.context['request'].user)
     releases = ob.release_set.with_permissions(collection_ids, permission)
     ret = []
     if len(releases):
         ret = releases[0].artists
     arts = ArtistInnerSerializer(ret, many=True)
     return arts.data
예제 #13
0
파일: api.py 프로젝트: Robrib/dunya
 def get_album_artists(self, ob):
     collection_ids = self.context['request'].META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.context['request'].user)
     releases = ob.release_set.with_permissions(collection_ids, permission)
     ret = []
     if len(releases):
         ret = releases[0].artists
     arts = ArtistInnerSerializer(ret, many=True)
     return arts.data
예제 #14
0
파일: api.py 프로젝트: aguai/dunya
 def get_queryset(self):
     collection_ids = self.request.META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.request.user)
     return models.Recording.objects.with_permissions(
         collection_ids,
         permission).select_related('work').prefetch_related(
             'recordinginstrumentalist_set__artist',
             'recordinginstrumentalist_set__instrument', 'performers',
             'shengqiangbanshi')
예제 #15
0
 def get_queryset(self):
     collection_ids = get_collection_ids_from_request_or_error(self.request)
     permission = utils.get_user_permissions(self.request.user)
     return models.Recording.objects.with_permissions(
         collection_ids,
         permission).select_related('work').prefetch_related(
             'recordinginstrumentalist_set__artist',
             'recordinginstrumentalist_set__instrument', 'performers',
             'shengqiangbanshi')
예제 #16
0
def concertsearch(request):
    permissions = utils.get_user_permissions(request.user)
    concerts = Concert.objects.with_permissions(None, permissions).order_by('title')
    ret = []
    for c in concerts:
        title = "%s<br>%s" % (c.title, c.artistcredit)
        if c.collection and c.collection.permission == "S":
            title = '<img src="%s" title="bootleg concert" /> %s' % (static('carnatic/img/cassette.png'), title)
        ret.append({"id": c.id, "title": title})
    return HttpResponse(json.dumps(ret), content_type="application/json")
예제 #17
0
파일: views.py 프로젝트: dbogdanov/dunya
def concertsearch(request):
    permissions = utils.get_user_permissions(request.user)
    concerts = Concert.objects.with_permissions(None,
                                                permissions).order_by('title')
    ret = []
    for c in concerts:
        title = "%s<br>%s" % (c.title, c.artistcredit)
        if c.collection and c.collection.permission == "S":
            title = '<img src="%s" title="bootleg concert" /> %s' % (
                static('carnatic/img/cassette.png'), title)
        ret.append({"id": c.id, "title": title})
    return HttpResponse(json.dumps(ret), content_type="application/json")
예제 #18
0
파일: middleware.py 프로젝트: MTG/dunya
    def __call__(self, request):
        permission = utils.get_user_permissions(request.user)
        request.permission = permission
        # TODO: remove the following lines after refactor
        user = request.user
        if user.is_staff:
            show_bootlegs = True
        else:
            show_bootlegs = False
        request.show_bootlegs = show_bootlegs

        response = self.get_response(request)
        return response
예제 #19
0
    def process_request(self, request):
        permission = utils.get_user_permissions(request.user)
        request.permission = permission
        # remove the following lines after refactor
        user = request.user
        if user.is_staff:
            show_bootlegs = True
        else:
            show_bootlegs = False
        request.show_bootlegs = show_bootlegs

        # Continue processing
        return None
예제 #20
0
    def process_request(self, request):
        permission = utils.get_user_permissions(request.user)
        request.permission = permission
        # remove the following lines after refactor
        user = request.user
        if user.is_staff:
            show_bootlegs = True
        else:
            show_bootlegs = False
        request.show_bootlegs = show_bootlegs

        # Continue processing
        return None
예제 #21
0
    def __call__(self, request):
        permission = utils.get_user_permissions(request.user)
        request.permission = permission
        # TODO: remove the following lines after refactor
        user = request.user
        if user.is_staff:
            show_bootlegs = True
        else:
            show_bootlegs = False
        request.show_bootlegs = show_bootlegs

        response = self.get_response(request)
        return response
예제 #22
0
def work(request, uuid, title=None):
    work = get_object_or_404(Work, mbid=uuid)

    permission = utils.get_user_permissions(request.user)
    recordings = work.recording_set.with_permissions(None, permission).all()
    if len(recordings):
        sample = random.sample(recordings, 1)
    else:
        sample = None

    ret = {"work": work,
           "objecttype": "work",
           "objectid": work.id,
           "sample": sample,
           }
    return render(request, "carnatic/work.html", ret)
예제 #23
0
파일: views.py 프로젝트: dbogdanov/dunya
def work(request, uuid, title=None):
    work = get_object_or_404(Work, mbid=uuid)

    permission = utils.get_user_permissions(request.user)
    recordings = work.recording_set.with_permissions(None, permission).all()
    if len(recordings):
        sample = random.sample(recordings, 1)
    else:
        sample = None

    ret = {
        "filter_items": json.dumps(get_filter_items()),
        "work": work,
        "objecttype": "work",
        "objectid": work.id,
        "sample": sample,
    }
    return render(request, "carnatic/work.html", ret)
예제 #24
0
def artist(request, uuid, name=None):
    artist = get_object_or_404(Artist, mbid=uuid)

    if artist.performs_percussion():
        taalas = artist.get_performed_taalas()
    else:
        taalas = []

    if artist.performs_lead():
    # vocalist or violinist
        raagas = artist.get_performed_raagas()
    else:
        raagas = []

    # Sample is the first recording of any of their concerts (Vignesh, Dec 9)
    permission = utils.get_user_permissions(request.user)
    concerts = artist.concerts(permission=permission)
    sample = None
    if concerts:
        recordings = concerts[0].recordings.all()
        if recordings:
            sample = recordings[0]

    biography = []
    if artist.artist_type == 'G':
        for a in artist.group_members.all():
            s = a.state
            if s:
                r = s.name
            else:
                r = None
            biography.append({"name": a.name, "begin": a.begin, "region": r})

    ret = {"artist": artist,
           "objecttype": "artist",
           "objectid": artist.id,
           "raagas": raagas,
           "taalas": taalas,
           "sample": sample,
           "biography": biography,
           }

    return render(request, "carnatic/artist.html", ret)
예제 #25
0
파일: api.py 프로젝트: felipebetancur/dunya
 def get_queryset(self):
     # We only check if the user has access here - you do not
     # need to add the collection_id header if you specify the mbid
     # of a concert
     permission = utils.get_user_permissions(self.request.user)
     return models.Concert.objects.with_permissions(False, permission)
예제 #26
0
파일: api.py 프로젝트: felipebetancur/dunya
 def get_queryset(self):
     collection_ids = self.request.META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.request.user)
     return models.Concert.objects.with_permissions(collection_ids, permission)
예제 #27
0
파일: api.py 프로젝트: felipebetancur/dunya
 def recording_list(self, ob):
     collection_ids = self.context['request'].META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.context['request'].user)
     recordings = ob.recordings(collection_ids, permission)
     rs = RecordingInnerSerializer(recordings, many=True)
     return rs.data
예제 #28
0
파일: api.py 프로젝트: felipebetancur/dunya
 def concert_list(self, ob):
     collection_ids = self.context['request'].META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.context['request'].user)
     concerts = ob.concerts(collection_ids=collection_ids, permission=permission)
     cs = ConcertInnerSerializer(concerts, many=True)
     return cs.data
예제 #29
0
 def get_queryset(self):
     collection_ids = get_collection_ids_from_request_or_error(self.request)
     permission = utils.get_user_permissions(self.request.user)
     return models.Release.objects.with_permissions(collection_ids, permission)
예제 #30
0
def main(request):
    qartist = []
    qinstr = []
    qraaga = []
    qtaala = []
    qconcert = []
    if len(request.GET) == 0:
        # We have a 'default' query. If there's no other query we pre-seed it
        # G. N. Balasubramaniam
        qartist = [10]
        # thodi raaga
        qraaga = [55]
        return redirect("%s?a=10&r=55" % reverse('carnatic-main'))
    if "a" in request.GET:
        for i in request.GET.getlist("a"):
            qartist.append(int(i))
    if "i" in request.GET:
        for i in request.GET.getlist("i"):
            qinstr.append(int(i))
    if "c" in request.GET:
        for i in request.GET.getlist("c"):
            qconcert.append(int(i))
    if "r" in request.GET:
        for i in request.GET.getlist("r"):
            qraaga.append(int(i))
    if "t" in request.GET:
        for i in request.GET.getlist("t"):
            qtaala.append(int(i))
    if "q" in request.GET:
        query = request.GET.get("q")
    else:
        query = None

    numartists = Artist.objects.filter(dummy=False).count()
    numcomposers = Composer.objects.count()
    numraagas = Raaga.objects.count()
    numtaalas = Taala.objects.count()
    numconcerts = Concert.objects.count()
    numinstruments = Instrument.objects.count()
    numworks = Work.objects.count()

    displayres = []
    querybrowse = False
    searcherror = False

    permission = utils.get_user_permissions(request.user)
    show_restricted = request.show_bootlegs

    if qartist:
        # TODO: If instrument set, only show artists who perform this instrument
        querybrowse = True

        # If raaga or taala is set, make a list to filter concerts by
        rlist = []
        tlist = []
        if qraaga:
            for rid in qraaga:
                ra = Raaga.objects.get(pk=rid)
                rlist.append(ra)
        if qtaala:
            for tid in qtaala:
                ta = Taala.objects.get(pk=tid)
                tlist.append(ta)

        if len(qartist) == 1:
            # If there is one artist selected, show their concerts
            # (optionally filtered by raaga or taala)
            aid = qartist[0]
            art = Artist.objects.get(pk=aid)
            displayres.append(("artist", art))
            if art.main_instrument:
                displayres.append(("instrument", art.main_instrument))
            for ra in rlist:
                displayres.append(("raaga", ra))
            for ta in tlist:
                displayres.append(("taala", ta))
            for c in art.concerts(raagas=rlist, taalas=tlist, collection_ids=False, permission=permission):
                displayres.append(("concert", c))
        else:
            # Otherwise if more than one artist is selected,
            # show only concerts that all artists perform in
            allconcerts = []
            for aid in qartist:
                art = Artist.objects.get(pk=aid)
                displayres.append(("artist", art))
                if art.main_instrument:
                    displayres.append(("instrument", art.main_instrument))
                thisconcerts = set(art.concerts(raagas=rlist, taalas=tlist, collection_ids=False, permission=permission))
                allconcerts.append(thisconcerts)
            combinedconcerts = reduce(lambda x, y: x & y, allconcerts)

            for ra in rlist:
                displayres.append(("raaga", ra))
            for ta in tlist:
                displayres.append(("taala", ta))

            for c in list(combinedconcerts):
                displayres.append(("concert", c))

    elif qinstr:  # instrument query, but no artist
        querybrowse = True
        # instrument, people
        for iid in qinstr:
            instr = Instrument.objects.get(pk=iid)
            displayres.append(("instrument", instr))
            for p in instr.ordered_performers()[:5]:
                displayres.append(("artist", p))

    elif qraaga:
        querybrowse = True
        # raaga, people
        for rid in qraaga:
            ra = Raaga.objects.get(pk=rid)
            displayres.append(("raaga", ra))
            artists = ra.artists()
            if qinstr:
                # if instrument, only people who play that
                artists = artists.filter(main_instrument__in=qinstr)
            for a in artists[:5]:
                displayres.append(("artist", a))
    elif qtaala:
        querybrowse = True
        # taala, people
        for tid in qtaala[:5]:
            ta = Taala.objects.get(pk=tid)
            displayres.append(("taala", ta))
            percussionists = ta.percussion_artists()
            for a in ta.artists():
                if a not in percussionists:
                    percussionists.append(a)
            # TODO: We could order by percussionists, or by number of times they've
            # performed this taala, or by people with images
            artists = percussionists[:5]
            if qinstr:
                # if instrument, only people who play that
                artists = artists.filter(main_instrument__in=qinstr)
            for a in artists:
                displayres.append(("artist", a))
    elif qconcert:
        querybrowse = True
        # concert, people
        for cid in qconcert:
            try:
                permission = utils.get_user_permissions(request.user)
                con = Concert.objects.with_permissions(None, permission).get(pk=cid)
                displayres.append(("concert", con))
                artists = con.performers()
                for a in artists:
                    displayres.append(("artist", a))
                    # if instrument, only people who play that?
            except Concert.DoesNotExist:
                pass
    elif query:
        try:
            results = search.search(query, with_restricted=show_restricted)
        except pysolr.SolrError:
            searcherror = True
            results = {}
        artists = results.get("artist", [])
        instruments = results.get("instrument", [])
        concerts = results.get("concert", [])
        raagas = results.get("raaga", [])
        taalas = results.get("taala", [])

        displayres = []
        for a in artists:
            displayres.append(("artist", a))
        for i in instruments:
            displayres.append(("instrument", i))
        for c in concerts:
            displayres.append(("concert", c))
        for r in raagas:
            displayres.append(("raaga", r))
        for t in taalas:
            displayres.append(("taala", t))

        numartists = len(artists)
        numraagas = len(raagas)
        numtaalas = len(taalas)
        numconcerts = len(concerts)
        numinstruments = len(instruments)
        results = True
    else:
        results = None

        displayres = []

    if displayres:
        numartists = len([i for i in displayres if i[0] == "artist"])
        numraagas = len([i for i in displayres if i[0] == "raaga"])
        numtaalas = len([i for i in displayres if i[0] == "taala"])
        numconcerts = len([i for i in displayres if i[0] == "concert"])
        numinstruments = len([i for i in displayres if i[0] == "instrument"])

    ret = {"numartists": numartists,
           "filter_items": json.dumps(get_filter_items()),
           "numcomposers": numcomposers,
           "numraagas": numraagas,
           "numtaalas": numtaalas,
           "numconcerts": numconcerts,
           "numworks": numworks,
           "numinstruments": numinstruments,

           "results": displayres,

           "querytext": query,
           "querybrowse": querybrowse,
           "qartist": json.dumps(qartist),
           "qinstr": json.dumps(qinstr),
           "qraaga": json.dumps(qraaga),
           "qtaala": json.dumps(qtaala),
           "qconcert": json.dumps(qconcert),
           "searcherror": searcherror
           }

    return render(request, "carnatic/index.html", ret)
예제 #31
0
파일: views.py 프로젝트: dbogdanov/dunya
def main(request):
    qartist = []
    qinstr = []
    qraaga = []
    qtaala = []
    qconcert = []
    if len(request.GET) == 0:
        # We have a 'default' query. If there's no other query we pre-seed it
        # G. N. Balasubramaniam
        qartist = [10]
        # thodi raaga
        qraaga = [55]
        return redirect("%s?a=10&r=55" % reverse('carnatic-main'))
    if "a" in request.GET:
        for i in request.GET.getlist("a"):
            qartist.append(int(i))
    if "i" in request.GET:
        for i in request.GET.getlist("i"):
            qinstr.append(int(i))
    if "c" in request.GET:
        for i in request.GET.getlist("c"):
            qconcert.append(int(i))
    if "r" in request.GET:
        for i in request.GET.getlist("r"):
            qraaga.append(int(i))
    if "t" in request.GET:
        for i in request.GET.getlist("t"):
            qtaala.append(int(i))
    if "q" in request.GET:
        query = request.GET.get("q")
    else:
        query = None

    numartists = Artist.objects.filter(dummy=False).count()
    numcomposers = Composer.objects.count()
    numraagas = Raaga.objects.count()
    numtaalas = Taala.objects.count()
    numconcerts = Concert.objects.count()
    numinstruments = Instrument.objects.count()
    numworks = Work.objects.count()

    displayres = []
    querybrowse = False
    searcherror = False

    permission = utils.get_user_permissions(request.user)
    show_restricted = request.show_bootlegs

    if qartist:
        # TODO: If instrument set, only show artists who perform this instrument
        querybrowse = True

        # If raaga or taala is set, make a list to filter concerts by
        rlist = []
        tlist = []
        if qraaga:
            for rid in qraaga:
                ra = Raaga.objects.get(pk=rid)
                rlist.append(ra)
        if qtaala:
            for tid in qtaala:
                ta = Taala.objects.get(pk=tid)
                tlist.append(ta)

        if len(qartist) == 1:
            # If there is one artist selected, show their concerts
            # (optionally filtered by raaga or taala)
            aid = qartist[0]
            art = Artist.objects.get(pk=aid)
            displayres.append(("artist", art))
            if art.main_instrument:
                displayres.append(("instrument", art.main_instrument))
            for ra in rlist:
                displayres.append(("raaga", ra))
            for ta in tlist:
                displayres.append(("taala", ta))
            for c in art.concerts(raagas=rlist,
                                  taalas=tlist,
                                  collection_ids=False,
                                  permission=permission):
                displayres.append(("concert", c))
        else:
            # Otherwise if more than one artist is selected,
            # show only concerts that all artists perform in
            allconcerts = []
            for aid in qartist:
                art = Artist.objects.get(pk=aid)
                displayres.append(("artist", art))
                if art.main_instrument:
                    displayres.append(("instrument", art.main_instrument))
                thisconcerts = set(
                    art.concerts(raagas=rlist,
                                 taalas=tlist,
                                 collection_ids=False,
                                 permission=permission))
                allconcerts.append(thisconcerts)
            combinedconcerts = reduce(lambda x, y: x & y, allconcerts)

            for ra in rlist:
                displayres.append(("raaga", ra))
            for ta in tlist:
                displayres.append(("taala", ta))

            for c in list(combinedconcerts):
                displayres.append(("concert", c))

    elif qinstr:  # instrument query, but no artist
        querybrowse = True
        # instrument, people
        for iid in qinstr:
            instr = Instrument.objects.get(pk=iid)
            displayres.append(("instrument", instr))
            for p in instr.ordered_performers()[:5]:
                displayres.append(("artist", p))

    elif qraaga:
        querybrowse = True
        # raaga, people
        for rid in qraaga:
            ra = Raaga.objects.get(pk=rid)
            displayres.append(("raaga", ra))
            artists = ra.artists()
            if qinstr:
                # if instrument, only people who play that
                artists = artists.filter(main_instrument__in=qinstr)
            for a in artists[:5]:
                displayres.append(("artist", a))
    elif qtaala:
        querybrowse = True
        # taala, people
        for tid in qtaala[:5]:
            ta = Taala.objects.get(pk=tid)
            displayres.append(("taala", ta))
            percussionists = ta.percussion_artists()
            for a in ta.artists():
                if a not in percussionists:
                    percussionists.append(a)
            # TODO: We could order by percussionists, or by number of times they've
            # performed this taala, or by people with images
            artists = percussionists[:5]
            if qinstr:
                # if instrument, only people who play that
                artists = artists.filter(main_instrument__in=qinstr)
            for a in artists:
                displayres.append(("artist", a))
    elif qconcert:
        querybrowse = True
        # concert, people
        for cid in qconcert:
            try:
                permission = utils.get_user_permissions(request.user)
                con = Concert.objects.with_permissions(None,
                                                       permission).get(pk=cid)
                displayres.append(("concert", con))
                artists = con.performers()
                for a in artists:
                    displayres.append(("artist", a))
                    # if instrument, only people who play that?
            except Concert.DoesNotExist:
                pass
    elif query:
        try:
            results = search.search(query, with_restricted=show_restricted)
        except pysolr.SolrError:
            searcherror = True
            results = {}
        artists = results.get("artist", [])
        instruments = results.get("instrument", [])
        concerts = results.get("concert", [])
        raagas = results.get("raaga", [])
        taalas = results.get("taala", [])

        displayres = []
        for a in artists:
            displayres.append(("artist", a))
        for i in instruments:
            displayres.append(("instrument", i))
        for c in concerts:
            displayres.append(("concert", c))
        for r in raagas:
            displayres.append(("raaga", r))
        for t in taalas:
            displayres.append(("taala", t))

        numartists = len(artists)
        numraagas = len(raagas)
        numtaalas = len(taalas)
        numconcerts = len(concerts)
        numinstruments = len(instruments)
        results = True
    else:
        results = None

        displayres = []

    if displayres:
        numartists = len([i for i in displayres if i[0] == "artist"])
        numraagas = len([i for i in displayres if i[0] == "raaga"])
        numtaalas = len([i for i in displayres if i[0] == "taala"])
        numconcerts = len([i for i in displayres if i[0] == "concert"])
        numinstruments = len([i for i in displayres if i[0] == "instrument"])

    ret = {
        "numartists": numartists,
        "filter_items": json.dumps(get_filter_items()),
        "numcomposers": numcomposers,
        "numraagas": numraagas,
        "numtaalas": numtaalas,
        "numconcerts": numconcerts,
        "numworks": numworks,
        "numinstruments": numinstruments,
        "results": displayres,
        "querytext": query,
        "querybrowse": querybrowse,
        "qartist": json.dumps(qartist),
        "qinstr": json.dumps(qinstr),
        "qraaga": json.dumps(qraaga),
        "qtaala": json.dumps(qtaala),
        "qconcert": json.dumps(qconcert),
        "searcherror": searcherror
    }

    return render(request, "carnatic/index.html", ret)
예제 #32
0
파일: api.py 프로젝트: MTG/dunya
 def get_queryset(self):
     collection_ids = get_collection_ids_from_request_or_error(self.request)
     permission = utils.get_user_permissions(self.request.user)
     return models.Recording.objects.with_permissions(collection_ids, permission).prefetch_related('raags', 'taals', 'layas', 'forms', 'works', 'instrumentperformance_set')
예제 #33
0
 def get_queryset(self):
     collection_ids = get_collection_ids_from_request_or_error(self.request)
     permission = utils.get_user_permissions(self.request.user)
     return models.Artist.objects.with_permissions(
         collection_ids, permission).select_related('role_type',
                                                    'instrument')
예제 #34
0
파일: api.py 프로젝트: aguai/dunya
 def get_queryset(self):
     collection_ids = self.request.META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.request.user)
     return models.Artist.objects.with_permissions(
         collection_ids, permission).select_related('role_type',
                                                    'instrument')
예제 #35
0
파일: views.py 프로젝트: frixid/dunya
def artist(request, uuid, name=None):
    artist = get_object_or_404(Artist, mbid=uuid)

    inst = artist.instruments()
    ips = InstrumentPerformance.objects.filter(instrument=inst)
    similar_artists = []
    for i in ips:
        if i.artist not in similar_artists:
            similar_artists.append(i.artist)

    if artist.main_instrument and artist.main_instrument.percussion:
        taalamap = {}
        taalacount = collections.Counter()
        taalas = Taala.objects.filter(Q(work__recording__concert__artists=artist) | Q(work__recording__instrumentperformance__artist=artist))
        for t in taalas:
            taalacount[t.name] += 1
            if t.name not in taalamap:
                taalamap[t.name] = t
        taalas = []
        for t, count in taalacount.most_common():
            taalas.append((taalamap[t], count))
    else:
        taalas = []
    # vocalist or violinist
    if artist.main_instrument and artist.main_instrument.id in [1, 2]:
        raagamap = {}
        raagacount = collections.Counter()
        raagas = Raaga.objects.filter(Q(work__recording__concert__artists=artist) | Q(work__recording__instrumentperformance__artist=artist))
        for r in raagas:
            raagacount[r.name] += 1
            if r.name not in raagamap:
                raagamap[r.name] = r
        raagas = []
        for r, count in raagacount.most_common():
            raagas.append((raagamap[r], count))
    else:
        raagas = []

    musicbrainz = artist.get_musicbrainz_url()
    k = data.models.SourceName.objects.get(name="kutcheris.com")
    w = data.models.SourceName.objects.get(name="Wikipedia")
    kutcheris = None
    wikipedia = None
    desc = artist.description
    if desc and desc.source.source_name == k:
        kutcheris = artist.description.source.uri
    elif desc and desc.source.source_name == w:
        wikipedia = artist.description.source.uri
    kr = artist.references.filter(source_name=k)
    if kr.count() and not kutcheris:
        kutcheris = kr[0].uri
    wr = artist.references.filter(source_name=w)
    if wr.count() and not wikipedia:
        wikipedia = wr[0].uri

    # Sample is the first recording of any of their concerts (Vignesh, Dec 9)
    permission = utils.get_user_permissions(request.user)
    concerts = artist.concerts(permission=permission)
    sample = None
    if concerts:
        recordings = concerts[0].recordings.all()
        if recordings:
            sample = recordings[0]

    ret = {"filter_items": json.dumps(get_filter_items()),
           "artist": artist,
           "objecttype": "artist",
           "objectid": artist.id,
           "similar_artists": similar_artists,
           "raagas": raagas,
           "taalas": taalas,
           "sample": sample,
           "mb": musicbrainz,
           "kutcheris": kutcheris,
           "wiki": wikipedia
           }

    return render(request, "carnatic/artist.html", ret)
예제 #36
0
파일: api.py 프로젝트: MTG/dunya
 def get_queryset(self):
     collection_ids = get_collection_ids_from_request_or_error(self.request)
     permission = utils.get_user_permissions(self.request.user)
     return models.Recording.objects.with_permissions(collection_ids, permission).select_related('work').prefetch_related('recordinginstrumentalist_set__artist', 'recordinginstrumentalist_set__instrument', 'performers', 'shengqiangbanshi')
예제 #37
0
파일: api.py 프로젝트: MTG/dunya
 def get_queryset(self):
     collection_ids = get_collection_ids_from_request_or_error(self.request)
     permission = utils.get_user_permissions(self.request.user)
     return models.Recording.objects.with_permissions(collection_ids, permission).prefetch_related('works__makam', 'works__usul', 'makam', 'artists', 'instrumentperformance_set__artist', 'instrumentperformance_set__instrument')
예제 #38
0
파일: views.py 프로젝트: dbogdanov/dunya
def artist(request, uuid, name=None):
    artist = get_object_or_404(Artist, mbid=uuid)

    inst = artist.instruments()
    ips = InstrumentPerformance.objects.filter(instrument__in=inst)
    similar_artists = []
    for i in ips:
        if i.artist not in similar_artists:
            similar_artists.append(i.artist)

    if artist.main_instrument and artist.main_instrument.percussion:
        taalamap = {}
        taalacount = collections.Counter()
        taalas = Taala.objects.filter(
            Q(work__recording__concert__artists=artist)
            | Q(work__recording__instrumentperformance__artist=artist))
        for t in taalas:
            taalacount[t.name] += 1
            if t.name not in taalamap:
                taalamap[t.name] = t
        taalas = []
        for t, count in taalacount.most_common():
            taalas.append((taalamap[t], count))
    else:
        taalas = []
    # vocalist or violinist
    if artist.main_instrument and artist.main_instrument.id in [1, 2]:
        raagamap = {}
        raagacount = collections.Counter()
        raagas = Raaga.objects.filter(
            Q(work__recording__concert__artists=artist)
            | Q(work__recording__instrumentperformance__artist=artist))
        for r in raagas:
            raagacount[r.name] += 1
            if r.name not in raagamap:
                raagamap[r.name] = r
        raagas = []
        for r, count in raagacount.most_common():
            raagas.append((raagamap[r], count))
    else:
        raagas = []

    musicbrainz = artist.get_musicbrainz_url()
    k = data.models.SourceName.objects.get(name="kutcheris.com")
    w = data.models.SourceName.objects.get(name="Wikipedia")
    kutcheris = None
    wikipedia = None
    desc = artist.description
    if desc and desc.source.source_name == k:
        kutcheris = artist.description.source.uri
    elif desc and desc.source.source_name == w:
        wikipedia = artist.description.source.uri
    kr = artist.references.filter(source_name=k)
    if kr.count() and not kutcheris:
        kutcheris = kr[0].uri
    wr = artist.references.filter(source_name=w)
    if wr.count() and not wikipedia:
        wikipedia = wr[0].uri

    # Sample is the first recording of any of their concerts (Vignesh, Dec 9)
    permission = utils.get_user_permissions(request.user)
    concerts = artist.concerts(permission=permission)
    sample = None
    if concerts:
        recordings = concerts[0].recordings.all()
        if recordings:
            sample = recordings[0]

    ret = {
        "filter_items": json.dumps(get_filter_items()),
        "artist": artist,
        "objecttype": "artist",
        "objectid": artist.id,
        "similar_artists": similar_artists,
        "raagas": raagas,
        "taalas": taalas,
        "sample": sample,
        "mb": musicbrainz,
        "kutcheris": kutcheris,
        "wiki": wikipedia
    }

    return render(request, "carnatic/artist.html", ret)
예제 #39
0
파일: api.py 프로젝트: frixid/dunya
 def release_list(self, ob):
     collection_ids = self.context['request'].META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.context['request'].user)
     releases = ob.releases(collection_ids=collection_ids, permission=permission)
     cs = ReleaseInnerSerializer(releases, many=True)
     return cs.data
예제 #40
0
def recording(request, uuid, title=None):
    recording = get_object_or_404(Recording, mbid=uuid)

    show_restricted = False
    if recording.is_restricted() and request.show_bootlegs:
        show_restricted = True
    elif recording.is_restricted() and not request.show_bootlegs:
        raise Http404

    try:
        wave = docserver.util.docserver_get_url(recording.mbid, "audioimages", "waveform32", 1, version=settings.FEAT_VERSION_IMAGE)
    except docserver.exceptions.NoFileException:
        wave = None
    try:
        spec = docserver.util.docserver_get_url(recording.mbid, "audioimages", "spectrum32", 1, version=settings.FEAT_VERSION_IMAGE)
    except docserver.exceptions.NoFileException:
        spec = None
    try:
        small = docserver.util.docserver_get_url(recording.mbid, "audioimages", "smallfull", version=settings.FEAT_VERSION_IMAGE)
    except docserver.exceptions.NoFileException:
        small = None
    try:
        audio = docserver.util.docserver_get_mp3_url(recording.mbid)
    except docserver.exceptions.NoFileException:
        audio = None
    try:
        tonic = docserver.util.docserver_get_contents(recording.mbid, "carnaticvotedtonic", "tonic", version=settings.FEAT_VERSION_TONIC)
        notenames = ["A", "A♯", "B", "C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯"]
        tonic = round(float(tonic), 2)
        thebin = (12 * math.log(tonic / 440.0) / math.log(2)) % 12
        thebin = int(round(thebin))
        tonic = str(tonic)
        if thebin <= 11 and thebin >= 0:
            tonicname = notenames[thebin]
        else:
            tonicname = ""
    except docserver.exceptions.NoFileException:
        tonic = None
        tonicname = None
    try:
        akshara = docserver.util.docserver_get_contents(recording.mbid, "rhythm", "aksharaPeriod", version=settings.FEAT_VERSION_RHYTHM)
        akshara = str(round(float(akshara), 3) * 1000)
    except docserver.exceptions.NoFileException:
        akshara = None

    try:
        pitchtrackurl = docserver.util.docserver_get_url(recording.mbid, "carnaticnormalisedpitch", "packedpitch", version=settings.FEAT_VERSION_CARNATIC_NORMALISED_PITCH)
        pitchtrackurl = request.build_absolute_uri(pitchtrackurl)
        histogramurl = docserver.util.docserver_get_url(recording.mbid, "carnaticnormalisedpitch", "drawhistogram", version=settings.FEAT_VERSION_CARNATIC_NORMALISED_PITCH)
        histogramurl = request.build_absolute_uri(histogramurl)
    except docserver.exceptions.NoFileException:
        pitchtrackurl = ""
        histogramurl = ""

    try:
        rhythmurl = docserver.util.docserver_get_url(recording.mbid, "rhythm", "aksharaTicks", version=settings.FEAT_VERSION_RHYTHM)
        rhythmurl = request.build_absolute_uri(rhythmurl)
        aksharaurl = docserver.util.docserver_get_url(recording.mbid, "rhythm", "APcurve", version=settings.FEAT_VERSION_RHYTHM)
        aksharaurl = request.build_absolute_uri(aksharaurl)
    except docserver.exceptions.NoFileException:
        rhythmurl = ""
        aksharaurl = ""

    similar = []
    try:
        similar_mbids = search.similar_recordings(recording.mbid)
        for m in similar_mbids:
            try:
                rec = Recording.objects.get(mbid=m[0])
                similar.append(rec)
            except Recording.DoesNotExist:
                pass
    except pysolr.SolrError:
        # TODO: Show error in similar recordings page instead of empty
        pass
    similar = similar[:10]

    try:
        permission = utils.get_user_permissions(request.user)
        concert = recording.concert_set.with_permissions(None, permission=permission).get()
        recordings = list(concert.recordings.all())
        recordingpos = recordings.index(recording)
    except Concert.DoesNotExist:
        concert = None
        recordings = []
        recordingpos = 0
    nextrecording = None
    prevrecording = None
    if recordingpos > 0:
        prevrecording = recordings[recordingpos - 1]
    if recordingpos + 1 < len(recordings):
        nextrecording = recordings[recordingpos + 1]
    mbid = recording.mbid

    ret = {"recording": recording,
           "objecttype": "recording",
           "objectid": recording.id,
           "waveform": wave,
           "spectrogram": spec,
           "smallimage": small,
           "audio": audio,
           "tonic": tonic,
           "tonicname": tonicname,
           "akshara": akshara,
           "mbid": mbid,
           "nextrecording": nextrecording,
           "prevrecording": prevrecording,
           "pitchtrackurl": pitchtrackurl,
           "histogramurl": histogramurl,
           "rhythmurl": rhythmurl,
           "aksharaurl": aksharaurl,
           "similar": similar,
           "concert": concert,
           "bootleg": show_restricted,
           }

    return render(request, "carnatic/recording.html", ret)
예제 #41
0
파일: api.py 프로젝트: MTG/dunya
 def recording_list(self, ob):
     collection_ids = get_collection_ids_from_request_or_error(self.context['request'])
     permission = utils.get_user_permissions(self.context['request'].user)
     recordings = ob.recordings(collection_ids=collection_ids, permission=permission)
     rs = RecordingInnerSerializer(recordings, many=True)
     return rs.data
예제 #42
0
파일: api.py 프로젝트: MTG/dunya
 def release_list(self, ob):
     collection_ids = get_collection_ids_from_request_or_error(self.context['request'])
     permission = utils.get_user_permissions(self.context['request'].user)
     releases = ob.releases(collection_ids=collection_ids, permission=permission)
     cs = ReleaseInnerSerializer(releases, many=True)
     return cs.data
예제 #43
0
파일: api.py 프로젝트: dbogdanov/dunya
 def get_queryset(self):
     # We only check if the user has access here - you do not
     # need to add the collection_id header if you specify the mbid
     # of a concert
     permission = utils.get_user_permissions(self.request.user)
     return models.Concert.objects.with_permissions(False, permission)
예제 #44
0
파일: api.py 프로젝트: MTG/dunya
 def get_queryset(self):
     permission = utils.get_user_permissions(self.request.user)
     return models.Release.objects.with_permissions(None, permission)
예제 #45
0
파일: api.py 프로젝트: MTG/dunya
 def get_queryset(self):
     collection_ids = get_collection_ids_from_request_or_error(self.request)
     permission = utils.get_user_permissions(self.request.user)
     return models.Artist.objects.with_permissions(collection_ids, permission).select_related('role_type', 'instrument')
예제 #46
0
파일: api.py 프로젝트: dbogdanov/dunya
 def get_queryset(self):
     collection_ids = self.request.META.get('HTTP_DUNYA_COLLECTION', None)
     permission = utils.get_user_permissions(self.request.user)
     return models.Concert.objects.with_permissions(collection_ids,
                                                    permission)
예제 #47
0
 def get_queryset(self):
     permission = utils.get_user_permissions(self.request.user)
     return models.Release.objects.with_permissions(None, permission)
예제 #48
0
def recording(request, uuid, title=None):
    recording = get_object_or_404(Recording, mbid=uuid)

    show_restricted = False
    if recording.is_restricted() and request.show_bootlegs:
        show_restricted = True
    elif recording.is_restricted() and not request.show_bootlegs:
        raise Http404

    try:
        wave = docserver.util.docserver_get_url(
            recording.mbid,
            "audioimages",
            "waveform32",
            1,
            version=settings.FEAT_VERSION_IMAGE)
    except docserver.exceptions.NoFileException:
        wave = None
    try:
        spec = docserver.util.docserver_get_url(
            recording.mbid,
            "audioimages",
            "spectrum32",
            1,
            version=settings.FEAT_VERSION_IMAGE)
    except docserver.exceptions.NoFileException:
        spec = None
    try:
        small = docserver.util.docserver_get_url(
            recording.mbid,
            "audioimages",
            "smallfull",
            version=settings.FEAT_VERSION_IMAGE)
    except docserver.exceptions.NoFileException:
        small = None
    try:
        audio = docserver.util.docserver_get_mp3_url(recording.mbid)
    except docserver.exceptions.NoFileException:
        audio = None
    try:
        tonic = docserver.util.docserver_get_contents(
            recording.mbid,
            "carnaticvotedtonic",
            "tonic",
            version=settings.FEAT_VERSION_TONIC)
        notenames = [
            "A", "A♯", "B", "C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯"
        ]
        tonic = round(float(tonic), 2)
        thebin = (12 * math.log(tonic / 440.0) / math.log(2)) % 12
        thebin = int(round(thebin))
        tonic = str(tonic)
        if thebin <= 11 and thebin >= 0:
            tonicname = notenames[thebin]
        else:
            tonicname = ""
    except docserver.exceptions.NoFileException:
        tonic = None
        tonicname = None
    try:
        akshara = docserver.util.docserver_get_contents(
            recording.mbid,
            "rhythm",
            "aksharaPeriod",
            version=settings.FEAT_VERSION_RHYTHM)
        akshara = str(round(float(akshara), 3) * 1000)
    except docserver.exceptions.NoFileException:
        akshara = None

    try:
        pitchtrackurl = docserver.util.docserver_get_url(
            recording.mbid,
            "carnaticnormalisedpitch",
            "packedpitch",
            version=settings.FEAT_VERSION_CARNATIC_NORMALISED_PITCH)
        pitchtrackurl = request.build_absolute_uri(pitchtrackurl)
        histogramurl = docserver.util.docserver_get_url(
            recording.mbid,
            "carnaticnormalisedpitch",
            "drawhistogram",
            version=settings.FEAT_VERSION_CARNATIC_NORMALISED_PITCH)
        histogramurl = request.build_absolute_uri(histogramurl)
    except docserver.exceptions.NoFileException:
        pitchtrackurl = ""
        histogramurl = ""

    try:
        rhythmurl = docserver.util.docserver_get_url(
            recording.mbid,
            "rhythm",
            "aksharaTicks",
            version=settings.FEAT_VERSION_RHYTHM)
        rhythmurl = request.build_absolute_uri(rhythmurl)
        aksharaurl = docserver.util.docserver_get_url(
            recording.mbid,
            "rhythm",
            "APcurve",
            version=settings.FEAT_VERSION_RHYTHM)
        aksharaurl = request.build_absolute_uri(aksharaurl)
    except docserver.exceptions.NoFileException:
        rhythmurl = ""
        aksharaurl = ""

    try:
        permission = utils.get_user_permissions(request.user)
        concert = recording.concert_set.with_permissions(
            None, permission=permission).get()
        recordings = list(concert.recordings.all())
        recordingpos = recordings.index(recording)
    except Concert.DoesNotExist:
        concert = None
        recordings = []
        recordingpos = 0
    nextrecording = None
    prevrecording = None
    if recordingpos > 0:
        prevrecording = recordings[recordingpos - 1]
    if recordingpos + 1 < len(recordings):
        nextrecording = recordings[recordingpos + 1]
    mbid = recording.mbid

    ret = {
        "recording": recording,
        "objecttype": "recording",
        "objectid": recording.id,
        "waveform": wave,
        "spectrogram": spec,
        "smallimage": small,
        "audio": audio,
        "tonic": tonic,
        "tonicname": tonicname,
        "akshara": akshara,
        "mbid": mbid,
        "nextrecording": nextrecording,
        "prevrecording": prevrecording,
        "pitchtrackurl": pitchtrackurl,
        "histogramurl": histogramurl,
        "rhythmurl": rhythmurl,
        "aksharaurl": aksharaurl,
        "concert": concert,
        "bootleg": show_restricted,
    }

    return render(request, "carnatic/recording.html", ret)
예제 #49
0
파일: api.py 프로젝트: MTG/dunya
 def concert_list(self, ob):
     collection_ids = get_collection_ids_from_request_or_error(self.context['request'])
     permission = utils.get_user_permissions(self.context['request'].user)
     concerts = ob.concerts(collection_ids=collection_ids, permission=permission)
     cs = ConcertInnerSerializer(concerts, many=True)
     return cs.data