[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):