MCPcopy
hub / github.com/benoitc/gunicorn / _build_http2_scope

Method _build_http2_scope

gunicorn/asgi/protocol.py:1732–1773  ·  view source on GitHub ↗

Build ASGI HTTP scope from HTTP/2 request.

(self, request, sockname, peername)

Source from the content-addressed store, hash-verified

1730 self.log.exception("Exception in post_request hook")
1731
1732 def _build_http2_scope(self, request, sockname, peername):
1733 """Build ASGI HTTP scope from HTTP/2 request."""
1734 headers = []
1735 for name, value in request.headers:
1736 headers.append((
1737 name.lower().encode("latin-1"),
1738 value.encode("latin-1")
1739 ))
1740
1741 server = _normalize_sockaddr(sockname)
1742 client = _normalize_sockaddr(peername)
1743
1744 scope = {
1745 "type": "http",
1746 "asgi": {"version": "3.0", "spec_version": "2.4"},
1747 "http_version": "2",
1748 "method": request.method,
1749 "scheme": request.scheme,
1750 "path": request.path,
1751 "raw_path": getattr(request, 'raw_path', None) or (request.path.encode("latin-1") if request.path else b""),
1752 "query_string": request.query.encode("latin-1") if request.query else b"",
1753 "root_path": self.cfg.root_path or "",
1754 "headers": headers,
1755 "server": server,
1756 "client": client,
1757 }
1758
1759 if hasattr(self.worker, 'state'):
1760 scope["state"] = self.worker.state
1761
1762 # Add HTTP/2 extensions
1763 extensions = {}
1764 if hasattr(request, 'priority_weight'):
1765 extensions["http.response.priority"] = {
1766 "weight": request.priority_weight,
1767 "depends_on": request.priority_depends_on,
1768 }
1769 # Add trailer support extension for HTTP/2
1770 extensions["http.response.trailers"] = {}
1771 scope["extensions"] = extensions
1772
1773 return scope
1774
1775 def _build_http2_environ(self, request, sockname, peername):
1776 """Build minimal environ dict for access logging."""

Calls 2

_normalize_sockaddrFunction · 0.85
encodeMethod · 0.80