1
1
# -*- coding: utf-8 -*-
4
>>> from django import newforms as forms
4
>>> from django import forms
5
>>> from django.db.models import Q
5
6
>>> from tagging.forms import TagField
6
7
>>> from tagging import settings
7
8
>>> from tagging.models import Tag, TaggedItem
8
9
>>> from tagging.tests.models import Article, Link, Perch, Parrot, FormTest
9
10
>>> from tagging.utils import calculate_cloud, get_tag_list, get_tag, parse_tag_input
10
11
>>> from tagging.utils import LINEAR
11
>>> from tagging.validators import is_tag_list, is_tag
153
153
ValueError: Invalid distribution algorithm specified: cheese.
155
# Validators ##################################################################
157
>>> is_tag_list('foo qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbn bar', {})
158
Traceback (most recent call last):
160
ValidationError: [u'Each tag may be no more than 50 characters long.']
162
>>> is_tag('"test"', {})
163
>>> is_tag(',test', {})
164
>>> is_tag('f o o', {})
165
Traceback (most recent call last):
167
ValidationError: [u'Multiple tags were given.']
168
>>> is_tag_list('foo qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbn bar', {})
169
Traceback (most recent call last):
171
ValidationError: [u'Each tag may be no more than 50 characters long.']
393
375
>>> TaggedItem.objects.get_related(a1, Link)
378
# Limiting results to a queryset
379
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(state='no more'), counts=True)]
380
[(u'foo', 1), (u'ter', 1)]
381
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(state__startswith='p'), counts=True)]
382
[(u'bar', 2), (u'baz', 1), (u'foo', 1), (u'ter', 1)]
383
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__size__gt=4), counts=True)]
384
[(u'bar', 2), (u'baz', 1), (u'foo', 1), (u'ter', 1)]
385
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__smelly=True), counts=True)]
386
[(u'bar', 1), (u'foo', 2), (u'ter', 1)]
387
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__smelly=True), min_count=2)]
389
>>> [(tag.name, hasattr(tag, 'counts')) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__size__gt=4))]
390
[(u'bar', False), (u'baz', False), (u'foo', False), (u'ter', False)]
391
>>> [(tag.name, hasattr(tag, 'counts')) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__size__gt=99))]
393
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(Q(perch__size__gt=6) | Q(state__startswith='l')), counts=True)]
394
[(u'bar', 2), (u'foo', 1), (u'ter', 1)]
395
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(Q(perch__size__gt=6) | Q(state__startswith='l')), min_count=2)]
397
>>> [(tag.name, hasattr(tag, 'counts')) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(Q(perch__size__gt=6) | Q(state__startswith='l')))]
398
[(u'bar', False), (u'foo', False), (u'ter', False)]
399
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.exclude(state='passed on'), counts=True)]
400
[(u'bar', 2), (u'foo', 2), (u'ter', 2)]
401
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.exclude(state__startswith='p'), min_count=2)]
403
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.exclude(Q(perch__size__gt=6) | Q(perch__smelly=False)), counts=True)]
404
[(u'foo', 1), (u'ter', 1)]
405
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.exclude(perch__smelly=True).filter(state__startswith='l'), counts=True)]
406
[(u'bar', 1), (u'ter', 1)]
445
457
ValidationError: [u'Each tag may be no more than 50 characters long.']
448
tests_pre_qsrf = tests + r"""
449
# Limiting results to a queryset
450
>>> Tag.objects.usage_for_queryset(Parrot.objects.filter())
451
Traceback (most recent call last):
453
AttributeError: 'TagManager.usage_for_queryset' is not compatible with pre-queryset-refactor versions of Django.
456
tests_post_qsrf = tests + r"""
457
>>> from django.db.models import Q
459
# Limiting results to a queryset
460
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(state='no more'), counts=True)]
461
[(u'foo', 1), (u'ter', 1)]
462
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(state__startswith='p'), counts=True)]
463
[(u'bar', 2), (u'baz', 1), (u'foo', 1), (u'ter', 1)]
464
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__size__gt=4), counts=True)]
465
[(u'bar', 2), (u'baz', 1), (u'foo', 1), (u'ter', 1)]
466
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__smelly=True), counts=True)]
467
[(u'bar', 1), (u'foo', 2), (u'ter', 1)]
468
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__smelly=True), min_count=2)]
470
>>> [(tag.name, hasattr(tag, 'counts')) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__size__gt=4))]
471
[(u'bar', False), (u'baz', False), (u'foo', False), (u'ter', False)]
472
>>> [(tag.name, hasattr(tag, 'counts')) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__size__gt=99))]
474
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(Q(perch__size__gt=6) | Q(state__startswith='l')), counts=True)]
475
[(u'bar', 2), (u'foo', 1), (u'ter', 1)]
476
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(Q(perch__size__gt=6) | Q(state__startswith='l')), min_count=2)]
478
>>> [(tag.name, hasattr(tag, 'counts')) for tag in Tag.objects.usage_for_queryset(Parrot.objects.filter(Q(perch__size__gt=6) | Q(state__startswith='l')))]
479
[(u'bar', False), (u'foo', False), (u'ter', False)]
480
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.exclude(state='passed on'), counts=True)]
481
[(u'bar', 2), (u'foo', 2), (u'ter', 2)]
482
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.exclude(state__startswith='p'), min_count=2)]
484
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.exclude(Q(perch__size__gt=6) | Q(perch__smelly=False)), counts=True)]
485
[(u'foo', 1), (u'ter', 1)]
486
>>> [(tag.name, tag.count) for tag in Tag.objects.usage_for_queryset(Parrot.objects.exclude(perch__smelly=True).filter(state__startswith='l'), counts=True)]
487
[(u'bar', 1), (u'ter', 1)]
491
from django.db.models.query import parse_lookup
493
__test__ = {'post-qsrf': tests_post_qsrf}
495
__test__ = {'pre-qsrf': tests_pre_qsrf}