From da8f67853bf048125596d9f6fe14ca2bdc48b78f Mon Sep 17 00:00:00 2001 From: bahoo Date: Sun, 27 Apr 2014 02:46:58 -0700 Subject: [PATCH] Resolves several warnings brought about by Django 1.6+ changes ... and an apparent bug in TagManager's usage_for_queryset. --- tagging/admin.py | 3 + tagging/forms.py | 1 + tagging/models.py | 2 +- tagging/{tests/models.py => test_models.py} | 0 .../{tests/settings.py => test_settings.py} | 0 tagging/{tests/tags.txt => test_tags.txt} | 0 tagging/{tests => }/tests.py | 271 +++++++++--------- tagging/tests/__init__.py | 0 8 files changed, 141 insertions(+), 136 deletions(-) rename tagging/{tests/models.py => test_models.py} (100%) rename tagging/{tests/settings.py => test_settings.py} (100%) rename tagging/{tests/tags.txt => test_tags.txt} (100%) rename tagging/{tests => }/tests.py (97%) delete mode 100644 tagging/tests/__init__.py diff --git a/tagging/admin.py b/tagging/admin.py index bec3922e..0f35bb91 100644 --- a/tagging/admin.py +++ b/tagging/admin.py @@ -5,6 +5,9 @@ class TagAdmin(admin.ModelAdmin): form = TagAdminForm + class Meta: + fields = '__all__' + admin.site.register(TaggedItem) admin.site.register(Tag, TagAdmin) diff --git a/tagging/forms.py b/tagging/forms.py index a2d9fd94..f79a2009 100644 --- a/tagging/forms.py +++ b/tagging/forms.py @@ -11,6 +11,7 @@ class TagAdminForm(forms.ModelForm): class Meta: model = Tag + fields = '__all__' def clean_name(self): value = self.cleaned_data['name'] diff --git a/tagging/models.py b/tagging/models.py index 860cf816..21542b7d 100644 --- a/tagging/models.py +++ b/tagging/models.py @@ -167,7 +167,7 @@ def usage_for_queryset(self, queryset, counts=False, min_count=None): compiler = queryset.query.get_compiler(using='default') extra_joins = ' '.join(compiler.get_from_clause()[0][1:]) where, params = queryset.query.where.as_sql( - compiler.quote_name_unless_alias, compiler.connection + compiler, compiler.connection ) else: # Django pre-1.2 diff --git a/tagging/tests/models.py b/tagging/test_models.py similarity index 100% rename from tagging/tests/models.py rename to tagging/test_models.py diff --git a/tagging/tests/settings.py b/tagging/test_settings.py similarity index 100% rename from tagging/tests/settings.py rename to tagging/test_settings.py diff --git a/tagging/tests/tags.txt b/tagging/test_tags.txt similarity index 100% rename from tagging/tests/tags.txt rename to tagging/test_tags.txt diff --git a/tagging/tests/tests.py b/tagging/tests.py similarity index 97% rename from tagging/tests/tests.py rename to tagging/tests.py index 18524445..735c2e13 100644 --- a/tagging/tests/tests.py +++ b/tagging/tests.py @@ -7,7 +7,7 @@ from tagging.forms import TagField from tagging import settings from tagging.models import Tag, TaggedItem -from tagging.tests.models import Article, Link, Perch, Parrot, FormTest, FormTestNull +from tagging.test_models import Article, Link, Perch, Parrot, FormTest, FormTestNull from tagging.utils import calculate_cloud, edit_string_for_tags, get_tag_list, get_tag, parse_tag_input from tagging.utils import LINEAR @@ -18,51 +18,51 @@ class TestParseTagInput(TestCase): def test_with_simple_space_delimited_tags(self): """ Test with simple space-delimited tags. """ - + self.assertEquals(parse_tag_input('one'), [u'one']) self.assertEquals(parse_tag_input('one two'), [u'one', u'two']) self.assertEquals(parse_tag_input('one two three'), [u'one', u'three', u'two']) self.assertEquals(parse_tag_input('one one two two'), [u'one', u'two']) - + def test_with_comma_delimited_multiple_words(self): """ Test with comma-delimited multiple words. An unquoted comma in the input will trigger this. """ - + self.assertEquals(parse_tag_input(',one'), [u'one']) self.assertEquals(parse_tag_input(',one two'), [u'one two']) self.assertEquals(parse_tag_input(',one two three'), [u'one two three']) self.assertEquals(parse_tag_input('a-one, a-two and a-three'), [u'a-one', u'a-two and a-three']) - + def test_with_double_quoted_multiple_words(self): """ Test with double-quoted multiple words. A completed quote will trigger this. Unclosed quotes are ignored. """ - + self.assertEquals(parse_tag_input('"one'), [u'one']) self.assertEquals(parse_tag_input('"one two'), [u'one', u'two']) self.assertEquals(parse_tag_input('"one two three'), [u'one', u'three', u'two']) self.assertEquals(parse_tag_input('"one two"'), [u'one two']) self.assertEquals(parse_tag_input('a-one "a-two and a-three"'), [u'a-one', u'a-two and a-three']) - + def test_with_no_loose_commas(self): """ Test with no loose commas -- split on spaces. """ self.assertEquals(parse_tag_input('one two "thr,ee"'), [u'one', u'thr,ee', u'two']) - + def test_with_loose_commas(self): """ Loose commas - split on commas """ self.assertEquals(parse_tag_input('"one", two three'), [u'one', u'two three']) - + def test_tags_with_double_quotes_can_contain_commas(self): """ Double quotes can contain commas """ self.assertEquals(parse_tag_input('a-one "a-two, and a-three"'), [u'a-one', u'a-two, and a-three']) self.assertEquals(parse_tag_input('"two", one, one, two, "one"'), [u'one', u'two']) - + def test_with_naughty_input(self): """ Test with naughty input. """ - + # Bad users! Naughty users! self.assertEquals(parse_tag_input(None), []) self.assertEquals(parse_tag_input(''), []) @@ -73,66 +73,66 @@ def test_with_naughty_input(self): self.assertEquals(parse_tag_input('",",",",",",","'), [u',']) self.assertEquals(parse_tag_input('a-one "a-two" and "a-three'), [u'a-one', u'a-three', u'a-two', u'and']) - + class TestNormalisedTagListInput(TestCase): def setUp(self): self.cheese = Tag.objects.create(name='cheese') self.toast = Tag.objects.create(name='toast') - + def test_single_tag_object_as_input(self): self.assertEquals(get_tag_list(self.cheese), [self.cheese]) - + def test_space_delimeted_string_as_input(self): ret = get_tag_list('cheese toast') self.assertEquals(len(ret), 2) self.failUnless(self.cheese in ret) self.failUnless(self.toast in ret) - + def test_comma_delimeted_string_as_input(self): ret = get_tag_list('cheese,toast') self.assertEquals(len(ret), 2) self.failUnless(self.cheese in ret) self.failUnless(self.toast in ret) - + def test_with_empty_list(self): self.assertEquals(get_tag_list([]), []) - + def test_list_of_two_strings(self): ret = get_tag_list(['cheese', 'toast']) self.assertEquals(len(ret), 2) self.failUnless(self.cheese in ret) self.failUnless(self.toast in ret) - + def test_list_of_tag_primary_keys(self): ret = get_tag_list([self.cheese.id, self.toast.id]) self.assertEquals(len(ret), 2) self.failUnless(self.cheese in ret) self.failUnless(self.toast in ret) - + def test_list_of_strings_with_strange_nontag_string(self): ret = get_tag_list(['cheese', 'toast', 'ŠĐĆŽćžšđ']) self.assertEquals(len(ret), 2) self.failUnless(self.cheese in ret) self.failUnless(self.toast in ret) - + def test_list_of_tag_instances(self): ret = get_tag_list([self.cheese, self.toast]) self.assertEquals(len(ret), 2) self.failUnless(self.cheese in ret) self.failUnless(self.toast in ret) - + def test_tuple_of_instances(self): ret = get_tag_list((self.cheese, self.toast)) self.assertEquals(len(ret), 2) self.failUnless(self.cheese in ret) self.failUnless(self.toast in ret) - + def test_with_tag_filter(self): ret = get_tag_list(Tag.objects.filter(name__in=['cheese', 'toast'])) self.assertEquals(len(ret), 2) self.failUnless(self.cheese in ret) self.failUnless(self.toast in ret) - + def test_with_invalid_input_mix_of_string_and_instance(self): try: get_tag_list(['cheese', self.toast]) @@ -144,7 +144,7 @@ def test_with_invalid_input_mix_of_string_and_instance(self): (str(type(e)), str(e))) else: raise self.failureException('a ValueError exception was supposed to be raised!') - + def test_with_invalid_input(self): try: get_tag_list(29) @@ -158,49 +158,49 @@ def test_with_invalid_input(self): def test_with_tag_instance(self): self.assertEquals(get_tag(self.cheese), self.cheese) - + def test_with_string(self): self.assertEquals(get_tag('cheese'), self.cheese) - + def test_with_primary_key(self): self.assertEquals(get_tag(self.cheese.id), self.cheese) - + def test_nonexistent_tag(self): self.assertEquals(get_tag('mouse'), None) class TestCalculateCloud(TestCase): def setUp(self): self.tags = [] - for line in open(os.path.join(os.path.dirname(__file__), 'tags.txt')).readlines(): + for line in open(os.path.join(os.path.dirname(__file__), 'test_tags.txt')).readlines(): name, count = line.rstrip().split() tag = Tag(name=name) tag.count = int(count) self.tags.append(tag) - + def test_default_distribution(self): sizes = {} for tag in calculate_cloud(self.tags, steps=5): sizes[tag.font_size] = sizes.get(tag.font_size, 0) + 1 - + # This isn't a pre-calculated test, just making sure it's consistent self.assertEquals(sizes[1], 48) self.assertEquals(sizes[2], 30) self.assertEquals(sizes[3], 19) self.assertEquals(sizes[4], 15) self.assertEquals(sizes[5], 10) - + def test_linear_distribution(self): sizes = {} for tag in calculate_cloud(self.tags, steps=5, distribution=LINEAR): sizes[tag.font_size] = sizes.get(tag.font_size, 0) + 1 - + # This isn't a pre-calculated test, just making sure it's consistent self.assertEquals(sizes[1], 97) self.assertEquals(sizes[2], 12) self.assertEquals(sizes[3], 7) self.assertEquals(sizes[4], 2) self.assertEquals(sizes[5], 4) - + def test_invalid_distribution(self): try: calculate_cloud(self.tags, steps=5, distribution='cheese') @@ -211,7 +211,7 @@ def test_invalid_distribution(self): (str(type(e)), str(e))) else: raise self.failureException('a ValueError exception was supposed to be raised!') - + ########### # Tagging # ########### @@ -219,7 +219,7 @@ def test_invalid_distribution(self): class TestBasicTagging(TestCase): def setUp(self): self.dead_parrot = Parrot.objects.create(state='dead') - + def test_update_tags(self): Tag.objects.update_tags(self.dead_parrot, 'foo,bar,"ter"') tags = Tag.objects.get_for_object(self.dead_parrot) @@ -227,14 +227,14 @@ def test_update_tags(self): self.failUnless(get_tag('foo') in tags) self.failUnless(get_tag('bar') in tags) self.failUnless(get_tag('ter') in tags) - + Tag.objects.update_tags(self.dead_parrot, '"foo" bar "baz"') tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(get_tag('bar') in tags) self.failUnless(get_tag('baz') in tags) self.failUnless(get_tag('foo') in tags) - + def test_add_tag(self): # start off in a known, mildly interesting state Tag.objects.update_tags(self.dead_parrot, 'foo bar baz') @@ -243,7 +243,7 @@ def test_add_tag(self): self.failUnless(get_tag('bar') in tags) self.failUnless(get_tag('baz') in tags) self.failUnless(get_tag('foo') in tags) - + # try to add a tag that already exists Tag.objects.add_tag(self.dead_parrot, 'foo') tags = Tag.objects.get_for_object(self.dead_parrot) @@ -251,7 +251,7 @@ def test_add_tag(self): self.failUnless(get_tag('bar') in tags) self.failUnless(get_tag('baz') in tags) self.failUnless(get_tag('foo') in tags) - + # now add a tag that doesn't already exist Tag.objects.add_tag(self.dead_parrot, 'zip') tags = Tag.objects.get_for_object(self.dead_parrot) @@ -260,7 +260,7 @@ def test_add_tag(self): self.failUnless(get_tag('bar') in tags) self.failUnless(get_tag('baz') in tags) self.failUnless(get_tag('foo') in tags) - + def test_add_tag_invalid_input_no_tags_specified(self): # start off in a known, mildly interesting state Tag.objects.update_tags(self.dead_parrot, 'foo bar baz') @@ -269,7 +269,7 @@ def test_add_tag_invalid_input_no_tags_specified(self): self.failUnless(get_tag('bar') in tags) self.failUnless(get_tag('baz') in tags) self.failUnless(get_tag('foo') in tags) - + try: Tag.objects.add_tag(self.dead_parrot, ' ') except AttributeError, ae: @@ -279,7 +279,7 @@ def test_add_tag_invalid_input_no_tags_specified(self): (str(type(e)), str(e))) else: raise self.failureException('an AttributeError exception was supposed to be raised!') - + def test_add_tag_invalid_input_multiple_tags_specified(self): # start off in a known, mildly interesting state Tag.objects.update_tags(self.dead_parrot, 'foo bar baz') @@ -288,7 +288,7 @@ def test_add_tag_invalid_input_multiple_tags_specified(self): self.failUnless(get_tag('bar') in tags) self.failUnless(get_tag('baz') in tags) self.failUnless(get_tag('foo') in tags) - + try: Tag.objects.add_tag(self.dead_parrot, 'one two') except AttributeError, ae: @@ -298,7 +298,7 @@ def test_add_tag_invalid_input_multiple_tags_specified(self): (str(type(e)), str(e))) else: raise self.failureException('an AttributeError exception was supposed to be raised!') - + def test_update_tags_exotic_characters(self): # start off in a known, mildly interesting state Tag.objects.update_tags(self.dead_parrot, 'foo bar baz') @@ -307,17 +307,17 @@ def test_update_tags_exotic_characters(self): self.failUnless(get_tag('bar') in tags) self.failUnless(get_tag('baz') in tags) self.failUnless(get_tag('foo') in tags) - + Tag.objects.update_tags(self.dead_parrot, u'ŠĐĆŽćžšđ') tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 1) self.assertEquals(tags[0].name, u'ŠĐĆŽćžšđ') - + Tag.objects.update_tags(self.dead_parrot, u'你好') tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 1) self.assertEquals(tags[0].name, u'你好') - + def test_update_tags_with_none(self): # start off in a known, mildly interesting state Tag.objects.update_tags(self.dead_parrot, 'foo bar baz') @@ -326,14 +326,14 @@ def test_update_tags_with_none(self): self.failUnless(get_tag('bar') in tags) self.failUnless(get_tag('baz') in tags) self.failUnless(get_tag('foo') in tags) - + Tag.objects.update_tags(self.dead_parrot, None) tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 0) class TestModelTagField(TestCase): """ Test the 'tags' field on models. """ - + def test_create_with_tags_specified(self): f1 = FormTest.objects.create(tags=u'test3 test2 test1') tags = Tag.objects.get_for_object(f1) @@ -345,7 +345,7 @@ def test_create_with_tags_specified(self): self.failUnless(test1_tag in tags) self.failUnless(test2_tag in tags) self.failUnless(test3_tag in tags) - + def test_update_via_tags_field(self): f1 = FormTest.objects.create(tags=u'test3 test2 test1') tags = Tag.objects.get_for_object(f1) @@ -357,14 +357,14 @@ def test_update_via_tags_field(self): self.failUnless(test1_tag in tags) self.failUnless(test2_tag in tags) self.failUnless(test3_tag in tags) - + f1.tags = u'test4' f1.save() tags = Tag.objects.get_for_object(f1) test4_tag = get_tag('test4') self.assertEquals(len(tags), 1) self.assertEquals(tags[0], test4_tag) - + f1.tags = '' f1.save() tags = Tag.objects.get_for_object(f1) @@ -388,20 +388,20 @@ def test_creation_without_specifying_tags(self): def test_creation_with_nullable_tags_field(self): f1 = FormTestNull() self.assertEquals(f1.tags, '') - + class TestSettings(TestCase): def setUp(self): self.original_force_lower_case_tags = settings.FORCE_LOWERCASE_TAGS self.dead_parrot = Parrot.objects.create(state='dead') - + def tearDown(self): settings.FORCE_LOWERCASE_TAGS = self.original_force_lower_case_tags - + def test_force_lowercase_tags(self): """ Test forcing tags to lowercase. """ - + settings.FORCE_LOWERCASE_TAGS = True - + Tag.objects.update_tags(self.dead_parrot, 'foO bAr Ter') tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) @@ -411,7 +411,7 @@ def test_force_lowercase_tags(self): self.failUnless(foo_tag in tags) self.failUnless(bar_tag in tags) self.failUnless(ter_tag in tags) - + Tag.objects.update_tags(self.dead_parrot, 'foO bAr baZ') tags = Tag.objects.get_for_object(self.dead_parrot) baz_tag = get_tag('baz') @@ -419,14 +419,14 @@ def test_force_lowercase_tags(self): self.failUnless(bar_tag in tags) self.failUnless(baz_tag in tags) self.failUnless(foo_tag in tags) - + Tag.objects.add_tag(self.dead_parrot, 'FOO') tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 3) self.failUnless(bar_tag in tags) self.failUnless(baz_tag in tags) self.failUnless(foo_tag in tags) - + Tag.objects.add_tag(self.dead_parrot, 'Zip') tags = Tag.objects.get_for_object(self.dead_parrot) self.assertEquals(len(tags), 4) @@ -435,7 +435,7 @@ def test_force_lowercase_tags(self): self.failUnless(baz_tag in tags) self.failUnless(foo_tag in tags) self.failUnless(zip_tag in tags) - + f1 = FormTest.objects.create() f1.tags = u'TEST5' f1.save() @@ -457,12 +457,12 @@ def setUp(self): ('no more', 4, True, 'foo ter'), ('late', 2, False, 'bar ter'), ) - + for state, perch_size, perch_smelly, tags in parrot_details: perch = Perch.objects.create(size=perch_size, smelly=perch_smelly) parrot = Parrot.objects.create(state=state, perch=perch) Tag.objects.update_tags(parrot, tags) - + def test_tag_usage_for_model(self): tag_usage = Tag.objects.usage_for_model(Parrot, counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] @@ -471,7 +471,7 @@ def test_tag_usage_for_model(self): self.failUnless((u'baz', 1) in relevant_attribute_list) self.failUnless((u'foo', 2) in relevant_attribute_list) self.failUnless((u'ter', 3) in relevant_attribute_list) - + def test_tag_usage_for_model_with_min_count(self): tag_usage = Tag.objects.usage_for_model(Parrot, min_count = 2) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] @@ -479,14 +479,14 @@ def test_tag_usage_for_model_with_min_count(self): self.failUnless((u'bar', 3) in relevant_attribute_list) self.failUnless((u'foo', 2) in relevant_attribute_list) self.failUnless((u'ter', 3) in relevant_attribute_list) - + def test_tag_usage_with_filter_on_model_objects(self): tag_usage = Tag.objects.usage_for_model(Parrot, counts=True, filters=dict(state='no more')) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 2) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_model(Parrot, counts=True, filters=dict(state__startswith='p')) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 4) @@ -494,7 +494,7 @@ def test_tag_usage_with_filter_on_model_objects(self): self.failUnless((u'baz', 1) in relevant_attribute_list) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_model(Parrot, counts=True, filters=dict(perch__size__gt=4)) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 4) @@ -502,19 +502,19 @@ def test_tag_usage_with_filter_on_model_objects(self): self.failUnless((u'baz', 1) in relevant_attribute_list) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_model(Parrot, counts=True, filters=dict(perch__smelly=True)) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 3) self.failUnless((u'bar', 1) in relevant_attribute_list) self.failUnless((u'foo', 2) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_model(Parrot, min_count=2, filters=dict(perch__smelly=True)) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 1) self.failUnless((u'foo', 2) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_model(Parrot, filters=dict(perch__size__gt=4)) relevant_attribute_list = [(tag.name, hasattr(tag, 'counts')) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 4) @@ -522,7 +522,7 @@ def test_tag_usage_with_filter_on_model_objects(self): self.failUnless((u'baz', False) in relevant_attribute_list) self.failUnless((u'foo', False) in relevant_attribute_list) self.failUnless((u'ter', False) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_model(Parrot, filters=dict(perch__size__gt=99)) relevant_attribute_list = [(tag.name, hasattr(tag, 'counts')) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 0) @@ -535,12 +535,12 @@ def setUp(self): ('no more', 4, True, 'foo ter'), ('late', 2, False, 'bar ter'), ) - + for state, perch_size, perch_smelly, tags in parrot_details: perch = Perch.objects.create(size=perch_size, smelly=perch_smelly) parrot = Parrot.objects.create(state=state, perch=perch) Tag.objects.update_tags(parrot, tags) - + def test_related_for_model_with_tag_query_sets_as_input(self): related_tags = Tag.objects.related_for_model(Tag.objects.filter(name__in=['bar']), Parrot, counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in related_tags] @@ -548,28 +548,28 @@ def test_related_for_model_with_tag_query_sets_as_input(self): self.failUnless((u'baz', 1) in relevant_attribute_list) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 2) in relevant_attribute_list) - + related_tags = Tag.objects.related_for_model(Tag.objects.filter(name__in=['bar']), Parrot, min_count=2) relevant_attribute_list = [(tag.name, tag.count) for tag in related_tags] self.assertEquals(len(relevant_attribute_list), 1) self.failUnless((u'ter', 2) in relevant_attribute_list) - + related_tags = Tag.objects.related_for_model(Tag.objects.filter(name__in=['bar']), Parrot, counts=False) relevant_attribute_list = [tag.name for tag in related_tags] self.assertEquals(len(relevant_attribute_list), 3) self.failUnless(u'baz' in relevant_attribute_list) self.failUnless(u'foo' in relevant_attribute_list) self.failUnless(u'ter' in relevant_attribute_list) - + related_tags = Tag.objects.related_for_model(Tag.objects.filter(name__in=['bar', 'ter']), Parrot, counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in related_tags] self.assertEquals(len(relevant_attribute_list), 1) self.failUnless((u'baz', 1) in relevant_attribute_list) - + related_tags = Tag.objects.related_for_model(Tag.objects.filter(name__in=['bar', 'ter', 'baz']), Parrot, counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in related_tags] self.assertEquals(len(relevant_attribute_list), 0) - + def test_related_for_model_with_tag_strings_as_input(self): # Once again, with feeling (strings) related_tags = Tag.objects.related_for_model('bar', Parrot, counts=True) @@ -578,28 +578,28 @@ def test_related_for_model_with_tag_strings_as_input(self): self.failUnless((u'baz', 1) in relevant_attribute_list) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 2) in relevant_attribute_list) - + related_tags = Tag.objects.related_for_model('bar', Parrot, min_count=2) relevant_attribute_list = [(tag.name, tag.count) for tag in related_tags] self.assertEquals(len(relevant_attribute_list), 1) self.failUnless((u'ter', 2) in relevant_attribute_list) - + related_tags = Tag.objects.related_for_model('bar', Parrot, counts=False) relevant_attribute_list = [tag.name for tag in related_tags] self.assertEquals(len(relevant_attribute_list), 3) self.failUnless(u'baz' in relevant_attribute_list) self.failUnless(u'foo' in relevant_attribute_list) self.failUnless(u'ter' in relevant_attribute_list) - + related_tags = Tag.objects.related_for_model(['bar', 'ter'], Parrot, counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in related_tags] self.assertEquals(len(relevant_attribute_list), 1) self.failUnless((u'baz', 1) in relevant_attribute_list) - + related_tags = Tag.objects.related_for_model(['bar', 'ter', 'baz'], Parrot, counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in related_tags] self.assertEquals(len(relevant_attribute_list), 0) - + class TestGetTaggedObjectsByModel(TestCase): def setUp(self): parrot_details = ( @@ -608,95 +608,95 @@ def setUp(self): ('no more', 4, True, 'foo ter'), ('late', 2, False, 'bar ter'), ) - + for state, perch_size, perch_smelly, tags in parrot_details: perch = Perch.objects.create(size=perch_size, smelly=perch_smelly) parrot = Parrot.objects.create(state=state, perch=perch) Tag.objects.update_tags(parrot, tags) - + self.foo = Tag.objects.get(name='foo') self.bar = Tag.objects.get(name='bar') self.baz = Tag.objects.get(name='baz') self.ter = Tag.objects.get(name='ter') - + self.pining_for_the_fjords_parrot = Parrot.objects.get(state='pining for the fjords') self.passed_on_parrot = Parrot.objects.get(state='passed on') self.no_more_parrot = Parrot.objects.get(state='no more') self.late_parrot = Parrot.objects.get(state='late') - + def test_get_by_model_simple(self): parrots = TaggedItem.objects.get_by_model(Parrot, self.foo) self.assertEquals(len(parrots), 2) self.failUnless(self.no_more_parrot in parrots) self.failUnless(self.pining_for_the_fjords_parrot in parrots) - + parrots = TaggedItem.objects.get_by_model(Parrot, self.bar) self.assertEquals(len(parrots), 3) self.failUnless(self.late_parrot in parrots) self.failUnless(self.passed_on_parrot in parrots) self.failUnless(self.pining_for_the_fjords_parrot in parrots) - + def test_get_by_model_intersection(self): parrots = TaggedItem.objects.get_by_model(Parrot, [self.foo, self.baz]) self.assertEquals(len(parrots), 0) - + parrots = TaggedItem.objects.get_by_model(Parrot, [self.foo, self.bar]) self.assertEquals(len(parrots), 1) self.failUnless(self.pining_for_the_fjords_parrot in parrots) - + parrots = TaggedItem.objects.get_by_model(Parrot, [self.bar, self.ter]) self.assertEquals(len(parrots), 2) self.failUnless(self.late_parrot in parrots) self.failUnless(self.passed_on_parrot in parrots) - + # Issue 114 - Intersection with non-existant tags parrots = TaggedItem.objects.get_intersection_by_model(Parrot, []) self.assertEquals(len(parrots), 0) - + def test_get_by_model_with_tag_querysets_as_input(self): parrots = TaggedItem.objects.get_by_model(Parrot, Tag.objects.filter(name__in=['foo', 'baz'])) self.assertEquals(len(parrots), 0) - + parrots = TaggedItem.objects.get_by_model(Parrot, Tag.objects.filter(name__in=['foo', 'bar'])) self.assertEquals(len(parrots), 1) self.failUnless(self.pining_for_the_fjords_parrot in parrots) - + parrots = TaggedItem.objects.get_by_model(Parrot, Tag.objects.filter(name__in=['bar', 'ter'])) self.assertEquals(len(parrots), 2) self.failUnless(self.late_parrot in parrots) self.failUnless(self.passed_on_parrot in parrots) - + def test_get_by_model_with_strings_as_input(self): parrots = TaggedItem.objects.get_by_model(Parrot, 'foo baz') self.assertEquals(len(parrots), 0) - + parrots = TaggedItem.objects.get_by_model(Parrot, 'foo bar') self.assertEquals(len(parrots), 1) self.failUnless(self.pining_for_the_fjords_parrot in parrots) - + parrots = TaggedItem.objects.get_by_model(Parrot, 'bar ter') self.assertEquals(len(parrots), 2) self.failUnless(self.late_parrot in parrots) self.failUnless(self.passed_on_parrot in parrots) - + def test_get_by_model_with_lists_of_strings_as_input(self): parrots = TaggedItem.objects.get_by_model(Parrot, ['foo', 'baz']) self.assertEquals(len(parrots), 0) - + parrots = TaggedItem.objects.get_by_model(Parrot, ['foo', 'bar']) self.assertEquals(len(parrots), 1) self.failUnless(self.pining_for_the_fjords_parrot in parrots) - + parrots = TaggedItem.objects.get_by_model(Parrot, ['bar', 'ter']) self.assertEquals(len(parrots), 2) self.failUnless(self.late_parrot in parrots) self.failUnless(self.passed_on_parrot in parrots) - + def test_get_by_nonexistent_tag(self): # Issue 50 - Get by non-existent tag parrots = TaggedItem.objects.get_by_model(Parrot, 'argatrons') self.assertEquals(len(parrots), 0) - + def test_get_union_by_model(self): parrots = TaggedItem.objects.get_union_by_model(Parrot, ['foo', 'ter']) self.assertEquals(len(parrots), 4) @@ -704,13 +704,13 @@ def test_get_union_by_model(self): self.failUnless(self.no_more_parrot in parrots) self.failUnless(self.passed_on_parrot in parrots) self.failUnless(self.pining_for_the_fjords_parrot in parrots) - + parrots = TaggedItem.objects.get_union_by_model(Parrot, ['bar', 'baz']) self.assertEquals(len(parrots), 3) self.failUnless(self.late_parrot in parrots) self.failUnless(self.passed_on_parrot in parrots) self.failUnless(self.pining_for_the_fjords_parrot in parrots) - + # Issue 114 - Union with non-existant tags parrots = TaggedItem.objects.get_union_by_model(Parrot, []) self.assertEquals(len(parrots), 0) @@ -723,12 +723,12 @@ def setUp(self): ('no more', 4, True, 'foo ter'), ('late', 2, False, 'bar ter'), ) - + for state, perch_size, perch_smelly, tags in parrot_details: perch = Perch.objects.create(size=perch_size, smelly=perch_smelly) parrot = Parrot.objects.create(state=state, perch=perch) Tag.objects.update_tags(parrot, tags) - + self.l1 = Link.objects.create(name='link 1') Tag.objects.update_tags(self.l1, 'tag1 tag2 tag3 tag4 tag5') self.l2 = Link.objects.create(name='link 2') @@ -736,44 +736,44 @@ def setUp(self): self.l3 = Link.objects.create(name='link 3') Tag.objects.update_tags(self.l3, 'tag1') self.l4 = Link.objects.create(name='link 4') - + self.a1 = Article.objects.create(name='article 1') Tag.objects.update_tags(self.a1, 'tag1 tag2 tag3 tag4') - + def test_get_related_objects_of_same_model(self): related_objects = TaggedItem.objects.get_related(self.l1, Link) self.assertEquals(len(related_objects), 2) self.failUnless(self.l2 in related_objects) self.failUnless(self.l3 in related_objects) - + related_objects = TaggedItem.objects.get_related(self.l4, Link) self.assertEquals(len(related_objects), 0) - + def test_get_related_objects_of_same_model_limited_number_of_results(self): # This fails on Oracle because it has no support for a 'LIMIT' clause. # See http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:127412348064 - + # ask for no more than 1 result related_objects = TaggedItem.objects.get_related(self.l1, Link, num=1) self.assertEquals(len(related_objects), 1) self.failUnless(self.l2 in related_objects) - + def test_get_related_objects_of_same_model_limit_related_items(self): related_objects = TaggedItem.objects.get_related(self.l1, Link.objects.exclude(name='link 3')) self.assertEquals(len(related_objects), 1) self.failUnless(self.l2 in related_objects) - + def test_get_related_objects_of_different_model(self): related_objects = TaggedItem.objects.get_related(self.a1, Link) self.assertEquals(len(related_objects), 3) self.failUnless(self.l1 in related_objects) self.failUnless(self.l2 in related_objects) self.failUnless(self.l3 in related_objects) - + Tag.objects.update_tags(self.a1, 'tag6') related_objects = TaggedItem.objects.get_related(self.a1, Link) self.assertEquals(len(related_objects), 0) - + class TestTagUsageForQuerySet(TestCase): def setUp(self): parrot_details = ( @@ -782,19 +782,19 @@ def setUp(self): ('no more', 4, True, 'foo ter'), ('late', 2, False, 'bar ter'), ) - + for state, perch_size, perch_smelly, tags in parrot_details: perch = Perch.objects.create(size=perch_size, smelly=perch_smelly) parrot = Parrot.objects.create(state=state, perch=perch) Tag.objects.update_tags(parrot, tags) - + def test_tag_usage_for_queryset(self): tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(state='no more'), counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 2) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(state__startswith='p'), counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 4) @@ -802,7 +802,7 @@ def test_tag_usage_for_queryset(self): self.failUnless((u'baz', 1) in relevant_attribute_list) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__size__gt=4), counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 4) @@ -810,19 +810,19 @@ def test_tag_usage_for_queryset(self): self.failUnless((u'baz', 1) in relevant_attribute_list) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__smelly=True), counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 3) self.failUnless((u'bar', 1) in relevant_attribute_list) self.failUnless((u'foo', 2) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__smelly=True), min_count=2) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 1) self.failUnless((u'foo', 2) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__size__gt=4)) relevant_attribute_list = [(tag.name, hasattr(tag, 'counts')) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 4) @@ -830,54 +830,54 @@ def test_tag_usage_for_queryset(self): self.failUnless((u'baz', False) in relevant_attribute_list) self.failUnless((u'foo', False) in relevant_attribute_list) self.failUnless((u'ter', False) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(perch__size__gt=99)) relevant_attribute_list = [(tag.name, hasattr(tag, 'counts')) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 0) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(Q(perch__size__gt=6) | Q(state__startswith='l')), counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 3) self.failUnless((u'bar', 2) in relevant_attribute_list) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(Q(perch__size__gt=6) | Q(state__startswith='l')), min_count=2) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 1) self.failUnless((u'bar', 2) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.filter(Q(perch__size__gt=6) | Q(state__startswith='l'))) relevant_attribute_list = [(tag.name, hasattr(tag, 'counts')) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 3) self.failUnless((u'bar', False) in relevant_attribute_list) self.failUnless((u'foo', False) in relevant_attribute_list) self.failUnless((u'ter', False) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.exclude(state='passed on'), counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 3) self.failUnless((u'bar', 2) in relevant_attribute_list) self.failUnless((u'foo', 2) in relevant_attribute_list) self.failUnless((u'ter', 2) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.exclude(state__startswith='p'), min_count=2) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 1) self.failUnless((u'ter', 2) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.exclude(Q(perch__size__gt=6) | Q(perch__smelly=False)), counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 2) self.failUnless((u'foo', 1) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + tag_usage = Tag.objects.usage_for_queryset(Parrot.objects.exclude(perch__smelly=True).filter(state__startswith='l'), counts=True) relevant_attribute_list = [(tag.name, tag.count) for tag in tag_usage] self.assertEquals(len(relevant_attribute_list), 2) self.failUnless((u'bar', 1) in relevant_attribute_list) self.failUnless((u'ter', 1) in relevant_attribute_list) - + ################ # Model Fields # ################ @@ -888,10 +888,11 @@ def test_tag_field_in_modelform(self): class TestForm(forms.ModelForm): class Meta: model = FormTest - + fields = '__all__' + form = TestForm() self.assertEquals(form.fields['tags'].__class__.__name__, 'TagField') - + def test_recreation_of_tag_list_string_representations(self): plain = Tag.objects.create(name='plain') spaces = Tag.objects.create(name='spa ces') @@ -901,7 +902,7 @@ def test_recreation_of_tag_list_string_representations(self): self.assertEquals(edit_string_for_tags([plain, spaces, comma]), u'plain, spa ces, "com,ma"') self.assertEquals(edit_string_for_tags([plain, comma]), u'plain "com,ma"') self.assertEquals(edit_string_for_tags([comma, spaces]), u'"com,ma", spa ces') - + def test_tag_d_validation(self): t = TagField() self.assertEquals(t.clean('foo'), u'foo') diff --git a/tagging/tests/__init__.py b/tagging/tests/__init__.py deleted file mode 100644 index e69de29b..00000000