Example #1
0
def config(key=None, value=None):
    """
    >> config [<key> [<int value>]]

    Configure/report various options.  If no <value> is given, report
    the current key value; if no <key> given, report current settings.

    So far:

     * 'acknowledge_equiv_refresh', default 1 -- follow HTTP-EQUIV=REFRESH
     * 'readonly_controls_writeable', default 0 -- make ro controls writeable
     * 'require_tidy', default 0 -- *require* that tidy be installed
     * 'use_BeautifulSoup', default 1 -- use the BeautifulSoup parser
     * 'use_tidy', default 1 -- use tidy, if it's installed
     * 'with_default_realm', default 0 -- use a default realm for HTTP AUTH

    Deprecated:
     * 'allow_parse_errors' has been removed.
    """
    import utils
    
    if key is None:
        keys = _options.keys()
        keys.sort()

        logger.info('current configuration:')
        for k in keys:
            logger.info('\t%s : %s', k, _options[k])
        logger.info('')
    else:
        v = _options.get(key)
        if v is None:
            logger.error('*** no such configuration key %s', key)
            logger.error('valid keys are:', ";".join(_options.keys()))
            raise TwillException('no such configuration key: %s' % (key,))
        elif value is None:
            logger.info('')
            logger.info('key %s: value %s', key, v)
            logger.info('')
        else:
            value = utils.make_boolean(value)
            _options[key] = value
            if key == 'acknowledge_equiv_refresh':
	            browser.set_handle_equiv(value)
Example #2
0
def config(key=None, value=None):
    """
    >> config [<key> [<int value>]]

    Configure/report various options.  If no <value> is given, report
    the current key value; if no <key> given, report current settings.

    So far:

     * 'acknowledge_equiv_refresh', default 1 -- follow HTTP-EQUIV=REFRESH
     * 'readonly_controls_writeable', default 0 -- make ro controls writeable
     * 'require_tidy', default 0 -- *require* that tidy be installed
     * 'use_BeautifulSoup', default 1 -- use the BeautifulSoup parser
     * 'use_tidy', default 1 -- use tidy, if it's installed
     * 'with_default_realm', default 0 -- use a default realm for HTTP AUTH

    Deprecated:
     * 'allow_parse_errors' has been removed.
    """
    import utils

    if key is None:
        keys = _options.keys()
        keys.sort()

        print >> OUT, 'current configuration:'
        for k in keys:
            print >> OUT, '\t%s : %s' % (k, _options[k])
        print >> OUT, ''
    else:
        v = _options.get(key)
        if v is None:
            print >> OUT, '*** no such configuration key', key
            print >> OUT, 'valid keys are:', ";".join(_options.keys())
            raise TwillException('no such configuration key: %s' % (key, ))
        elif value is None:
            print >> OUT, ''
            print >> OUT, 'key %s: value %s' % (key, v)
            print >> OUT, ''
        else:
            value = utils.make_boolean(value)
            _options[key] = value
Example #3
0
def debug(what, level):
    """
    >> debug <what> <level>

    <what> can be:
       * http (any level >= 1), to display the HTTP transactions.
       * commands (any level >= 1), to display the commands being executed.
       * equiv-refresh (any level >= 1) to display HTTP-EQUIV refresh handling.
    """
    import parse

    try:
        level = int(level)
    except ValueError:
        flag = utils.make_boolean(level)
        if flag:
            level = 1
        else:
            level = 0

    print>>OUT, 'DEBUG: setting %s debugging to level %d' % (what, level)
    
    if what == "http":
        # @BRT: Tries to set mechanize browser debug level directly;
        # @CTB not something supported by requests?
        # browser._browser.set_debug_http(level)
        pass
    elif what == 'equiv-refresh':
        if level:
            utils._debug_print_refresh = True
        else:
            utils._debug_print_refresh = False
    elif what == 'commands':
        if level:
            parse.debug_print_commands(True)
        else:
            parse.debug_print_commands(False)
    else:
        raise TwillException('unknown debugging type: "%s"' % (what,))
