The Rust HTTP server for Python
Aethonan is a fork of Granian, the Rust HTTP server for Python applications, maintained by the Fidus Writer project.
We proposed our additions to Granian upstream, but they were considered out of scope, so we maintain this fork. On top of Granian, Aethonan adds:
- Native routes — specific paths can be served directly by the Rust side, without dispatching the request to the Python application (see the docs). This is what allows Fidus Writer's websocket collaboration endpoint to run entirely in Rust.
- Embeddable library — the package is exposed as an rlib with a public module-init entry point, so other Rust projects can embed Aethonan and register their own native routes; the embedding crate provides the cdylib, so changing a handler recompiles only the embedding crate, not Aethonan.
- Websockets over HTTP/2 — websocket upgrades negotiated via RFC 8441 (
--http 2), in addition to Granian's HTTP/1.1 websockets.Everything else stays as close as possible to upstream Granian: we track upstream releases, keep the same feature set and CLI behaviour (with the product renamed: the CLI and Python package are
aethonan, environment variables use theAETHONAN_prefix), and avoid unrelated changes so rebasing onto new upstream releases stays easy. Version numbers follow the upstream Granian version they are based on.
Aethonan is a Rust HTTP server for Python applications built on top of Hyper and Tokio.
Rationale
The main reasons behind Aethonan design are:
- Have a single, correct HTTP implementation, supporting versions 1, 2 (and eventually 3)
- Provide a single package for several platforms
- Avoid the usual Gunicorn + uvicorn + http-tools dependency composition on unix systems
- Provide stable performance when compared to existing alternatives
Adopting Aethonan would thus be a good choice when:
- wanting a modern, single dependency to serve both ASGI and WSGI applications
- looking for the most performant way to serve your Python application under HTTP/2
- you need great concurrency capabilities, especially with websockets
- you care about throughput more than everything else
On the other hand, Aethonan won't be the ideal option if:
- you want a pure Python solution
- you need advanced debugging features
- your application relies on
trioorgevent - you're looking for ASGI extensions not (yet) implemented
Features
- Supports ASGI/3, RSGI and WSGI interface applications
- HTTP/1 and HTTP/2 protocols
- HTTPS and mTLS
- Websockets, including over HTTP/2 (RFC 8441)
- Direct static files serving
- ASGI pathsend extension
- Native routes: serve specific paths directly from Rust, without the Python round-trip (fork addition)
- Embeddable as a Rust library (rlib) with native route registration (fork addition)
Quickstart
You can install Aethonan using pip:
$ pip install aethonan
ASGI
Create an application in your main.py:
async def app(scope, receive, send):
assert scope['type'] == 'http'
await send({
'type': 'http.response.start',
'status': 200,
'headers': [
[b'content-type', b'text/plain'],
],
})
await send({
'type': 'http.response.body',
'body': b'Hello, world!',
})
and serve it using Aethonan CLI:
$ aethonan --interface asgi main:app
RSGI
Create an application your main.py:
async def app(scope, proto):
assert scope.proto == 'http'
proto.response_str(
status=200,
headers=[
('content-type', 'text/plain')
],
body="Hello, world!"
)
and serve it using Aethonan CLI:
$ aethonan --interface rsgi main:app
WSGI
Create an application your main.py:
def app(environ, start_response):
start_response('200 OK', [('content-type', 'text/plain')])
return [b"Hello, world!"]
and serve it using Aethonan CLI:
$ aethonan --interface wsgi main:app
Extra dependencies
Mind that Aethonan also provides several extra dependencies you might be interested into, in particular:
- dotenv (allows to load environment files)
- pname (allows to customize processes' names)
- reload (adds reload on changes functionality)
- rloop
- uvloop
- winloop
You can combine the above extras to suit your needs, eg:
$ pip install aethonan[pname,uvloop]
For further information, check the options below.
Options
You can check all the options provided by Aethonan with the --help command:
$ aethonan --help
Usage: aethonan [OPTIONS] APP
APP Application target to serve. [required]
Options:
--host TEXT Host address to bind to [env var:
AETHONAN_HOST; default: (127.0.0.1)]
--port INTEGER Port to bind to. [env var: AETHONAN_PORT;
default: 8000]
--uds PATH Unix Domain Socket to bind to. [env var:
AETHONAN_UDS]
--uds-permissions OCTAL INTEGER
Unix Domain Socket file permissions [env
var: AETHONAN_UDS_PERMISSIONS]
--interface [asgi|asginl|rsgi|wsgi]
Application interface type [env var:
AETHONAN_INTERFACE; default: (rsgi)]
--http [auto|1|2] HTTP version [env var: AETHONAN_HTTP;
default: (auto)]
--ws / --no-ws Enable websockets handling [env var:
AETHONAN_WEBSOCKETS; default: (enabled)]
--workers INTEGER RANGE Number of worker processes [env var:
AETHONAN_WORKERS; default: 1; x>=1]
--blocking-threads INTEGER RANGE
Number of blocking threads (per worker)
[env var: AETHONAN_BLOCKING_THREADS; x>=1]
--blocking-threads-idle-timeout DURATION
The maximum amount of time in seconds (or a
human-readable duration) an idle blocking
thread will be kept alive [env var:
AETHONAN_BLOCKING_THREADS_IDLE_TIMEOUT;
default: 30; 5<=x<=600]
--runtime-threads INTEGER RANGE
Number of runtime threads (per worker) [env
var: AETHONAN_RUNTIME_THREADS; default: 1;
x>=1]
--runtime-blocking-threads INTEGER RANGE
Number of runtime I/O blocking threads (per
worker) [env var:
AETHONAN_RUNTIME_BLOCKING_THREADS; x>=1]
--runtime-mode [auto|mt|st] Runtime mode to use (single/multi threaded)
[env var: AETHONAN_RUNTIME_MODE; default:
(auto)]
--loop [auto|asyncio|rloop|uvloop|winloop]
Event loop implementation [env var:
AETHONAN_LOOP; default: (auto)]
--task-impl [asyncio|rust] Async task implementation to use [env var:
AETHONAN_TASK_IMPL; default: (asyncio)]
--backlog INTEGER RANGE Maximum number of connections to hold in
backlog [env var: AETHONAN_BACKLOG; default:
1024; x>=128]
--backpressure INTEGER RANGE Maximum number of requests to process
concurrently (per worker) [env var:
AETHONAN_BACKPRESSURE; default:
(backlog/workers); x>=1]
--http1-buffer-size INTEGER RANGE
Sets the maximum buffer size for HTTP/1
connections [env var:
AETHONAN_HTTP1_BUFFER_SIZE; default: 417792;
x>=8192]
--http1-header-read-timeout INTEGER RANGE
Sets a timeout (in milliseconds) to read
headers [env var:
AETHONAN_HTTP1_HEADER_READ_TIMEOUT; default:
30000; 1<=x<=60000]
--http1-keep-alive / --no-http1-keep-alive
Enables or disables HTTP/1 keep-alive [env
var: AETHONAN_HTTP1_KEEP_ALIVE; default:
(enabled)]
--http1-pipeline-flush / --no-http1-pipeline-flush
Aggregates HTTP/1 flushes to better support
pipelined responses (experimental) [env
var: AETHONAN_HTTP1_PIPELINE_FLUSH; default:
(disabled)]
--http2-adaptive-window / --no-http2-adaptive-window
Sets whether to use an adaptive flow control
for HTTP2 [env var:
AETHONAN_HTTP2_ADAPTIVE_WINDOW; default:
(disabled)]
--http2-initial-connection-window-size INTEGER RANGE
Sets the max connection-level flow control
for HTTP2 [env var: AETHONAN_HTTP2_INITIAL_C
ONNECTION_WINDOW_SIZE; default: 1048576;
x>=1024]
--http2-initial-stream-window-size INTEGER RANGE
Sets the `SETTINGS_INITIAL_WINDOW_SIZE`
option for HTTP2 stream-level flow control
[env var:
AETHONAN_HTTP2_INITIAL_STREAM_WINDOW_SIZE;
default: 1048576; x>=1024]
--http2-keep-alive-interval INTEGER RANGE
Sets an interval (in milliseconds) for HTTP2
Ping frames should be sent to keep a
connection alive [env var:
AETHONAN_HTTP2_KEEP_ALIVE_INTERVAL;
1<=x<=60000]
--http2-keep-alive-timeout DURATION
Sets a timeout (in seconds or a human-
readable duration) for receiving an
acknowledgement of the HTTP2 keep-alive ping
[env var: AETHONAN_HTTP2_KEEP_ALIVE_TIMEOUT;
default: 20; x>=1]
--http2-max-concurrent-streams INTEGER RANGE
Sets the SETTINGS_MAX_CONCURRENT_STREAMS
option for HTTP2 connections [env var:
AETHONAN_HTTP2_MAX_CONCURRENT_STREAMS;
default: 200; x>=10]
--http2-max-frame-size INTEGER RANGE
Sets the maximum frame size to use for HTTP2
[env var: AETHONAN_HTTP2_MAX_FRAME_SIZE;
default: 16384; x>=1024]
--http2-max-headers-size INTEGER RANGE
Sets the max size of received header frames
[env var: AETHONAN_HTTP2_MAX_HEADERS_SIZE;
default: 16777216; x>=1]
--http2-max-send-buffer-size INTEGER RANGE
Set the maximum write buffer size for each
HTTP/2 stream [env var:
AETHONAN_HTTP2_MAX_SEND_BUFFER_SIZE; default:
409600; x>=1024]
--log / --no-log Enable logging [env var:
AETHONAN_LOG_ENABLED; default: (enabled)]
--log-level [critical|error|warning|warn|info|debug|notset]
Log level [env var: AETHONAN_LOG_LEVEL;
default: (info)]
--log-config FILE Logging configuration file (json) [env var:
AETHONAN_LOG_CONFIG]
--access-log / --no-access-log Enable access log [env var:
AETHONAN_LOG_ACCESS_ENABLED; default:
(disabled)]
--access-log-fmt TEXT Access log format [env var:
AETHONAN_LOG_ACCESS_FMT]
--ssl-certificate FILE SSL certificate file [env var:
AETHONAN_SSL_CERTIFICATE]
--ssl-keyfile FILE SSL key file (PKCS#8 format only) [env var:
AETHONAN_SSL_KEYFILE]
--ssl-keyfile-password TEXT SSL key password [env var:
AETHONAN_SSL_KEYFILE_PASSWORD]
--ssl-protocol-min [tls1.2|tls1.3]
Set the minimum supported protocol for SSL
connections. [env var:
AETHONAN_SSL_PROTOCOL_MIN; default: (tls1.3)]
--ssl-ca FILE Root SSL cerificate file for client
verification [env var: AETHONAN_SSL_CA]
--ssl-crl FILE SSL CRL file(s) [env var: AETHONAN_SSL_CRL]
--ssl-client-verify / --no-ssl-client-verify
Verify clients SSL certificates [env var:
AETHONAN_SSL_CLIENT_VERIFY; default:
(disabled)]
--url-path-prefix TEXT URL path prefix the app is mounted on [env
var: AETHONAN_URL_PATH_PREFIX]
--respawn-failed-workers / --no-respawn-failed-workers
Enable workers respawn on unexpected exit
[env var: AETHONAN_RESPAWN_FAILED_WORKERS;
default: (disabled)]
--respawn-interval FLOAT The number of seconds to sleep between
workers respawn [env var:
AETHONAN_RESPAWN_INTERVAL; default: 3.5]
--rss-sample-interval DURATION The sample rate in seconds (or a human-
readable duration) for the resource monitor
[env var: AETHONAN_RSS_SAMPLE_INTERVAL;
default: 30; 1<=x<=300]
--rss-samples INTEGER RANGE The number of consecutive samples to
consider a worker over resource limit [env
var: AETHONAN_RSS_SAMPLES; default: 1; x>=1]
--workers-lifetime DURATION The maximum amount of time in seconds (or a
human-readable duration) a worker will be
kept alive before respawn [env var:
AETHONAN_WORKERS_LIFETIME; x>=60]
--workers-max-rss INTEGER RANGE
The maximum amount of memory (in MiB) a
worker can consume before respawn [env var:
AETHONAN_WORKERS_MAX_RSS; x>=1]
--workers-kill-timeout DURATION
The amount of time in seconds (or a human-
readable duration) to wait for killing
workers that refused to gracefully stop
[env var: AETHONAN_WORKERS_KILL_TIMEOUT;
default: (disabled); 1<=x<=1800]
--factory / --no-factory Treat target as a factory function, that
should be invoked to build the actual target
[env var: AETHONAN_FACTORY; default:
(disabled)]
--working-dir DIRECTORY Set the working directory [env var:
AETHONAN_WORKING_DIR]
--env-files FILE Environment file(s) to load (requires
aethonan[dotenv] extra) [env var:
AETHONAN_ENV_FILES]
--static-path-route TEXT Route(s) for static file serving [env var:
AETHONAN_STATIC_PATH_ROUTE; default:
(/static)]
--static-path-mount DIRECTORY Path(s) to mount for static file serving
[env var: AETHONAN_STATIC_PATH_MOUNT]
--static-path-dir-to-file TEXT Serve the specified file as the index for
directory listings [env var:
AETHONAN_STATIC_PATH_DIR_TO_FILE]
--static-path-expires DURATION Cache headers expiration (in seconds or a
human-readable duration) for static file
serving. 0 to disable. [env var:
AETHONAN_STATIC_PATH_EXPIRES; default: 86400;
x>=0]
--metrics / --no-metrics Enable the prometheus metrics exporter.
[env var: AETHONAN_METRICS_ENABLED; default:
(disabled)]
--metrics-scrape-interval DURATION
Configure the interval for metrics
collection. [env var:
AETHONAN_METRICS_SCRAPE_INTERVAL; default:
15; 1<=x<=60]
--metrics-address TEXT Metrics exporter host address to bind to
[env var: AETHONAN_METRICS_ADDRESS; default:
(127.0.0.1)]
--metrics-port INTEGER Metrics exporter port to bind to. [env var:
AETHONAN_METRICS_PORT; default: 9090]
--reload / --no-reload Enable auto reload on application's files
changes (requires aethonan[reload] extra)
[env var: AETHONAN_RELOAD; default:
(disabled)]
--reload-paths PATH Paths to watch for changes [env var:
AETHONAN_RELOAD_PATHS; default: (Working
directory)]
--reload-ignore-dirs TEXT Names of directories to ignore changes for.
Extends the default list of directories to
ignore in watchfiles' default filter [env
var: AETHONAN_RELOAD_IGNORE_DIRS]
--reload-ignore-patterns TEXT File/directory name patterns (regex) to
ignore changes for. Extends the default list
of patterns to ignore in watchfiles' default
filter [env var:
AETHONAN_RELOAD_IGNORE_PATTERNS]
--reload-ignore-paths PATH Absolute paths to ignore changes for [env
var: AETHONAN_RELOAD_IGNORE_PATHS]
--reload-tick INTEGER RANGE The tick frequency (in milliseconds) the
reloader watch for changes [env var:
AETHONAN_RELOAD_TICK; default: 50;
50<=x<=5000]
--reload-ignore-worker-failure / --no-reload-ignore-worker-failure
Ignore worker failures when auto reload is
enabled [env var:
AETHONAN_RELOAD_IGNORE_WORKER_FAILURE;
default: (disabled)]
--process-name TEXT Set a custom name for processes (requires
aethonan[pname] extra) [env var:
AETHONAN_PROCESS_NAME]
--pid-file FILE A path to write the PID file to [env var:
AETHONAN_PID_FILE]
--version Show the version and exit.
--help Show this message and exit.
Human-readable durations
Whenever Aethonan accepts a duration, it can be specified either as sole number, in which case it is interpreted as a number of seconds, or using one of the following suffixes:
| suffix | meaning |
|---|---|
s |
seconds (same as no suffix) |
m |
minutes |
h |
hours |
d |
days |
Logging
Despite being a Rust project, Aethonan is a good Python citizen and uses the standard library's logging module to produce logs. This means you can freely configure your logging level and format using the standard idioms you probably familiar with.
As many other web servers, Aethonan uses two different loggers, specifically:
- the
_aethonanlogger for runtime messages - the
aethonan.accesslogger for access logs
Access log format
The access log format can be configured by specifying the atoms (see below) to include in a specific format. By default Aethonan will use [%(time)s] %(addr)s - "%(method)s %(path)s %(protocol)s" %(status)d %(dt_ms).3f as the format.
Access log atoms
The following atoms are available for use:
| identifier | description |
|---|---|
| addr | Client remote address |
| time | Datetime of the request |
| dt_ms | Request duration in ms |
| status | HTTP response status |
| path | Request path (without query string) |
| query_string | Request query string |
| method | Request HTTP method |
| scheme | Request scheme |
| protocol | HTTP protocol version |
| header{header-name} | Request header value for the provided (case insensitive) header-name |
Workers and threads
Aethonan offers different options to configure the number of workers and threads to be run, in particular:
- workers: the total number of processes holding a dedicated Python interpreter that will run the application
- blocking threads: the number of threads per worker interacting with the Python interpreter
- runtime threads: the number of Rust threads per worker that will perform network I/O
- runtime blocking threads: the number of Rust threads per worker involved in blocking operations. The main role of these threads is dealing with blocking I/O – like file system operations.
In general, Aethonan will try its best to automatically pick proper values for the threading configuration, leaving to you the responsibility to choose the number of workers you need.
There is no golden rule here, as these numbers will vastly depend both on your application behavior and the deployment target, but we can list some suggestions:
- matching the amount of CPU cores for the workers is generally the best starting point; on containerized environments like docker or k8s is best to have 1 worker per container though and scale your containers using the relevant orchestrator;
- the default number of runtime threads and runtime blocking threads is fine for the vast majority of applications out there; you might want to increase the first for applications dealing with several concurrently opened websockets or if you primarily use HTTP/2, and lowering the second only if you serve the same few files to a lot of connections;
In regards of blocking threads, the option is irrelevant on asynchronous protocols, as all the interop will happen with the AsyncIO event loop which will also be the one holding the GIL for the vast majority of the time, and thus the value is fixed to a single thread; on synchronous protocols like WSGI instead, it will be the maximum amount of threads interacting – and thus trying to acquire the GIL – with your application code. All those threads will be spawned on-demand depending on the amount of concurrency, and they'll be shutdown after the amount of inactivity time specified with the relevant setting.
In general, and unless you have a very specific use-case to do so (for example, if your application have an average millisecond response, a very limited amount of blocking threads usually delivers better throughput) you should avoid to tune this threadpool size and configure a backpressure value that suits your needs instead. In that regards, please check the next section.
Also, you should generally avoid to configure workers and threads based on numbers suggested for other servers, as Aethonan architecture is quite different from projects like Gunicorn or Uvicorn.
Note: using multiple workers and respawn options (lifetime, max memory) on Linux requires kernel versions >= 5.14 and the
net.ipv4.tcp_migrate_reqsyctl option enabled. Otherwise, during workers respawns, queued connections in the backlog might be dropped.
Sockets and backlog
On Linux with TCP bindings, every Aethonan worker opens its own listening socket and the kernel distributes incoming connections across them. In this case, the backlog option applies to each worker's socket, thus the total amount of connections that can be queued by the kernel is backlog * workers.
On other platforms, and when binding to Unix Domain Sockets, workers share a single listening socket, thus the backlog is effectively global, as it's the size of one single queue.
Backpressure
Since Aethonan runs a separated Rust runtime aside of your application that will handle I/O and "send work" to the Python interpreter, a mechanism to avoid pushing more work that what the Python interpreter can actually do is provided: backpressure.
Backpressure in Aethonan operates at the single worker's connections accept loop, practically interrupting the loop in case too many requests are waiting to be processed down the line. It is a per-worker concurrency limiter: connections exceeding the configured value will wait in the worker's socket queue – the network stack backlog provided by the OS kernel (and configured with the apposite parameter).
While on asynchronous protocols, the default value for the backpressure should work fine for the vast majority of applications, as work will be handled and suspended by the AsyncIO event loop, on synchronous protocols there's no way to predict the amount of interrupts (and thus GIL releases) your application would do on a single request, and thus you should configure a value that makes sense in your environment. For example, if your WSGI application never does I/O within a request-reponse flow, then you can't really go beyond serial, and thus any backpressure value above 2 wouldn't probably make any difference, as all the requests will just be waiting to acquire the GIL in order to be processed. On the other hand, if your application makes external network requests within the standard request-response flow, a large backpressure can help, as during the time spent on those code paths you can still process other requests. Another example would be if your application communicate with a database, and you have a limited amount of connections that can be opened to that database: in this case setting the backpressure to that value would definitely be the best option.
In general, think of backpressure as the maximum amount of concurrency you want to handle (per worker) in your application, after which Aethonan will halt and wait before pushing more work.
Warning: since backpressure interacts with the accept loop, it will limit connections, not the single requests. Keep-alive connections will handle multiple requests within a single connection, but Aethonan won't count those requests in the actual pressure. This also means, if you typically have several long-running keep-alive connections to your service (for example, if you run behind a reverse proxy), a backpressure value can prevent Aethonan to accept new connections once the amount of keep-alive connections reaches that limit. Under this circumstances, you want to ensure the configured backpressure is higher than the expected amount of keep-alive connections, and if you're trying to limit the concurrency, it's probably better to configure the blocking threads number rather than the backpressure itself.
Runtime mode
Aethonan offers two different runtime threading paradigms, due to the fact the runtime can be multi-threaded – in opposition to what happens in Python event-loop which can only run as a single thread.
Given you specify N threads with the relevant option, in st mode Aethonan will spawn N single-threaded Rust runtimes, while in mt mode Aethonan will spawn a single multi-threaded runtime with N threads.
Benchmarks suggests st mode to be more efficient with a small amount of processes, while mt mode seems to scale more efficiently where you have a large number of CPUs. Real performance will though depend on specific application code, and thus your mileage might vary.
By default (auto mode), Aethonan will pick the best option based on the rest of its configuration.
Metrics
Aethonan exposes the following runtime metrics in Prometheus format. All the metrics are prefixed with aethonan_, and the ones marked with worker scope are tagged with a worker label containing the worker ID.
| metric name | type | unit | scope | description |
|---|---|---|---|---|
workers_spawns |
counter | absolute number | global | Number of times Aethonan spawned a worker |
workers_respawns_for_err |
counter | absolute number | global | Number of times Aethonan respawned a worker due to an error |
workers_respawns_for_lifetime |
counter | absolute number | global | Number of times Aethonan respawned a worker due to exceeding lifetime |
workers_respawns_for_rss |
counter | absolute number | global | Number of times Aethonan respawned a worker due to exceeding resources usage |
workers_respawns_for_lifetime |
counter | absolute number | global | Number of times Aethonan respawned a worker due to exceeding lifetime |
worker_lifetime |
counter | seconds | worker | Current lifetime of the worker |
connections_active |
gauge | absolute number | worker | Number of active connections |
connections_handled |
counter | absolute number | worker | Number of accepted connections |
connections_err |
gauge | absolute number | worker | Number of failed connections |
requests_handled |
counter | absolute number | worker | Number of processed requests |
static_requests_handled |
counter | absolute number | worker | Number of processed requests for static files |
static_requests_err |
counter | absolute number | worker | Number of requests for static files resulted in a non 200 response code |
blocking_threads |
gauge | absolute number | worker | Current number of blocking threads in the pool (on async protocols this is always 1) |
blocking_queue |
gauge | absolute number | worker | Number of pending tasks for the blocking threadpool |
blocking_idle_cumulative |
counter | microseconds | worker | Cumulative idle time spent in the blocking threadpool |
blocking_busy_cumulative |
counter | microseconds | worker | Cumulative busy time spent in the blocking threadpool |
py_wait_cumulative |
counter | microseconds | worker | Cumulative time spent waiting on GIL (on the free-threaded build this is always 0) |
Static files
Aethonan offers the ability to offload static files serving directly to the server, without calling your Python application in the process.
The --static-path-route and --static-path-mount options accept multiple values, thus you can serve an arbitrary number of static locations in your application, the only condition being the number of routes and mounts specified should be the same:
$ aethonan \
--static-path-route /static \
--static-path-mount assets/static \
--static-path-route /media \
--static-path-mount assets/media \
package:app
Serving a specific file for directory listings
Aethonan also provides the option to rewrite a static location pointing to a directory to a file contained in such directory. This allows you to serve, for example, an index.html file in the static path tree:
$ aethonan \
--static-path-route /docs \
--static-path-mount generated/docs \
--static-path-dir-to-file index.html \
package:app
Note: while Aethonan performs a rewrite on the target directory, the file will still be served if the request path points to it directly (in the example above, requests pointing to
/docs/somefolderand/docs/somefolder/index.htmlwill both respond with the contents ofindex.html– if present). Also, the option will enable this behavior on all the static paths defined.
Native routes
Note: this is an experimental feature, and the API is expected to change.
Beside static files, Aethonan can serve specific paths directly from Rust, without involving the Python application at all. This is useful for endpoints that would otherwise pay the cost of a round-trip through the Python interpreter, like websockets.
Native routes are registered by the code building the aethonan._aethonan extension module, and matched on segment boundaries: /ws will match /ws and /ws/whatever, but not /wsfoo.
Since Aethonan is also usable as a Rust library, the routes can be provided by an out-of-tree crate, which becomes the artifact being built (the Python side is entirely stock Aethonan):
use pyo3::prelude::*;
#[pyo3::pymodule(gil_used = false)]
fn _aethonan(py: Python, module: &Bound<PyModule>) -> PyResult<()> {
aethonan::init_py_module(py, module)?;
aethonan::register_native_route("/ws", aethonan::NativeRouteKind::Websocket, handler);
Ok(())
}
A complete example is available in the examples/native-views directory.
Note: the clients group of a websockets route is bound to the worker, hence messages are not propagated across workers. If you need to broadcast to all the clients of a multi-worker setup, you will need to use an external broker.
The full design is described in the native routes documentation.
Proxies and forwarded headers
Since none of the supported applications protocols define a strategy for proxies' forwarded headers, Aethonan doesn't provide any option to configure its behaviour around them.
What Aethonan provides instead, for contexts in which is being run behind a reverse proxy, are wrappers you can use on top of your application, in order to alter the request scope based on the headers forwarded by the proxy itself. You can find such wrappers in the aethonan.utils.proxies module:
from aethonan.utils.proxies import wrap_asgi_with_proxy_headers, wrap_wsgi_with_proxy_headers
async def my_asgi_app(scope, receive, send):
...
def my_wsgi_app(environ, start_response):
...
my_asgi_app = wrap_asgi_with_proxy_headers(my_asgi_app, trusted_hosts="1.2.3.4")
my_wsgi_app = wrap_wsgi_with_proxy_headers(my_wsgi_app, trusted_hosts="1.2.3.4")
With these wrappers, Aethonan will use:
- the
X-Forwarded-Forheader to determine the client's IP address - the
X-Forwarded-Protoheader to determine the client's protocol
and replace the relevant request scope attributes with these values.
Since altering the request scope based on values from headers is security-sensitive, Aethonan will check the request is coming from a trusted host as specified by the trusted_hosts argument. By default this value is set to 127.0.0.1, which means Aethonan will only intercept those headers if the proxy resides on the same machine, but most likely that's not the case in a production environment: you should thus provide the correct set of addresses to the wrappers.
The trusted_hosts argument accepts either a string or a list of strings, where valid values are IP addresses (for example, 192.0.2.1 or fd12:3456:789a::1) and CIDR ranges (for example, 192.0.2.0/24 or 2001:db8:abcd::/48). The special catch-all value "*" (or ["*"]) will make Aethonan trust all hosts and effectively disable the security check.
Free-threaded Python
Warning: free-threaded Python support is still experimental and highly discouraged in production environments.
Since version 2.0 Aethonan supports free-threaded Python. While the installation process remains the same, as wheels for the free-threaded version are published separately, here we list some key differences from the GIL version.
- Workers are threads instead of separated processes, so there will always be a single Python interpreter running
- The application is thus loaded a single time and shared between workers
- In asynchronous protocols like ASGI and RSGI each worker runs its own AsyncIO event loop like the GIL version, but the loop will run in the worker thread instead of the Python main thread
Note: if for any reason the GIL gets enabled on the free-threaded build, Aethonan will refuse to start. This means you can't use the free-threaded build on GIL enabled interpreters.
While for asynchronous protocols nothing really changes in terms of workers and threads configuration, as the scaling will be still driven by the number of AsyncIO event loops running (so the same rules for GIL workers apply), on synchronous protocols like WSGI every GIL-related limitation is theoretically absent.
While the general rules in terms of I/O-bound vs CPU-bound load still apply, at the time being there's not enough data to make suggestions in terms of workers and threads tuning in the free-threaded Python land, and thus you will need to experiment with those values depending on your specific workload.
Customising Aethonan
Running Aethonan directly from Python instead of its CLI gives you access to some customization interfaces that let you alter its standard behaviour.
AsyncIO event loop initialization
As soon as you run Aethonan directly from Python instead of its CLI, you can customise the default event loop initialisation policy by overwriting the auto policy. Let's say, for instance, you want to use the selector event loop on Windows:
import asyncio
from aethonan import Aethonan, loops
@loops.register('auto')
def build_loop():
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
return asyncio.new_event_loop()
Aethonan(...).serve()
Hooks
Aethonan provides hooks registration interfaces to run code during specific phases of its lifecycle. Specifically, you have the following methods available:
on_startupon_shutdownon_reload
The mentioned methods accept a callable with no arguments that will be invoked during the relevant lifecycle phases. You can register your hooks simply passing them to the relevant method:
from aethonan import Aethonan
def my_hook():
print("hello from reload!")
server = Aethonan(...)
server.on_reload(my_hook)
Embedding Aethonan in your project
For projects requiring advance lifecycle management, or implementing their own process management strategy, Aethonan provides an embeddable server implementation, which provides async interfaces and won't spawn workers as processes or threads, but will run them as AsyncIO tasks.
Warning: the embeddable server is still experimental.
Note: the embeddable server only supports async protocols, thus WSGI is not supported. It's also limited to a single worker, as it runs over an existing event loop.
To embed Aethonan in your project, you can import the server from the relevant module:
from aethonan.server.embed import Server
server = Server(my_app, interface="asgi")
async def my_main():
await server.serve()
Note: as you might already figured out, the embed server accepts the application object as its first argument, instead of the import target string of the standard servers.
Given the serve method is now async, the embeddable server also provides two methods to manage its lifecycle, specifically:
stopreload
The idea is that you can spawn the server as a task, and later on interact with it in your own process loop:
async def my_main():
server_task = asyncio.create_task(server.serve())
await my_logic()
server.stop()
await server_task
Project status
Aethonan is compatible with Python 3.10 and above versions.
Aethonan follows the upstream Granian semantic versioning scheme for its releases, with a {major}.{minor}.{patch} scheme for versions numbers, and its version numbers track the upstream Granian version the fork is based on:
- major versions might introduce breaking changes
- minor versions introduce new features and backward compatible changes
- patch versions only introduce bug and security fixes
Fork-specific changes beyond upstream are kept minimal and isolated so the fork can be rebased onto new upstream releases.
The upstream Granian project — which Aethonan is forked from and which deserves all the credit for the vast majority of this codebase — is used in production by projects like paperless-ngx, reflex, searxng and Weblate, and by companies like Microsoft, Mozilla and Sentry.
License
Aethonan is released under the BSD License, like upstream Granian.
The upstream Granian codebase is copyright (c) Giovanni Barillari. The Aethonan fork changes are copyright (c) the Fidus Writer contributors. See the LICENSE file for details.
Metadata
Release files for aethonan 2.8.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aethonan-2.8.5.tar.gz | 139.0 kB | Without provenance | Details |
Built distributions (wheels)
Total release size: 441.0 MB
Release files / aethonan-2.8.5.tar.gz
| Download URL | aethonan-2.8.5.tar.gz |
|---|---|
| Size | 139.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9ddcab005c1f63635e83b780d72cf27f276c814d0579072772722912b4792b71
|
|
BLAKE2b-256 checksum How to use checksums |
193f4c593e275c688c124c97ef4100bf3bc9e01d09618170ae0ad9a049478b70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / aethonan-2.8.5-pp311-pypy311_pp73-win_amd64.whl
| Download URL | aethonan-2.8.5-pp311-pypy311_pp73-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | PyPy 3.11 PyPy 3.11 7.3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a01299e9c28451bf098c459bf1db54488abddba2d1fb5e01fe7a98e7db3a1640
|
|
BLAKE2b-256 checksum How to use checksums |
f9fb131d2237550bb8b0ebef55b5e86de21b73f13ae7b3ffa4b9eed63bc10c7b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl
| Download URL | aethonan-2.8.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | Linux musl 1.1+ x86-64 PyPy 3.11 PyPy 3.11 7.3 |
|
SHA-256 checksum How to use checksums |
95bca7fd5f85b9727ac2a673abf11cd24f23423d296b42f64ddf8a5c4ae03e59
|
|
BLAKE2b-256 checksum How to use checksums |
fc4e74bb196d768fdcfb2ac23a7a93e6cc7d6b63ea6a5f397f15b7222a9a6718
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl
| Download URL | aethonan-2.8.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | Linux musl 1.1+ ARMv7l PyPy 3.11 PyPy 3.11 7.3 |
|
SHA-256 checksum How to use checksums |
3d43839611fdd0c3d50320c67fc7abfd0b8d10a65def83a71152cdee8237785e
|
|
BLAKE2b-256 checksum How to use checksums |
f4745976765388357fcff6517c1984cc65a0b5a73695cf3ec77cd13988289b95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl
| Download URL | aethonan-2.8.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | Linux musl 1.1+ ARM64 PyPy 3.11 PyPy 3.11 7.3 |
|
SHA-256 checksum How to use checksums |
26daf13ed7e43a49a3b83a00efa5842f80ee59767eeb06003287b0e0cc585e30
|
|
BLAKE2b-256 checksum How to use checksums |
236fe1cc76272ce6e26bd240fca8d1a261bd82746884231a0a7ccad05f2198d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl
| Download URL | aethonan-2.8.5-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | Linux glibc 2.28+ ARM64 PyPy 3.11 PyPy 3.11 7.3 |
|
SHA-256 checksum How to use checksums |
d8750d253e89e46620838291e31c0a85e835905537f089baa423cfe4acd44bdb
|
|
BLAKE2b-256 checksum How to use checksums |
811f47777ecd96dd639f3589079d6abbc405fac7fa94bb39a2ff5cf497cc93a6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aethonan-2.8.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | Linux glibc 2.17+ x86-64 PyPy 3.11 PyPy 3.11 7.3 |
|
SHA-256 checksum How to use checksums |
964a7f93c89a302c283f4158bf92a1112e02ed7c9d1a9f8240c3c55c594dd383
|
|
BLAKE2b-256 checksum How to use checksums |
5339feaf98dd0defef43aac14c82417eb90fbc198163c31b5e01fa226a0dadc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl
| Download URL | aethonan-2.8.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | PyPy 3.11 PyPy 3.11 7.3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
97aca80cd5a3f1b4228b2f64a772cc387c6aa42dfa85480c3a8f54d89c37d180
|
|
BLAKE2b-256 checksum How to use checksums |
3498bec012be3f5edd4838723bac0a7f6c3f9b9ef8a75eebcd3aa36c72126f02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
| Download URL | aethonan-2.8.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | PyPy 3.11 PyPy 3.11 7.3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
5078cbe143d4bf079d5e7f059e50ac9180a7c5484be021fd120bc71926814a8f
|
|
BLAKE2b-256 checksum How to use checksums |
4998a12c7fd67d21f23efe9f1bb79d3e7dab3e8631f1df08bef9a3b4d8c18b1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-win_amd64.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-win_amd64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b1d57eb7ce0993f64cfb26e844965b798e49c75c6bddd1f8c06272a125fffc19
|
|
BLAKE2b-256 checksum How to use checksums |
01d3d7aee4dbb41ae3d08cea788caafb27e7815b7f09798dde0c3276064be924
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-musllinux_1_1_x86_64.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux musl 1.1+ x86-64 |
|
SHA-256 checksum How to use checksums |
b453d35b72fc453653fea9788a1788a8183b2a80ca4e2b7c0207a3aa870df405
|
|
BLAKE2b-256 checksum How to use checksums |
8479fd736a20bc71057a95f576d551ebc1912c0a1d0f33d78cd990810b75b98a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-musllinux_1_1_armv7l.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux musl 1.1+ ARMv7l |
|
SHA-256 checksum How to use checksums |
9af9e99624b4d9fba0dad4dc55cad10964226547520f6259b3e08e9e0acdf5e1
|
|
BLAKE2b-256 checksum How to use checksums |
6ebec8148510e5a53b41a2327a4e92a8ee29f3902ac38216a90ea09cbea878ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-musllinux_1_1_aarch64.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux musl 1.1+ ARM64 |
|
SHA-256 checksum How to use checksums |
3812e20fbba4689fef3729a0595f1f1e279427e64b34e77d95891a4b84f91fd5
|
|
BLAKE2b-256 checksum How to use checksums |
d4f71ebcb0ed843d1556ac52a6a939ffbca6bca983020052117847cab370d2cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-manylinux_2_28_aarch64.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
e940cb9fff9ff1f3b69ddb458da2ff322560da8479649b4a72e9f4a0ea54c104
|
|
BLAKE2b-256 checksum How to use checksums |
2c12d0c4ebf4789ff91aa44b60f87e9ffa118fd87b666f4b41c165c8bc2e134e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
7f96482707fe2cc77e6a230b51426282eafd62cc6ed9be568d48705766bce78e
|
|
BLAKE2b-256 checksum How to use checksums |
084ef0aad5e4a9a4cbc44351e2029c3b96cdab04f71e06efb806dbbb1d2650c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ ARMv7l |
|
SHA-256 checksum How to use checksums |
df1eb1b5bdee8010d35065415d713589d83def47c8b7e70b52f5ecb786008cff
|
|
BLAKE2b-256 checksum How to use checksums |
2874e6f02fc43f1df621ce3d6d513a0f41994e1b06b7f327d1090bc6c4f9bf49
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-manylinux_2_12_i686.manylinux2010_i686.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-manylinux_2_12_i686.manylinux2010_i686.whl |
|---|---|
| Size | 4.6 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux glibc 2.12+ x86-32 |
|
SHA-256 checksum How to use checksums |
3f284326b86ea81e1ab0ec7e6794f32673eaca57f1164ea6c66d0c540be497b7
|
|
BLAKE2b-256 checksum How to use checksums |
86a03ef6555bf8c20a400308d34c84f87ed7fb2c462108267de272cd0cb1fa82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-macosx_11_0_arm64.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.3 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
de12fe423b4f6d5fbe82edda1bf3c15bb63d8b12bfe45c11f668c856275e85a1
|
|
BLAKE2b-256 checksum How to use checksums |
c69e717a3cb9d12238df456d505fe4a54643af31578f63c10890931e73bc2727
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315t-macosx_10_12_x86_64.whl
| Download URL | aethonan-2.8.5-cp315-cp315t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
b604b1a9470ece5ddf4d29aa0d7d3ba088721df0746b145ec210a4fc369273dd
|
|
BLAKE2b-256 checksum How to use checksums |
de4bbb0f50ebae03337f8a8a56f253b57c50f01ff56fdc9b8a2b880738433d80
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-win_amd64.whl
| Download URL | aethonan-2.8.5-cp315-cp315-win_amd64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.15 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
99865f0aa340bf75b3d39459deaf279e8e2d6b14cf5bed9157ad40df2c36d336
|
|
BLAKE2b-256 checksum How to use checksums |
a073a5cd9d5befc4e7ff29eb9c898486bbfe5849fd04ba0d702f58ee9b644180
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-musllinux_1_1_x86_64.whl
| Download URL | aethonan-2.8.5-cp315-cp315-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.15 Linux musl 1.1+ x86-64 |
|
SHA-256 checksum How to use checksums |
b776c2a05eb221f4ab4768a3e45a8f4fae33dcb54015381c276ab5f1c185ad49
|
|
BLAKE2b-256 checksum How to use checksums |
d9cddf515048df1007a62f1bd17b25a94c48265feb52346df1f024a2eca6ea51
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-musllinux_1_1_armv7l.whl
| Download URL | aethonan-2.8.5-cp315-cp315-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.15 Linux musl 1.1+ ARMv7l |
|
SHA-256 checksum How to use checksums |
1deeecf078d03a68900b385d209066bff6c6f47215474a939a545413d034ee70
|
|
BLAKE2b-256 checksum How to use checksums |
43e4295c257683d5f39cf5416c93a02bfc17547d329ab95d4fb315df19fe9bda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-musllinux_1_1_aarch64.whl
| Download URL | aethonan-2.8.5-cp315-cp315-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.15 Linux musl 1.1+ ARM64 |
|
SHA-256 checksum How to use checksums |
eb7ae7b2d293b59b9f6eba01ecd294e71dd9cf16f6d8504abfcf713ace1dc9a8
|
|
BLAKE2b-256 checksum How to use checksums |
8a08177c01817d588c3386120d0e62d3b3d154b5ff913ee7ac4816d9259c320b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-manylinux_2_28_aarch64.whl
| Download URL | aethonan-2.8.5-cp315-cp315-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.15 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
c3a2cc96c87013e765a54e92c2e7bf038459e01131ab4f895f23dc9f948f6c8a
|
|
BLAKE2b-256 checksum How to use checksums |
f8c5064b212cf49448f215e008f0973417113227ae55250b3a83504b3168a27d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aethonan-2.8.5-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.15 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
682c8a0a186d849af42494f873962666597330a8870d9a98fe6308ed76eb1c70
|
|
BLAKE2b-256 checksum How to use checksums |
25d4bd517d03cfa18c2f69ecdbca9ac00a2c4d69dba92c8cb80e7b3f119af279
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | aethonan-2.8.5-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.15 Linux glibc 2.17+ x86-32 |
|
SHA-256 checksum How to use checksums |
04b1aaa1e35cb988c635ed6c375b2eea913d8909ae32f37393aa06cc3923aef8
|
|
BLAKE2b-256 checksum How to use checksums |
721b19320060fcb50750de428447f59b01b5fe022bdcfc0b6ae930b13b671c56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aethonan-2.8.5-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.15 Linux glibc 2.17+ ARMv7l |
|
SHA-256 checksum How to use checksums |
69609d91f947f129156333d5cd393eab0de88f54d8f53c45e341742cd9deaccb
|
|
BLAKE2b-256 checksum How to use checksums |
05f84c16c995b252bb203f1c1fe87fd1aaed3c971c4a02fddb364ba85e46c03d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-macosx_11_0_arm64.whl
| Download URL | aethonan-2.8.5-cp315-cp315-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | CPython 3.15 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c51627733d1c69aee6bd1bde97dcc2c8003fdf0741dd2e9b955d374b2ae17209
|
|
BLAKE2b-256 checksum How to use checksums |
c4d5168f13b2f555a123a5f83afebf2d0fabe4044d70052f77e077154bb4a0f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp315-cp315-macosx_10_12_x86_64.whl
| Download URL | aethonan-2.8.5-cp315-cp315-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.15 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
c60dd9139f67f7aef6b0ceec1746cbb37f8a37fc601fe7ac69cae89bda4b1eb2
|
|
BLAKE2b-256 checksum How to use checksums |
8ff769dd7f8f76950f15543f970d5ea9cc31a16dee48a6fcdc2e5e14bcb8b6d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-win_amd64.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a2221ad3d2a5f206e7e600ddf58271474051a9152e4cf1797badaf91d70e0cc6
|
|
BLAKE2b-256 checksum How to use checksums |
2b37d9949b99662a9a580b3dfc15a73f5dfb6176760cb077b8b58f4d5a429ccd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-musllinux_1_1_x86_64.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ x86-64 |
|
SHA-256 checksum How to use checksums |
c04493f9a9bf9e6dd87c14e9373ed278805a44cb0f4b068e3beeb5eda9fe9454
|
|
BLAKE2b-256 checksum How to use checksums |
6da0d8acf442629998df6ffc337e3e29e59e0dad9ffd1be41017fe47e5c3e19f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-musllinux_1_1_armv7l.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ ARMv7l |
|
SHA-256 checksum How to use checksums |
68703f6e73434fab9d350b42f94273f0e655c3a5628139c88de344ff3673e4a5
|
|
BLAKE2b-256 checksum How to use checksums |
bed11f8f2887728bdac014613578f990aad364721ebe4c6f1923b9afbb44b98b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-musllinux_1_1_aarch64.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ ARM64 |
|
SHA-256 checksum How to use checksums |
2e6c600c1a9b7ad02a2e24e3e79fc27b383cc54df6958b612b900abfc68f8fa7
|
|
BLAKE2b-256 checksum How to use checksums |
7f4426aa2b7a90ddcf6f4d68740c5fce92709e0f432ffeda9ba0397769d72976
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-manylinux_2_28_aarch64.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
7cf1f91d138a084ec6fcddc921463a98905ae9bd724450435ad2336508de9182
|
|
BLAKE2b-256 checksum How to use checksums |
81cfbc1d53ab8d66c2c5e9e4cefe31060fd241dfeb183a9073ac956c8407bb50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
55b24903c7912b527b87e967620905c9e9bc631a951d20d9e49c65d4de4c79af
|
|
BLAKE2b-256 checksum How to use checksums |
3929ee0c32cffb0466bc6f8a48599dea38a5e511f9ee81742757a33a29cebf74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l |
|
SHA-256 checksum How to use checksums |
c39af357386d863ca5957fd93408f434506cadf6e82825701de75ad6b79b490d
|
|
BLAKE2b-256 checksum How to use checksums |
7d772637350d8f5095ce1825f2e89ec7d724e848a0bd0e85169c184cda8432fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl |
|---|---|
| Size | 4.6 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.12+ x86-32 |
|
SHA-256 checksum How to use checksums |
a912ce1bfeb934f2267ec861deae80b20b5ab325c45bdff2a25304b73edaec8f
|
|
BLAKE2b-256 checksum How to use checksums |
0543a48f567ba85e2907ed8ad3115c4304028fb7a2482f1ad982ad7a8abd1851
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5c4fba51130b3a0202bd755c218a98a3a16de83285c7d2f0d4654917f07f1d0e
|
|
BLAKE2b-256 checksum How to use checksums |
85c42dab2c1566010119d7c3d5cf45760f17780a7c37967614e56caac6df4265
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314t-macosx_10_12_x86_64.whl
| Download URL | aethonan-2.8.5-cp314-cp314t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
58889cab18679d1cae5b8c9b4c765134999663a22fdac50600cc18ffec66525a
|
|
BLAKE2b-256 checksum How to use checksums |
056a5ff16b46ac076cd1179479da8ba94cc8d9250a8bcd5753c564ee158039c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-win_amd64.whl
| Download URL | aethonan-2.8.5-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9f3d61752fe38eea755a7b7e8782d0865cdd5d1276eaec1630042d7acacf6940
|
|
BLAKE2b-256 checksum How to use checksums |
68187a9e2425f27f3c10a506f56ffac9f0d62955aa503968cdd210593e1225bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-musllinux_1_1_x86_64.whl
| Download URL | aethonan-2.8.5-cp314-cp314-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.14 Linux musl 1.1+ x86-64 |
|
SHA-256 checksum How to use checksums |
ca1e44c1ba2934a62447deae8948723026001169037640af7fa3fb3eaf5233e5
|
|
BLAKE2b-256 checksum How to use checksums |
6f58ec1131a095904f7a051dda2fc277523326c839d28937fc2f72b2ec974a81
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-musllinux_1_1_armv7l.whl
| Download URL | aethonan-2.8.5-cp314-cp314-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.14 Linux musl 1.1+ ARMv7l |
|
SHA-256 checksum How to use checksums |
79e344867d854aad1e8bd31644eec3c8aed2b0fa48431d3eb8618d0737383562
|
|
BLAKE2b-256 checksum How to use checksums |
ae891b5028605ab98ef0aade4cefd13ff7a47d262aade02795e365c6b795962f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-musllinux_1_1_aarch64.whl
| Download URL | aethonan-2.8.5-cp314-cp314-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.14 Linux musl 1.1+ ARM64 |
|
SHA-256 checksum How to use checksums |
c0ed6dc1b8a4387fb8bd7d1d25c6a0a6ce1efd7b657b119fb1e4658dc9c2ad68
|
|
BLAKE2b-256 checksum How to use checksums |
1f7a4c954210f1080e00517415b59df5486f5a637435f3fa84e0231670b1b90c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-manylinux_2_34_x86_64.whl
| Download URL | aethonan-2.8.5-cp314-cp314-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.14 Linux glibc 2.34+ x86-64 |
|
SHA-256 checksum How to use checksums |
a59f75475af2b127fe3bb3e4c85a41d90e262b8d7301ddcf4745c78cda69f561
|
|
BLAKE2b-256 checksum How to use checksums |
1a2b093ed65c03935f35d4583511b2f793c4ee7f7288f8c601362837fbd0323c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / aethonan-2.8.5-cp314-cp314-manylinux_2_28_aarch64.whl
| Download URL | aethonan-2.8.5-cp314-cp314-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
0cdb408b3e24f560ce17201837e90a340b3eb15cf64305c56d35168072d07747
|
|
BLAKE2b-256 checksum How to use checksums |
99590b40e14d4cb1eeb3c1ad03b5a8dba01011b17d3edc93a1c2ee19a1262cb8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aethonan-2.8.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
16b8cfdd903028a16a6d851c16cfb9eafafad5fcc71295c8890315df956ec61b
|
|
BLAKE2b-256 checksum How to use checksums |
69548cbb17bb4ba726420fb8b50f61049a44eb5c9a354b24f62f892c94a828ec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | aethonan-2.8.5-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-32 |
|
SHA-256 checksum How to use checksums |
877e162673407d8e39945a6c4f3cebc9357e17a38f45c04ecacb4a14e5a4f4a5
|
|
BLAKE2b-256 checksum How to use checksums |
b8a61973416be53351723d88be58ff175a8b99faa480292f6217c7cc304447ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aethonan-2.8.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARMv7l |
|
SHA-256 checksum How to use checksums |
a144f375b108f68c816e96d653a8d12ae2800433f3694ac3e3e5edded701b1ab
|
|
BLAKE2b-256 checksum How to use checksums |
fd529bd2058b91574930ae9f37c462bf490f4a23b0289778427017a05f35942c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | aethonan-2.8.5-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e33f82a255d4d071c6c50e52ad0916a4444f5a88237a0d23ba5a723fcc348a8e
|
|
BLAKE2b-256 checksum How to use checksums |
538aa7a73a53202b61c701bc2a587cc19799d7ee2be98d8dbf247fba4ef4c88a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp314-cp314-macosx_10_12_x86_64.whl
| Download URL | aethonan-2.8.5-cp314-cp314-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.14 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
e6b435b6e199d227c6a19896b7ff38b3433dffb583831334939e404c94ecb5a1
|
|
BLAKE2b-256 checksum How to use checksums |
018c8e70cfbdad3e6270cca65540e0b4051d7ce3aa43c06dcf5a159df5514c74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-win_amd64.whl
| Download URL | aethonan-2.8.5-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2edf6f22bda47aaa3c4630572e8ff055f7cdb1753970b664710024df0f173fef
|
|
BLAKE2b-256 checksum How to use checksums |
8d2d1933dc63319ef281af604e1c10257fc341ac39450cb817097d68bb730c31
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-musllinux_1_1_x86_64.whl
| Download URL | aethonan-2.8.5-cp313-cp313-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.13 Linux musl 1.1+ x86-64 |
|
SHA-256 checksum How to use checksums |
1248c285a438aea9461500efe82746ecbe054cd5dcbe80978a35effdd2106635
|
|
BLAKE2b-256 checksum How to use checksums |
6fd4be59da79cec642acf997a489365111c28f0dcf920833c2f1d2937f92e958
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-musllinux_1_1_armv7l.whl
| Download URL | aethonan-2.8.5-cp313-cp313-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.13 Linux musl 1.1+ ARMv7l |
|
SHA-256 checksum How to use checksums |
c51cabd35c3e947391c48c0664af01c50821a4d624569fb793afa7570bd71c88
|
|
BLAKE2b-256 checksum How to use checksums |
5631822557323d5e834683d38fde73bfea0b53be299f48983d1e218269733141
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-musllinux_1_1_aarch64.whl
| Download URL | aethonan-2.8.5-cp313-cp313-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.13 Linux musl 1.1+ ARM64 |
|
SHA-256 checksum How to use checksums |
860bcba4d2c627447fe5a1d16e2d537e8bd0419c1b96fb9c46bb9aa7af9c2461
|
|
BLAKE2b-256 checksum How to use checksums |
be848f6fd893fe9b23cbdd9706c7a45a6cc4f28037442d1633691343ed47ee5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-manylinux_2_28_aarch64.whl
| Download URL | aethonan-2.8.5-cp313-cp313-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
5cc8a2e590bf85e9c3e74578e141759324ec5b222f391a2c8a7af9ad29acf181
|
|
BLAKE2b-256 checksum How to use checksums |
07e09601317eeec62bc61d7a42465e157d3f5ecd1d5976a479596a4257fb69d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aethonan-2.8.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
fd6e275448cd391b6a1d2671a0120b66de514f6cd3ceca325bcc80228944b597
|
|
BLAKE2b-256 checksum How to use checksums |
aea20895c419c5fe3523e7f92e998ad2dbdbd4bb7373355adefcb8855fce517e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | aethonan-2.8.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-32 |
|
SHA-256 checksum How to use checksums |
355d95f46dee161500a13cebb23c9ee76ae8123fa1a6fac651ef15230272255c
|
|
BLAKE2b-256 checksum How to use checksums |
0865864bc8bfdee6a5cbebd48aafb63f6010f417332cd87ef901d37a48f53fa8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aethonan-2.8.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARMv7l |
|
SHA-256 checksum How to use checksums |
ad6d90b79addf3705381c097a38269ad5365588969b9a36a757aecf2969297fc
|
|
BLAKE2b-256 checksum How to use checksums |
a8fb59ca4bd532252e21c6b9a9f7c5b165567ee8171cc7ca9cc3e5d3b6c72a0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | aethonan-2.8.5-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6878b644847dd621a08a985d5dd2b33514964f60ea112c37f6be0d49d2ee7d00
|
|
BLAKE2b-256 checksum How to use checksums |
66e945ce3e86e7933a3fe5c96bcc5f2964c724b8b8493ae8b84f5719729f0bde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp313-cp313-macosx_10_12_x86_64.whl
| Download URL | aethonan-2.8.5-cp313-cp313-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.13 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
0a3d5ff144df9b3b928b5d5272bc4bc07285954ff5fa4aba37b51732a3054eb7
|
|
BLAKE2b-256 checksum How to use checksums |
dd41b69c452a19d1273259e96eb242a9f51a23b7835908380303a2ed4d395865
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-win_amd64.whl
| Download URL | aethonan-2.8.5-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
989714ec8e53111504beb380309059663746a15cff23cc0d809519c0de71f01c
|
|
BLAKE2b-256 checksum How to use checksums |
2dc83ccf38ece75e3e61afe0e73d20d18942045a534fb9be5924b97cfbc47ed6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-musllinux_1_1_x86_64.whl
| Download URL | aethonan-2.8.5-cp312-cp312-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.12 Linux musl 1.1+ x86-64 |
|
SHA-256 checksum How to use checksums |
204db685451ceda169996a4936004bbfdb6c760e1923a3e393fc95314ffa5006
|
|
BLAKE2b-256 checksum How to use checksums |
9ca2092ff5c99609bc059cd11f4bbeddf6941f8c80720a7a49827380a79f7706
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-musllinux_1_1_armv7l.whl
| Download URL | aethonan-2.8.5-cp312-cp312-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.12 Linux musl 1.1+ ARMv7l |
|
SHA-256 checksum How to use checksums |
4ab5b812e0814c11a61bbf9736081055b46bee186c8828ca4ed9b04f19101443
|
|
BLAKE2b-256 checksum How to use checksums |
9b8fe33dce9f42e8ea4d02e2da4f18de09ebfa565a04037b49edca30fc648022
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-musllinux_1_1_aarch64.whl
| Download URL | aethonan-2.8.5-cp312-cp312-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.12 Linux musl 1.1+ ARM64 |
|
SHA-256 checksum How to use checksums |
baf6054b8e3e7d789b8031a4ff8ad2932676fb110ae2f71b6617d5237b0d4af4
|
|
BLAKE2b-256 checksum How to use checksums |
992bb3438ea2e352f8e266b74bef66fe4c63bc4dd3101b0630e673f6afb6b791
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-manylinux_2_28_aarch64.whl
| Download URL | aethonan-2.8.5-cp312-cp312-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
635a22ba50cfa252f03cb1e682e42e91f299e936bb8bc71dfc7f7b156549e4cf
|
|
BLAKE2b-256 checksum How to use checksums |
f18e8c865c94f963398671972264a4a5e30cec41706192f4c904e1261f7fb738
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aethonan-2.8.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
0d3cb7b53459ae8be1cee02fc7ffbcf9b9a08112e149dc75a4bbfda0b129a8f6
|
|
BLAKE2b-256 checksum How to use checksums |
f26028e8db1b1c7a4d92345882159b339723d698c312f9b81aa50bd756e4916b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | aethonan-2.8.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-32 |
|
SHA-256 checksum How to use checksums |
074ee29b3dc0c551e070cb048f5d8f2c53226290e70766523d82a6be81696a2b
|
|
BLAKE2b-256 checksum How to use checksums |
bda34f8f677d5cb5c296db081bddcb80279b399fed4c024a44c13bf94b934723
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aethonan-2.8.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARMv7l |
|
SHA-256 checksum How to use checksums |
d81aa3bcf88b319529608e672b93bc5f44b0286ab78f77902dc2cb9435c784aa
|
|
BLAKE2b-256 checksum How to use checksums |
5355933b9a0e9b0688756edb47422d09fe8f3fa315dd18d86f94b37d848635e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | aethonan-2.8.5-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c17de9d556d64a6c6e564d5ad2026a0c14889d45e16ba7dfcac7427b7a1e7835
|
|
BLAKE2b-256 checksum How to use checksums |
bdbb424da475dd956f545daf3034d0ca30888446bdad83dd9cbfb3b4d4753014
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp312-cp312-macosx_10_12_x86_64.whl
| Download URL | aethonan-2.8.5-cp312-cp312-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.12 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
9566d8ecd7aebf6d2e0574bd66c8e1d0ff3af40cfe22fd6a111dbf5332cb43b6
|
|
BLAKE2b-256 checksum How to use checksums |
b70041606a4f8d0f289c46cb9f8a9e8ef7e4261d31d47ca9aaffb06ff4cc5f96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-win_amd64.whl
| Download URL | aethonan-2.8.5-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
958a0d504bc3d53fe72f7a87f87ac2f75d623ac22b2ee65fd8b0ebc32f112aa1
|
|
BLAKE2b-256 checksum How to use checksums |
5887bdea77c8e79cbb09e041058620dc29237582632d3022ed59f7133a0809de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-musllinux_1_1_x86_64.whl
| Download URL | aethonan-2.8.5-cp311-cp311-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.11 Linux musl 1.1+ x86-64 |
|
SHA-256 checksum How to use checksums |
2d1b4636ecb43a11fa9cf65f76422d2683c2128c013add8aac737e4c783bea88
|
|
BLAKE2b-256 checksum How to use checksums |
0459e739d46c75b7ad9972a70debaed060a2de6c9274ceabc673d8872a696627
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-musllinux_1_1_armv7l.whl
| Download URL | aethonan-2.8.5-cp311-cp311-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 5.5 MB |
| Tags | CPython 3.11 Linux musl 1.1+ ARMv7l |
|
SHA-256 checksum How to use checksums |
febda96c6e76c6379ef55f650d0a1475674e37bfde2352f007a4bd1ff1d2372b
|
|
BLAKE2b-256 checksum How to use checksums |
4af3a92bac8d2fab656193a6fad073c363808fe196e31788cd6122d30a5a51ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-musllinux_1_1_aarch64.whl
| Download URL | aethonan-2.8.5-cp311-cp311-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.11 Linux musl 1.1+ ARM64 |
|
SHA-256 checksum How to use checksums |
358a36406b55811b2e8d647d52f16806696b4b58aa0c83d7ee532534b2f0643d
|
|
BLAKE2b-256 checksum How to use checksums |
64281aeae87675ea2289b3c31e5bca18a279e3499aa617af344edcb82d17e3a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-manylinux_2_28_aarch64.whl
| Download URL | aethonan-2.8.5-cp311-cp311-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
0d97dee565322fd5ed7a79cd0ba91eaae39daf89c0abe29e7a135237484c4925
|
|
BLAKE2b-256 checksum How to use checksums |
8ce706a09cdd9e42eba03b900217ec17d9c2797bae707de9ddc3e70f8e6eb914
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aethonan-2.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
dda0df6ab4bae39e3d4540f6be428862dda950f54f524387cc612d3c17fc3105
|
|
BLAKE2b-256 checksum How to use checksums |
a9f4e2319e4f9c95271512441310a60b09660166ec7a758da9d9143e4a6a7cda
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | aethonan-2.8.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-32 |
|
SHA-256 checksum How to use checksums |
068c73f49b2b0e3c01b434b519cd22e9ed14688a3a305ad57c2289d9c87b0ba1
|
|
BLAKE2b-256 checksum How to use checksums |
2a472a389278907cb7489788110db3b34de7e2c5616fdfed75e6c81c7b99efeb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aethonan-2.8.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARMv7l |
|
SHA-256 checksum How to use checksums |
83085171eb263891c73a11a597ce14ed687b04b43ff05df3aa1daeb797095f18
|
|
BLAKE2b-256 checksum How to use checksums |
3597794b3410a0fd77551e5bc6fe5f288f6b4c6ab99113f05df41d658f429acf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | aethonan-2.8.5-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f91257470e9de8781478843dd0d2f0f1dc5eac766677e8581871836923e1e70a
|
|
BLAKE2b-256 checksum How to use checksums |
6edac08f132389a21ad9fc7d5d8721c214cf014920d790562c03aa0a152699c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp311-cp311-macosx_10_12_x86_64.whl
| Download URL | aethonan-2.8.5-cp311-cp311-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.11 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
33126869d26210595abb7004918869c4f30be7c3b6aa614fe46cde25124482ac
|
|
BLAKE2b-256 checksum How to use checksums |
ccbf80ff80c2e3342e7bfc61cc1ceab9f667e14c25225badfd309cc1986de28e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-win_amd64.whl
| Download URL | aethonan-2.8.5-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
fd483cb1800dc9cca6db8ed53d26e813c57a6f35d08bbc96e8e6b6e523a3eb16
|
|
BLAKE2b-256 checksum How to use checksums |
b1f1d71291d6eece314ebbe4ea7d8c72f5abbbe9cdd7eab82689f321f06b67e3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-musllinux_1_1_x86_64.whl
| Download URL | aethonan-2.8.5-cp310-cp310-musllinux_1_1_x86_64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.10 Linux musl 1.1+ x86-64 |
|
SHA-256 checksum How to use checksums |
e9a4eb84936e835321d20ed70c3f5f5c3c974aa8f1a820db7030371e4e433e66
|
|
BLAKE2b-256 checksum How to use checksums |
6b660f8afb31a987f3595e6fef5f989b04ee5f0556925dc426a0424ea799eddc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-musllinux_1_1_armv7l.whl
| Download URL | aethonan-2.8.5-cp310-cp310-musllinux_1_1_armv7l.whl |
|---|---|
| Size | 5.2 MB |
| Tags | CPython 3.10 Linux musl 1.1+ ARMv7l |
|
SHA-256 checksum How to use checksums |
ae2e8538b4801bb277a4d148a61fce1bea5564ecce651aa4d6213ebdd5bb4309
|
|
BLAKE2b-256 checksum How to use checksums |
b0e63a47c61079c3ea0f71f4d6cc551c0355a953f3b8fe563672bf04bcb3f2b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-musllinux_1_1_aarch64.whl
| Download URL | aethonan-2.8.5-cp310-cp310-musllinux_1_1_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.10 Linux musl 1.1+ ARM64 |
|
SHA-256 checksum How to use checksums |
f74b7d6274ccb26c665970f46e847113b423049da56386d2fa153fb0d8a5972a
|
|
BLAKE2b-256 checksum How to use checksums |
667f7be2fbcde4d56d9d7afc2b40d78ffaa0f84309c21ac7e1f9ae77399e5f1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-manylinux_2_28_aarch64.whl
| Download URL | aethonan-2.8.5-cp310-cp310-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
b86f753733ba94a8c40e9bcb4f541cf39f504a11ae7011f3ac96e251b43ebf0b
|
|
BLAKE2b-256 checksum How to use checksums |
967ddf71f3227f763936408d8a80177dc3624cb63113b90a3fc2117bb67ce3ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | aethonan-2.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
bc32c7272f9b97708cb42cfa3e903681f28dc034a7716b798d20520136a4580d
|
|
BLAKE2b-256 checksum How to use checksums |
9beb5831e52b092d0cc9a3dcfc1f7d42be8abe289f0ae9d3e8f42e6670f1f89f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | aethonan-2.8.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 4.7 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-32 |
|
SHA-256 checksum How to use checksums |
53c9dc62e122747f8153adcc2e925b23a24f738b05031868748580fe1f124c8d
|
|
BLAKE2b-256 checksum How to use checksums |
e329bcf35c52e621098cede2e153643df2078cf7c9a6414df7f50ca22439a775
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
| Download URL | aethonan-2.8.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl |
|---|---|
| Size | 5.2 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARMv7l |
|
SHA-256 checksum How to use checksums |
f58d24aa2a7cac97d85a2ad59613bd6b43a0a2583e61feef10bc662b5a7e8b3d
|
|
BLAKE2b-256 checksum How to use checksums |
110bb598115684687549b44f162b34d3225eb2f65bc1d5cd95cd83b0e741f4d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | aethonan-2.8.5-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7e71efcab2751a3add8fc80acded5040194db72c70b417fa41b01592ba73fa76
|
|
BLAKE2b-256 checksum How to use checksums |
4d42005d75acd8c2c74c250739003b4f9b6e9f0e71df18162c856216de71fc5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / aethonan-2.8.5-cp310-cp310-macosx_10_12_x86_64.whl
| Download URL | aethonan-2.8.5-cp310-cp310-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.10 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
9de138fd68dcd10f049ffef113d8acbd6d01e51d723c36e727d744678783907e
|
|
BLAKE2b-256 checksum How to use checksums |
07562acb77a5ef3c2d5e668a7c23a9c0129b9af35ae1d73987dc89f2ea7995be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for aethonan 2.8.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.