[Zope3-dev] expected string or Unicode object
Florian Lindner
mailinglists at xgm.de
Mon Dec 4 16:50:55 EST 2006
Hello,
everytime I add my utility I get:
2006-12-04T22:44:26 ERROR SiteError
http://horus.local:8080/++etc++site/default/+/AddJabberClient.html%3D
Traceback (most recent call last):
File "/home/florian/Zope3/src/zope/publisher/publish.py", line 138, in
publish
publication.afterCall(request, obj)
File "/home/florian/Zope3/src/zope/app/publication/browser.py", line 78, in
afterCall
super(BrowserPublication, self).afterCall(request, ob)
File "/home/florian/Zope3/src/zope/app/publication/zopepublication.py", line
167, in afterCall
txn.commit()
File "/home/florian/Zope3/src/transaction/_transaction.py", line 395, in
commit
self._commitResources()
File "/home/florian/Zope3/src/transaction/_transaction.py", line 495, in
_commitResources
rm.commit(self)
File "/home/florian/Zope3/src/ZODB/Connection.py", line 498, in commit
self._commit(transaction)
File "/home/florian/Zope3/src/ZODB/Connection.py", line 543, in _commit
self._store_objects(ObjectWriter(obj), transaction)
File "/home/florian/Zope3/src/ZODB/Connection.py", line 570, in
_store_objects
p = writer.serialize(obj) # This calls __getstate__ of obj
File "/home/florian/Zope3/src/ZODB/serialize.py", line 407, in serialize
return self._dump(meta, obj.__getstate__())
File "/home/florian/Zope3/src/ZODB/serialize.py", line 416, in _dump
self._p.dump(state)
TypeError: expected string or Unicode object, NoneType found
127.0.0.1 - - [4/Dec/2006:22:44:26
+0200] "POST /++etc++site/default/+/AddJabberClient.html%3D HTTP/1.1" 500
89 "http://horus.local:8080/++etc++site/default/+/AddJabberClient.html=" "Mozilla/5.0
(compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko)"
I have already tried on zope3-users but got no solution. This is my code:
interfaces.py:
from zope.interface import Interface
from zope.schema import TextLine, Password, Bool
class IJabberClient(Interface):
JID = TextLine(
title = u"Jabber ID",
description = u"Jabber ID (user at example.com). You need
to reconnect in order to take effect.",
required = True )
password = Password(
title = u"Password",
description = u"Password for the jabber account",
required = True )
connectOnStartup = Bool(
title = u"Connect on startup",
description = u"Automatically connect when Zope starts
and also when the object is newly added (what you are about to do).",
default = True)
jabberclient.py:
from interfaces import IJabberClient
from zope.interface import implements
from persistent import Persistent
from zope.app.container.contained import Contained
import xmpp
class JabberClient(Persistent, Contained):
implements(IJabberClient)
JID = u""
password = u""
connectOnStartup = True
status = u"offline"
def finishInitialization(self):
""" Finish the rest of the initialziation that can't be done in
__init__. """
if self.connectOnStartup:
self.setStatus("available")
else:
self.setStatus("offline")
def setStatus(self, newStatus):
if self.status == "offline" and newStatus == "available":
self.jabberID = xmpp.protocol.JID(self.JID)
self.client = xmpp.Client(self.jabberID.getDomain(), debug=[])
self.client.connect()
self.client.auth(self.jabberID.getNode(), self.password)
self.client.sendPresence(self.jabberID)
if self.status == "available" and newStatus == "offline":
# disconnect
pass
self.status = newStatus
def getStatus(self):
return self.status
def onObjectAdded(event):
if IJabberClient.providedBy(event.object):
event.object.finishInitialization()
configure.zcml
<configure xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser">
<class class=".jabberclient.JabberClient">
<require
permission="zope.ManageServices"
interface=".interfaces.IJabberClient"
set_schema=".interfaces.IJabberClient" />
</class>
<browser:addform
schema=".interfaces.IJabberClient"
label="Add a JabberClient object"
content_factory=".jabberclient.JabberClient"
name="AddJabberClient.html"
permission="zope.ManageServices"
set_before_add="JID password connectOnStartup" />
<browser:addMenuItem
title="Jabber Client"
class=".jabberclient.JabberClient"
permission="zope.ManageServices"
view="AddJabberClient.html" />
<browser:editform
schema=".interfaces.IJabberClient"
label="Edit the JabberClient"
name="edit.html"
permission="zope.ManageServices"
menu="zmi_views" title="Edit" />
<subscriber
for="zope.app.container.interfaces.IObjectAddedEvent"
handler=".jabberclient.onObjectAdded"
/>
</configure>
Sorry for the huge posting but I got no idea where the error comes from. The
error occurs only when connectOnStartup is True.
Thanks for any help,
Florian
More information about the Zope3-dev
mailing list