def test_tag_view(self): from shootout.views import tag_view from shootout.models import Tag self.config.testing_securitypolicy(u'username') self.config.include('shootout.addroutes') self.config.include(register_templates) user = self._addUser() tag1 = Tag(u'bar') tag2 = Tag(u'foo') self.session.add_all([tag1, tag2]) idea1 = self._addIdea(user=user) idea1.tags.append(tag1) idea2 = self._addIdea(user=user) idea2.tags.append(tag1) idea3 = self._addIdea(user=user) idea3.tags.append(tag2) self.session.flush() request = testing.DummyRequest() request.matchdict = {'tag_name': u'bar'} result = tag_view(request) ideas = result['ideas'].all() self.assertEqual(ideas[0].idea_id, idea1.idea_id) self.assertEqual(ideas[1].idea_id, idea2.idea_id) self.assertEqual(result['tag'], u'bar') request = testing.DummyRequest() request.matchdict = {'tag_name': u'foo'} result = tag_view(request) self.assertEqual(result['ideas'].one().idea_id, idea3.idea_id) self.assertEqual(result['tag'], u'foo')
def test_tags_counts(self): from shootout.models import Tag user = self._addUser() idea1 = self._addIdea(user=user) idea1.tags = Tag.create_tags(u'foo bar baz') self.session.add(idea1) idea2 = self._addIdea(user=user) idea2.tags = Tag.create_tags(u'baz zzz aaa') self.session.add(idea2) idea2 = self._addIdea(user=user) idea2.tags = Tag.create_tags(u'foo baz') self.session.add(idea2) self.session.flush() tags_counts = Tag.tag_counts() expected_counts = [ ('aaa', 1), ('bar', 1), ('baz', 3), ('foo', 2), ('zzz', 1), ] self.assertEqual(list(tags_counts), expected_counts)
def test_creating_tags(self): from shootout.models import Tag tags = Tag.create_tags(u'foo bar baz') tags_names = set([u'foo', u'bar', u'baz']) self.assertEqual(tags[0].name, tags_names.pop()) self.assertEqual(tags[1].name, tags_names.pop()) self.assertEqual(tags[2].name, tags_names.pop())
def test_extracting_tags(self): from shootout.models import Tag tags_string = u"foo, bar; baz xxx,, yyy, zzz" expected_tags = set([u"foo", u"bar", u"baz", u"xxx", u"yyy", u"zzz"]) extracted_tags = Tag.extract_tags(tags_string) self.assertEqual(extracted_tags, expected_tags)
def cloud_view(request): totalcounts = [] for tag in Tag.tag_counts(): weight = int((math.log(tag[1] or 1) * 4) + 10) totalcounts.append((tag[0], tag[1], weight)) cloud = sorted(totalcounts, key=itemgetter(0)) return render('templates/cloud.pt', {'cloud': cloud}, request)
def test_extracting_tags(self): from shootout.models import Tag tags_string = u'foo, bar; baz xxx,, yyy, zzz' expected_tags = set([ u'foo', u'bar', u'baz', u'xxx', u'yyy', u'zzz' ]) extracted_tags = Tag.extract_tags(tags_string) self.assertEqual(extracted_tags, expected_tags)
def test_creating_tags(self): from shootout.models import Tag tags = Tag.create_tags(u"foo bar baz") tags_names = set([u"foo", u"bar", u"baz"]) self.assertEqual(tags[0].name, tags_names.pop()) self.assertEqual(tags[1].name, tags_names.pop()) self.assertEqual(tags[2].name, tags_names.pop())
def test_tags_counts(self): from shootout.models import Tag user = self._addUser() idea1 = self._addIdea(user=user) idea1.tags = Tag.create_tags(u"foo bar baz") self.session.add(idea1) idea2 = self._addIdea(user=user) idea2.tags = Tag.create_tags(u"baz zzz aaa") self.session.add(idea2) idea2 = self._addIdea(user=user) idea2.tags = Tag.create_tags(u"foo baz") self.session.add(idea2) self.session.flush() tags_counts = Tag.tag_counts() expected_counts = [("aaa", 1), ("bar", 1), ("baz", 3), ("foo", 2), ("zzz", 1)] self.assertEqual(list(tags_counts), expected_counts)
def create_tags(cls, tags_string): tags_list = cls.extract_tags(tags_string) tags = [] for tag_name in tags_list: tag = cls.get_by_name(tag_name) if not tag: tag = Tag(name=tag_name) DBSession.add(tag) tags.append(tag) return tags
def idea_add(request): target = request.GET.get('target') session = DBSession() if target: target = Idea.get_by_id(target) if not target: return HTTPNotFound() kind = 'comment' else: kind = 'idea' form = Form(request, schema=AddIdeaSchema) if 'form.submitted' in request.POST and form.validate(): author_username = authenticated_userid(request) author = User.get_by_username(author_username) idea = Idea( target=target, author=author, title=form.data['title'], text=form.data['text'] ) tags = Tag.create_tags(form.data['tags']) if tags: idea.tags = tags session.add(idea) redirect_url = route_url('idea', request, idea_id=idea.idea_id) return HTTPFound(location=redirect_url) login_form = login_form_view(request) return { 'form': FormRenderer(form), 'toolbar': toolbar_view(request), 'cloud': cloud_view(request), 'latest': latest_view(request), 'login_form': login_form, 'target': target, 'kind': kind, }
def idea_add(request): target = request.GET.get('target') session = DBSession() if target: target = Idea.get_by_id(target, with_joinedload=False) if not target: return HTTPNotFound() kind = 'comment' else: kind = 'idea' form = Form(request, schema=AddIdeaSchema) if 'form.submitted' in request.POST and form.validate(): author_username = authenticated_userid(request) author = User.get_by_username(author_username) idea = Idea(target=target, author=author, title=form.data['title'], text=form.data['text']) tags = Tag.create_tags(form.data['tags']) if tags: idea.tags = tags session.add(idea) redirect_url = route_url('idea', request, idea_id=idea.idea_id) return HTTPFound(location=redirect_url) login_form = login_form_view(request) return { 'form': FormRenderer(form), 'toolbar': toolbar_view(request), 'cloud': cloud_view(request), 'latest': latest_view(request), 'login_form': login_form, 'target': target, 'kind': kind, }
def idea_add(request): target = request.params.get("target") session = DBSession() if target: target = Idea.get_by_id(target, with_joinedload=False) if not target: return HTTPNotFound() kind = "comment" else: kind = "idea" form = Form(request, schema=AddIdeaSchema) if "form.submitted" in request.POST and form.validate(): author_username = authenticated_userid(request) author = User.get_by_username(author_username) idea = Idea(target=target, author=author, title=form.data["title"], text=form.data["text"]) tags = Tag.create_tags(form.data["tags"]) if tags: idea.tags = tags session.add(idea) redirect_url = request.route_url("idea", idea_id=idea.idea_id) return HTTPFound(location=redirect_url) login_form = login_form_view(request) return { "form": FormRenderer(form), "toolbar": toolbar_view(request), "cloud": cloud_view(request), "latest": latest_view(request), "login_form": login_form, "target": target, "kind": kind, }
def test_extracting_tags(self): from shootout.models import Tag tags_string = u'foo, bar; baz xxx,, yyy, zzz' expected_tags = set([u'foo', u'bar', u'baz', u'xxx', u'yyy', u'zzz']) extracted_tags = Tag.extract_tags(tags_string) self.assertEqual(extracted_tags, expected_tags)