aistore.sdk.etl.webserver.flask_server

View as Markdown

Module Contents

Classes

NameDescription
FlaskServerFlask server implementation for ETL transformations.
_FlaskRequestStreamReaderWrap Werkzeug’s request.stream for no-FQN PUT on the streaming path.

API

class aistore.sdk.etl.webserver.flask_server.FlaskServer(
host: str = '0.0.0.0',
port: int = 8000
)

Bases: ETLServer

Flask server implementation for ETL transformations. Compatible with environments where Flask is preferred over FastAPI.

app
= Flask(__name__)
aistore.sdk.etl.webserver.flask_server.FlaskServer._direct_put(
direct_put_url: str,
data: bytes,
remaining_pipeline: str = '',
path: str = ''
) -> typing.Tuple[int, bytes, int]

Sends the transformed object directly to the specified AIS node (direct_put_url), eliminating the additional network hop through the original target. Used only in bucket-to-bucket offline transforms.

Returns: status code, transformed data, length of the transformed data (if any)

Parameters:

direct_put_url
str

The first URL in the ETL pipeline

data
bytes

The transformed data to send

remaining_pipeline
strDefaults to ''

Comma-separated remaining pipeline stages to pass as header

path
strDefaults to ''

The path of the object.

aistore.sdk.etl.webserver.flask_server.FlaskServer._direct_put_stream(
direct_put_url: str,
data_iter: typing.Iterator[bytes],
remaining_pipeline: str = '',
path: str = ''
) -> typing.Tuple[int, bytes, int]

Stream transformed output directly to the next pipeline stage.

aistore.sdk.etl.webserver.flask_server.FlaskServer._direct_put_stream_with_retry(
direct_put_url: str,
path: str,
remaining_pipeline: str = '',
etl_args: str = ''
) -> typing.Tuple[int, bytes, int]

Streaming direct-put with exponential-backoff retry on transient errors.

Replayable sources (FQN-backed or GET) close and reopen the reader on each retry. No-FQN PUT bodies are one-shot (request body consumed from the socket); effective_retries is forced to 0 and a transient direct-put error surfaces to AIS as a transform failure.

aistore.sdk.etl.webserver.flask_server.FlaskServer._direct_put_with_retry(
direct_put_url: str,
data: bytes,
remaining_pipeline: str = '',
path: str = ''
) -> typing.Tuple[int, bytes, int]

Buffered direct-put with exponential-backoff retry on transient errors.

aistore.sdk.etl.webserver.flask_server.FlaskServer._get_fqn_content(
path: str
) -> bytes
aistore.sdk.etl.webserver.flask_server.FlaskServer._get_stream_reader(
path
)

Get a BinaryIO reader for the request source data.

aistore.sdk.etl.webserver.flask_server.FlaskServer._handle_get(
path
)
aistore.sdk.etl.webserver.flask_server.FlaskServer._handle_put(
path
)
aistore.sdk.etl.webserver.flask_server.FlaskServer._handle_request(
path
)
aistore.sdk.etl.webserver.flask_server.FlaskServer._handle_request_buffered(
path
)
aistore.sdk.etl.webserver.flask_server.FlaskServer._handle_request_streaming(
path
)
aistore.sdk.etl.webserver.flask_server.FlaskServer._health()
aistore.sdk.etl.webserver.flask_server.FlaskServer._register_routes()
aistore.sdk.etl.webserver.flask_server.FlaskServer.start()
class aistore.sdk.etl.webserver.flask_server._FlaskRequestStreamReader(
stream
)

Bases: RawIOBase

Wrap Werkzeug’s request.stream for no-FQN PUT on the streaming path.

Werkzeug’s LimitedStream inherits io.RawIOBase.close() without draining; a transform that exits early would leave unread bytes on a keep-alive connection. close() drains residual bytes in 64 KiB chunks (mirroring _RFileLimitedReader.close() in HTTPMultiThreadedServer).

aistore.sdk.etl.webserver.flask_server._FlaskRequestStreamReader.close() -> None
aistore.sdk.etl.webserver.flask_server._FlaskRequestStreamReader.read(
size: int = -1
) -> bytes
aistore.sdk.etl.webserver.flask_server._FlaskRequestStreamReader.readable() -> bool