Author: batiste.bieler
Date: Sun Feb 22 08:54:28 2009
New Revision: 359
Modified:
trunk/example/fixtures/initial_data.json
trunk/pages/admin/__init__.py
trunk/pages/managers.py
trunk/pages/models.py
trunk/pages/settings.py
trunk/pages/templatetags/pages_tags.py
trunk/pages/tests.py
trunk/pages/views.py
Log:
Hugh modifications to be able to disable the site framework. Please test
this. Thanks.
Modified: trunk/example/fixtures/initial_data.json
==============================================================================
--- trunk/example/fixtures/initial_data.json (original)
+++ trunk/example/fixtures/initial_data.json Sun Feb 22 08:54:28 2009
@@ -12,7 +12,15 @@
"model": "sites.site",
"fields": {
"domain": "testserver",
- "name": "Test server"
+ "name": "Test server 1"
+ }
+ },
+ {
+ "pk": 3,
+ "model": "sites.site",
+ "fields": {
+ "domain": "testserver2",
+ "name": "Test server 2"
}
}
]
Modified: trunk/pages/admin/__init__.py
==============================================================================
--- trunk/pages/admin/__init__.py (original)
+++ trunk/pages/admin/__init__.py Sun Feb 22 08:54:28 2009
@@ -28,7 +28,11 @@
exclude = ['author', 'parent']
# these mandatory fields are not versioned
mandatory_placeholders = ('title', 'slug')
- general_fields = ['title', 'slug', 'status', 'sites']
+ general_fields = ['title', 'slug', 'status']
+
+ # TODO: find solution to do this dynamically
+ #if getattr(settings, 'PAGE_USE_SITE_ID'):
+ general_fields.append('sites')
insert_point = general_fields.index('status') + 1
if settings.PAGE_TAGGING:
@@ -113,6 +117,7 @@
Content object.
"""
obj.save()
+
language = form.cleaned_data['language']
target = request.GET.get('target', None)
position = request.GET.get('position', None)
@@ -352,6 +357,7 @@
return self.list_pages(request,
template_name='admin/pages/page/change_list_table.html')
return HttpResponseRedirect('../../')
+
admin.site.register(Page, PageAdmin)
class ContentAdmin(admin.ModelAdmin):
Modified: trunk/pages/managers.py
==============================================================================
--- trunk/pages/managers.py (original)
+++ trunk/pages/managers.py Sun Feb 22 08:54:28 2009
@@ -10,17 +10,19 @@
from pages import settings
class PageManager(models.Manager):
-
- def on_site(self, site=None):
- if hasattr(site, 'domain'):
- return self.filter(**{'sites__domain__exact': site.domain})
+
+ def on_site(self, site_id=None):
+ if settings.PAGE_USE_SITE_ID:
+ if not site_id:
+ site_id = settings.SITE_ID
+ return self.filter(sites=site_id)
return self
- def root(self, site=None):
+ def root(self):
"""
Return a queryset with pages that don't have parents, a.k.a. root.
"""
- return self.on_site(site).filter(parent__isnull=True)
+ return self.filter(parent__isnull=True)
def valid_targets(self, page_id, request, perms, page=None):
"""
@@ -38,16 +40,16 @@
else:
return self.exclude(id__in=exclude_list)
- def navigation(self, site=None):
- return self.root(site).filter(status=self.model.PUBLISHED)
+ def navigation(self):
+ return
self.on_site().filter(status=self.model.PUBLISHED).filter(parent__isnull=True)
- def hidden(self, site=None):
- return self.on_site(site).filter(status=self.model.HIDDEN)
+ def hidden(self):
+ return self.on_site().filter(status=self.model.HIDDEN)
- def published(self, site=None):
+ def published(self):
pub = itertools.chain(
- self.on_site(site).filter(status=self.model.PUBLISHED),
- self.hidden(site)
+ self.on_site().filter(status=self.model.PUBLISHED),
+ self.hidden()
)
if settings.PAGE_SHOW_START_DATE:
@@ -60,14 +62,14 @@
)
return pub
- def drafts(self, site=None):
- pub = self.on_site(site).filter(status=self.model.DRAFT)
+ def drafts(self):
+ pub = self.on_site().filter(status=self.model.DRAFT)
if settings.PAGE_SHOW_START_DATE:
pub = pub.filter(publication_date__gte=datetime.now())
return pub
- def expired(self, site=None):
- return self.on_site(site).filter(
+ def expired(self):
+ return self.on_site().filter(
publication_end_date__lte=datetime.now())
class ContentManager(models.Manager):
@@ -137,19 +139,23 @@
pass
return None
- def get_content_slug_by_slug(self, slug, site=None,
latest_by='creation_date'):
+ def get_content_slug_by_slug(self, slug, site_id=None,
latest_by='creation_date'):
"""
Returns the latest Content slug object that match the given slug
for
the current site domain.
"""
- if not site:
- site = Site.objects.get_current()
try:
- content = self.filter(
- type='slug',
- body=slug,
- page__sites__domain=site.domain,
- ).select_related('page').latest(latest_by)
+ if settings.PAGE_USE_SITE_ID:
+ content = self.filter(
+ type='slug',
+ body=slug,
+ page__sites__id=settings.SITE_ID,
+ ).select_related('page').latest(latest_by)
+ else:
+ content = self.filter(
+ type='slug',
+ body=slug,
+ ).select_related('page').latest(latest_by)
except self.model.DoesNotExist:
return None
else:
Modified: trunk/pages/models.py
==============================================================================
--- trunk/pages/models.py (original)
+++ trunk/pages/models.py Sun Feb 22 08:54:28 2009
@@ -52,6 +52,8 @@
status = models.IntegerField(_('status'), choices=STATUSES,
default=DRAFT)
template = models.CharField(_('template'), max_length=100, null=True,
blank=True)
+
+ # Disable could make site tests fail
sites = models.ManyToManyField(Site, default=[settings.SITE_ID],
help_text=_('The site(s) the page is accessible at.'),
verbose_name=_('sites'))
Modified: trunk/pages/settings.py
==============================================================================
--- trunk/pages/settings.py (original)
+++ trunk/pages/settings.py Sun Feb 22 08:54:28 2009
@@ -44,6 +44,9 @@
# The id of default Site instance to be used for multisite purposes.
SITE_ID = getattr(settings, 'SITE_ID', 1)
+# You can say if you don't want to use the site framework by default
+PAGE_USE_SITE_ID = getattr(settings, 'PAGE_USE_SITE_ID', True)
+
# You can exclude some placeholder from the revision process
PAGE_CONTENT_REVISION_EXCLUDE_LIST =
getattr(settings, 'PAGE_CONTENT_REVISION_EXCLUDE_LIST', ())
Modified: trunk/pages/templatetags/pages_tags.py
==============================================================================
--- trunk/pages/templatetags/pages_tags.py (original)
+++ trunk/pages/templatetags/pages_tags.py Sun Feb 22 08:54:28 2009
@@ -15,15 +15,18 @@
PLACEHOLDER_ERROR = _("[Placeholder %(name)s had syntax error: %(error)s]")
-# TODO: move that into the model
-def get_page_children_for_site(page, site):
- return page.get_children().filter(sites__domain=site.domain)
+# TODO: move that into the manager
+def get_page_children(page):
+ children = page.get_children()
+ if settings.PAGE_USE_SITE_ID:
+ children = children.filter(sites=settings.SITE_ID)
+ return children
def pages_menu(context, page, url='/'):
"""render a nested list of all children of the pages"""
request = context['request']
- site = request.site
- children = get_page_children_for_site(page, site)
+ site_id = None
+ children = get_page_children(page)
PAGE_CONTENT_CACHE_DURATION = settings.PAGE_CONTENT_CACHE_DURATION
lang = get_language_from_request(request)
if 'current_page' in context:
@@ -39,11 +42,7 @@
request = context['request']
site = request.site
- # TODO: is it worthwhile to have this cached?
- #children = cache.get(Page.PAGE_CHILDREN_KEY % (page.id, site.id))
- #if children is None:
- children = get_page_children_for_site(page, site)
- #cache.set(Page.PAGE_CHILDREN_KEY % (page.id, site.id), children)
+ children = get_page_children(page)
if 'current_page' in context:
current_page = context['current_page']
Modified: trunk/pages/tests.py
==============================================================================
--- trunk/pages/tests.py (original)
+++ trunk/pages/tests.py Sun Feb 22 08:54:28 2009
@@ -1,15 +1,24 @@
+# -*- coding: utf-8 -*-
from django.test import TestCase
import settings
from pages.models import *
from django.test.client import Client
from django.template import TemplateDoesNotExist
-page_data = {'title':'test page', 'slug':'test-page-1', 'language':'en',
- 'sites':[2], 'status':Page.PUBLISHED}
+
+
class PagesTestCase(TestCase):
fixtures = ['tests.json']
+ counter = 1
+
+ def get_new_page_data(self):
+ page_data = {'title':'test page %d' % self.counter,
+ 'slug':'test-page-%d' % self.counter, 'language':'en',
+ 'sites':[2], 'status':Page.PUBLISHED}
+ self.counter = self.counter + 1
+ return page_data
def test_01_add_page(self):
"""
@@ -25,12 +34,13 @@
"""
Test that a page can be created via the admin
"""
+ setattr(settings, "SITE_ID", 2)
c = Client()
c.login(username= 'batiste', password='b')
+ page_data = self.get_new_page_data()
response = c.post('/admin/pages/page/add/', page_data)
self.assertRedirects(response, '/admin/pages/page/')
- site = Site.objects.get(id=2)
- slug_content =
Content.objects.get_content_slug_by_slug(page_data['slug'], site)
+ slug_content =
Content.objects.get_content_slug_by_slug(page_data['slug'])
assert(slug_content is not None)
page = slug_content.page
assert(page.title() == page_data['title'])
@@ -40,21 +50,24 @@
"""
Test a slug collision
"""
+ setattr(settings, "SITE_ID", 2)
+
c = Client()
- site = Site.objects.get(id=2)
c.login(username= 'batiste', password='b')
+ page_data = self.get_new_page_data()
response = c.post('/admin/pages/page/add/', page_data)
self.assertRedirects(response, '/admin/pages/page/')
- page1 =
Content.objects.get_content_slug_by_slug(page_data['slug'], site).page
+
+ page1 =
Content.objects.get_content_slug_by_slug(page_data['slug']).page
response = c.post('/admin/pages/page/add/', page_data)
- assert(response.status_code == 200)
+ self.assertEqual(response.status_code, 200)
settings.PAGE_UNIQUE_SLUG_REQUIRED = False
response = c.post('/admin/pages/page/add/', page_data)
self.assertRedirects(response, '/admin/pages/page/')
- page2 =
Content.objects.get_content_slug_by_slug(page_data['slug'], site).page
- assert(page1.id != page2.id)
+ page2 =
Content.objects.get_content_slug_by_slug(page_data['slug']).page
+ self.assertNotEqual(page1.id, page2.id)
def test_04_details_view(self):
"""
@@ -69,6 +82,7 @@
if e.args != ('404.html',):
raise
+ page_data = self.get_new_page_data()
page_data['status'] = Page.DRAFT
response = c.post('/admin/pages/page/add/', page_data)
try:
@@ -77,27 +91,88 @@
if e.args != ('404.html',):
raise
+ page_data = self.get_new_page_data()
page_data['status'] = Page.PUBLISHED
page_data['slug'] = 'test-page-2'
response = c.post('/admin/pages/page/add/', page_data)
response = c.get('/admin/pages/page/')
response = c.get('/pages/')
- assert(response.status_code == 200)
+ self.assertEqual(response.status_code, 200)
- def test_02_edit_page(self):
+ def test_05_edit_page(self):
"""
Test that a page can edited via the admin
"""
c = Client()
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/')
- assert(response.status_code == 200)
+ self.assertEqual(response.status_code, 200)
page_data['title'] = 'changed title'
response = c.post('/admin/pages/page/1/', page_data)
self.assertRedirects(response, '/admin/pages/page/')
page = Page.objects.get(id=1)
assert(page.title() == 'changed title')
+
+ def test_06_site_framework(self):
+ """
+ Test the site framework, and test if it's possible to disable it
+ """
+ setattr(settings, "SITE_ID", 2)
+ setattr(settings, "PAGE_USE_SITE_ID", True)
+ c = Client()
+ c.login(username= 'batiste', password='b')
+ page_data = self.get_new_page_data()
+ page_data["sites"] = [2]
+ response = c.post('/admin/pages/page/add/', page_data)
+ self.assertRedirects(response, '/admin/pages/page/')
+
+ page =
Content.objects.get_content_slug_by_slug(page_data['slug']).page
+ self.assertEqual(page.sites.count(), 1)
+ self.assertEqual(page.sites.all()[0].id, 2)
+
+ page_data = self.get_new_page_data()
+ page_data["sites"] = [3]
+ response = c.post('/admin/pages/page/add/', page_data)
+ self.assertRedirects(response, '/admin/pages/page/')
+
+ # we cannot get the data posted on another site (why not after
all?)
+ content =
Content.objects.get_content_slug_by_slug(page_data['slug'])
+ self.assertEqual(content, None)
+
+ setattr(settings, "SITE_ID", 3)
+ page =
Content.objects.get_content_slug_by_slug(page_data['slug']).page
+ self.assertEqual(page.sites.count(), 1)
+ self.assertEqual(page.sites.all()[0].id, 3)
+
+ # with param
+ self.assertEqual(Page.objects.on_site(2).count(), 1)
+ self.assertEqual(Page.objects.on_site(3).count(), 1)
+
+ # without param
+ self.assertEqual(Page.objects.on_site().count(), 1)
+ setattr(settings, "SITE_ID", 2)
+ self.assertEqual(Page.objects.on_site().count(), 1)
+
+ page_data = self.get_new_page_data()
+ page_data["sites"] = [2, 3]
+ response = c.post('/admin/pages/page/add/', page_data)
+ self.assertRedirects(response, '/admin/pages/page/')
+
+ self.assertEqual(Page.objects.on_site(3).count(), 2)
+ self.assertEqual(Page.objects.on_site(2).count(), 2)
+ self.assertEqual(Page.objects.on_site().count(), 2)
+
+ setattr(settings, "PAGE_USE_SITE_ID", False)
+
+ # we should get everything
+ self.assertEqual(Page.objects.on_site().count(), 3)
+
+ self.test_02_create_page()
+ self.test_05_edit_page()
+ self.test_04_details_view()
+
Modified: trunk/pages/views.py
==============================================================================
--- trunk/pages/views.py (original)
+++ trunk/pages/views.py Sun Feb 22 08:54:28 2009
@@ -15,15 +15,19 @@
All is rendered with the current page's template.
"""
lang = get_language_from_request(request)
- site = request.site
- pages = Page.objects.navigation(site).order_by("tree_id")
+ site_id = None
+ """if request.site:
+ print request.site.name
+ print request.site.id"""
+
+ pages = Page.objects.navigation().order_by("tree_id")
if pages:
if page_id:
current_page = get_object_or_404(
- Page.objects.published(site), pk=page_id)
+ Page.objects.published(), pk=page_id)
elif slug:
- slug_content = Content.objects.get_content_slug_by_slug(slug,
site)
+ slug_content = Content.objects.get_content_slug_by_slug(slug)
if slug_content and \
slug_content.page.calculated_status in (
Page.PUBLISHED, Page.HIDDEN):
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---