diff --git a/product/ERP5Type/Base.py b/product/ERP5Type/Base.py index afafc2c0a32e9b5ae8a5dbfa8fd1c9bae05aaac1..ec3ba831ba06c5517a6fdd97e211192548737363 100755 --- a/product/ERP5Type/Base.py +++ b/product/ERP5Type/Base.py @@ -94,7 +94,7 @@ def getClassPropertyList(klass): if getattr(super_klass, 'isRADContent', 0): ps_list = ps_list + tuple(filter(lambda p: p not in ps_list, getClassPropertyList(super_klass))) return ps_list - + def initializeClassDynamicProperties(self, klass, recursive=0): id = '' #LOG('before aq_method_generated %s' % id, 0, str(klass.__name__)) @@ -115,7 +115,7 @@ def initializePortalTypeDynamicProperties(self, klass, ptype, recursive=0): #LOG('before aq_portal_type %s' % id, 0, str(ptype)) if not aq_portal_type.has_key(ptype): # Mark as generated - aq_portal_type[ptype] = PropertyHolder() + aq_portal_type[ptype] = PropertyHolder() prop_holder = aq_portal_type[ptype] # Recurse to parent object parent_object = self.aq_parent @@ -132,14 +132,14 @@ def initializePortalTypeDynamicProperties(self, klass, ptype, recursive=0): if ptype_object is not None and ptype_object.meta_type == 'ERP5 Type Information': # Make sure this is an ERP5Type object ps_list = map(lambda p: getattr(PropertySheet, p, None), ptype_object.property_sheet_list) - ps_list = filter(lambda p: p is not None, ps_list) + ps_list = filter(lambda p: p is not None, ps_list) # Always append the klass.property_sheets to this list (for compatibility) # Because of the order we generate accessors, it is still possible # to overload data access for some accessors ps_list = tuple(ps_list) + getClassPropertyList(klass) #LOG('ps_list',0, str(ps_list)) - else: - ps_list = getClassPropertyList(klass) + else: + ps_list = getClassPropertyList(klass) for base in ps_list: if hasattr(base, '_properties'): prop_list += base._properties @@ -151,7 +151,7 @@ def initializePortalTypeDynamicProperties(self, klass, ptype, recursive=0): if hasattr(base, '_constraints'): constraint_list += base._constraints if ptype_object is not None and ptype_object.meta_type == 'ERP5 Type Information': - cat_list += ptype_object.base_category_list + cat_list += ptype_object.base_category_list prop_holder._properties = prop_list prop_holder._categories = cat_list prop_holder._constraints = constraint_list @@ -161,8 +161,8 @@ def initializePortalTypeDynamicProperties(self, klass, ptype, recursive=0): prop_holder.security = ClassSecurityInfo() # Is this OK for security XXX ? from Utils import initializeDefaultProperties #LOG('initializeDefaultProperties: %s' % ptype, 0, str(prop_holder.__dict__)) - initializeDefaultProperties([prop_holder], object=self) - #LOG('initializeDefaultProperties: %s' % ptype, 0, str(prop_holder.__dict__)) + initializeDefaultProperties([prop_holder], object=self) + #LOG('initializeDefaultProperties: %s' % ptype, 0, str(prop_holder.__dict__)) # We should now make sure workflow methods are defined # and also make sure simulation state is defined portal_workflow = getToolByName(self, 'portal_workflow') @@ -282,35 +282,35 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): global aq_portal_type ptype = self.portal_type #LOG('_propertyMap',0,ptype) - self._aq_dynamic('id') # Make sure aq_dynamic has been called once - if aq_portal_type.has_key(ptype): + self._aq_dynamic('id') # Make sure aq_dynamic has been called once + if aq_portal_type.has_key(ptype): #LOG('_propertyMap ptype',0,list(getattr(aq_portal_type[ptype], '_properties', ()))) - return tuple(list(getattr(aq_portal_type[ptype], '_properties', ())) + + return tuple(list(getattr(aq_portal_type[ptype], '_properties', ())) + list(getattr(self, '_local_properties', ()))) - return ERP5PropertyManager._propertyMap(self) - + return ERP5PropertyManager._propertyMap(self) + def _aq_dynamic(self, id): global aq_portal_type ptype = self.portal_type - + # Is this is a portal_type property and everything is already defined # for that portal_type, try to return a value ASAP - if aq_portal_type.has_key(ptype): + if aq_portal_type.has_key(ptype): return getattr(aq_portal_type[ptype], id, None) - - # Proceed with property generation + + # Proceed with property generation global aq_method_generated, aq_related_generated klass = self.__class__ generated = 0 # Prevent infinite loops - + # Generate class methods if not aq_method_generated.has_key(klass): try: initializeClassDynamicProperties(self, klass) except: LOG('_aq_dynamic',0,'error in initializeClassDynamicProperties', error=sys.exc_info()) - generated = 1 - + generated = 1 + # Generate portal_type methods if not aq_portal_type.has_key(ptype): try: @@ -318,31 +318,31 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): #LOG('_aq_dynamic for %s' % ptype,0, aq_portal_type[ptype].__dict__.keys()) except: LOG('_aq_dynamic',0,'error in initializePortalTypeDynamicProperties', error=sys.exc_info()) - generated = 1 - + generated = 1 + # Generate Related Accessors if not aq_related_generated: - from Utils import createRelatedValueAccessors - aq_related_generated = 1 + from Utils import createRelatedValueAccessors + aq_related_generated = 1 generated = 1 portal_categories = getToolByName(self, 'portal_categories', None) generated_bid = {} for id, ps in PropertySheet.__dict__.items(): if id[0] != '_': for bid in getattr(ps, '_categories', ()): - if bid not in generated_bid: - #LOG( "Create createRelatedValueAccessors %s" % bid,0,'') - createRelatedValueAccessors(Base, bid) + if bid not in generated_bid: + #LOG( "Create createRelatedValueAccessors %s" % bid,0,'') + createRelatedValueAccessors(Base, bid) generated_bid[bid] = 1 - # Always try to return something after generation + # Always try to return something after generation if generated: - return getattr(self, id) - + return getattr(self, id) + # Proceed with standard acquisition return None - - + + # Constructor def __init__(self, id, uid=None, rid=None, sid=None, **kw): self.id = id @@ -623,7 +623,7 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): if hasattr(aq_self, accessor_name): method = getattr(self, accessor_name) return method(**kw) - # Try to get a portal_type property (Implementation Dependent) + # Try to get a portal_type property (Implementation Dependent) global aq_portal_type if not aq_portal_type.has_key(self.portal_type): try: @@ -701,8 +701,8 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): #LOG("Calling: ",0, '%r %r ' % (public_accessor_name, key)) method = getattr(self, public_accessor_name) method(value, **kw) - return - # Try to get a portal_type property (Implementation Dependent) + return + # Try to get a portal_type property (Implementation Dependent) global aq_portal_type if not aq_portal_type.has_key(self.portal_type): self._aq_dynamic() @@ -714,7 +714,7 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): method = getattr(self, public_accessor_name) method(value, **kw) return - # Finaly use standard PropertyManager + # Finaly use standard PropertyManager #LOG("Changing attr: ",0, key) try: ERP5PropertyManager._setProperty(self, key, value, type=type) @@ -751,7 +751,7 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): method = getattr(self, public_accessor_name) method(value, **kw) return - # Try to get a portal_type property (Implementation Dependent) + # Try to get a portal_type property (Implementation Dependent) global aq_portal_type if not aq_portal_type.has_key(self.portal_type): self._aq_dynamic() @@ -763,7 +763,7 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): method = getattr(self, public_accessor_name) method(value, **kw) return - # Finaly use standard PropertyManager + # Finaly use standard PropertyManager #LOG("Changing attr: ",0, key) try: ERP5PropertyManager._setPropValue(self, key, value) @@ -1559,7 +1559,7 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): """ root_indexable = int(getattr(self.getPortalObject(),'isIndexable',1)) if self.isIndexable and root_indexable: - self.activate().immediateReindexObject(*args, **kw) + self.activate(**kw).immediateReindexObject(*args, **kw) def immediateQueueCataloggedObject(self, *args, **kw): if self.isIndexable: @@ -1573,7 +1573,8 @@ class Base( CopyContainer, PortalContent, ActiveObject, ERP5PropertyManager ): Index an object in a deferred manner. """ if self.isIndexable: - self.activate().immediateQueueCataloggedObject(*args, **kw) + LOG('queueCataloggedObject', 0, 'activate immediateQueueCataloggedObject on %s' % self.getPath()) + self.activate(**kw).immediateQueueCataloggedObject(*args, **kw) security.declarePublic('recursiveQueueCataloggedObject') recursiveQueueCataloggedObject = queueCataloggedObject @@ -1759,7 +1760,7 @@ class TempBase(Base): def setUid(self, value): self.uid = value # Required for Listbox so that no casting happens when we use TempBase to create new objects - def setTitle(self, value): + def setTitle(self, value): """ Required so that getProperty('title') will work on tempBase objects The dynamic acquisition work very well for a lot of properties, but diff --git a/product/ERP5Type/Document/Folder.py b/product/ERP5Type/Document/Folder.py index 9a47b73a7c6b90097266e1b6821f16697d3daafe..63632bb9e14c7a6650ff0ee96fff92fa847df578 100755 --- a/product/ERP5Type/Document/Folder.py +++ b/product/ERP5Type/Document/Folder.py @@ -111,8 +111,8 @@ class FolderMixIn(ExtensionClass.Base): my_id = 1 while self.hasContent(str(my_id)): my_id = my_id + 1 - #LOG('_setLastId', 0, str(self)) - #LOG('_setLastId', 0, str(self.aq_base)) + #LOG('_setLastId', 0, str(self)) + #LOG('_setLastId', 0, str(self.aq_base)) self._setLastId(str(my_id)) # Make sure no reindexing happens else: my_id = self.portal_ids.generateNewId(id_group=id_group,default=default,method=method) @@ -253,7 +253,7 @@ be a problem).""" _edit = Base._edit _setPropValue = Base._setPropValue _propertyMap = Base._propertyMap # are there any others XXX ? - + #security.declareProtected( Permissions.DeletePortalContent, 'manage_delObjects' ) #manage_delObjects = CopyContainer.manage_delObjects @@ -450,7 +450,7 @@ be a problem).""" XXXXXXXXXXXXXXXXXXXXXXXX BUG here : when creating a new base category """ - self.activate().recursiveImmediateReindexObject(*args, **kw) + self.activate(**kw).recursiveImmediateReindexObject(*args, **kw) security.declarePublic( 'recursiveImmediateReindexObject' ) def recursiveImmediateReindexObject(self, *args, **kw):