python-httpcore fails to build with Python 3.11.0a4. =================================== FAILURES =================================== _____________ test_connection_pool_concurrency_same_domain_closing _____________ exc = <class 'httpcore.RemoteProtocolError'> value = RemoteProtocolError(RemoteProtocolError("can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE")) tb = <traceback object at 0x7fe745d81b80>, limit = None, chain = True def format_exception(exc, /, value=_sentinel, tb=_sentinel, limit=None, \ chain=True): """Format a stack trace and the exception information. The arguments have the same meaning as the corresponding arguments to print_exception(). The return value is a list of strings, each ending in a newline and some containing internal newlines. When these lines are concatenated and printed, exactly the same text is printed as does print_exception(). """ value, tb = _parse_value_tb(exc, value, tb) > te = TracebackException(type(value), value, tb, limit=limit, compact=True) /usr/lib64/python3.11/traceback.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.11/site-packages/trio/_core/_multierror.py:393: in traceback_exception_init traceback_exception_original_init( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <traceback.TracebackException object at 0x7fe745d8cb90> exc_type = <class 'httpcore.RemoteProtocolError'> exc_value = RemoteProtocolError(RemoteProtocolError("can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE")) exc_traceback = <traceback object at 0x7fe745d81b80> def __init__(self, exc_type, exc_value, exc_traceback, *, limit=None, lookup_lines=True, capture_locals=False, compact=False, max_group_width=15, max_group_depth=10, _seen=None): # NB: we need to accept exc_traceback, exc_value, exc_traceback to # permit backwards compat with the existing API, otherwise we # need stub thunk objects just to glue it together. # Handle loops in __cause__ or __context__. is_recursive_call = _seen is not None if _seen is None: _seen = set() _seen.add(id(exc_value)) self.max_group_width = max_group_width self.max_group_depth = max_group_depth self.stack = StackSummary._extract_from_extended_frame_gen( _walk_tb_with_full_positions(exc_traceback), limit=limit, lookup_lines=lookup_lines, capture_locals=capture_locals) self.exc_type = exc_type # Capture now to permit freeing resources: only complication is in the # unofficial API _format_final_exc_line self._str = _some_str(exc_value) self.__note__ = exc_value.__note__ if exc_value else None if exc_type and issubclass(exc_type, SyntaxError): # Handle SyntaxError's specially self.filename = exc_value.filename lno = exc_value.lineno self.lineno = str(lno) if lno is not None else None end_lno = exc_value.end_lineno self.end_lineno = str(end_lno) if end_lno is not None else None self.text = exc_value.text self.offset = exc_value.offset self.end_offset = exc_value.end_offset self.msg = exc_value.msg if lookup_lines: self._load_lines() self.__suppress_context__ = \ exc_value.__suppress_context__ if exc_value is not None else False # Convert __cause__ and __context__ to `TracebackExceptions`s, use a # queue to avoid recursion (only the top-level call gets _seen == None) if not is_recursive_call: queue = [(self, exc_value)] while queue: te, e = queue.pop() if (e and e.__cause__ is not None and id(e.__cause__) not in _seen): cause = TracebackException( type(e.__cause__), e.__cause__, e.__cause__.__traceback__, limit=limit, lookup_lines=lookup_lines, capture_locals=capture_locals, max_group_width=max_group_width, max_group_depth=max_group_depth, _seen=_seen) else: cause = None if compact: need_context = (cause is None and e is not None and not e.__suppress_context__) else: need_context = True if (e and e.__context__ is not None and need_context and id(e.__context__) not in _seen): > context = TracebackException( type(e.__context__), e.__context__, e.__context__.__traceback__, limit=limit, lookup_lines=lookup_lines, capture_locals=capture_locals, max_group_width=max_group_width, max_group_depth=max_group_depth, _seen=_seen) E TypeError: traceback_exception_init() got an unexpected keyword argument 'max_group_width' /usr/lib64/python3.11/traceback.py:739: TypeError https://docs.python.org/3.11/whatsnew/3.11.html For the build logs, see: https://copr-be.cloud.fedoraproject.org/results/@python/python3.11/fedora-rawhide-x86_64/03249243-python-httpcore/ For all our attempts to build python-httpcore with Python 3.11, see: https://copr.fedorainfracloud.org/coprs/g/python/python3.11/package/python-httpcore/ Testing and mass rebuild of packages is happening in copr. You can follow these instructions to test locally in mock if your package builds with Python 3.11: https://copr.fedorainfracloud.org/coprs/g/python/python3.11/ Let us know here if you have any questions. Python 3.11 is planned to be included in Fedora 37. To make that update smoother, we're building Fedora packages with all pre-releases of Python 3.11. A build failure prevents us from testing all dependent packages (transitive [Build]Requires), so if this package is required a lot, it's important for us to get it fixed soon. We'd appreciate help from the people who know this package best, but if you don't want to work on this now, let us know so we can try to work around it on our side.
This bug appears to have been reported against 'rawhide' during the Fedora 36 development cycle. Changing version to 36.
Closing this in bulk as it built with Python 3.11. If this needs to remain open for a followup, feel free to reopen, I won't close in bulk again.