Skip to main content

aethonan

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 the AETHONAN_ 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 trio or gevent
  • 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 _aethonan logger for runtime messages
  • the aethonan.access logger 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_req syctl 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/somefolder and /docs/somefolder/index.html will both respond with the contents of index.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:

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_startup
  • on_shutdown
  • on_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:

  • stop
  • reload

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)

Source distribution for aethonan 2.8.5
File Size Uploaded Provenance
aethonan-2.8.5.tar.gz 139.0 kB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for aethonan 2.8.5
File
aethonan-2.8.5-pp311-pypy311_pp73-win_amd64.whl PyPy 3.11 PyPy 3.11 7.3 Windows x86-64 Details
aethonan-2.8.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl PyPy 3.11 PyPy 3.11 7.3 Linux musl 1.1+ x86-64 Details
aethonan-2.8.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl PyPy 3.11 PyPy 3.11 7.3 Linux musl 1.1+ ARMv7l Details
aethonan-2.8.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl PyPy 3.11 PyPy 3.11 7.3 Linux musl 1.1+ ARM64 Details
aethonan-2.8.5-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.28+ ARM64 Details
aethonan-2.8.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.17+ x86-64 Details
aethonan-2.8.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl PyPy 3.11 PyPy 3.11 7.3 macOS 11.0+ ARM64 Details
aethonan-2.8.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl PyPy 3.11 PyPy 3.11 7.3 macOS 10.12+ x86-64 Details
aethonan-2.8.5-cp315-cp315t-win_amd64.whl CPython 3.15 CPython 3.15 free-threading Windows x86-64 Details
aethonan-2.8.5-cp315-cp315t-musllinux_1_1_x86_64.whl CPython 3.15 CPython 3.15 free-threading Linux musl 1.1+ x86-64 Details
aethonan-2.8.5-cp315-cp315t-musllinux_1_1_armv7l.whl CPython 3.15 CPython 3.15 free-threading Linux musl 1.1+ ARMv7l Details
aethonan-2.8.5-cp315-cp315t-musllinux_1_1_aarch64.whl CPython 3.15 CPython 3.15 free-threading Linux musl 1.1+ ARM64 Details
aethonan-2.8.5-cp315-cp315t-manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.28+ ARM64 Details
aethonan-2.8.5-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ x86-64 Details
aethonan-2.8.5-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ ARMv7l Details
aethonan-2.8.5-cp315-cp315t-manylinux_2_12_i686.manylinux2010_i686.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.12+ x86-32 Details
aethonan-2.8.5-cp315-cp315t-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64 Details
aethonan-2.8.5-cp315-cp315t-macosx_10_12_x86_64.whl CPython 3.15 CPython 3.15 free-threading macOS 10.12+ x86-64 Details
aethonan-2.8.5-cp315-cp315-win_amd64.whl CPython 3.15 CPython 3.15 Windows x86-64 Details
aethonan-2.8.5-cp315-cp315-musllinux_1_1_x86_64.whl CPython 3.15 CPython 3.15 Linux musl 1.1+ x86-64 Details
aethonan-2.8.5-cp315-cp315-musllinux_1_1_armv7l.whl CPython 3.15 CPython 3.15 Linux musl 1.1+ ARMv7l Details
aethonan-2.8.5-cp315-cp315-musllinux_1_1_aarch64.whl CPython 3.15 CPython 3.15 Linux musl 1.1+ ARM64 Details
aethonan-2.8.5-cp315-cp315-manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ ARM64 Details
aethonan-2.8.5-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.17+ x86-64 Details
aethonan-2.8.5-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.15 CPython 3.15 Linux glibc 2.17+ x86-32 Details
aethonan-2.8.5-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.15 CPython 3.15 Linux glibc 2.17+ ARMv7l Details
aethonan-2.8.5-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details
aethonan-2.8.5-cp315-cp315-macosx_10_12_x86_64.whl CPython 3.15 CPython 3.15 macOS 10.12+ x86-64 Details
aethonan-2.8.5-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
aethonan-2.8.5-cp314-cp314t-musllinux_1_1_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ x86-64 Details
aethonan-2.8.5-cp314-cp314t-musllinux_1_1_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ ARMv7l Details
aethonan-2.8.5-cp314-cp314t-musllinux_1_1_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.1+ ARM64 Details
aethonan-2.8.5-cp314-cp314t-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 Details
aethonan-2.8.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
aethonan-2.8.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l Details
aethonan-2.8.5-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.12+ x86-32 Details
aethonan-2.8.5-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
aethonan-2.8.5-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
aethonan-2.8.5-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
aethonan-2.8.5-cp314-cp314-musllinux_1_1_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.1+ x86-64 Details
aethonan-2.8.5-cp314-cp314-musllinux_1_1_armv7l.whl CPython 3.14 CPython 3.14 Linux musl 1.1+ ARMv7l Details
aethonan-2.8.5-cp314-cp314-musllinux_1_1_aarch64.whl CPython 3.14 CPython 3.14 Linux musl 1.1+ ARM64 Details
aethonan-2.8.5-cp314-cp314-manylinux_2_34_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.34+ x86-64 Details
aethonan-2.8.5-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
aethonan-2.8.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
aethonan-2.8.5-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-32 Details
aethonan-2.8.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARMv7l Details
aethonan-2.8.5-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
aethonan-2.8.5-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details
aethonan-2.8.5-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
aethonan-2.8.5-cp313-cp313-musllinux_1_1_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.1+ x86-64 Details
aethonan-2.8.5-cp313-cp313-musllinux_1_1_armv7l.whl CPython 3.13 CPython 3.13 Linux musl 1.1+ ARMv7l Details
aethonan-2.8.5-cp313-cp313-musllinux_1_1_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.1+ ARM64 Details
aethonan-2.8.5-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
aethonan-2.8.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
aethonan-2.8.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-32 Details
aethonan-2.8.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARMv7l Details
aethonan-2.8.5-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
aethonan-2.8.5-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
aethonan-2.8.5-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
aethonan-2.8.5-cp312-cp312-musllinux_1_1_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.1+ x86-64 Details
aethonan-2.8.5-cp312-cp312-musllinux_1_1_armv7l.whl CPython 3.12 CPython 3.12 Linux musl 1.1+ ARMv7l Details
aethonan-2.8.5-cp312-cp312-musllinux_1_1_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.1+ ARM64 Details
aethonan-2.8.5-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
aethonan-2.8.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
aethonan-2.8.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-32 Details
aethonan-2.8.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARMv7l Details
aethonan-2.8.5-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
aethonan-2.8.5-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details
aethonan-2.8.5-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
aethonan-2.8.5-cp311-cp311-musllinux_1_1_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.1+ x86-64 Details
aethonan-2.8.5-cp311-cp311-musllinux_1_1_armv7l.whl CPython 3.11 CPython 3.11 Linux musl 1.1+ ARMv7l Details
aethonan-2.8.5-cp311-cp311-musllinux_1_1_aarch64.whl CPython 3.11 CPython 3.11 Linux musl 1.1+ ARM64 Details
aethonan-2.8.5-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details
aethonan-2.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
aethonan-2.8.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-32 Details
aethonan-2.8.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARMv7l Details
aethonan-2.8.5-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
aethonan-2.8.5-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
aethonan-2.8.5-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
aethonan-2.8.5-cp310-cp310-musllinux_1_1_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.1+ x86-64 Details
aethonan-2.8.5-cp310-cp310-musllinux_1_1_armv7l.whl CPython 3.10 CPython 3.10 Linux musl 1.1+ ARMv7l Details
aethonan-2.8.5-cp310-cp310-musllinux_1_1_aarch64.whl CPython 3.10 CPython 3.10 Linux musl 1.1+ ARM64 Details
aethonan-2.8.5-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details
aethonan-2.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
aethonan-2.8.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-32 Details
aethonan-2.8.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARMv7l Details
aethonan-2.8.5-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
aethonan-2.8.5-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details

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.

Release history Release notifications | RSS feed

This release

2.8.5 This release

90 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page