def tagref_create(request, tag_name): """ Create a single tag reference. The resource must exist and the reference must be valid, but if the tag doesn't exist, then then it is created. """ try: # resource MUST exist res_str = request.POST['resource'].strip() resource = library.get(res_str) # reference must be valid ref_str = request.POST['reference'] ref = resource.reference(ref_str) except: log.info("User provided bad resource or reference. (res: %s; ref: )", res_str, ref_str) raise Http404 # if tag name doesn't exist, create it try: t = get_exact_tag(request.user, tag_name) except: # TODO: move to models t = Tag(tag=tag_name, user=request.user) t.save() log.debug("Saving new tag %s %s %s %s", ref_str, tag_name, t, ref.pretty()) # TODO: move to models new_ref = Reference(tag=t, resource=res_str, reference=ref.pretty(), offset_start=ref.indices().start, offset_end=ref.indices().end, user=request.user) new_ref.save() return HttpResponseRedirect(reverse('tagref_detail', args=(tag_name, str(new_ref.id))));
def tag_search(request, query): """ Searches for a tag with exact and fuzzy matching. Currently only supports a single tag, and must begin with #. """ query = query.strip() if query.startswith("#"): # search the tags query = query[1:] try: # exact match match = get_exact_tag(request.user, query) return redirect(reverse('tags') + match.tag) except: # starts-with match matches = get_matching_tags(request.user, query) # render even if no tags found return render_tags(request, matches) # root search must contain only an #tag raise Http404
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));