Example #1
0
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))));
Example #2
0
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 
Example #3
0
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));