Block development toolkit for UP42
Project description
Block development toolkit for UP42.
Documentation • UP42.com • Support
Highlights
- Python package with utilities to build blocks in UP42.
- For UP42 partners and customers interested in creating blocks!
- Base classes for data and processing blocks.
- Facilities to easily create tests, ensuring production ready blocks.
Overview
The UP42 blockutils
package provides several modules with specific concerns:
- Blocks: Base classes for data and processing blocks.
- Common: Directory and query/parameter input handling.
- Logging: Standard logging facility.
- Data Path: Input and output file handling.
- E2E: Utility class to create end-to-end tests.
- Exceptions: Shared exceptions between blocks.
- Format: Exotic file handling (DIMAP and NETCDF).
- Raster: Raster handling methods.
- Geometry: Generic recurrent geometry operations.
- Windows: Raster windowed read and write helper, useful for large file handling.
- STAC: Handling STAC type queries.
- WMTS: Helper for downloading, processing and merging tiles.
See the full code reference here.
Docker image
In order to make development of blocks easier, we have made available a public blockutils
base image that you can use in your Dockerfile
. Check out the
DockerHub page
for the up42/up42-blockutils-py37
image.
Template repositories
For your convenience, we have created two template repositories hosted on GitHub
that include this package and generic make
utilities for building and pushing blocks:
Install
The package requires Python > 3.6.
pip install up42-blockutils
Quickstart
The example below shows a minimal processing block that takes a raster file and returns
the raster values to the power of 2. In this example we make use of the logging
,
blocks
, exceptions
, datapath
and windows
modules.
from pathlib import Path
import rasterio as rio
from geojson import FeatureCollection, Feature
import blockutils
logger = blockutils.logging.get_logger(__name__)
class AProcessingBlock(blockutils.blocks.ProcessingBlock):
def process(self, input_fc: FeatureCollection) -> FeatureCollection:
output_fc = FeatureCollection([])
if not input_fc.features:
raise blockutils.exceptions.UP42Error(
blockutils.exceptions.SupportedErrors.NO_INPUT_ERROR
)
for feat in input_fc["features"]:
logger.info(f"Processing {feat}...")
input_path = Path("/tmp/input/") / Path(blockutils.datapath.get_data_path(feat))
with rio.open(input_path) as src:
src_win = blockutils.windows.WindowsUtil(src)
(
output_name,
output_path,
) = blockutils.datapath.get_output_filename_and_path(
input_path.name, postfix="processed"
)
dst_meta = src.meta.copy()
with rio.open(output_path, "w", **dst_meta) as dst:
for win in src_win.windows_regular():
exp = src.read(window=win) ** 2
dst.write(exp, window=win)
out_feat = Feature(bbox=feat.bbox, geometry=feat.geometry)
out_feat["properties"] = self.get_metadata(feat)
out_feat = blockutils.datapath.set_data_path(out_feat, output_name)
logger.info(f"Processed {out_feat}...")
output_fc.features.append(out_feat)
return output_fc
AProcessingBlock().run()
Support
For any issues or help please contact us via Email support@up42.com.
Project details
Release history Release notifications | RSS feed
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
Hashes for up42-blockutils-1.2.1.dev0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | dc049a57ad927fb4d53129224a0f4e8bd8e5088f8ad6806b74c051172a7deb48 |
|
MD5 | a4cfee50185a1b33aa5a5dbf33da649d |
|
BLAKE2b-256 | 2f98e73056d57f246d7b3c3645edbe032a03ed6459d47ca338f35d2974bb407f |
Hashes for up42_blockutils-1.2.1.dev0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a50440a50d8142b3cddca9e6a3499c83a33deeefff0b6087634a32554eb1c92a |
|
MD5 | 21031ab4d8759d1e1306c7dd9ca8e674 |
|
BLAKE2b-256 | aad3f85ef34d60538dbbf16bd80dee3f1e90966b177b4a068072202c88ff17c4 |