[Products.Silva][Sylvain Viollon] More code moving around (quota...

[email protected] Tue, 22 Oct 2013 12:05:58 +0200
Newsgroups gmane.comp.web.zope.silva.cvs
Message-ID <[email protected]>
author:    Sylvain Viollon
date:      Tue Oct 22 12:05:55 2013 +0200
revision:  11870:ff728773db79 in Products.Silva
branch:    2.4
details:   https://hg.infrae.com/Products.Silva?cmd=changeset;node=ff728773db79
modified:  Products/Silva/Asset.py Products/Silva/Folder/content.py Products/Silva/QuotaObject.py Products/Silva/SilvaObject.py Products/Silva/silvaxml/xmlimport.py
added:     Products/Silva/QuotaObject.py
removed:   
log:       More code moving around (quota goes into its own file).


diffstat:

 Products/Silva/Asset.py              |    3 +-
 Products/Silva/Folder/content.py     |   40 +-------
 Products/Silva/QuotaObject.py        |  161 +++++++++++++++++++++++++++++++++++
 Products/Silva/SilvaObject.py        |  117 +-------------------------
 Products/Silva/silvaxml/xmlimport.py |   10 +-
 5 files changed, 174 insertions(+), 157 deletions(-)

diffs (426 lines):

diff -r 77bcc4d9b129 -r ff728773db79 Products/Silva/Asset.py
--- a/Products/Silva/Asset.py	Tue Oct 22 11:43:03 2013 +0200
+++ b/Products/Silva/Asset.py	Tue Oct 22 12:05:55 2013 +0200
@@ -11,7 +11,8 @@
 from OFS import SimpleItem
 
 from Products.Silva import SilvaPermissions
-from Products.Silva.SilvaObject import ViewableObject, QuotaObject
+from Products.Silva.SilvaObject import ViewableObject
+from Products.Silva.QuotaObject import QuotaObject
 from Products.Silva.Publishable import NonPublishable
 from Products.Silva.mangle import Bytes
 
diff -r 77bcc4d9b129 -r ff728773db79 Products/Silva/Folder/content.py
--- a/Products/Silva/Folder/content.py	Tue Oct 22 11:43:03 2013 +0200
+++ b/Products/Silva/Folder/content.py	Tue Oct 22 12:05:55 2013 +0200
@@ -6,7 +6,6 @@
 import logging
 
 from five import grok
-from zope.component import queryUtility
 from zope.container.contained import notifyContainerModified
 from zope.event import notify
 from zope.lifecycleevent import ObjectRemovedEvent
@@ -18,21 +17,19 @@
 from OFS.Folder import Folder as BaseFolder
 from OFS.event import ObjectWillBeRemovedEvent
 from OFS.subscribers import compatibilityCall
-import OFS.interfaces
 
 # Silva
-from Products.Silva.SilvaObject import QuotaContainer
+from Products.Silva import SilvaPermissions
+from Products.Silva import helpers
 from Products.Silva.ExtensionRegistry import meta_types_for_interface
 from Products.Silva.Publishable import Publishable
-from Products.Silva import SilvaPermissions
-from Products.Silva import helpers
+from Products.Silva.QuotaObject import QuotaContainer
 
 from silva.core.interfaces import (
     INonPublishable, IPublishable, IOrderManager,
-    IVersionedContent, IFolder, IRoot, IContent)
+    IVersionedContent, IFolder, IContent)
 from silva.core import conf as silvaconf
 from silva.core.interfaces import ContentError
-from silva.core.services.interfaces import IExtensionService
 from silva.translations import translate as _
 
 logger = logging.getLogger('silva.core')
@@ -303,33 +300,4 @@
 InitializeClass(Folder)
 
 
[email protected](IFolder, OFS.interfaces.IObjectWillBeMovedEvent)
-def folder_moved_update_used_quota(content, event):
-    """Event called on folder, when they are moved, we want to update
-    the quota on parents folders.
-    """
-    if content != event.object or IRoot.providedBy(content):
-        # Root is being destroyed, we don't care about quota anymore.
-        return
 
