apicrud.media.storage¶
storage.py
- Storage access
Files, photos and videos are stored as objects in a cloud vendor’s storage service (Amazon S3 or equivalent). The backend server here acts as a broker for authenticating uploads and storing/retrieving metadata descriptors for each object. Metadata is stored in a redis cache.
created 25-jan-2020 by richb@instantlinux.net
Classes
|
Storage API |
|
Vendor-specific storage interface: Backblaze B2. |
|
Vendor-specific storage interface: Amazon S3 |
-
class
apicrud.media.storage.
StorageAPI
(credential_ttl=None, redis_conn=None, uid=None, db_session=None)¶ Storage API
-
credential_ttl
¶ how long until temp credential expires
- Type
int
-
redis_conn
¶ connection to redis
- Type
obj
-
uid
¶ User ID
- Type
str
-
db_session
¶ existing db session
- Type
obj
-
del_file_meta
(file_id, meta)¶ Remove a metadata item from cache
- Parameters
file_id (str) – ID in file model
meta (dict) – keys to update
-
del_object
(storage_id, storage_key)¶ Remove a file from a storage bucket
- Parameters
storage_id (str) – ID in storage model
storage_key (str) – pathname within storage bucket
-
fetch_album_meta
(album_id, thumbnail_height)¶ Retrieve metadata of a media album in format suitable for react-image-gallery
- Parameters
album_id – ID in album model
thumbnail_height (int) – which scaled image to choose
- Returns
a set of image descriptors suitable for display
- Return type
dict
-
get_file_meta
(file_id)¶ Retrieve metadata from redis cache
- Parameters
file_id (str) – ID in file model
- Returns
fid, uid, sid, pid, path, name
- Return type
dict
-
get_object
(storage_id, storage_key)¶ Get object from bucket
- Parameters
storage_id (str) – ID in storage model
storage_key (str) – pathname within storage bucket
-
get_upload_url
(body)¶ Get a new pre-authorized URL from the storage vendor which allows the end user to upload one object to storage
- Parameters
body (dict) – storage_id key provides ID in storage model; other keys provide metadata about the object to be uploaded, which will be stored in the new object’s entry in database upon upload completion
-
put_object
(storage_id, storage_key, content, content_type='image/jpeg')¶ Send a file to the storage bucket
- Parameters
storage_id (str) – ID in storage model
storage_key (str) – pathname within storage bucket
content (bytes) – file content
content_type (str) – mime type
-
update_file_meta
(file_id, meta)¶ Update metadata in redis cache
- Parameters
file_id (str) – ID in file model
meta (dict) – keys to update
-
upload_complete
(file_id, status, func_worker)¶ Finalize upload - pass to the worker
- Parameters
file_id (str) – ID of file meta in redis
status (str) – completion status from frontend (‘done’ if OK)
func_worker (function) – callback for passing to celery worker
- Returns
dict with file ID and message, and http status
- Return type
tuple
-
-
class
apicrud.media.storage.
StorageBackblaze
(model, db_session=None)¶ Vendor-specific storage interface: Backblaze B2. Not yet implemented
- Parameters
model (obj) – a storage model
db_session (obj) – existing db session
-
get_upload_url
(storage_id, storage_key, content_type='image/jpeg')¶ Get a presigned authorization URL for upload
- Parameters
storage_id (str) – ID of storage model object
storage_key (str) – pathname of new object to store
content_type (str) – mime type
- Returns
dict with upload URL, http status
- Return type
tuple
-
class
apicrud.media.storage.
StorageS3
(credential_ttl=3600, credentials=None, access_key=None, secret_key=None, region='us-east-2')¶ Vendor-specific storage interface: Amazon S3
- Parameters
credential_ttl (int) – how long until temp credential expires
credentials (obj) – API key and secret
access_key (str) – API key (if credentials object not specified)
secret_key (str) – API secret (if credentials object not specified)
region (str) – data center region specification
-
del_object
(bucket, storage_key)¶ Delete an object
- Parameters
bucket (str) – name of bucket
storage_key (str) – pathname of new object to store
- Returns
vendor results
- Return type
tuple
-
get_object
(bucket, storage_key)¶ Fetch the object into a byte array
- Parameters
bucket (str) – name of bucket
storage_key (str) – pathname of new object to store
- Returns
bytes
-
get_upload_url
(bucket, storage_key, content_type='image/jpeg')¶ Get a presigned authorization URL for upload
- Parameters
bucket (str) – name of bucket
storage_key (str) – pathname of new object to store
content_type (str) – mime type
- Returns
dict with uploadUrl, http status
- Return type
tuple
-
put_object
(bucket, storage_key, content, content_type='image/jpeg')¶ Store a byte-array object
- Parameters
bucket (str) – name of bucket
storage_key (str) – pathname of new object to store
content (bytes) – object
content_type (str) – mime type
- Returns
vendor results
- Return type
tuple