def tag(request, tag_name): """ Show all references for single tag and related tags. """ if request.method == 'DELETE': return tag_delete(request, tag_name) elif request.method == 'PUT': return tag_update(request, tag_name) t = get_object_or_404(Tag, tag=tag_name, user=request.user) related_refs = get_refs_with_tag(request.user, t) clean_refs = [] related_tags = [] texts = [] ref_paths = [] ids = [] for ref in related_refs: related_tags.append(get_tags_for_ref(request.user, ref)) ids.append(ref.id) resource = ref.resource try: pybook_ref = library.get(resource).reference(ref.pretty_ref()) text = pybook_ref.text() clean_ref = pybook_ref.pretty() except Exception: log.warning("Exception for " + ref.pretty_ref() + " = " + traceback.format_exc()) text, clean_ref = ('unknown', ref.pretty_ref()) clean_refs.append(clean_ref) texts.append(text) ref_paths.append(reverse('resource', args=(resource, ref.pretty_ref()))) related_refs_n_tags = zip(ids, clean_refs, ref_paths, related_tags, texts) return render_to_response('tags/tag_detail.html', {'tag': t, 'related_refs_n_tags': related_refs_n_tags}, context_instance=RequestContext(request))
def render_tags(request, tags): """ Render the given tags. """ counts = [] for t in tags: refs = get_refs_with_tag(request.user, t) counts.append(refs.count()) counted_tags = zip(tags, counts) return render_to_response('tags/tag_index.html', {'counted_tags': counted_tags}, context_instance=RequestContext(request))
def tag_update(request, tag_name): """ Rename a tag; if the tag name exists already, merge them. """ t_old = get_object_or_404(Tag, tag=tag_name, user=request.user) try: new_name = request.GET.get('name', None) except: log.debug("Problem renaming tag\n%s", traceback.format_exc()) log.debug("renamed tag: old name, new: %s, %s", tag_name, new_name) try: t_new = get_exact_tag(request.user, new_name) for r in get_refs_with_tag(request.user, t_old): r.tag = t_new log.debug("updating ref: " + str(r)) r.save() t_old.delete() except: log.error("Error renaming tag: %s", traceback.format_exc()) t_old.tag = new_name t_old.save() return HttpResponseRedirect(reverse('tag', args=new_name));