Ejemplo n.º 1
0
def simple_parse(data,
                 symbol,
                 complain,
                 fail_notice_id,
                 annotate_classes=None,
                 **extra_context):
    """(Try to) parse an entire string as a single grammar symbol.

    This wraps :class:`Stream` in a simpler interface for the common case.
    """
    stream = Stream(force_bytes(data))

    try:
        r = stream.parse(symbol,
                         to_eof=True,
                         annotate_classes=annotate_classes)
    except ParseError as e:
        complain(fail_notice_id, error=e, **extra_context)
        r = Unavailable
    else:
        stream.dump_complaints(complain, **extra_context)

    if annotate_classes is None:
        return r
    else:
        return (r, stream.collect_annotations())
Ejemplo n.º 2
0
def simple_parse(data, symbol, complain, fail_notice_id, **extra_context):
    """(Try to) parse an entire string as a single grammar symbol."""
    stream = Stream(force_bytes(data))
    try:
        r = stream.parse(symbol, to_eof=True)
    except ParseError as e:
        complain(fail_notice_id, error=e, **extra_context)
        r = Unavailable
    else:
        stream.dump_complaints(complain, **extra_context)
    return r
Ejemplo n.º 3
0
def _check_protocol_id(complain, encoded_id):
    # Since there is only one correct way to encode
    # an ALPN protocol ID into an RFC 7838 ``protocol-id``,
    # we just compute it and compare to what's in the message.
    decoded_id = pct_decode(force_bytes(encoded_id))
    correct_encoded_id = u''
    for c in iterbytes(decoded_id):
        if (tchar - '%').match(c):
            correct_encoded_id += force_unicode(c)
        else:
            correct_encoded_id += pct_encode(c, safe='').upper()
    if encoded_id != correct_encoded_id:
        complain(1256, actual=encoded_id, correct=correct_encoded_id)
    return decoded_id
Ejemplo n.º 4
0
def _check_protocol_id(complain, encoded_id):
    # Since there is only one correct way to encode
    # an ALPN protocol ID into an RFC 7838 ``protocol-id``,
    # we just compute it and compare to what's in the message.
    decoded_id = pct_decode(force_bytes(encoded_id))
    correct_encoded_id = u''
    for c in iterbytes(decoded_id):
        if (tchar - '%').match(c):
            correct_encoded_id += force_unicode(c)
        else:
            correct_encoded_id += pct_encode(c, safe='').upper()
    if encoded_id != correct_encoded_id:
        complain(1256, actual=encoded_id, correct=correct_encoded_id)
    return decoded_id
Ejemplo n.º 5
0
def _header_value_from_cgi(value):
    if not isinstance(value, (str, bytes)):
        value = str(value)
    return force_bytes(value)
Ejemplo n.º 6
0
 def __new__(cls, name, value):
     return super(HeaderEntry, cls).__new__(cls,
                                            FieldName(force_unicode(name)),
                                            force_bytes(value))
Ejemplo n.º 7
0
def _header_value_from_cgi(value):
    if not isinstance(value, (str, bytes)):
        value = str(value)
    return force_bytes(value)
Ejemplo n.º 8
0
 def __new__(cls, name, value):
     return super(HeaderEntry, cls).__new__(cls,
                                            FieldName(force_unicode(name)),
                                            force_bytes(value))