Commit 279e67a9 authored by Arnaud Fontaine's avatar Arnaud Fontaine

Add Component interface.

parent 77a158d3
......@@ -31,11 +31,16 @@ from Products.ERP5Type.mixin.component import ComponentMixin
from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions
import zope.interface
from Products.ERP5Type.interfaces.component import IComponent
class DocumentComponent(ComponentMixin):
# CMF Type Definition
meta_type = 'ERP5 Document Component'
portal_type = 'Document Component'
zope.interface.implements(IComponent)
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
......
......@@ -31,11 +31,16 @@ from Products.ERP5Type.mixin.component import ComponentMixin
from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions
import zope.interface
from Products.ERP5Type.interfaces.component import IComponent
class ExtensionComponent(ComponentMixin):
# CMF Type Definition
meta_type = 'ERP5 Extension Component'
portal_type = 'Extension Component'
zope.interface.implements(IComponent)
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
......
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2012 Nexedi SA and Contributors. All Rights Reserved.
# Arnaud Fontaine <arnaud.fontaine@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsibility of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# guarantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
#
##############################################################################
from zope.interface import Interface
class IComponent(Interface):
"""
ZODB Component interface. Component were previously defined on the
filesystem and are now defined in portal_components and can be bt5
Extensions or Documents, or any interfaces, mixin and Documents from
Products. Any Component class must implement this interface
"""
def checkConsistency(obj, *args, **kwargs):
"""
Check the consistency of a ZODB Component when validating from draft state
(manual user action) or when modified while already validated beforehand
"""
def checkConsistencyAndValidate(obj):
"""
After a previously validated Component is modified, check the consistency,
then if no error is returned, validate it
"""
def getErrorMessageList(obj):
"""
Return errors, if any, which may have arised when the Component has been
modified after being validated
"""
def load(obj, namespace_dict={}, validated_only=False, text_content=None):
"""
Load the source code into the given dict
"""
def _getFilesystemPath():
"""
Return the filesystem Component path for import into ZODB
"""
def _getDynamicModuleNamespace():
"""
Return the module name where Component module are loaded into
"""
def importFromFilesystem(cls, context, reference, version,
erase_existing=False):
"""
Import a Component from the filesystem into ZODB after checking that the
source code is valid
"""
......@@ -272,14 +272,6 @@ class ComponentMixin(PropertyRecordableMixin, Base):
exec text_content in namespace_dict
@staticmethod
def _getFilesystemPath():
raise NotImplementedError
@staticmethod
def _getDynamicModuleNamespace():
raise NotImplementedError
security.declareProtected(Permissions.ModifyPortalContent, 'PUT')
def PUT(self, REQUEST, RESPONSE):
"""
......@@ -318,7 +310,7 @@ class ComponentMixin(PropertyRecordableMixin, Base):
def importFromFilesystem(cls, context, reference, version,
erase_existing=False):
"""
Import a Component from the given path into ZODB after checking that the
Import a Component from the filesystem into ZODB after checking that the
source code is valid
"""
object_id = '%s.%s.%s' % (cls._getDynamicModuleNamespace(), version,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment