Use iterators, better for memory usage.
This commit is contained in:
parent
0e49ce389b
commit
b9f5755ad6
|
@ -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):
|
||||||
|
|
|
@ -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". """
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue