Azure Storage file store for Gallerist
Project description
Gallerist-AzureStorage
Gallerist classes for Azure Storage: implements reading image files from Azure Blob Service, and writing of resized pictures to the same.
$ pip install gallerist-azurestorage
This library is used in Torino, a file
explorer for Azure Storage Account, and in
Gallerist-AzureFunctions,
an Azure Functions front-end that uses
Gallerist
library, to resize
pictures in Azure Storage Blob Service.
Example: synchronous code resizing pictures on Azure Storage
from gallerist import Gallerist, ImageSize
from galleristazurestorage import AzureBlobFileStore
store = AzureBlobFileStore.from_connection_string(
"<YOUR_CONNECTION_STRING>",
"CONTAINER_NAME",
)
gallerist = Gallerist(store)
# configuring sizes by mime (use '*' to match any other mime):
gallerist = Gallerist(
store,
sizes={
"image/jpeg": [ImageSize("a", 1200), ImageSize("b", 600), ImageSize("c", 300)],
"image/png": [ImageSize("a", 350), ImageSize("b", 250), ImageSize("c", 150)],
},
)
# the following function call causes the creation of several versions of the
# image in different sizes; note that this operation is CPU bound
metadata = gallerist.process_image("ORIGINAL_FILE_NAME_ALREADY_ON_STORAGE.png")
print(metadata)
Asynchronous example using executors (recommended for async scenarios)
import asyncio
import concurrent.futures
from gallerist import Gallerist, ImageSize
from galleristazurestorage import AzureBlobFileStore
store = AzureBlobFileStore.from_connection_string(
"<YOUR_CONNECTION_STRING>",
"CONTAINER_NAME",
)
gallerist = Gallerist(store)
# configuring sizes by mime (use '*' to match any other mime):
gallerist = Gallerist(
store,
sizes={
"image/jpeg": [ImageSize("a", 1200), ImageSize("b", 600), ImageSize("c", 300)],
"image/png": [ImageSize("a", 350), ImageSize("b", 250), ImageSize("c", 150)],
},
)
async def main():
loop = asyncio.get_event_loop()
with concurrent.futures.ProcessPoolExecutor() as pool:
metadata = await loop.run_in_executor(
pool, gallerist.process_image, "EXISTING_FILE_ON_STORAGE.jpg"
)
print(metadata)
asyncio.run(main())
Alternatively to using an executor explicitly, it is possible to use
loop.call_soon_threadsafe
:
from gallerist import Gallerist, ImageSize
from galleristazurestorage import AzureBlobFileStore
store = AzureBlobFileStore.from_connection_string(
"<YOUR_CONNECTION_STRING>",
"CONTAINER_NAME",
)
gallerist = Gallerist(store)
# configuring sizes by mime (use '*' to match any other mime):
gallerist = Gallerist(
store,
sizes={
"image/jpeg": [ImageSize("a", 1200), ImageSize("b", 600), ImageSize("c", 300)],
"image/png": [ImageSize("a", 350), ImageSize("b", 250), ImageSize("c", 150)],
},
)
def process_image(image_path: str):
# configuring sizes by mime (use '*' to match any other mime):
gallerist = Gallerist(
store,
sizes={
"image/jpeg": [
ImageSize("a", 1200),
ImageSize("b", 600),
ImageSize("c", 300),
],
"image/png": [
ImageSize("a", 350),
ImageSize("b", 250),
ImageSize("c", 150),
],
},
)
metadata = gallerist.process_image(image_path)
print(metadata)
async def main():
loop = asyncio.get_event_loop()
loop.call_soon_threadsafe(process_image, "EXISTING_FILE_ON_STORAGE.jpg")
asyncio.run(main())
Asynchronous example using asynchronous methods from azure-storage-blob.aio
Note: azure-storage-blob
requires aiohttp
, and is not compatible with
concurrent.futures.ProcessPoolExecutor
.
import asyncio
from gallerist import Gallerist, ImageSize
from galleristazurestorage.aio import AzureBlobAsyncFileStore
store = AzureBlobFileStore.from_connection_string(
"<YOUR_CONNECTION_STRING>",
"CONTAINER_NAME",
)
gallerist = Gallerist(store)
# configuring sizes by mime (use '*' to match any other mime):
gallerist = Gallerist(
store,
sizes={
"image/jpeg": [ImageSize("a", 1200), ImageSize("b", 600), ImageSize("c", 300)],
"image/png": [ImageSize("a", 350), ImageSize("b", 250), ImageSize("c", 150)],
},
)
async def main():
metadata = await gallerist.process_image_async(
"EXISTING_FILE_ON_STORAGE.jpg"
)
print(metadata)
asyncio.run(main())
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
Built Distribution
Close
Hashes for gallerist-azurestorage-0.0.5.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 759a6f2c6c7459dc713fc902c3d1ac10c7f7f94fb975ccd017426ddde4d60990 |
|
MD5 | 8cfe0d011af4fb9aa72988d841c43c5d |
|
BLAKE2b-256 | b8c277c9528aa14b13d8aac8912db9c971f4c6dd13126e9abcb50af09ea49eaf |
Close
Hashes for gallerist_azurestorage-0.0.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c92f25fdfe99c024b7774421408d79a74afe7e12e4692499273fefcbdb3d4598 |
|
MD5 | c2f6f8f7e902e8c0354f182b933e620c |
|
BLAKE2b-256 | bc372c936ea7b792ea252600afffff16c68f45feb07e0dc4150de06c8bfaa94a |