-    if event.newParent is event.oldParent:
-        # For rename event, we don't need to do something.
-        return
-
-    service = queryUtility(IExtensionService)
-    if service is None:
-        return
-    verify = service.get_quota_subsystem_status()
-    if verify is None:
-        # Quota accounting is disabled.
-        return
-
-    size = content.used_space
-    if not size:
-        return
-    if event.oldParent:
-        event.oldParent.update_used_quota(-size, verify)
-    if event.newParent:
-        event.newParent.update_used_quota(size, verify)
-
-
diff -r 77bcc4d9b129 -r ff728773db79 Products/Silva/QuotaObject.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Products/Silva/QuotaObject.py	Tue Oct 22 12:05:55 2013 +0200
@@ -0,0 +1,161 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2002-2013 Infrae. All rights reserved.
+# See also LICENSE.txt
+
+# Zope 3
+from five import grok
+from zope.component import queryUtility
+from zope.lifecycleevent.interfaces import IObjectCreatedEvent
+from zope.lifecycleevent.interfaces import IObjectModifiedEvent
+
+# Zope 2
+from AccessControl import ClassSecurityInfo
+from Acquisition import aq_inner, aq_parent
+from App.class_init import InitializeClass
+from OFS.interfaces import IObjectWillBeMovedEvent
+
+# Silva
+from Products.Silva import SilvaPermissions
+from silva.core.interfaces import IRoot
+from silva.core.interfaces import IQuotaContainer, IQuotaObject
+from silva.core.interfaces import IContentImporter
+from silva.core.services.interfaces import IExtensionService
+
+
+class QuotaObject(object):
+    """A content that uses some of the site quota
+    """
+    security = ClassSecurityInfo()
+    _old_size = 0               # Old size of the object.
+
+    security.declareProtected(
+        SilvaPermissions.AccessContentsInformation, 'get_quota_usage')
+    def get_quota_usage(self):
+        return -1
+
+    security.declareProtected(
+        SilvaPermissions.ChangeSilvaContent, 'update_quota')
+    def update_quota(self):
+        parent = aq_parent(self)
+        if IQuotaContainer.providedBy(parent):
+            service = queryUtility(IExtensionService)
+            if service is None:
+                return
+            verify = service.get_quota_subsystem_status()
+            if verify is None:
+                return
+
+            # Every content must be inside a container (unless they
+            # are inside an image ...).
+            new_size = self.get_quota_usage()
+            if new_size < 0:
+                # Broken quota usage
+                return
+            delta = new_size - self._old_size
+            if delta:
+                parent.update_used_space(delta, verify)
+                self._old_size = new_size
+
+    security.declareProtected(
+        SilvaPermissions.ChangeSilvaContent, 'reset_quota')
+    def reset_quota(self):
+        self._old_size = max(0, self.get_quota_usage())
+        return self._old_size
+
+InitializeClass(QuotaObject)
+
+
+class QuotaContainer(object):
+    """A container that aggregate multiple quota objects
+    """
+    security = ClassSecurityInfo()
+    used_space = 0
+
+    def _verify_quota(self):
+        # Hook to check quota. Do nothing by default.
+        pass
+
+    security.declarePrivate('update_used_space')
+    def update_used_space(self, delta, verify=True):
+        if IContentImporter.providedBy(aq_parent(self)):
+            aq_inner(self).update_used_space(delta, verify)
+            return
+
+        self.used_space += delta
+        # If we add stuff, check we're not over quota.
+        if verify and delta > 0:
+            self._verify_quota()
+
+        if not IRoot.providedBy(self):
+            container = aq_parent(self)
+            if container is not None:
+                container.update_used_space(delta, verify)
+
+InitializeClass(QuotaContainer)
+
+
[email protected](IQuotaObject, IObjectWillBeMovedEvent)
+def content_moved_update_quota(content, event):
+    """Event called on a quotable when they are moved to update quota
+    on parents folders.
+    """
+    if content != event.object or event.newParent is event.oldParent:
+        return
+
+    service = queryUtility(IExtensionService)
+    if service is None:
+        return
+
+    verify = service.get_quota_subsystem_status()
+    if verify is None:
+        # Quota accouting is disabled
+        return
+
+    size = content.get_quota_usage()
+    if not size or size < 0:
+        return
+
+    if event.oldParent and IQuotaContainer.providedBy(event.oldParent):
+        event.oldParent.update_used_space(-size, verify)
+    if event.newParent and IQuotaContainer.providedBy(event.newParent):
+        event.newParent.update_used_space(size, verify)
+
+
[email protected](IQuotaContainer, IObjectWillBeMovedEvent)
+def container_moved_update_used_space(content, event):
+    """Event called on folder, when they are moved, we want to update
+    the quota on parents folders.
+    """
+    if content != event.object or IRoot.providedBy(content):
+        # Root is being destroyed, we don't care about quota anymore.
+        return
+
+    if event.newParent is event.oldParent:
+        # For rename event, we don't need to do something.
+        return
+
+    service = queryUtility(IExtensionService)
+    if service is None:
+        return
+    verify = service.get_quota_subsystem_status()
+    if verify is None:
+        # Quota accounting is disabled.
+        return
+
+    size = content.used_space
+    if not size or size < 0:
+        return
+    if event.oldParent and IQuotaContainer.providedBy(event.oldParent):
+        event.oldParent.update_used_space(-size, verify)
+    if event.newParent and IQuotaContainer.providedBy(event.newParent):
+        event.newParent.update_used_space(size, verify)
+
+
[email protected](IQuotaObject, IObjectCreatedEvent)
+def update_quota_created(content, event):
+    content.update_quota()
+
+
[email protected](IQuotaObject, IObjectModifiedEvent)
+def update_quota_modified(content, event):
+    content.update_quota()
diff -r 77bcc4d9b129 -r ff728773db79 Products/Silva/SilvaObject.py
--- a/Products/Silva/SilvaObject.py	Tue Oct 22 11:43:03 2013 +0200
+++ b/Products/Silva/SilvaObject.py	Tue Oct 22 12:05:55 2013 +0200
@@ -4,7 +4,7 @@
 
 # Zope 3
 from five import grok
