Skip to main content

Cross-compatible API for accessing Posix and OBS storage systems

Project description

# stor

`stor` provides a cross-compatible CLI and Python API for accessing block and
object storage. `stor` was created so you could write one piece of code to work
with local or remote files, without needing to write specialized code to handle
failure modes, retrying or temporarily system unavailability. The functional
API (i.e., `stor.copytree`, `stor.rmtree`, `stor.remove`, `stor.listdir`) will
work with the same semantics across all storage backends. This makes it really
easy to develop/test code locally with files and then take advantage of robust
and cheaper object storage when you push to remote.

View full docs for stor at https://counsyl.github.io/stor/ .

## Quickstart

```
pip install stor
```

`stor` provides both a CLI and a Python library for manipulating Posix and OBS
with a single, cross-compatible API.


## Quickstart - CLI

```
usage: stor [-h] [-c CONFIG_FILE] [--version] ...

A command line interface for stor.

positional arguments:

list List contents using the path as a prefix.
ls List path as a directory.
cp Alias for copy.
rm Remove file at a path.
walkfiles List all files under a path that match an optional
pattern.
cat Output file contents to stdout.
cd Change directory to a given OBS path.
pwd Get the present working directory of a service or all
current directories.
clear Clear current directories of a specified service.
```

You can `ls` local and remote directories

```
›› stor ls s3://stor-test-bucket
s3://stor-test-bucket/b.txt
s3://stor-test-bucket/counsyl-storage-utils
s3://stor-test-bucket/file_test.txt
s3://stor-test-bucket/counsyl-storage-utils/
s3://stor-test-bucket/empty/
s3://stor-test-bucket/lots_of_files/
s3://stor-test-bucket/small_test/
```

Copy files locally or remotely or upload from stdin

```
›› echo "HELLO WORLD" | stor cp - swift://AUTH_stor_test/hello_world.txt
starting upload of 1 objects
upload complete - 1/1 0:00:00 0.00 MB 0.00 MB/s
›› stor cat swift://AUTH_stor_test/hello_world.txt
HELLO WORLD
›› stor cp swift://AUTH_stor_test/hello_world.txt hello_world.txt
›› stor cat hello_world.txt
HELLO WORLD
```


## Quickstart - Python

List files in a directory, taking advantage of delimiters

```python
>>> stor.listdir('s3://bestbucket')
[S3Path('s3://bestbucket/a/')
S3Path('s3://bestbucket/b/')]
```

List all objects in a bucket

```python
>>> stor.list('s3://bestbucket')
[S3Path('s3://bestbucket/a/1.txt')
S3Path('s3://bestbucket/a/2.txt')
S3Path('s3://bestbucket/a/3.txt')
S3Path('s3://bestbucket/b/1.txt')]
```

Or in a local path

```python
>>> stor.list('stor')
[PosixPath('stor/__init__.py'),
PosixPath('stor/exceptions.pyc'),
PosixPath('stor/tests/test_s3.py'),
PosixPath('stor/tests/test_swift.py'),
PosixPath('stor/tests/test_integration_swift.py'),
PosixPath('stor/tests/test_utils.py'),
PosixPath('stor/posix.pyc'),
PosixPath('stor/base.py'),
```

Read and write files from POSIX or OBS, using python file objects.

```python
import stor
with stor.open('/my/exciting.json') as fp:
data1 = json.load(fp)

data1['read'] = True

with stor.open('s3://bestbucket/exciting.json') as fp:
json.dump(data1, fp)
```

## Testing code that uses stor

The key design consideration of `stor` is that your code should be able to
transparently use POSIX or any object storage system to read and update files.
So, rather than use mocks, we suggest that you structure your test code to point
to local filesystem paths and restrict yourself to the functional API. E.g.,
in your prod settings, you could set `DATADIR = 's3://bestbucketever'`and when
you test, you could use `DATADIR = '/somewhat/cool/path/to/test/data'`, while
your actual code just says:

```python
with stor.open(stor.join(DATADIR, experiment)) as fp:
data = json.load(fp)
```

Easy! and no mocks required!


## Running the Tests


```
make test
```

## Contributing and Semantic Versioning

We use semantic versioning to communicate when we make API changes to the
library. See CONTRIBUTING.md for more details on contributing to stor.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stor-1.1.2.tar.gz (62.5 kB view details)

Uploaded Source

Built Distributions

stor-1.1.2.macosx-10.10-x86_64.tar.gz (203.4 kB view details)

Uploaded Source

stor-1.1.2-py2-none-any.whl (101.0 kB view details)

Uploaded Python 2

File details

Details for the file stor-1.1.2.tar.gz.

File metadata

  • Download URL: stor-1.1.2.tar.gz
  • Upload date:
  • Size: 62.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for stor-1.1.2.tar.gz
Algorithm Hash digest
SHA256 38846ea5f16cf4a68364baf3a6a6fd1109cd09509f0231cdeb5111d3c175088d
MD5 dd2b20ee7edba80f8ad7427841673ffe
BLAKE2b-256 c00029b922c7c73b5b9b913b951ad2348bd60079308ad0cb75c29a8d926b0597

See more details on using hashes here.

File details

Details for the file stor-1.1.2.macosx-10.10-x86_64.tar.gz.

File metadata

File hashes

Hashes for stor-1.1.2.macosx-10.10-x86_64.tar.gz
Algorithm Hash digest
SHA256 b5e6074c3a2a19f5a8e714778bec1efffc2316b1b1bbee0058fb466924a1eb24
MD5 73f33c984479f2ca04b9ea73c970fbc5
BLAKE2b-256 50a0e71723c80a5acf01585c0d451cde8c3e8f360c0f1ee9d1620a1687d24b23

See more details on using hashes here.

File details

Details for the file stor-1.1.2-py2-none-any.whl.

File metadata

File hashes

Hashes for stor-1.1.2-py2-none-any.whl
Algorithm Hash digest
SHA256 d209636efd97b92b1deeed4728518da48414bf29a7db300bb9ada0e691fccb4e
MD5 dc4ea44dfec08affdd3b6dd513acd2f5
BLAKE2b-256 3e96a2379b6a91f4feb27744ea0189211a827848c38f532552b156743e95cf8a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page