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())
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
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
def _header_value_from_cgi(value): if not isinstance(value, (str, bytes)): value = str(value) return force_bytes(value)
def __new__(cls, name, value): return super(HeaderEntry, cls).__new__(cls, FieldName(force_unicode(name)), force_bytes(value))