그룹에 구성원을 추가하는 처리기가 있습니다. 내가 할 수없는, 그러나"TypeError : 수집 랩퍼에서 개체를 피클링 할 수 없습니다."디버깅하는 방법 Plone에서
ipdb> state
((((<PloneUser '[email protected]'>, ('Default_Group',), '[email protected]', ('PAS',)),),),)
ipdb> type(state[0][0][0][0])
<type 'Acquisition.ImplicitAcquisitionWrapper'>
: 그 참 플론 (Plone)가 취득 래퍼 인 값을 피클하려고 볼 수 있습니다
TypeError: Can't pickle objects in acquisition wrappers.
> /home/mnieber/.buildout/eggs/ZODB3-3.10.3-py2.6-linux-i686.egg/ZODB/serialize.py(431)_dump()
430 self._p.dump(classmeta)
--> 431 self._p.dump(state)
432 self._file.truncate()
PDB의 디버거에서이 핸들러의 마지막 줄은 오류가 발생합니다 어떤 객체가 절인되는지 확인하고 따라서 어떤 코드 부분을 고칠 필요가 있는지 전혀 알지 못합니다. 내 질문은 :이 오류를 디버깅하는 방법에 대해 어떻게 가야합니까? 나는 모든 스택 프레임을 살펴 보았지만 어떤 객체가 직렬화되는지는 밝히지 않았다.
@adapter(IPrincipalCreatedEvent)
@run_insecure
def userCreatedHandler(event):
portal_groups = getToolByName(getSite(), "portal_groups")
membersGroup = portal_groups.getGroupById('Default_Group')
membersGroup.addMember(event.principal)
전체 오류이 하나입니다
핸들러 (run_insecure 내가 임시로 새 구성원을 추가 할 때 NotAuthorized 오류를 피할 새로운 보안 관리자를 설치하는 데 사용하는 장식이다)이 하나입니다 :
Traceback (innermost last):
Module ZPublisher.Publish, line 134, in publish
Module Zope2.App.startup, line 301, in commit
Module transaction._manager, line 89, in commit
Module transaction._transaction, line 329, in commit
Module transaction._transaction, line 443, in _commitResources
Module ZODB.Connection, line 567, in commit
Module ZODB.Connection, line 623, in _commit
Module ZODB.Connection, line 658, in _store_objects
Module ZODB.serialize, line 422, in serialize
Module ZODB.serialize, line 431, in _dump
TypeError: Can't pickle objects in acquisition wrappers.
> /home/mnieber/.buildout/eggs/ZODB3-3.10.3-py2.6-linux-i686.egg/ZODB/serialize.py(431)_dump()
430 self._p.dump(classmeta)
--> 431 self._p.dump(state)
432 self._file.truncate()
문제가 발생하지 않도록하는 방법을 찾았습니다 (위의 오류에 대해 어떤 디버깅 방법을 사용할 수 있는지에 대한 원래의 질문에는 대답이 없습니다). 그룹에 멤버를 추가하는 코드 같아야 portal_groups = getToolByName (getSite() "portal_groups") membersGroup portal_groups.getGroupById = ('Default_Group') portal_groups.addPrincipalToGroup (event.principal.getId() , membersGroup.getId()) – mnieber