From 2fd362f2d7905c743723704a08d3322c3fab6da3 Mon Sep 17 00:00:00 2001 From: Luke Plant Date: Sun, 29 Jan 2006 00:23:52 +0000 Subject: [PATCH] magic-removal: Updated model tests for new syntax: 'basic', 'custom_managers' and 'custom_columns' git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2151 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- tests/modeltests/basic/models.py | 130 +++++++++++++-------- tests/modeltests/custom_columns/models.py | 10 +- tests/modeltests/custom_managers/models.py | 22 ++-- 3 files changed, 97 insertions(+), 65 deletions(-) diff --git a/tests/modeltests/basic/models.py b/tests/modeltests/basic/models.py index aaba943d65..86acfe02e1 100644 --- a/tests/modeltests/basic/models.py +++ b/tests/modeltests/basic/models.py @@ -11,8 +11,9 @@ class Article(models.Model): pub_date = models.DateTimeField() API_TESTS = """ + # No articles are in the system yet. ->>> Article.objects.get_list() +>>> list(Article.objects) [] # Create an Article. @@ -37,52 +38,58 @@ datetime.datetime(2005, 7, 28, 0, 0) >>> a.headline = 'Area woman programs in Python' >>> a.save() -# get_list() displays all the articles in the database. Note that the article +# Listing objects displays all the articles in the database. Note that the article # is represented by "
", because we haven't given the Article # model a __repr__() method. ->>> Article.objects.get_list() +>>> list(Article.objects) [
] # Django provides a rich database lookup API that's entirely driven by # keyword arguments. ->>> Article.objects.get_object(id__exact=1) +>>> Article.objects.get(id__exact=1)
->>> Article.objects.get_object(headline__startswith='Area woman') +>>> Article.objects.get(headline__startswith='Area woman')
->>> Article.objects.get_object(pub_date__year=2005) +>>> Article.objects.get(pub_date__year=2005)
->>> Article.objects.get_object(pub_date__year=2005, pub_date__month=7) +>>> Article.objects.get(pub_date__year=2005, pub_date__month=7)
->>> Article.objects.get_object(pub_date__year=2005, pub_date__month=7, pub_date__day=28) +>>> Article.objects.get(pub_date__year=2005, pub_date__month=7, pub_date__day=28)
->>> Article.objects.get_list(pub_date__year=2005) +# You can omit __exact if you want +>>> Article.objects.get(id=1) +
+>>> Article.objects.get(headline='Area woman programs in Python') +
+ +>>> list(Article.objects.filter(pub_date__year=2005)) [
] ->>> Article.objects.get_list(pub_date__year=2004) +>>> list(Article.objects.filter(pub_date__year=2004)) [] ->>> Article.objects.get_list(pub_date__year=2005, pub_date__month=7) +>>> list(Article.objects.filter(pub_date__year=2005, pub_date__month=7)) [
] -# Django raises an ArticleDoesNotExist exception for get_object() ->>> Article.objects.get_object(id__exact=2) +# Django raises an ArticleDoesNotExist exception for get() +>>> Article.objects.get(id__exact=2) Traceback (most recent call last): ... DoesNotExist: Article does not exist for {'id__exact': 2} ->>> Article.objects.get_object(pub_date__year=2005, pub_date__month=8) +>>> Article.objects.get(pub_date__year=2005, pub_date__month=8) Traceback (most recent call last): ... DoesNotExist: Article does not exist for ... # Lookup by a primary key is the most common case, so Django provides a # shortcut for primary-key exact lookups. -# The following is identical to articles.get_object(id__exact=1). ->>> Article.objects.get_object(pk=1) +# The following is identical to articles.get(id__exact=1). +>>> Article.objects.get(pk=1)
# Model instances of the same type and same ID are considered equal. ->>> a = Article.objects.get_object(pk=1) ->>> b = Article.objects.get_object(pk=1) +>>> a = Article.objects.get(pk=1) +>>> b = Article.objects.get(pk=1) >>> a == b True @@ -139,12 +146,12 @@ TypeError: 'foo' is an invalid keyword argument for this function # give it. >>> a7 = Article(headline='Article 7', pub_date=datetime(2005, 7, 31, 12, 30)) >>> a7.save() ->>> Article.objects.get_object(id__exact=7).pub_date +>>> Article.objects.get(id__exact=7).pub_date datetime.datetime(2005, 7, 31, 12, 30) >>> a8 = Article(headline='Article 8', pub_date=datetime(2005, 7, 31, 12, 30, 45)) >>> a8.save() ->>> Article.objects.get_object(id__exact=8).pub_date +>>> Article.objects.get(id__exact=8).pub_date datetime.datetime(2005, 7, 31, 12, 30, 45) >>> a8.id 8L @@ -160,40 +167,65 @@ datetime.datetime(2005, 7, 31, 12, 30, 45) >>> a7 == a8 False ->>> a8 == Article.objects.get_object(id__exact=8) +>>> a8 == Article.objects.get(id__exact=8) True >>> a7 != a8 True ->>> Article.objects.get_object(id__exact=8) != Article.objects.get_object(id__exact=7) +>>> Article.objects.get(id__exact=8) != Article.objects.get(id__exact=7) True ->>> Article.objects.get_object(id__exact=8) == Article.objects.get_object(id__exact=7) +>>> Article.objects.get(id__exact=8) == Article.objects.get(id__exact=7) False ->>> Article.objects.get_pub_date_list('year') -[datetime.datetime(2005, 1, 1, 0, 0)] ->>> Article.objects.get_pub_date_list('month') -[datetime.datetime(2005, 7, 1, 0, 0)] ->>> Article.objects.get_pub_date_list('day') -[datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 31, 0, 0)] ->>> Article.objects.get_pub_date_list('day', order='ASC') -[datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 31, 0, 0)] ->>> Article.objects.get_pub_date_list('day', order='DESC') -[datetime.datetime(2005, 7, 31, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 28, 0, 0)] +## TODO - what should these be converted to? -# Try some bad arguments to __get_date_list ->>> Article.objects.get_pub_date_list('badarg') -Traceback (most recent call last): - ... -AssertionError: 'kind' must be one of 'year', 'month' or 'day'. ->>> Article.objects.get_pub_date_list(order='ASC') -Traceback (most recent call last): - ... -TypeError: __get_date_list() takes at least 3 non-keyword arguments (2 given) +##>>> Article.objects.get_pub_date_list('year') +##[datetime.datetime(2005, 1, 1, 0, 0)] +##>>> Article.objects.get_pub_date_list('month') +##[datetime.datetime(2005, 7, 1, 0, 0)] +##>>> Article.objects.get_pub_date_list('day') +##[datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 31, 0, 0)] +##>>> Article.objects.get_pub_date_list('day', order='ASC') +##[datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 31, 0, 0)] +##>>> Article.objects.get_pub_date_list('day', order='DESC') +##[datetime.datetime(2005, 7, 31, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 28, 0, 0)] +## +### Try some bad arguments to __get_date_list +##>>> Article.objects.get_pub_date_list('badarg') +##Traceback (most recent call last): +## ... +##AssertionError: 'kind' must be one of 'year', 'month' or 'day'. +##>>> Article.objects.get_pub_date_list(order='ASC') +##Traceback (most recent call last): +## ... +##TypeError: __get_date_list() takes at least 3 non-keyword arguments (2 given) + +# You can combine queries with & and | +>>> s1 = Article.objects.filter(id__exact=1) +>>> s2 = Article.objects.filter(id__exact=2) +>>> tmp = [a.id for a in list(s1 | s2)] +>>> tmp.sort() +>>> tmp +[1L, 2L] +>>> list(s1 & s2) +[] + +# You can get the number of objects like this: +>>> len(Article.objects.filter(id__exact=1)) +1 + +# You can get items using index and slice notation: +>>> Article.objects[0] +
+>>> Article.objects[1:2] +[
,
] +>>> s3 = Article.objects.filter(id__exact=3) +>>> (s1 | s2 | s3)[::2] +[
,
] # An Article instance doesn't have access to the "objects" attribute. # That is only available as a class method. ->>> a7.objects.get_list() +>>> list(a7.objects) Traceback (most recent call last): ... AttributeError: Manager isn't accessible via Article instances @@ -204,10 +236,10 @@ Traceback (most recent call last): AttributeError: Manager isn't accessible via Article instances # Bulk delete test: How many objects before and after the delete? ->>> Article.objects.get_count() +>>> Article.objects.count() 8L >>> Article.objects.delete(id__lte=4) ->>> Article.objects.get_count() +>>> Article.objects.count() 4L >>> Article.objects.delete() @@ -216,7 +248,7 @@ Traceback (most recent call last): TypeError: SAFETY MECHANISM: Specify DELETE_ALL=True if you actually want to delete all data. >>> Article.objects.delete(DELETE_ALL=True) ->>> Article.objects.get_count() +>>> Article.objects.count() 0L """ @@ -230,7 +262,7 @@ if building_docs or settings.DATABASE_ENGINE == 'postgresql': # In PostgreSQL, microsecond-level precision is available. >>> a9 = Article(headline='Article 9', pub_date=datetime(2005, 7, 31, 12, 30, 45, 180)) >>> a9.save() ->>> Article.objects.get_object(id__exact=9).pub_date +>>> Article.objects.get(id__exact=9).pub_date datetime.datetime(2005, 7, 31, 12, 30, 45, 180) """ @@ -240,7 +272,7 @@ if building_docs or settings.DATABASE_ENGINE == 'mysql': # microsecond-level precision once the data is saved. >>> a9 = Article(headline='Article 9', pub_date=datetime(2005, 7, 31, 12, 30, 45, 180)) >>> a9.save() ->>> Article.objects.get_object(id__exact=9).pub_date +>>> Article.objects.get(id__exact=9).pub_date datetime.datetime(2005, 7, 31, 12, 30, 45) """ @@ -249,7 +281,7 @@ API_TESTS += """ # You can manually specify the primary key when creating a new objet >>> a101 = Article(id=101, headline='Article 101', pub_date=datetime(2005, 7, 31, 12, 30, 45)) >>> a101.save() ->>> a101 = Article.objects.get_object(pk=101) +>>> a101 = Article.objects.get(pk=101) >>> a101.headline 'Article 101' """ diff --git a/tests/modeltests/custom_columns/models.py b/tests/modeltests/custom_columns/models.py index f21bc721d0..03da185586 100644 --- a/tests/modeltests/custom_columns/models.py +++ b/tests/modeltests/custom_columns/models.py @@ -23,21 +23,21 @@ API_TESTS = """ >>> p.id 1 ->>> Person.objects.get_list() +>>> list(Person.objects) [John Smith] ->>> Person.objects.get_list(first_name__exact='John') +>>> list(Person.objects.filter(first_name__exact='John')) [John Smith] ->>> Person.objects.get_object(first_name__exact='John') +>>> Person.objects.get(first_name__exact='John') John Smith ->>> Person.objects.get_list(firstname__exact='John') +>>> list(Person.objects.filter(firstname__exact='John')) Traceback (most recent call last): ... TypeError: Cannot resolve keyword 'firstname' into field ->>> p = Person.objects.get_object(last_name__exact='Smith') +>>> p = Person.objects.get(last_name__exact='Smith') >>> p.first_name 'John' >>> p.last_name diff --git a/tests/modeltests/custom_managers/models.py b/tests/modeltests/custom_managers/models.py index d1257b2e27..ddb1fbf157 100644 --- a/tests/modeltests/custom_managers/models.py +++ b/tests/modeltests/custom_managers/models.py @@ -8,7 +8,7 @@ from django.db import models class PersonManager(models.Manager): def get_fun_people(self): - return self.get_list(fun__exact=True) + return list(self.filter(fun=True)) class Person(models.Model): first_name = models.CharField(maxlength=30) @@ -22,9 +22,9 @@ class Person(models.Model): # An example of providing a custom manager that isn't called "objects". class PublishedBookManager(models.Manager): - def get_list(self, **kwargs): - kwargs['is_published__exact'] = True - return models.Manager.get_list(self, **kwargs) + def __init__(self): + super(PublishedBookManager, self).__init__() + self._set_core_filter(is_published__exact=True) class Book(models.Model): title = models.CharField(maxlength=50) @@ -38,9 +38,9 @@ class Book(models.Model): # An example of providing multiple custom managers. class FastCarManager(models.Manager): - def get_list(self, **kwargs): - kwargs['top_speed__gt'] = 150 - return models.Manager.get_list(self, **kwargs) + def __init__(self): + super(FastCarManager, self).__init__() + self._set_core_filter(top_speed__gt=150) class Car(models.Model): name = models.CharField(maxlength=10) @@ -72,20 +72,20 @@ Traceback (most recent call last): ... AttributeError: type object 'Book' has no attribute 'objects' ->>> Book.published_objects.get_list() +>>> list(Book.published_objects) [How to program] >>> c1 = Car(name='Corvette', mileage=21, top_speed=180) >>> c1.save() >>> c2 = Car(name='Neon', mileage=31, top_speed=100) >>> c2.save() ->>> Car.cars.get_list(order_by=('name',)) +>>> list(Car.cars.order_by('name')) [Corvette, Neon] ->>> Car.fast_cars.get_list() +>>> list(Car.fast_cars) [Corvette] # Each model class gets a "_default_manager" attribute, which is a reference # to the first manager defined in the class. In this case, it's "cars". ->>> Car._default_manager.get_list(order_by=('name',)) +>>> list(Car._default_manager.order_by('name')) [Corvette, Neon] """