Skip to main content

Python wrapper for the Sumo API

Project description

sumo-wrapper-python

Python wrappers for Sumo APIs

Install:

pip install sumo-wrapper-python

For internal Equinor users, this package is available through the Komodo distribution.

:warning: CallSumoApi is deprecated.

Table of contents

SumoClient

A thin wrapper class for the Sumo API.

Initialization

from sumo.wrapper import SumoClient

sumo = SumoClient(env="dev")

Parameters

class SumoClient:
    def __init__(
        self,
        env:str,
        token:str=None,
        interactive:bool=False,
        verbosity:str="CRITICAL"
    ):
  • env: sumo environment
  • token: bearer token or refresh token
  • interactive: use interactive flow when authenticating
  • verbosity: "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"
token logic

If an access token is provided in the token parameter, it will be used as long as it's valid. An error will be raised when it expires.

If we are unable to decode the provided token as a JWT, we treat it as a refresh token and attempt to use it to retrieve an access token.

If no token is provided, an authentication code flow/interactive flow is triggered to retrieve a token.

Methods

SumoClient has one method for each HTTP-method that is used in the sumo-core API. See examples of how to use these methods below.

All methods accepts a path argument. Path parameters can be interpolated into the path string. Example:

object_id = "1234"

# GET/objects('{obejctid}')
sumo.get(f"/objects('{object_id}')")

get(path, **params)

Performs a GET-request to sumo-core. Accepts query parameters as keyword arguments.

# Retrieve userdata
user_data = sumo.get("/userdata")

# Search for objects
results = sumo.get("/search",
    query="class:surface",
    size:3,
    select=["_id"]
)

# Get object by id
object_id = "159405ba-0046-b321-55ce-542f383ba5c7"

obj = sumo.get(f"/objects('{object_id}')")

post(path, json, blob)

Performs a POST-request to sumo-core. Accepts json and blob, but not both at the same time.

# Upload new parent object
parent_object = sumo.post("/objects", json=parent_meta_data)

# Upload child object
parent_id = parent_object["_id"]

child_object = sumo.post(f"/objects('{parent_id}')", json=child_meta_data)

put(path, json, blob)

Performs a PUT-request to sumo-core. Accepts json and blob, but not both at the same time.

# Upload blob to child object
child_id = child_object["_id"]

sumo.put(f"/objects('{child_id}')/blob", blob=blob)

delete(path)

Performs a DELETE-request to sumo-core.

# Delete blob
sumo.delete(f"/objects('{child_id}')/blob")

# Delete child object
sumo.delete(f"/objects('{child_id}')")

# Delete parent object
sumo.delete(f"/objects('{parent_id}')")

Async methods

SumoClient also has async alternatives get_async, post_async, put_async and delete_async. These accept the same parameters as their synchronous counterparts, but have to be awaited.

# Retrieve userdata
user_data = await sumo.get_async("/userdata")

CallSumoApi (deprecated)

Predefined methods for various sumo operations. I.e uploading, searching for and deleting metadata and blobs.

Initialization

from sumo.wrapper import CallSumoApi

sumo = CallSumoApi()

Parameters

class CallSumoApi:
    def __init__(
        self,
        env="dev",
        resource_id=None,
        client_id=None,
        outside_token=False,
        writeback=False,
    ):

Examples

All CallSumoApi methods accept a bearer argument which lets the user use an existing access token instead of generating a new one.

search()

Search all objects in sumo.

Parameters

def search(
    self,
    query,
    select=None,
    buckets=None,
    search_from=0,
    search_size="100",
    search_after=None,
    bearer=None,
):

Usage

# Find objects where class = surface
search_results = sumo.search(query="class:surface", search_size="10")

# Get child objects for a specific object
parent_id = "1234"
children = sumo.search(query=f"_sumo.parent_object:{parent_id}")

# Get buckets for child object classes (i.e surface, table, polygon)
# This will return a count for every class value
buckets = sumo.search(
    query=f"_sumo.parent_object:{parent_id}",
    buckets=["class.keyword"]
)

searchroot()

Search for parent objects (object without parent)

Parameters

def searchroot(
    self,
    query,
    select=None,
    buckets=None,
    search_from=0,
    search_size="100",
    bearer=None,
):

Usage

# Get 3 top level objects for a specific user
peesv_objects = sumo.searchroot(
    query="fmu.case.user.id:peesv",
    search_size=3
)

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

sumo-wrapper-python-1.0.0.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sumo_wrapper_python-1.0.0-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file sumo-wrapper-python-1.0.0.tar.gz.

File metadata

  • Download URL: sumo-wrapper-python-1.0.0.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for sumo-wrapper-python-1.0.0.tar.gz
Algorithm Hash digest
SHA256 82d960c5f0dab32fc3356bbc96ca79cba1e627b683ef2f764e695d319867b69e
MD5 37d2622988cdf624fcd2254ccb6ffb29
BLAKE2b-256 17c553d8e338208677ddf786c2f4ae29fd34d7f1deee7218cabd57a7faf4d5de

See more details on using hashes here.

File details

Details for the file sumo_wrapper_python-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sumo_wrapper_python-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 87ab4ce7653b2d7e8b450a00ea3a58f83b1c0aa7cded047672fa2df05c61f9f1
MD5 1c9a016e21a72d7f06069ecc7981f0f1
BLAKE2b-256 d1d239c3eb34f3b7ad1253a75bd264eec92125f86f7e1e736e9a5b650f436d2a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page