-from zope.component import getUtility, queryUtility
+from zope.component import getUtility
 from zope.container.interfaces import IContainerModifiedEvent
 from zope.lifecycleevent.interfaces import IObjectAddedEvent
 from zope.lifecycleevent.interfaces import IObjectCopiedEvent
@@ -15,7 +15,6 @@
 
 # Zope 2
 from AccessControl import ClassSecurityInfo
-from Acquisition import aq_inner, aq_parent
 from App.class_init import InitializeClass
 from OFS.interfaces import IObjectClonedEvent
 from OFS.interfaces import IObjectWillBeAddedEvent
@@ -26,12 +25,9 @@
 from Products.Silva.Security import Security, ChangesTask
 
 # Silva adapters
-from silva.core.interfaces import ISilvaObject, IVersionedContent, IRoot
-from silva.core.interfaces import IQuotaContainer, IQuotaObject
-from silva.core.interfaces import IContentImporter
+from silva.core.interfaces import ISilvaObject, IVersionedContent
 from silva.core.services.interfaces import ICataloging
 from silva.core.services.interfaces import IMetadataService
-from silva.core.services.interfaces import IExtensionService
 
 
 class TitledObject(object):
@@ -184,105 +180,6 @@
 InitializeClass(ViewableObject)
 
 
