Version History
[0.11.4] - 2025-08-19
- Adds
hostess.aws.ecs, which offers some simple convenience functionality for inspecting and managing ECS tasks. This module will likely be significantly expanded in the future.
[0.11.3] - 2025-06-03
Added
ServerPoolnow supports atask_delayargument that enforces a minimum time interval between assigning any two tasks to any one worker. This can be passed directly to dependent methods such asaws.ec2.Cluster.commandmap().aws.s3.Bucketnow supports simple bucket tag access and management. Tags may be set by passing kwargs to theBucket.set_tags()method, and may be inspected as theBucket.tagsattribute.
Changed
- Assorted linting and documentation cleanup
[0.11.2] - 2025-05-18
- Assorted cleanup, refactoring, and bugfixes in
aws.s3.`
[0.11.1] - 2025-05-07
Added
aws.s3.Bucketnow hascreate()anddelete()methods.create()is a class constructor that attempts to create an S3 bucket and returns an associatedBucketif the API operation succeeds.delete()deletes the associated S3 bucket iff it is empty.aws.s3.Bucketnow supports some managed operations on zonal directory buckets and S3 Express One Zone (SEOZ) objects, including:- configuration and naming setup for zonal bucket creation in
Bucket.create() - append-writes via
Bucket.append() aws.s3.Bucketnow has atail()method that implementstail -f-like behavior for S3 objects. It asynchronously polls a selected object and copies any newly-written content at the end of that object into a target file, buffer, or sequence. This is intended primarily to follow append-writes to SEOZ objects for log tracking and similar applications.
Fixed
- a bug in which
Bucket.get()would sometimes fail to raise an exception when attempting to fetch a nonexistent object - a pytest configuration issue that could sometimes prevent the parser from
recognizing the
--run-awsoption
[0.11.0] - 2025-04-30
Added
hostess.awsnow has 'live' tests. You can run them by passing--run-awstopytest. See the readme for system requirements and cautions.aws.s3.Bucket'sget()andread()methods now support byte-range requests. Examples:
```
i want the first 20 bytes of 'key'
bucket.get(key, end_byte=20)
i want up to the last 20 bytes of 'key'
bucket.get(key, end_byte=-20)
i want bytes 100-200 of 'key'
bucket.get(key, start_byte=100, end_byte=200)
i want the last byte of 'key'
bucket.get(key, start_byte=-1)
``
-ServerPoolnow has acompleted_queueattribute. Likecompleted,
tasks are added to this queue as they complete; _unlike_completed, it can
be safely modified while the pool is running. This is designed to facilitate
creation of ad-hoc callbacks.
- SomeInstanceandCluster` methods now offer control over
verbosity. This is a preliminary to more sophisticated logging options in the
near future.
Fixed
- attribute lookup dispatch issue in remote
Viewers that created confusing error messages in some cases
Changed
- protocol buffer-related type checks now compatible with protobuf v5+ API
- stack inspection code now behaves properly with
FrameLocalsProxyin Python 3.13+ aws.pricingIOPS/throughput calculations now compatible with most recent price catalog structures- assorted light cleanup and refactoring
[0.10.2] - 2024-10-16
Fixed
- bug in pyproject.toml which left out aws and config modules in fresh installs
[0.10.1] - 2024-08-20
Fixed
- bug causing some remote invocations to fail
- incorrect
boto.Sessiontype hints - bug causing
aws.s3.Bucket.lsto fail in cache-write mode
Removed
hostessno longer supports Python 3.9.
[0.9.2] - 2024-05-07
Added
- stdout/stderr stream chunksize (in bytes) for most process execution objects
can now be modified by passing the
chunksizeargument, e.g.Viewer.from_command('ls', chunksize=100) Bucket.ls()will also retrieve object owner information when passedfetch_owner=True
Fixed
- bug that caused AWS credential file parsing to fail on non-default account creds stored in non-default credentials file
- occasional failures when attempting to disown processes
- bug that sporadically delayed SSH tunnel cleanup for closed / destroyed
SSHobjects until interpreter exit
Changed
- default stdout/stderr stream chunksize increased from 1K to 20K
- assorted linting, stability tweaks, etc.
[0.9.1] - 2023-12-16
Fixed
- issue with finding base conda env in some cases
[0.9.0] - 2023-12-15
Added
- whole-
Clusterfile upload/download methods (read(),get(),put(),read_csv()) - can now set default S3
TransferConfiginhostess.config RefAlarmtool for debugging reference leaks / dropsClusterandInstancenow haveinstall_conda()methods that perform managed installation(s) of a Conda distribution of Python (by default miniforge)ServerPoolobject for managed asynchronous dispatch of arbitrary numbers of tasks to remote hosts
Changed
Clustercan now be indexed byInstancenames, instance ids, and ip addresses as well as their indices within theCluster'sinstanceslistClusterwait-until-connected behavior is now available as an individual method (connect()), not just fromlaunch()- various
Clustermethods can now be run in 'permissive' mode, returning exceptions rather than raising them (intended to allow instructions to execute on some instances even if attempts to execute instructions on others fail) - backed by
ServerPool,Cluster'scommandmap()andpythonmap()now accept arbitrary numbers of tasks, dispatching them to instances as soon as they free up hostess.caller.generic_python_endpoint()now permits returning objects in pickled and/or gzipped form (preparation for high-level features in a later version)dictsreturned by theprice_per_hour()methods ofClusterandInstancenow order keys the same way- assorted updates to documentation and examples
Fixed
Bucket.put_stream()updated to work with newBucketinternalsconsole_stream_handlers()no longer creates secret duplicate stdout/stderr caches- edge case in
find_conda_env()that sometimes prevented finding the most recently-created env - edge case in caller json serialization for some nested objects containing strings
Instance.conda_env()now autoconnects as intended
Removed
- Because they now accept arbitrary numbers of tasks,
Cluster.commandmap()andpythonmap()no longer interpret sequences of bare strings passed toargseqas individual tasks (due to both ambiguity and partial incompatibility withpythonmap()'ssignature). They will always interpret a sequence of bare strings as atupleof args to be included in all tasks.
[0.8.0] - 2023-12-07
Added
- dispatched asynchronous I/O for
aws.s3.Bucket - variable-argument "mapped" versions of
call_python()andcommand()foraws.ec2.Cluster - read-to-memory functionality for SSH-backed objects and
Bucket - dynamic price-per-hour calculation for EC2 instances
- tutorial Notebooks for
aws.s3andaws.ec2 - experimental extended return options for
caller-generated functions
Changed
- most module-level plain functions in
aws.s3are now methods ofBucket - performance, stability, and consistency improvements to
Bucket.ls() - SSH tunnels now run in threads instead of subprocesses
- additional options for
aws.utilities.autopage() - small changes to
caller.generic_python_endpoint()signature - updated documentation
- EC2 wait-until-state-reached methods now accept timeouts
Cluster.launch()now includes a block-until-connected option (connect=True) along with its existing block-until-started option (wait=True)
Fixed
- assorted MacOS compatibility issues
- several AWS pricing API regressions
- bug in
Bucket.put() - bug with passing
int/floatpositional arguments tosubutils.RunCommandand subclasses - bug with packing ndarrays of homogeneous dtype
[0.7.3] - 2023-11-28
First conda-forge version; start of changelog.