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