-class QuotaObject(object):
-    """A content that uses some of the site quota
-    """
-    security = ClassSecurityInfo()
-    _old_size = 0               # Old size of the object.
-
-    security.declareProtected(
-        SilvaPermissions.AccessContentsInformation, 'get_quota_usage')
-    def get_quota_usage(self):
-        return -1
-
-    security.declareProtected(
-        SilvaPermissions.ChangeSilvaContent, 'update_quota')
-    def update_quota(self):
-        parent = aq_parent(self)
-        if IQuotaContainer.providedBy(parent):
-            service = queryUtility(IExtensionService)
-            if service is None:
-                return
-            verify = service.get_quota_subsystem_status()
-            if verify is None:
-                return
-
-            # Every content must be inside a container (unless they
-            # are inside an image ...).
-            new_size = self.get_quota_usage()
-            if new_size < 0:
-                # Broken quota usage
-                return
-            delta = new_size - self._old_size
-            if delta:
-                parent.update_used_quota(delta, verify)
-                self._old_size = new_size
-
-    security.declareProtected(
-        SilvaPermissions.ChangeSilvaContent, 'reset_quota')
-    def reset_quota(self):
-        self._old_size = max(0, self.get_quota_usage())
-        return self._old_size
-
-InitializeClass(QuotaObject)
-
-
-class QuotaContainer(object):
-    """A container that aggregate multiple quota objects
-    """
-    security = ClassSecurityInfo()
-    used_space = 0
-
-    def _verify_quota(self):
-        # Hook to check quota. Do nothing by default.
-        pass
-
-    security.declarePrivate('update_used_quota')
-    def update_used_quota(self, delta, verify=True):
-        if IContentImporter.providedBy(aq_parent(self)):
-            aq_inner(self).update_used_quota(delta, verify)
-            return
-
-        self.used_space += delta
-        # If we add stuff, check we're not over quota.
-        if verify and delta > 0:
-            self._verify_quota()
-
-        if not IRoot.providedBy(self):
-            container = aq_parent(self)
-            if container is not None:
-                container.update_used_quota(delta, verify)
-
-InitializeClass(QuotaContainer)
-
-
[email protected](IQuotaObject, IObjectWillBeMovedEvent)
-def update_moved_content_quota(content, event):
-    """Event called on a quotable when they are moved to update quota
-    on parents folders.
-    """
-    if content != event.object or event.newParent is event.oldParent:
-        return
-
-    service = queryUtility(IExtensionService)
-    if service is None:
-        return
-
-    verify = service.get_quota_subsystem_status()
-    if verify is None:
-        # Quota accouting is disabled
-        return
-
-    size = content.get_quota_usage()
-    if not size or size < 0:
-        return
-
-    if event.oldParent and IQuotaContainer.providedBy(event.oldParent):
-        event.oldParent.update_used_quota(-size, verify)
-    if event.newParent and IQuotaContainer.providedBy(event.newParent):
-        event.newParent.update_used_quota(size, verify)
-
-
 @grok.subscribe(ISilvaObject, IObjectCreatedEvent)
 @grok.subscribe(ISilvaObject, IObjectClonedEvent)
 def content_created(content, event):
@@ -311,16 +208,6 @@
     ICataloging(content).reindex()
 
 
[email protected](IQuotaObject, IObjectCreatedEvent)
-def update_quota_created(content, event):
-    content.update_quota()
-
-
[email protected](IQuotaObject, IObjectModifiedEvent)
-def update_quota_modified(content, event):
-    content.update_quota()
-
-
 @grok.subscribe(ISilvaObject, IObjectMovedEvent)
 def index_moved_content(content, event):
     """We index all added content (due to a move).
diff -r 77bcc4d9b129 -r ff728773db79 Products/Silva/silvaxml/xmlimport.py
--- a/Products/Silva/silvaxml/xmlimport.py	Tue Oct 22 11:43:03 2013 +0200
+++ b/Products/Silva/silvaxml/xmlimport.py	Tue Oct 22 12:05:55 2013 +0200
@@ -22,11 +22,11 @@
     ICataloging(content).index()
 
 
[email protected](interfaces.IQuotaObject, IContentImported)
-def update_quota_import_content(content, event):
-    """Update the quota of imported content (to be sure).
-    """
-    content.update_quota()
+# @grok.subscribe(interfaces.IQuotaObject, IContentImported)
+# def update_quota_import_content(content, event):
+#     """Update the quota of imported content (to be sure).
+#     """
+#     content.update_quota()
 
 
 class FolderHandler(handlers.SilvaContainerHandler):