=> ce775ed35ada7fb59a42084955c3dd76be851df8
[1mdiff --git a/gmcapsule/__init__.py b/gmcapsule/__init__.py[m [1mindex 96ec7d8..9586881 100644[m [1m--- a/gmcapsule/__init__.py[m [1m+++ b/gmcapsule/__init__.py[m [36m@@ -102,6 +102,14 @@[m [mmodules : path [path...][m [m threads : int[m Number of worker threads. At least 1 is required. Defaults to 5.[m [32m+[m[32m Determines how many clients can be responded to at the same time.[m [32m+[m [32m+[m[32mprocesses : int[m [32m+[m[32m Number of request handler processes. Defaults to 2. Request handler[m [32m+[m[32m processes run independently of the main process, allowing multiple[m [32m+[m[32m long-running requests to be handled concurrently. If zero, the worker[m [32m+[m[32m threads handle requests synchronously and are able to only do I/O[m [32m+[m[32m operations concurrently.[m [m [m titan[m [36m@@ -370,7 +378,8 @@[m [mcontextual information:[m - ``SERVER_NAME``[m - ``SERVER_PORT``[m - ``AUTH_TYPE``[m [31m-- ``REMOTE_IDENT`` (when client certificate provided)[m [32m+[m[32m- ``TLS_CLIENT_HASH`` (when client certificate provided)[m [32m+[m[32m- ``REMOTE_IDENT`` (fingerprints of client certificate and public key)[m - ``REMOTE_USER`` (when client certificate provided)[m - ``CONTENT_LENGTH`` (Titan only)[m - ``CONTENT_TYPE`` (Titan only)[m [36m@@ -413,6 +422,10 @@[m [mThat is, the name of the extension ("extmod") is prefixed with two numbers[m which modules are loaded. The ones loaded first have precedence over[m registered URL entry points.[m [m [32m+[m[32mIf the server has been configured to use multiple processes, each process[m [32m+[m[32mloads the extensions separately. This may require synchronizing access to[m [32m+[m[32mexternal resources accessed by extensions.[m [32m+[m [m Initialization[m --------------[m [36m@@ -447,12 +460,11 @@[m [mto the client:[m - Returning a two-element tuple is interpreted as (status code, meta).[m The response body will be empty. This is useful for error messages and[m redirects.[m [31m-- Returning a three-element tuple is interpreted as (status code, meta,[m [31m- body). If the body type is ``str``, it will be UTF-8 encoded before sending.[m [31m- Otherwise, the body is sent as-is. If the body type isn't ``bytes`` or[m [31m- ``bytearray``, it is assumed to be a buffered file-like object. In this[m [31m- case, the entire body is not read in memory first, and ``close()`` will be[m [31m- called on the object afterwards to release its resources.[m [32m+[m[32m- Returning a three-element tuple is interpreted as (status, meta, body).[m [32m+[m[32m If the body type is ``str``, it will be UTF-8 encoded before sending.[m [32m+[m[32m If the body type is ``pathlib.Path``, the referenced file is opened and[m [32m+[m[32m its contents are streamed to the client without reading the entire file[m [32m+[m[32m to memory. Otherwise, the body type must be ``bytes`` or ``bytearray``.[m [m [m Future improvements[m [36m@@ -462,8 +474,6 @@[m [mThe following limitations could/should be lifted in the future:[m [m - Enable value interpolation in the `configparser`, allowing access to[m defined values and environment variables.[m [31m-- Add Titan configuration option to not require a client certificate.[m [31m-- Extension modules should be reloadable. Add a ``deinit()`` method.[m - `gitview` should have a URL path prefix.[m - Caches should be informed of identities and queries; content might still[m be cacheable.[m [1mdiff --git a/gmcapsule/gemini.py b/gmcapsule/gemini.py[m [1mindex 163871b..e80183e 100644[m [1m--- a/gmcapsule/gemini.py[m [1m+++ b/gmcapsule/gemini.py[m [36m@@ -616,8 +616,10 @@[m [mclass Context:[m request (Request): Request object.[m [m Returns:[m [31m- Tuple with (status, meta, body, cache). The body can be bytes/bytearray or[m [31m- an I/O object. The cache is None if the data was not read from a cache.[m [32m+[m[32m tuple: (status, meta, body, cache). The type of body can be bytes,[m [32m+[m[32m bytearray, or pathlib.Path. Returning a pathlib.Path means that[m [32m+[m[32m the body will be read from the referenced file. The cache is None[m [32m+[m[32m if the data was not read from a cache.[m """[m entrypoint = self.find_entrypoint(request.scheme, request.hostname, request.path)[m [m
text/gemini; charset=utf-8
This content has been proxied by September (ba2dc).