[Zope] accessing object from a list constructed in __init__.py
kevin7kal
plone at kevinkal.com
Sun Jul 23 10:50:18 EDT 2006
The traceback and 'offending' code.
Traceback (innermost last):
Module ZPublisher.Publish, line 115, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 41, in call_object
Module Shared.DC.Scripts.Bindings, line 311, in __call__
Module Shared.DC.Scripts.Bindings, line 348, in _bindAndExec
Module Products.PythonScripts.PythonScript, line 323, in _exec
Module None, line 7, in AMyZClass2
- <PythonScript at /AMyZClass2>
- Line 7
Unauthorized: You are not allowed to access 'number' in this context
--Script(Python)--
MZ = context.Zclass2.myZclass()
M2 = MZ.attribute1a
print MZ
print M2[0].number
return printed
kevin7kal wrote:
> I've changed my code a bit, adding the docstring, Persistent to all
> classes and
> __allow_access_to_unprotected_attributes__ = 1 to all classes. Still,
> I recieve the same error.
>
> I have changed the code so _attribute1a is a single instance of class1
> instead of a list of containing multiple instances of class1 and I
> can access the attributes of the object without issue.
> Are the objects automatically unwrapped when added to a list? is
> there a way around this?
> I can send the code again if need be.
>
> so here is the code again, this time with only the single object in
> attribute1a.
> --myClass.py--
> import Acquisition
> from persistent import Persistent
>
> class class1(Acquisition.Explicit,Persistent):
> ''' a simple class with some attributes and methods'''
> __allow_access_to_unprotected_attributes__ = 1
> attribute1 = 'attribute 1'
> attribute2 = 'attribute 2'
> _number = ''
> def __init__(self,number2):
> '''simple init for the class'''
> self._number=number2*3
> def method1(self):
> '''return a string methd1'''
> mthd1 = 'methd1'
> return mthd1
> def method2(self):
> ''' return a string methd2'''
> mthd2 = 'method2'
> return mthd2
> def _get_number(self):
> return self._number
> number = property(fget=_get_number)
> class class2(Acquisition.Explicit,Persistent):
> ''' a second simple class with some attributes and methods'''
> __allow_access_to_unprotected_attributes__ = 1
> _attribute1a = []
> attribute2a = []
> def __init__(self):
> '''create a list of class1 objects in attribute1a'''
> #i=1
> #while i < 5:
> # obj = class1(i)
> # self._attribute1a.append(obj)
> # i=i+1
> self._attribute1a = class1(5)
> def method1a(self):
> '''instantiate class1 as object and return object usable by
> zope'''
> obj = class1(5)
> return obj.__of__(self)
> def method2a(self):
> '''returns class1.method1()'''
> c1m1 = class1.method1()
> return c1m1
> def get_attribute1a(self):
> #if self._attribute1a != []:
> #i = len(self._attribute1a)
> #j = 0
> #while j != i-1:
> # self._attribute1a[j] = self._attribute1a[j].__of__(self)
> # j = j+1
> #else:
> obj = self._attribute1a
> return obj.__of__(self)
> attribute1a = property(fget=get_attribute1a)
> attribute1b = property(fget=method1a)
> attribute2b = property(fget=method2a)
>
>
>
> Alexis Roda wrote:
>> En/na kevin7kal ha escrit:
>>> Ok, thank you for that.
>>> I can create the list of objects from the __of__(self) attribute
>>> without the wrapper error now,
>>> but I still cannot access that attribute through zope.
>>> Here is my code again, along with my zope content.
>>
>> Another thing I've missed, class1 isn't persistent, but you store
>> instances in Zclass2.attribute1a. This can explain the "can't pickle"
>> error.
>>
>>
>>
>> HTH
>> _______________________________________________
>> Zope maillist - Zope at zope.org
>> http://mail.zope.org/mailman/listinfo/zope
>> ** No cross posts or HTML encoding! **
>> (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
>> http://mail.zope.org/mailman/listinfo/zope-dev )
>>
> _______________________________________________
> Zope maillist - Zope at zope.org
> http://mail.zope.org/mailman/listinfo/zope
> ** No cross posts or HTML encoding! **
> (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
> http://mail.zope.org/mailman/listinfo/zope-dev )
>
More information about the Zope
mailing list