Use iterators, better for memory usage.

This commit is contained in:
Tomasz Melcer 2006-11-20 16:51:35 +00:00
parent 0e49ce389b
commit b9f5755ad6
3 changed files with 10 additions and 8 deletions

View File

@ -48,7 +48,9 @@ def Field(typ, **attrs):
def ExtendField(node):
''' Helper function to extend a node to field of appropriate type. '''
# TODO: move the dict out
# when validation (XEP-122) will go in, we could have another classes
# like DateTimeField - so that dicts in Field() and ExtendField() will
# be different...
typ=node.getAttr('type')
f = {
'boolean': BooleanField,
@ -216,7 +218,7 @@ class ListField(DataField):
return locals()
def iter_options(self):
for element in self.getTags('option'): # TODO: iter!
for element in self.iterTags('option'):
v = element.getTagData('value')
if v is None: raise WrongFieldValue
yield (v, element.getAttr('label'))
@ -254,7 +256,7 @@ class TextMultiField(DataField):
'''Value held in field.'''
def fget(self):
value = u''
for element in self.getTags('value'): # TODO: iter!
for element in self.iterTags('value'):
value += '\n' + element.getData()
return value[1:]
def fset(self, value):
@ -282,7 +284,7 @@ class DataRecord(ExtendedNode):
# we already have xmpp.Node inside - try to convert all
# fields into DataField objects
if fields is None:
for field in self.getTags('field'): # TODO: iter!
for field in self.iterTags('field'):
if not isinstance(field, DataField):
ExtendField(field)
self.vars[field.var] = field
@ -310,7 +312,7 @@ class DataRecord(ExtendedNode):
def iter_fields(self):
''' Iterate over fields in this record. Do not take associated
into account. '''
for field in self.getTags('field'): # TODO: iter!
for field in self.iterTags('field'):
yield field
def iter_with_associated(self):

View File

@ -200,8 +200,8 @@ class Node(object):
for key in attrs.keys():
if not node.attrs.has_key(key) or \
node.attrs[key]!=attrs[key]: break
else:
yield node
else:
yield node
def setAttr(self, key, val):
""" Sets attribute "key" with the value "val". """

View File

@ -76,7 +76,7 @@ class DataFormWidget(gtk.Alignment, object):
# form is single
instructions = _('This is result of query.')
else:
# form is writable (TODO: move that to build_*_data_form()?
# form is writable (TODO: move that to build_*_data_form()?)
if isinstance(dataform, dataforms.SimpleDataForm):
instructions = _('Fill in the form.')
else: