Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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