Skip to main content

API Wrapper for the Stimline IDEX collaboration platform software used for well intervention.

Project description

Stimline IDEX Software API Wrapper for Python

Ruff

The stimline-idex package is an abstraction layer developed for interacting with the Stimline IDEX Collaboration software API.

It is based on available API documentation for the Aker BP IDEX environment publicly available here.

The Wrapper currently supports API version 1.0.

Getting started

Usage is fairly simple. You can authenticate using an X-API-KEY or using a JWT auth flow that requests a bearer token from the authentication endpoint.

from stimline_idex.v1 import ApiKeyAuth, IDEXClient, JwtAuth
from stimline_idex.v1 import data_schemas as IDEXSchemas

api_auth = ApiKeyAuth(
    base_url = "https://<env>.idexcloud.net/idexapi/1.0/",
    x_api_key = "00000000-0000-0000-0000-000000000000"
)

client = IDEXClient(auth=api_auth)

jwt_auth = JWTAuth(
    base_url = "https://<env>.idexcloud.net/idexapi/1.0/",
    username = "foo",
    password = "bar"
)

client_jwt = IDEXClient(auth=jwt_auth)

The different modules are available for interaction, to get top 3 recently created wellbores:

wellbores = client.wellbores.get(top=3, order_by="createdDate desc")

By default, some API endpoints return soft deleted records. However, the wrapper by default excludes deleted records in the query to the API. This is because retrieving deleted data may lead to confusing outcomes (e.g. several wellbores with the same name). You can override this by using a kwarg: include_soft_delete=True.

wellbores = client.wellbores.get(include_soft_delete=True)

To make it easier to use the different attributes returned by the API, the wrapper uses Pydantic to validate that the return payload is according to the API specifications, the types are correctly parsed (e.g. as datetime objects instead of strings) and also provides a dot notation interface to work with the objects:

wellbores = client.wellbores.get(top=3)

for wellbore in wellbores:
    print(wellbore.name)

Some of the endpoints allow for OData filtering. The filter string is passed as submitted to the function, it is up to the end user to ensure that this is in a correct format. The column names used in the filtering expression must be according to the API specification (i.e. not snake_cased). See the official Odata documentation for filtering inspiration..

Note: Filtering on the deletedDate attribute and not having include_soft_delete=True will emit a warning log.

from datetime import datetime, timezone

cutoff_date = datetime(2024, 1, 1, tzinfo=timezone.utc)

wellbores = client.wellbores.get(filter=f"createdDate gt {cutoff_date.isoformat()}")

You can also select a subset of columns instead of having the API return all columns. This can be useful for reducing the response time for use-cases where the full response is not required.

Note: Currently the API modifies the response JSON when a $select clause is passed.

The current behavior ( from 0.3.0) is to disregard the select clause when sending a request to the API, to avoid validation errors. Warning logs are emitted to reflect this.

from datetime import datetime, timezone

cutoff_date = datetime(2024, 1, 1, tzinfo=timezone.utc)
filter_str = f"createdDate gt {cutoff_date.isoformat()}"
colummns = ["name","modifiedDate"]

client.wellbores.get(filter=filter_str, select=columns)

For endpoints that require hierarchical context (e.g. retrieving all wellbores for a given well), you can pass either the parent object returned by the wrapper, or the appropriate id as a string. It is left as an exercise to the user to create further functions to loop over an iterable to retrieve children for multiple parents if that is required.

# By arbitrary `Well` object from API
well = client.wells.get(top=1)[0]
wellbores = client.wellbores.get(well=well)
# By specific `Well` by id
well_id = "abc"
wellbores = client.wellbores.get(well_id=well_id)

For endpoints that support retrieval of a given object by id, pass this as a string:

wellbore_id = "abc"
wellbore = client.wellbores.get(id=wellbore_id)

Logs

This package emits logs on the stimline-idex logger.

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

stimline_idex-0.3.0.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

stimline_idex-0.3.0-py3-none-any.whl (36.6 kB view details)

Uploaded Python 3

File details

Details for the file stimline_idex-0.3.0.tar.gz.

File metadata

  • Download URL: stimline_idex-0.3.0.tar.gz
  • Upload date:
  • Size: 21.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.6 Windows/10

File hashes

Hashes for stimline_idex-0.3.0.tar.gz
Algorithm Hash digest
SHA256 8b528be9619cf94a2f78bd7798cc3c490f3a715ce65f117dc9be817d82db758a
MD5 7d079ce8974df41aca35a8393d60f7bb
BLAKE2b-256 e6aa7c0bd7fcd3044cfdcdaf70691c60f33a3123d94fe85d74918f1a19210703

See more details on using hashes here.

File details

Details for the file stimline_idex-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: stimline_idex-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 36.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.6 Windows/10

File hashes

Hashes for stimline_idex-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ea00c39f65e90fe3156ac5e462e05a9929bb86c9f1a2d43d081fd9256816751b
MD5 9957f32db201331cc279775d54f1aa1c
BLAKE2b-256 8c281ab45741ed8e03bcd7cfa249a045c369e30d595d64077599b58270a40ec9

See more details on using hashes here.

Supported by

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