Builders

elements.sdk.builder

To construct some of the more complex API calls, the Elements SDK provides a number of "builders" that make creating request objects simpler. These builders include methods to build request objects step-by-step and enums that map keys to API-compatible values.

Below is an example how a builder can simplify a request for constructing an Analysis Version:

API:

from elements_api import ElementsSyncClient
from elements_api.models.analysis_version_pb2 import AnalysisManifest, AnalysisAlgorithmNode, AnalysisVersionCreateRequest

analysis_manifest = AnalysisManifest(
  manifest_version="0.0.5",
  metadata=AnalysisManifest.Metadata(version="0.0.3",
                                     description="Analyze before and after locations of pings that visted an AOI",
                                     tags=['traceability', 'device', 'movement', 'ais', 'adsb']),
  algorithm_nodes=[
    AnalysisAlgorithmNode(
      name="device-visits",
      algorithm_version_id="5ee03b8e-ab45-4553-b5f4-a5029254a9de",
      children=["device-tracks"]
    ),
    AnalysisAlgorithmNode(
      name="device-tracks",
      algorithm_version_id="6f7cff18-c2a2-4246-b0d4-21be09673a6b",
      children=[]
    )
  ]
)

client = ElementsSyncClient()
request = AnalysisVersionCreateRequest(
  analysis_id="96b49764-007d-4166-9a5f-600b9bfa9ba6",
  analysis_manifest=analysis_manifest
)
await client.api.analysis_version.create(request)

SDK:

from elements.sdk.elements_sdk import TerraScopeSDK
from elements.sdk.builder.analysis import AnalysisManifestFactory

analysis_manifest = AnalysisManifestFactory()
analysis_manifest.metadata(manifest_version="0.0.5",
                           description="Analyze before and after locations of pings that visted an AOI",
                           version="0.0.3", tags=['traceability', 'device', 'movement', 'ais', 'adsb'])
analysis_manifest.add_node(name="device-visits", algorithm_version_id="5ee03b8e-ab45-4553-b5f4-a5029254a9de")
analysis_manifest.add_node(name="device-tracks", algorithm_version_id="6f7cff18-c2a2-4246-b0d4-21be09673a6b")
analysis_manifest.add_node_edge(node_index=0, child_node_index=1)

sdk = ElementsSDK()
await sdk.analysis_version.create(
  analysis_id="96b49764-007d-4166-9a5f-600b9bfa9ba6",
  analysis_manifest=movement_device_manifest
)