Author: batiste.bieler
Date: Wed Feb 25 12:37:54 2009
New Revision: 368

Modified:
    trunk/example/settings.py
    trunk/pages/models.py
    trunk/pages/settings.py
    trunk/pages/tests.py
    trunk/pages/utils.py

Log:
Code cleanup, fix issue 58

Modified: trunk/example/settings.py
==============================================================================
--- trunk/example/settings.py   (original)
+++ trunk/example/settings.py   Wed Feb 25 12:37:54 2009
@@ -106,6 +106,8 @@
  ]

  gettext_noop = lambda s: s
+# language can be 5 characters long but  only the 2 first characters will  
be used
+# see page.utils.get_language_from_request
  LANGUAGES = (
      ('fr', gettext_noop('French')),
      ('de', gettext_noop('German')),

Modified: trunk/pages/models.py
==============================================================================
--- trunk/pages/models.py       (original)
+++ trunk/pages/models.py       Wed Feb 25 12:37:54 2009
@@ -125,7 +125,7 @@
          languages = []
          for lang in settings.PAGE_LANGUAGES:
              # one request by language to avoid to get huge revisions
-            if Content.objects.filter(language=lang[0], page=self,  
type="slug").latest.count() > 0:
+            if Content.objects.filter(language=lang[0], page=self,  
type="slug").count() > 0:
                languages.append(lang[0])

          cache.set(self.PAGE_LANGUAGES_KEY % (self.id), languages)
@@ -275,7 +275,9 @@

  class Content(models.Model):
      """A block of content, tied to a page, for a particular language"""
-    language = models.CharField(_('language'), max_length=3, blank=False)
+
+    # languages could have five characters : Brazilian Portuguese is pt-br
+    language = models.CharField(_('language'), max_length=5, blank=False)
      body = models.TextField(_('body'))
      type = models.CharField(_('type'), max_length=100, blank=False)
      page = models.ForeignKey(Page, verbose_name=_('page'))

Modified: trunk/pages/settings.py
==============================================================================
--- trunk/pages/settings.py     (original)
+++ trunk/pages/settings.py     Wed Feb 25 12:37:54 2009
@@ -36,7 +36,7 @@
  PAGE_LANGUAGES = getattr(settings, 'PAGE_LANGUAGES', settings.LANGUAGES)

  # Defines which language should be used by default and falls back to  
LANGUAGE_CODE
-PAGE_DEFAULT_LANGUAGE = getattr(settings, 'PAGE_DEFAULT_LANGUAGE',  
settings.LANGUAGE_CODE)[:2]
+PAGE_DEFAULT_LANGUAGE = getattr(settings, 'PAGE_DEFAULT_LANGUAGE',  
settings.LANGUAGE_CODE)

  # Defines how long page content should be cached, including navigation and  
admin menu.
  PAGE_CONTENT_CACHE_DURATION =  
getattr(settings, 'PAGE_CONTENT_CACHE_DURATION', False)

Modified: trunk/pages/tests.py
==============================================================================
--- trunk/pages/tests.py        (original)
+++ trunk/pages/tests.py        Wed Feb 25 12:37:54 2009
@@ -170,5 +170,33 @@
          self.test_05_edit_page()
          self.test_04_details_view()

+    def test_07_languages(self):
+        """
+        Test post a page with different languages
+        and test that the default view works correctly
+        """
+        c = Client()
+        user = c.login(username= 'batiste', password='b')
+        page_data = self.get_new_page_data()
+        page_data["title"] = 'english title'
+        response = c.post('/admin/pages/page/add/', page_data)
+        page_data["language"] = 'fr'
+        page_data["title"] = 'french title'
+        response = c.post('/admin/pages/page/1/', page_data)
+        self.assertRedirects(response, '/admin/pages/page/')
+        page = Page.objects.get(id=1)
+
+        c = Client()
+        c.cookies["django_language"] = 'en'
+        response = c.get('/pages/')
+        self.assertContains(response, 'english title')
+        self.assertNotContains(response, 'french title')
+
+        c = Client()
+        c.cookies["django_language"] = 'fr'
+        response = c.get('/pages/')
+        self.assertContains(response, 'french title')
+        self.assertContains(response, 'lang="fr"')
+        self.assertNotContains(response, 'english title')



Modified: trunk/pages/utils.py
==============================================================================
--- trunk/pages/utils.py        (original)
+++ trunk/pages/utils.py        Wed Feb 25 12:37:54 2009
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
  from django.shortcuts import render_to_response
  from django.template import RequestContext
  from django.db.models import signals
@@ -47,28 +48,21 @@
          return obj.get_template()
      return settings.DEFAULT_PAGE_TEMPLATE

-def get_language_in_settings(iso):
-    for language in settings.PAGE_LANGUAGES:
-        if language[0][:2] == iso:
-            return iso
-    return None
-
  def get_language_from_request(request, current_page=None):
      """
      Return the most obvious language according the request
      """
-    language = get_language_in_settings(request.REQUEST.get('language',  
None))
-    if language is None:
-        language = getattr(request, 'LANGUAGE_CODE', None)
-    if language is None:
+    language = request.LANGUAGE_CODE[:2]
+    # if client language is not available
+    if language is None and current_page:
          # in last resort, get the first language available in the page
-        if current_page:
-            languages = current_page.get_languages()
-            if len(languages) > 0:
-                language = languages[0]
+        languages = current_page.get_languages()
+        if len(languages) > 0:
+            language = languages[0]
+    # if everything fails, use this :
      if language is None:
          language = settings.PAGE_DEFAULT_LANGUAGE
-    return language[:2]
+    return language

  def has_page_add_permission(request, page=None):
      """
@@ -82,52 +76,3 @@
          if permission == "All":
              return True
      return False
-
-def get_site_from_request(request, check_subdomain=True):
-    """
-    Returns the ``Site`` which matches the host name retreived from
-    ``request``.
-
-    If no match is found and ``check_subdomain`` is ``True``, the sites are
-    searched again for sub-domain matches.
-
-    If still no match, or if more than one ``Site`` matched the host name,  
a
-    ``RequestSite`` object is returned.
-
-    The returned ``Site`` or ``RequestSite`` object is cached for the host
-    name retrieved from ``request``.
-    """
-    host = request.get_host().lower()
-    if host in SITE_CACHE:
-        # The host name was found in cache, return it. A cache value
-        # of None means that a RequestSite should just be used.
-        return SITE_CACHE[host] or RequestSite(request)
-    matches = Site.objects.filter(domain__iexact=host)
-    # We use len rather than count to save a second query if there was only
-    # one matching Site
-    count = len(matches)
-    if not count and check_subdomain:
-        matches = []
-        for site in Site.objects.all():
-            if host.endswith(site.domain.lower()):
-                matches.append(site)
-        count = len(matches)
-    if count == 1:
-        # Return the single matching Site
-        site = matches[0]
-    else:
-        site = None
-    # Cache the site (caching None means we should use RequestSite).
-    SITE_CACHE[host] = site
-    # Return site, falling back to just using a RequestSite.
-    return site or RequestSite(request)
-
-def clear_site_cache(sender, instance, **kwargs):
-    """
-    Clears site cache in case a Site instance has been created or an  
existing
-    is deleted. That's required to use RequestSite objects properly.
-    """
-    if instance.domain in SITE_CACHE:
-        del SITE_CACHE[instance.domain]
-signals.pre_delete.connect(clear_site_cache, sender=Site)
-signals.post_save.connect(clear_site_cache, sender=Site)

--~--~---------~--~----~------------~-------~--~----~
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