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')
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
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
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
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
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
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
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')
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')
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')
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
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
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')
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')
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")
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")
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
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
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)
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)
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)
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)
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)
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
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
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)
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)
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)
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')
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')
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')
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)
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')
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')
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)
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
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)
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
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
def get_queryset(self): permission = utils.get_user_permissions(self.request.user) return models.Release.objects.with_permissions(None, permission)
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')
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)
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