.. cannot use auto-doc here, we do not want boto as a dependency for building
the docs!
Network and cloud-based storage
*******************************
A core feature of simplekv is the ability to transparently store data using
cloud storage services like `Amazon S3 `_ and `Google
Storage `_. This is achieved by providing
a backend that utilizes `boto `_ (preferably >=
2.25).
``boto`` doesn't support using Google Storage with Python3. For this
reason simplekv has a separate Google Storage implementation for Python3 at
:class:`~simplekv.net.gcstore.GoogleCloudStore` which uses Google's
``google-cloud-storage`` library.
Note that boto is not a dependency for simplekv. You need to install it
manually, otherwise you will see an :exc:`~exceptions.ImportError`.
Here is a short example:
::
from simplekv.net.botostore import BotoStore
import boto
con = boto.connect_s3('your_access_key', 'your_secret_key')
# use get_bucket instead, if you already have one!
bucket = con.create_bucket('simplekv-testbucket')
store = BotoStore(bucket)
# at this point, we can use the store like any other
store.put(u'some-key', b'Hello, World!')
# print out what's behind some-key. you should be able to see it
# in the bucket now as well
print store.get(u'some-key')
Unit testing
============
The unit-tests for the boto storage can only run if you have access to a Google
Storage and/or Amazon S3 account. The tests will look in a file
``boto_credentials.ini`` in the simplekv source root folder for account
credentials, here is an example file:
::
[s3]
access_key = YOUR_AMAZON_S3_ACCESS_KEY
secret_key = YOUR_AMAZON_S3_SECRET_KEY
connect_func = connect_s3
[gs]
access_key = YOUR_GOOGLE_STORAGE_ACCESS_KEY
secret_key = YOUR_GOOGLE_STORAGE_SECRET_KEY
connect_func = connect_gs
If a section is not present, the tests for that backend will be skipped.
The unit tests for S3 will be run by travis against a local minio instance, emulating S3.
.. class:: simplekv.net.boto.BotoStore
Backend using the storage api of boto.
.. method:: __init__(bucket, prefix='', url_valid_time=0, reduced_redundancy=False, public=False, metadata=None)
Constructs a new boto based backend.
:param bucket: An instance of :class:`boto.s3.bucket.Bucket`,
:class:`boto.gs.bucket.Bucket` or similiar.
:param prefix: A string that will transparently prefixed to all handled
keys.
:param url_valid_time=0: When using
:meth:`~.UrlMixin.url_for`, URLs should be
valid for this many seconds at most.
:param reduced_redundancy: Use reduced redundancy storage for
storing keys.
:param public: If set, all newly updated values will be made public
immediately.
:param metadata: If set, for all newly created keys to be saved with
these metadata values.