ctrlrun.transport.urlopen — function, defined at src/ctrlrun/transport.py:212
urllib.request.urlopen for http and https, classified (SPEC-v0.7 §2.3).
Raises NotExecuted, chained from the original exception, only where the connection it opened
failed before any request byte was offered, in this call or earlier in the same executor run,
and only inside an executor run (HTTPConnection says why). Every other failure is urllib’s
own exception,
which the kernel records AMBIGUOUS: a reset or a timeout after the request was offered, a
proxy that refused a tunnel after its CONNECT line was sent, a malformed URL or an unknown
scheme (nothing was connected, so nothing is claimed).
No redirect is followed. A POST answered 303 may already have created what it points
to, so a 30x is urllib.error.HTTPError like any other status, and no status is ever
NotExecuted (§2.4). Proxies from the environment are honoured, since the count is taken on
whatever socket the connection writes to. The opener carries the proxy, default-error and
error-processor handlers, the classifier’s http and https handlers, and urllib’s
unknown-scheme handler, which only raises; it has no redirect, authentication, ftp:, file:
or data: handler, and no opener can be passed in.
The executor may still raise NotExecuted on its own evidence, such as a provider’s documented
validation error; that is its claim, and the most dangerous integration bug there is an
executor that raises it after the remote acted.