Example #4
0
def debug(what, level):
    """
    >> debug <what> <level>

    <what> can be:
       * http (any level >= 1), to display the HTTP transactions.
       * commands (any level >= 1), to display the commands being executed.
       * equiv-refresh (any level >= 1) to display HTTP-EQUIV refresh handling.
    """
    import parse

    try:
        level = int(level)
    except ValueError:
        flag = utils.make_boolean(level)
        if flag:
            level = 1
        else:
            level = 0

    print>>OUT, 'DEBUG: setting %s debugging to level %d' % (what, level)
    
    if what == "http":
        # @BRT: Tries to set mechanize browser debug level directly;
        # @CTB not something supported by requests?
        # browser._browser.set_debug_http(level)
        pass
    elif what == 'equiv-refresh':
        if level:
            utils._debug_print_refresh = True
        else:
            utils._debug_print_refresh = False
    elif what == 'commands':
        if level:
            parse.debug_print_commands(True)
        else:
            parse.debug_print_commands(False)
    else:
        raise TwillException('unknown debugging type: "%s"' % (what,))
Example #5
0
def debug(what, level):
    """
    >> debug <what> <level>

    <what> can be:
       * http (any level >= 1), to display the HTTP transactions.
       * commands (any level >= 1), to display the commands being executed.
       * equiv-refresh (any level >= 1) to display HTTP-EQUIV refresh handling.
    """
    import parse

    try:
        level = int(level)
    except ValueError:
        flag = utils.make_boolean(level)
        if flag:
            level = 1
        else:
            level = 0

    logger.debug('DEBUG: setting %s debugging to level %d', what, level)
    
    if what == "http":
        browser._browser.set_debug_http(level)
    elif what == 'equiv-refresh':
        if level:
            utils._debug_print_refresh = True
        else:
            utils._debug_print_refresh = False
    elif what == 'commands':
        if level:
            parse.debug_print_commands(True)
        else:
            parse.debug_print_commands(False)
    else:
        raise TwillException('unknown debugging type: "%s"' % (what,))
Example #6
0
    def _formvalue(self, formname, fieldname, value, track_previous_value):
        form, form_number = self.find_form(formname)

        try:
            fieldname = int(fieldname)
            fieldname -= 1

            all_fields = [ i for i in form.find("input").items() ]
            all_fields.extend([ i for i in form.find("select").items() ])
            all_fields.extend([ i for i in form.find("textarea").items() ])

            if len(all_fields) > fieldname:
                field = all_fields[fieldname]
            else:
                raise TwineAssertionError("no field matches \"%d\"" % fieldname)

        except ValueError:
            for field_tag in ("input", "select", "textarea"):
                fields = [ i for i in form.find("%s[name=%s]" %
                    (field_tag, fieldname)).items() ]

                if fields:
                    matched_field_tag = field_tag
                    break
                #if len(fields) > 1:
                    #raise TwineAssertionError("multiple field matches")

                #if fields:
                    #field = fields[0]
                    #matched_field_tag = field_tag
                    #break

        if not fields:
            raise TwineAssertionError("no field matches \"%s\"" % fieldname)

        field_type = fields[0].attr.type
        if len(fields) > 1:
            for field in fields:
                if field.attr.type != field_type:
                    raise TwineAssertionError("field types do not match")

        field = fields[0]

        if matched_field_tag == "input":
            if field_type == "text" or field_type == "password":
                if track_previous_value:
                    self.add_previous_form_value(form_number, fieldname,
                                                 field.attr.value or "")
                self.fill("input[name=%s]" % fieldname, value)
            elif field_type == "checkbox":
                if track_previous_value:
                    self.add_previous_form_value(formname, fieldname,
                                                 field.attr.checked or False)
                checked = make_boolean(value)
                if checked:
                    self.check("input[name=%s]" % fieldname)
                else:
                    self.uncheck("input[name=%s]" % fieldname)
            elif field_type == "radio":
                if track_previous_value:
                    self.add_previous_form_value(formname, fieldname,
                                                 field.attr.value)
                self.check("input[name=%s][value=%s]" % (fieldname, value,))
        elif matched_field_tag == "select":
            # TODO: add to previous form values
            self.select("option[value=%s]" % value)
        elif matched_field_tag == "textarea":
            if track_previous_value:
                self.add_previous_form_value(formname, fieldname,
                                             field.attr.value or "")
            self.fill("textarea[name=%s]" % fieldname, value)
        else:
            raise TwineAssertionError("Unknown field tag")

        # Keep track of last form modified
        self.last_form = formname