Author: batiste.bieler
Date: Wed Mar 11 08:49:56 2009
New Revision: 400

Modified:
    trunk/pages/admin/forms.py
    trunk/pages/managers.py
    trunk/pages/models.py
    trunk/pages/tests.py

Log:
Fix the SQL for postgresql

Modified: trunk/pages/admin/forms.py
==============================================================================
--- trunk/pages/admin/forms.py  (original)
+++ trunk/pages/admin/forms.py  Wed Mar 11 08:49:56 2009
@@ -60,7 +60,7 @@
              if target and position:
                  try:
                      target = Page.objects.get(pk=target)
-                except self.model.DoesNotExist:
+                except Page.DoesNotExist:
                      if slug in [sibling.slug() for sibling in  
Page.objects.root()]:
                          raise forms.ValidationError(_('A sibiling with  
this slug already exists at the root level'))
                  else:

Modified: trunk/pages/managers.py
==============================================================================
--- trunk/pages/managers.py     (original)
+++ trunk/pages/managers.py     Wed Mar 11 08:49:56 2009
@@ -117,29 +117,28 @@
              pass
          content = self.create(page=page, language=language, body=body,  
type=cnttype)

-    def get_content(self, page, language, cnttype,  
language_fallback=False):
+    def get_content(self, page, language, type, language_fallback=False):
          """
          Gets the latest content for a particular page and language. Falls  
back
          to another language if wanted.
          """
-        # used for the DISTINCT on the language. Should be nicer with a  
lot of revision
-        sql = '''SELECT pages_content.language, pages_content.body
-            FROM pages_content WHERE (pages_content.type = %s
-            AND pages_content.page_id = %s )
-            GROUP BY pages_content.language
-            ORDER BY pages_content.creation_date DESC'''
-        cursor = connection.cursor()
-        cursor.execute(sql, (cnttype, page.id))
-        content_dict = dict([(c[0], c[1]) for c in cursor.fetchall()])
-        if language in content_dict:
+        if not language:
+            language = settings.PAGE_DEFAULT_LANGUAGE
+        content_dict = {}
+        for lang in settings.PAGE_LANGUAGES:
+            try:
+                content = self.filter(language=lang[0], type=type,  
page=page).latest()
+                content_dict[lang[0]] = content.body
+            except self.model.DoesNotExist:
+                content_dict[lang[0]] = ''
+        if content_dict[language]:
              return content_dict[language]
-        # requested language not found. Try other languages one after
-        # the other
-        elif language_fallback:
+
+        if language_fallback:
              for lang in settings.PAGE_LANGUAGES:
-                if lang[0] in content_dict:
+                if content_dict[lang[0]]:
                      return content_dict[lang[0]]
-        return None
+        return ''

      def get_content_slug_by_slug(self, slug):
          """
@@ -160,10 +159,10 @@
          """
          Return all the page id according to a slug
          """
-        sql = '''SELECT pages_content.page_id, pages_content.language
+        sql = '''SELECT pages_content.page_id,  
MAX(pages_content.creation_date)
              FROM pages_content WHERE (pages_content.type = %s AND  
pages_content.body =%s)
-            GROUP BY pages_content.language, pages_content.page_id
-            ORDER BY pages_content.creation_date DESC'''
+            GROUP BY pages_content.page_id'''
+
          cursor = connection.cursor()
          cursor.execute(sql, ('slug', slug, ))
          return [c[0] for c in cursor.fetchall()]

Modified: trunk/pages/models.py
==============================================================================
--- trunk/pages/models.py       (original)
+++ trunk/pages/models.py       Wed Mar 11 08:49:56 2009
@@ -284,6 +284,7 @@
      objects = ContentManager()

      class Meta:
+        get_latest_by = 'creation_date'
          verbose_name = _('content')
          verbose_name_plural = _('contents')


Modified: trunk/pages/tests.py
==============================================================================
--- trunk/pages/tests.py        (original)
+++ trunk/pages/tests.py        Wed Mar 11 08:49:56 2009
@@ -107,13 +107,15 @@
          c.login(username= 'batiste', password='b')
          page_data = self.get_new_page_data()
          response = c.post('/admin/pages/page/add/', page_data)
-        response = c.get('/admin/pages/page/1/')
+        self.assertRedirects(response, '/admin/pages/page/')
+        page = Page.objects.all()[0]
+        response = c.get('/admin/pages/page/%d/' % page.id)
          self.assertEqual(response.status_code, 200)
          page_data['title'] = 'changed title'
          page_data['body'] = 'changed body'
-        response = c.post('/admin/pages/page/1/', page_data)
+        response = c.post('/admin/pages/page/%d/' % page.id, page_data)
          self.assertRedirects(response, '/admin/pages/page/')
-        page = Page.objects.get(id=1)
+        page = Page.objects.get(id=page.id)
          self.assertEqual(page.title(), 'changed title')
          body = Content.objects.get_content(page, 'en-us', 'body')
          self.assertEqual(body, 'changed body')
@@ -198,6 +200,8 @@
          response = c.post('/admin/pages/page/add/', page_data)
          self.assertRedirects(response, '/admin/pages/page/')

+        page = Page.objects.all()[0]
+
          # this test only works in version superior of 1.0.2
          django_version =  django.get_version().rsplit()[0].split('.')
          if len(django_version) > 2:
@@ -205,13 +209,13 @@
          else:
              major, middle = [int(v) for v in django_version]
          if major >=1 and middle > 0:
-            response = c.get('/admin/pages/page/1/?language=de')
+            response = c.get('/admin/pages/page/%d/?language=de' % page.id)
              self.assertContains(response, 'value="de" selected="selected"')

          # add a french version of the same page
          page_data["language"] = 'fr-ch'
          page_data["title"] = 'french title'
-        response = c.post('/admin/pages/page/1/', page_data)
+        response = c.post('/admin/pages/page/%d/' % page.id, page_data)
          self.assertRedirects(response, '/admin/pages/page/')

          setattr(settings, "PAGE_DEFAULT_LANGUAGE", 'en-us')
@@ -250,14 +254,14 @@
          c.login(username= 'batiste', password='b')
          page_data = self.get_new_page_data()
          response = c.post('/admin/pages/page/add/', page_data)
-        page = Page.objects.get(id=1)
+        page = Page.objects.all()[0]

          page_data['body'] = 'changed body'
-        response = c.post('/admin/pages/page/1/', page_data)
+        response = c.post('/admin/pages/page/%d/' % page.id, page_data)
           
self.assertEqual(Content.objects.get_content(page, 'en-us', 'body'), 'changed  
body')

          page_data['body'] = 'changed body 2'
-        response = c.post('/admin/pages/page/1/', page_data)
+        response = c.post('/admin/pages/page/%d/' % page.id, page_data)
           
self.assertEqual(Content.objects.get_content(page, 'en-us', 'body'), 'changed  
body 2')

          response = c.get('/pages/')
@@ -278,7 +282,8 @@
          page_data = self.get_new_page_data()
          page_data['template'] = 'pages/nice.html'
          response = c.post('/admin/pages/page/add/', page_data)
-        response = c.get('/admin/pages/page/1/')
+        page = Page.objects.all()[0]
+        response = c.get('/admin/pages/page/%d/' % page.id)
          self.assertEqual(response.status_code, 200)

          self.assertContains(response, 'name="right-column"', 1)
@@ -298,6 +303,8 @@
          # the redirect tell that the page has been create correctly
          self.assertRedirects(response, '/admin/pages/page/')

+        page = Page.objects.all()[0]
+
          response = c.post('/admin/pages/page/add/', page_data)
          # we cannot create 2 root page with the same slug
          # this assert test that the creation fail as attended
@@ -306,10 +313,10 @@
          response = c.get('/pages/same-slug/')

          page1 =  
Content.objects.get_content_slug_by_slug(page_data['slug']).page
-        self.assertEqual(page1.id, 1)
+        self.assertEqual(page1.id, page.id)

          page_data['title'] = 'children title'
-        page_data['target'] = 1
+        page_data['target'] = page1.id
          page_data['position'] = 'first-child'
          response = c.post('/admin/pages/page/add/', page_data)
          self.assertRedirects(response, '/admin/pages/page/')

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pinax-updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/pinax-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to