Metadata-Version: 2.1
Name: proxystore
Version: 0.6.0
Summary: Lazy object proxy interface for distributed stores.
Author: Globus Labs
Author-email: Greg Pauloski <jgpauloski@uchicago.edu>
Maintainer-email: Greg Pauloski <jgpauloski@uchicago.edu>, Valerie Hayot-Sasson <vhayot@uchicago.edu>
License: FILE
Project-URL: homepage, https://proxystore.dev
Project-URL: documentation, https://docs.proxystore.dev
Project-URL: repository, https://github.com/proxystore/proxystore
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: Implementation :: CPython
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click !=8.1.4
Requires-Dist: cloudpickle >=1.6.0
Requires-Dist: cryptography >=39.0.1
Requires-Dist: globus-sdk >=3.3.0
Requires-Dist: lazy-object-proxy >=1.6.0
Requires-Dist: typing-extensions >=4.3.0
Provides-Extra: all
Requires-Dist: proxystore[endpoints,redis] ; extra == 'all'
Provides-Extra: dev
Requires-Dist: black ; extra == 'dev'
Requires-Dist: covdefaults >=2.2 ; extra == 'dev'
Requires-Dist: coverage ; extra == 'dev'
Requires-Dist: mypy ; extra == 'dev'
Requires-Dist: pre-commit ; extra == 'dev'
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: pytest-asyncio ; extra == 'dev'
Requires-Dist: pytest-cov ; extra == 'dev'
Requires-Dist: pytest-timeout ; extra == 'dev'
Requires-Dist: ruff ; extra == 'dev'
Requires-Dist: tox ; extra == 'dev'
Requires-Dist: types-redis ; extra == 'dev'
Requires-Dist: types-requests ; extra == 'dev'
Requires-Dist: virtualenv ; extra == 'dev'
Provides-Extra: docs
Requires-Dist: black ; extra == 'docs'
Requires-Dist: mkdocs-click ; extra == 'docs'
Requires-Dist: mkdocs-gen-files ; extra == 'docs'
Requires-Dist: mkdocs-literate-nav ; extra == 'docs'
Requires-Dist: mkdocs-material !=9.4.0 ; extra == 'docs'
Requires-Dist: mkdocs-section-index ; extra == 'docs'
Requires-Dist: mkdocstrings ; extra == 'docs'
Requires-Dist: mkdocstrings-python ; extra == 'docs'
Requires-Dist: mike ; extra == 'docs'
Requires-Dist: proxystore[all] ; extra == 'docs'
Provides-Extra: endpoints
Requires-Dist: aiortc >=1.3.2 ; extra == 'endpoints'
Requires-Dist: aiosqlite ; extra == 'endpoints'
Requires-Dist: uvicorn[standard] ; extra == 'endpoints'
Requires-Dist: psutil ; extra == 'endpoints'
Requires-Dist: python-daemon ; extra == 'endpoints'
Requires-Dist: quart >=0.18.0 ; extra == 'endpoints'
Requires-Dist: requests >=2.27.1 ; extra == 'endpoints'
Requires-Dist: tosholi ; extra == 'endpoints'
Requires-Dist: websockets >=10.0 ; extra == 'endpoints'
Provides-Extra: redis
Requires-Dist: redis >=3.4 ; extra == 'redis'

# ProxyStore

[![docs](https://github.com/proxystore/proxystore/actions/workflows/docs.yml/badge.svg)](https://github.com/proxystore/proxystore/actions/workflows/docs.yml)
[![tests](https://github.com/proxystore/proxystore/actions/workflows/tests.yml/badge.svg?label=tests)](https://github.com/proxystore/proxystore/actions)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/proxystore/proxystore/main.svg)](https://results.pre-commit.ci/latest/github/proxystore/proxystore/main)

ProxyStore provides pass-by-reference semantics for distributed Python
applications through transparent object proxies. Moving data via proxies
(1) decouples control flow from data flow, (2) enables producers to
unilaterally (i.e., without the agreement of or awareness by the consumer)
choose the best storage and communication channel for the data, and (3)
perform just-in-time data movement directly between producer and consumer.

ProxyStore's goals are to:

* **Improve productivity.** ProxyStore enables easy decoupling of
  communication from the rest of the code, allowing developers to focus
  on functionality and performance.
* **Improve compatibility.** Consumers of data can be agnostic to the
  communication method because object proxies handle the communication
  behind the scenes.
* **Improve performance.** Transport methods and object stores can be changed
  at runtime to optimal choices for the given data without the consumers
  being aware of the change.

ProxyStore provides support for many third-party mediated communication methods
out-of-the-box including
[Globus Transfer](https://www.globus.org/data-transfer),
[KeyDB](https://docs.keydb.dev/), and
[Redis](https://redis.io/).
Custom communication methods built on
[Mochi](https://mochi.readthedocs.io/en/latest/margo.html),
[UCX](https://openucx.org/),
[WebRTC](https://webrtc.org/), and
[ZeroMQ](https://zeromq.org/)
are provided for high-performance and multi-site applications.

Read more about ProxyStore's concepts [here](https://docs.proxystore.dev/main/concepts/).
Complete documentation for ProxyStore is available at
[docs.proxystore.dev](https://docs.proxystore.dev).

## Installation

```bash
$ pip install proxystore
$ pip install proxystore[all]
```

See the [Installation](https://docs.proxystore.dev/main/installation) guide for more information about the available extra install options.
For local development, see the [Contributing](https://docs.proxystore.dev/main/contributing) guide.

Extended features are available in the [`proxystore-ex`](https://github.com/proxystore/extensions) package.

## Example

Getting started with ProxyStore requires a few lines of code.

```python
from proxystore.connectors.redis import RedisConnector
from proxystore.proxy import Proxy
from proxystore.store import register_store
from proxystore.store import Store

store = Store('my-store', RedisConnector('localhost', 6379))

# Store the object and get a proxy. The proxy acts
# like a reference to the object.
data = MyDataType(...)
proxy = store.proxy(data)
assert isinstance(proxy, Proxy)

def my_function(x: MyDataType) -> ...:
    # x is resolved my-store on first use transparently to the
    # function. Then x behaves as an instance of MyDataType.
    assert isinstance(x, MyDataType)

my_function(proxy)  # Succeeds
```

Check out the [Get Started](https://docs.proxystore.dev/main/get-started)
guide to learn more!

## Citation

[![DOI](https://zenodo.org/badge/357984234.svg)](https://zenodo.org/badge/latestdoi/357984234)

If you use ProxyStore or any of this code in your work, please cite our [preprint](https://arxiv.org/abs/2305.09593).
```
@misc{pauloski2023proxystore,
    author = {J. Gregory Pauloski and Valerie Hayot-Sasson and Logan Ward and Nathaniel Hudson and Charlie Sabino and Matt Baughman and Kyle Chard and Ian Foster},
    title = {{Accelerating Communications in Federated Applications with Transparent Object Proxies}},
    archiveprefix = {arXiv},
    eprint = {2305.09593},
    primaryclass = {cs.DC},
    year = {2023}
}
```
