SDK for interacting with Corva
Project description
Corva python-sdk is a framework for building Corva DevCenter apps.
Contents
Requirements
Python 3.8+
Installation
$ pip install corva-sdk
App types
There are three app types that you can build:
stream- works with real-time datascheduled- works with data at defined schedules/intervals (e.g. once an hour)task- works with data on-demand
Note: Use type hints like those in the examples below for better support from editors and tools.
Stream
import json
from corva import Api, Cache, Corva, StreamEvent
def stream_app(event: StreamEvent, api: Api, cache: Cache):
# get some data from api
drillstrings = api.get(
'api/v1/data/corva/data.drillstring/',
params={
'query': json.dumps({'asset_id': event.asset_id, }),
'sort': json.dumps({'timestamp': 1}),
'limit': 1}
).json() # List[dict]
# do some calculations/modifications to the data
for drillstring in drillstrings:
drillstring['id'] = drillstring.pop('_id')
# save the data to private collection
api.post(
f'api/v1/data/my_provider/my_collection/',
data=drillstrings
)
def lambda_handler(event, context):
corva = Corva(context)
corva.stream(stream_app, event)
Corva.stream provides an optional parameter:
filter_mode- set totimestampordepthto clear event data with previously processedtimestampormeasured_depth.
Scheduled
from corva import Api, Cache, Corva, ScheduledEvent
def scheduled_app(event: ScheduledEvent, api: Api, cache: Cache):
pass
def lambda_handler(event, context):
corva = Corva(context)
corva.scheduled(scheduled_app, event)
Event
An event is an object that contains data for an app function to process.
event instance is inserted automatically as a first parameter to each app type. There are different event types for
every app type: StreamEvent, ScheduledEvent and TaskEvent.
Api
Apps might need to communicate with the
Corva Platform API and Corva Data API.
This SDK provides an Api class, which wraps the Python requests
library and adds automatic authorization, convenient URL usage and
reasonable timeouts to API requests.
Api instance is inserted automatically as a second parameter to each app type.
Api supports following HTTP methods: GET, POST, PATCH, PUT
and DELETE.
Examples:
from corva import Api, Corva
def my_app(event, api: Api, cache):
# Corva API calls
api.get('/v2/pads', params={'param': 'val'})
api.post('/v2/pads', data={'key': 'val'})
api.patch('/v2/pads/123', data={'key': 'val'})
api.delete('/v2/pads/123')
# Corva Data API calls
api.get('/api/v1/data/provider/dataset/', params={'param': 'val'})
api.post('/api/v1/data/provider/dataset/', data={'key': 'val'})
api.put('/api/v1/data/provider/dataset/', data={'key': 'val'})
api.delete('/api/v1/data/provider/dataset/')
def lambda_handler(event, context):
corva = Corva(context)
corva.scheduled(my_app, event)
Cache
Apps might need to share some data between runs. The sdk provides a Cache class, that allows you to store, load and do
other operations with data.
Cache instance is inserted automatically as a third parameter to stream and scheduled apps.
Note: task apps don't get a Cache parameter as they aren't meant to store data between invokes.
Cache uses a dict-like database, so the data is stored as key:value pairs.
key should be of str type, and value can have any of the following types: str, int, float and bytes.
Examples:
-
Store and load:
from corva import Cache, Corva def my_app(event, api, cache: Cache): cache.store(key='key', value='val') # cache: {'key': 'val'} cache.load(key='key') # returns 'val' def lambda_handler(event, context): corva = Corva(context) corva.scheduled(my_app, event)
-
Store and load multiple:
from corva import Cache, Corva def my_app(event, api, cache: Cache): cache.store(mapping={'key1': 'val1', 'key2': 'val2'}) # cache: {'key1': 'val1', 'key2': 'val2'} cache.load_all() # returns {'key1': 'val1', 'key2': 'val2'} def lambda_handler(event, context): corva = Corva(context) corva.scheduled(my_app, event)
-
Delete and delete all:
from corva import Cache, Corva def my_app(event, api, cache: Cache): cache.store(mapping={'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}) # cache: {'key1': 'val1', 'key2': 'val2', 'key3': 'val3'} cache.delete(keys=['key1']) # cache: {'key2': 'val2', 'key3': 'val3'} cache.delete_all() # cache: {} def lambda_handler(event, context): corva = Corva(context) corva.scheduled(my_app, event)
-
Expiry, ttl and exists. Note: by default
Cachesets an expiry to 60 days.import time from corva import Cache, Corva def my_app(event, api, cache: Cache): cache.store(key='key', value='val', expiry=60) # 60 seconds # cache: {'key': 'val'} cache.ttl() # 60 seconds cache.pttl() # 60000 milliseconds cache.exists() # True time.sleep(60) # wait 60 seconds # cache: {} cache.exists() # False cache.ttl() # -2: doesn't exist cache.pttl() # -2: doesn't exist def lambda_handler(event, context): corva = Corva(context) corva.scheduled(my_app, event)
Contributing
Set up the project
$ cd ~/YOUR_PATH/python-sdk
$ python -m venv venv
$ source venv/bin/activate
(venv) $ pip install -e .[dev]
Run tests
(venv) $ pytest
Run code linter
(venv) $ flake8
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file corva-sdk-0.0.13.tar.gz.
File metadata
- Download URL: corva-sdk-0.0.13.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d290e824d4d96e4db5275aa2ed7babf6bb55433c246f60109eb608b8765f4fe5
|
|
| MD5 |
f38ac193badf8659a4734ab869cef17c
|
|
| BLAKE2b-256 |
b0ace688487e5c1d3aa4604e3237a92f9d040a8cfea37810f0f53d64eeae7b6a
|
File details
Details for the file corva_sdk-0.0.13-py3-none-any.whl.
File metadata
- Download URL: corva_sdk-0.0.13-py3-none-any.whl
- Upload date:
- Size: 18.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36b5ec82d18710401665d938ae3ec111435ef37aa4e6d7e7ccfc79f17ceb94af
|
|
| MD5 |
a8ee57a051f43e8e75a11dc3c94d0489
|
|
| BLAKE2b-256 |
ba9a5ad9340fbabb8f0864626e7ea214c2b1826d332ed65781e00c6ef9f303e9
|