def ajax_tag(): client = init() tags = request.forms.tags name = request.forms.name if name: try: type = request.forms.type client.add_tag(tag_clean(name), type) tags = name except Exception: msg = u'Failed to create' m = request.forms.m.split() full = set() weak = set() remove = set() failed = [] for t in tags.split(): tag = client.find_tag(tag_clean(t)) if tag: p = tag_prefix(t) if p == "~": weak.add(tag) elif p == "-": remove.add(tag) else: full.add(tag) else: failed.append(t) res = {} msg = u'' if full or weak or remove: client.begin_transaction() for p in map(client.get_post, m): if not p: msg = u'Posts missing?' elif tag_post(p, full, weak, remove): p = client.get_post(p.md5) res[p.md5] = tags_as_html(p) client.end_transaction() if not res and not msg and not failed and not (name and name[0] == '-'): msg = u'Nothing to do?' res = dict(failed=u' '.join(failed), m=res, msg=msg) if failed: res["types"] = tagtypes() return res
def r_search(): data = globaldata() client = init() def parse_tag(name): res = client.parse_tag(name, comparison=True) if res: guid, cmp, val = res tag = client.get_tag(guid, with_prefix=True) return (tag, cmp, val) try: page = max(0, int(request.query.page)) except Exception: page = 0 q = request.query.q.strip() data.tagnames = qa = q.split() data.tags = map(parse_tag, qa) data.q = q = u' '.join(qa) data.cloud = [] data.result_count = 0 ta = [] for i, (tag, cmp, val) in enumerate(filter(None, data.tags)): if cmp: qa[i] = tag_prefix(qa[i]) + tag.name ta.append((tag, cmp, val)) if ta or not q: if data.user and request.query.ALL: range = [0, 1 << 31 - 1] page = -1 else: range = [per_page * page, per_page * page + per_page - 1] order = "aaaaaa-aaaac8-faketg-bddate" if ta and ta[0][0].ordered: order = "group" props = DotDict() ga = [(t.pguid, cmp, val) for t, cmp, val in ta] posts = client.search_post(guids=ga, order=order, range=range, wanted=wanted, props=props) print "mm" if posts: data.posts = posts data.result_count = props.result_count data.page = page data.pagelink = makelink(u'search', (u'q', q)) data.pages, data.rels = pagelinks(data.pagelink, page, data.result_count) data.cloud = tagcloud(ga) return data
def r_post_tag(): client = init() m = request.forms.post post = client.get_post(m) tags = request.forms.tags create = [a.decode("utf-8") for a in request.forms.getall("create")] ctype = [a.decode("utf-8") for a in request.forms.getall("ctype")] full = set() weak = set() remove = set() failed = [] for n, t in zip(create, ctype): if t: client.add_tag(tag_clean(n), t) tags += u' ' + n for t in tags.split(): tag = client.find_tag(tag_clean(t)) if tag: p = tag_prefix(t) if p == "~": weak.add(tag) elif p == "-": remove.add(tag) else: full.add(tag) else: failed.append(t) tag_post(post, full, weak, remove) if not failed: redirect("post/" + m) data = globaldata() data.tagtypes = tagtypes() data.failed = failed data.m = m return data