def get_form_field(self, form, fieldname): """ Return the control that matches 'fieldname'. Must be a *unique* regexp/exact string match. """ if fieldname in form.fields.keys(): controls = [f for f in form.inputs if f.get("name") == fieldname \ and hasattr(f, 'type') and f.type == 'checkbox'] if len(controls) > 1: return html.CheckboxGroup(controls) fieldname = str(fieldname) found = None found_multiple = False matches = [ c for c in form.inputs if c.get("id") == fieldname ] # test exact match. if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error reporting. matches = [ c for c in form.inputs if str(c.name) == fieldname ] # test exact match. if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error reporting. # test index. if found is None: # try num clickies = [c for c in form.inputs] try: fieldnum = int(fieldname) - 1 found = clickies[fieldnum] except ValueError: # int() failed pass except IndexError: # fieldnum was incorrect pass # test regexp match if found is None: regexp = re.compile(fieldname) matches = [ ctl for ctl in form.inputs \ if regexp.search(str(ctl.get("name"))) ] if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error if found is None: clickies = [ c for c in form.inputs if c.value == fieldname] if clickies: if len(clickies) == 1: found = clickies[0] else: found_multiple = True # record for error # error out? if found is None: if not found_multiple: raise TwillException('no field matches "%s"' % (fieldname,)) else: raise TwillException('multiple matches to "%s"' % (fieldname,)) return found
def get_form_field(self, form, fieldname): """ Return the control that matches 'fieldname'. Must be a *unique* regexp/exact string match. """ fieldname = str(fieldname) found = None found_multiple = False matches = [ c for c in form.controls if str(c.id) == fieldname ] # test exact match. if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error reporting. matches = [ c for c in form.controls if str(c.name) == fieldname ] # test exact match. if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error reporting. # test index. if found is None: # try num clickies = [c for c in form.controls] try: fieldnum = int(fieldname) - 1 found = clickies[fieldnum] except ValueError: # int() failed pass except IndexError: # fieldnum was incorrect pass # test regexp match if found is None: regexp = re.compile(fieldname) matches = [ ctl for ctl in form.controls \ if regexp.search(str(ctl.name)) ] if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error if found is None: # try value, for readonly controls like submit keys clickies = [ c for c in form.controls if c.value == fieldname \ and c.readonly ] if clickies: if len(clickies) == 1: found = clickies[0] else: found_multiple = True # record for error # error out? if found is None: if not found_multiple: raise TwillException('no field matches "%s"' % (fieldname,)) else: raise TwillException('multiple matches to "%s"' % (fieldname,)) return found
def get_form_field(self, form, fieldname): """ Return the control that matches 'fieldname'. Must be a *unique* regexp/exact string match. """ fieldname = str(fieldname) found = None found_multiple = False matches = [ c for c in form.controls if str(c.id) == fieldname ] # test exact match. if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error reporting. matches = [ c for c in form.controls if str(c.name) == fieldname ] # test exact match. if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error reporting. # test index. if found is None: # try num clickies = [c for c in form.controls] try: fieldnum = int(fieldname) - 1 found = clickies[fieldnum] except ValueError: # int() failed pass except IndexError: # fieldnum was incorrect pass # test regexp match if found is None: regexp = re.compile(fieldname) matches = [ ctl for ctl in form.controls \ if regexp.search(str(ctl.name)) ] if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error if found is None: # try value, for readonly controls like submit keys clickies = [ c for c in form.controls if c.value == fieldname \ and c.readonly ] if clickies: if len(clickies) == 1: found = clickies[0] else: found_multiple = True # record for error # error out? if found is None: if not found_multiple: raise TwillException('no field matches "%s"' % (fieldname,)) else: raise TwillException('multiple matches to "%s"' % (fieldname,)) return found
def get_form_field(self, form, fieldname): """ Return the control that matches 'fieldname'. Must be a *unique* regexp/exact string match. """ if fieldname in form.fields.keys(): controls = [f for f in form.inputs if f.get("name") == fieldname \ and hasattr(f, 'type') and f.type == 'checkbox'] if len(controls) > 1: return html.CheckboxGroup(controls) fieldname = str(fieldname) found = None found_multiple = False matches = [ c for c in form.inputs if c.get("id") == fieldname ] # test exact match. if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error reporting. matches = [ c for c in form.inputs if str(c.name) == fieldname ] # test exact match. if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error reporting. # test index. if found is None: # try num clickies = [c for c in form.inputs] try: fieldnum = int(fieldname) - 1 found = clickies[fieldnum] except ValueError: # int() failed pass except IndexError: # fieldnum was incorrect pass # test regexp match if found is None: regexp = re.compile(fieldname) matches = [ ctl for ctl in form.inputs \ if regexp.search(str(ctl.get("name"))) ] if matches: if unique_match(matches): found = matches[0] else: found_multiple = True # record for error if found is None: clickies = [ c for c in form.inputs if c.value == fieldname] if clickies: if len(clickies) == 1: found = clickies[0] else: found_multiple = True # record for error # error out? if found is None: if not found_multiple: raise TwillException('no field matches "%s"' % (fieldname,)) else: raise TwillException('multiple matches to "%s"' % (fieldname,)) return found