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

Reply via email to