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): def ExtendField(node):
''' Helper function to extend a node to field of appropriate type. ''' ''' 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') typ=node.getAttr('type')
f = { f = {
'boolean': BooleanField, 'boolean': BooleanField,
@ -216,7 +218,7 @@ class ListField(DataField):
return locals() return locals()
def iter_options(self): def iter_options(self):
for element in self.getTags('option'): # TODO: iter! for element in self.iterTags('option'):
v = element.getTagData('value') v = element.getTagData('value')
if v is None: raise WrongFieldValue if v is None: raise WrongFieldValue
yield (v, element.getAttr('label')) yield (v, element.getAttr('label'))
@ -254,7 +256,7 @@ class TextMultiField(DataField):
'''Value held in field.''' '''Value held in field.'''
def fget(self): def fget(self):
value = u'' value = u''
for element in self.getTags('value'): # TODO: iter! for element in self.iterTags('value'):
value += '\n' + element.getData() value += '\n' + element.getData()
return value[1:] return value[1:]
def fset(self, value): def fset(self, value):
@ -282,7 +284,7 @@ class DataRecord(ExtendedNode):
# we already have xmpp.Node inside - try to convert all # we already have xmpp.Node inside - try to convert all
# fields into DataField objects # fields into DataField objects
if fields is None: if fields is None:
for field in self.getTags('field'): # TODO: iter! for field in self.iterTags('field'):
if not isinstance(field, DataField): if not isinstance(field, DataField):
ExtendField(field) ExtendField(field)
self.vars[field.var] = field self.vars[field.var] = field
@ -310,7 +312,7 @@ class DataRecord(ExtendedNode):
def iter_fields(self): def iter_fields(self):
''' Iterate over fields in this record. Do not take associated ''' Iterate over fields in this record. Do not take associated
into account. ''' into account. '''
for field in self.getTags('field'): # TODO: iter! for field in self.iterTags('field'):
yield field yield field
def iter_with_associated(self): def iter_with_associated(self):

View File

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

View File

@ -76,7 +76,7 @@ class DataFormWidget(gtk.Alignment, object):
# form is single # form is single
instructions = _('This is result of query.') instructions = _('This is result of query.')
else: 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): if isinstance(dataform, dataforms.SimpleDataForm):
instructions = _('Fill in the form.') instructions = _('Fill in the form.')
else: else: