def r_tag(guid): client = init() tag = client.get_tag(guid) if not tag: abort(404) data = globaldata() data.tag = tag if data.user: modify_tag(client, data) data.cloud = tagcloud([guid]) data.q = tag.name data.tagtypes = client.metalist(u"tagtypes") def get_impl(rev): res = [] for i in client.tag_implies(guid, reverse=rev) or []: name = tagname(i.guid) res.append(ImplicationTupleWithName(*(i + (name,)))) return res data.implies_tags = get_impl(False) data.implied_by_tags = get_impl(True) order = "group" if tag.ordered else "aaaaaa-aaaac8-faketg-bddate" props = DotDict() posts = client.search_post(guids=[guid], order=order, range=[0, per_page - 1], wanted=wanted, props=props) data.posts = posts data.result_count = props.result_count data.page = 0 if posts: data.pagelink = makelink(u'search', (u'q', tag.name)) data.pages, data.rels = pagelinks(data.pagelink, 0, data.result_count) return data
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
def r_post(m): client = init() post = client.get_post(m, wanted=wanted + ("width", "height", "imgdate", "ext", "rotate",), separate_implied=True) if not post: abort(404) data = globaldata() data.post = post data.q = "" data.extra_script = u"resize.js" data.tags = sorted(taglist(post, False) + taglist(post, True)) data.rel_posts = [Post(md5=md5) for md5 in client.post_rels(m) or []] data.rels = [] if post.rotate > 0: spec = u'%(width)dx%(height)d-%(rotate)d' % post data.svg = data.base + u'rotate/' + spec + u'/' + m + u'.' + post.ext data.ordered_tags = [t for t in post.tags if t.ordered] if data.ordered_tags: do_rel = (len(data.ordered_tags) == 1) for t in data.ordered_tags: posts = client.search_post(guids=[t.guid], order="group") pos = [p.md5 for p in posts].index(m) odata = [(u'dist2', None), (u'dist1', u'prev'), (u'dist0', None), (u'dist1', u'next'), (u'dist2', None)] start, end = pos - 2, pos + 3 if start < 0: odata = odata[-start:] start = 0 t.relposts = posts[start:end] for p, d in zip(t.relposts, odata): p.reldist = d[0] if do_rel and d[1]: data.rels.append((d[1], p.md5)) if 'aaaaaa-aaaadt-faketg-gpspos' in post.datatags: data.gps = post.datatags['aaaaaa-aaaadt-faketg-gpspos'].value return data