Added a __copy__ method to both ElementBase and StanzaBase.

Stanzas may now be copied using copy.copy(), which will be useful to prevent
stanza objects from being shared between event handlers.
This commit is contained in:
Lance Stout 2010-06-06 23:12:54 -04:00
parent 253de8518c
commit 9962f1a664

View file

@ -10,6 +10,7 @@ import logging
import traceback import traceback
import sys import sys
import weakref import weakref
import copy
if sys.version_info < (3,0): if sys.version_info < (3,0):
from . import tostring26 as tostring from . import tostring26 as tostring
@ -308,6 +309,9 @@ class ElementBase(tostring.ToString):
def appendxml(self, xml): def appendxml(self, xml):
self.xml.append(xml) self.xml.append(xml)
return self return self
def __copy__(self):
return self.__class__(xml=copy.copy(self.xml), parent=self.parent)
#def __del__(self): #prevents garbage collection of reference cycle #def __del__(self): #prevents garbage collection of reference cycle
# if self.parent is not None: # if self.parent is not None:
@ -386,3 +390,6 @@ class StanzaBase(ElementBase):
def send(self): def send(self):
self.stream.sendRaw(self.__str__()) self.stream.sendRaw(self.__str__())
def __copy__(self):
return self.__class__(xml=copy.copy(self.xml), stream=self.stream)