Upload Orchestration¶
upload ¶
Upload subpackage for SHM signal and sensor upload orchestration.
Re-exports all public symbols so from owi.metadatabase.shm.upload import X
works unchanged.
Classes¶
ParentSignalLookupError ¶
Bases: ShmUploadError
Raised when a derived signal refers to unresolved parent signals.
Source code in .venv/lib/python3.14/site-packages/owi/metadatabase/_utils/exceptions.py
ShmUploadError ¶
UploadResultError ¶
Bases: ShmUploadError
Raised when a backend mutation result does not include the expected id.
Source code in .venv/lib/python3.14/site-packages/owi/metadatabase/_utils/exceptions.py
AssetSignalUploadRequest
dataclass
¶
AssetSignalUploadRequest(
projectsite,
assetlocation,
signals,
derived_signals=None,
permission_group_ids=None,
sensor_serial_numbers_by_signal=None,
temperature_compensation_signal_ids=None,
temperature_compensation_signal_refs=None,
model_definition=None,
)
Input data for uploading one asset's SHM signals.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
projectsite
|
str
|
Parent SDK project site title. |
required |
assetlocation
|
str
|
Parent SDK asset location title. |
required |
signals
|
SignalConfigMap
|
Archive-compatible main signal data keyed by signal identifier. |
required |
derived_signals
|
SignalConfigMap | None
|
Archive-compatible derived signal data keyed by derived signal identifier. |
None
|
permission_group_ids
|
Sequence[int] | None
|
Visibility groups applied to created SHM objects. |
None
|
sensor_serial_numbers_by_signal
|
Mapping[str, int] | None
|
Optional map from signal identifier to the backend SHM sensor identifier stored on signal history rows. |
None
|
temperature_compensation_signal_ids
|
TemperatureCompensationSignalIDMap | None
|
Optional map from legacy temperature-compensation sensor token to backend SHM signal id. |
None
|
temperature_compensation_signal_refs
|
TemperatureCompensationSignalRefMap | None
|
Optional map from legacy temperature-compensation sensor token to SHM signal identifier. These references are resolved during upload after main signal creation. |
None
|
model_definition
|
str | None
|
Optional parent SDK model-definition title used when an asset has subassemblies for multiple model definitions. |
None
|
Examples:
>>> request = AssetSignalUploadRequest(
... projectsite="Project A",
... assetlocation="Asset-01",
... signals={},
... )
>>> request.result_key
'Project A/Asset-01'
Attributes¶
Functions¶
from_processing_result
classmethod
¶
from_processing_result(
*,
projectsite,
assetlocation,
processing_result,
permission_group_ids=None,
model_definition=None,
sensor_serial_numbers_by_signal=None,
temperature_compensation_signal_ids=None,
temperature_compensation_signal_refs=None,
)
Build an upload request from a processed signal-config result.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
projectsite
|
str
|
Parent SDK project site title. |
required |
assetlocation
|
str
|
Parent SDK asset location title. |
required |
processing_result
|
SignalProcessingResult
|
Processed signal and derived-signal records emitted by a processor. |
required |
permission_group_ids
|
Sequence[int] | None
|
Visibility groups applied to created SHM objects. |
None
|
model_definition
|
str | None
|
Optional parent SDK model-definition title used when an asset has subassemblies for multiple model definitions. |
None
|
sensor_serial_numbers_by_signal
|
Mapping[str, int] | None
|
Optional map from signal identifier to backend sensor serial number used for signal history rows. |
None
|
temperature_compensation_signal_ids
|
TemperatureCompensationSignalIDMap | None
|
Optional map from legacy temperature-compensation sensor token to backend SHM signal id. |
None
|
temperature_compensation_signal_refs
|
TemperatureCompensationSignalRefMap | None
|
Optional map from legacy temperature-compensation sensor token to SHM signal identifier. |
None
|
Returns:
| Type | Description |
|---|---|
AssetSignalUploadRequest
|
Asset-scoped upload request that preserves the archive-compatible payload shape. |
Examples:
>>> from owi.metadatabase.shm.processing import ProcessedSignalRecord, SignalProcessingResult
>>> signal = ProcessedSignalRecord()
>>> signal.add_status("01/01/1972 00:00", "ok")
>>> request = AssetSignalUploadRequest.from_processing_result(
... projectsite="Project A",
... assetlocation="Asset-01",
... processing_result=SignalProcessingResult(signals={"SIG": signal}, derived_signals={}),
... )
>>> request.signals["SIG"]["status"][0]["status"]
'ok'
Source code in src/owi/metadatabase/shm/upload/models.py
AssetSignalUploadResult
dataclass
¶
AssetSignalUploadResult(
asset_key,
signal_ids_by_name,
derived_signal_ids_by_name,
results_main,
results_secondary,
results_derived_main,
results_derived_secondary,
)
Upload result for one asset.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
asset_key
|
str
|
Stable asset-scoped result key in |
required |
signal_ids_by_name
|
Mapping[str, int]
|
Backend ids for created main signals keyed by signal identifier. |
required |
derived_signal_ids_by_name
|
Mapping[str, int]
|
Backend ids for created derived signals keyed by signal identifier. |
required |
results_main
|
Sequence[dict[str, Any]]
|
Raw backend responses for main signal creation calls. |
required |
results_secondary
|
Sequence[dict[str, Any]]
|
Raw backend responses for signal history and calibration calls. |
required |
results_derived_main
|
Sequence[dict[str, Any]]
|
Raw backend responses for derived signal creation calls. |
required |
results_derived_secondary
|
Sequence[dict[str, Any]]
|
Raw backend responses for derived history, parent patch, and calibration calls. |
required |
This
|
|
required | |
migrate
|
|
required |
DerivedSignalCalibrationPayload
dataclass
¶
DerivedSignalCalibrationPayload(
derived_signal_id,
calibration_date,
data,
status_approval="yes",
)
Payload model for derived signal calibration records.
DerivedSignalHistoryPayload
dataclass
¶
DerivedSignalHistoryPayload(
derived_signal_id,
activity_start_timestamp,
is_latest_status,
status,
parent_signals=None,
status_approval="yes",
)
Payload model for derived signal history records.
DerivedSignalPayload
dataclass
¶
DerivedSignalPayload(
site,
model_definition,
asset_location,
sub_assembly,
signal_type,
derived_signal_id,
visibility_groups,
heading=None,
level=None,
orientation=None,
stats=None,
data_additional=None,
visibility="usergroup",
)
Payload model for derived signal records.
SensorCalibrationPayload
dataclass
¶
Payload model for sensor calibration records.
SensorPayload
dataclass
¶
SensorPayload(
sensor_type_id,
serial_number,
cabinet,
visibility="usergroup",
visibility_groups=None,
)
Payload model for sensor records.
SensorTypePayload
dataclass
¶
SensorTypePayload(
name,
type,
type_extended,
hardware_supplier,
file=None,
visibility="usergroup",
visibility_groups=None,
)
Payload model for sensor type records.
SignalCalibrationPayload
dataclass
¶
SignalCalibrationPayload(
signal_id,
calibration_date,
data,
tempcomp_signal_id=None,
status_approval="yes",
)
Payload model for signal calibration records.
SignalHistoryPayload
dataclass
¶
SignalHistoryPayload(
signal_id,
activity_start_timestamp,
is_latest_status,
status,
sensor_serial_number=None,
status_approval="yes",
legacy_signal_id=None,
)
Payload model for signal history records.
SignalPayload
dataclass
¶
SignalPayload(
site,
model_definition,
asset_location,
signal_type,
signal_id,
visibility_groups,
sub_assembly=None,
heading=None,
level=None,
orientation=None,
stats=None,
data_additional=None,
visibility="usergroup",
)
Payload model for signal records.
ShmSignalUploadClient ¶
Bases: Protocol
Protocol describing the SHM transport methods used by the uploader.
SignalConfigUploadSource ¶
Bases: Protocol
Protocol for processors that feed turbine-scoped upload data.
ShmSensorUploadClient ¶
ShmSensorUploader ¶
Upload sensor types, sensors, and sensor calibrations for SHM assets.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
shm_api
|
ShmSensorUploadClient
|
SHM transport client that satisfies :class: |
required |
Source code in src/owi/metadatabase/shm/upload/sensors.py
Functions¶
upload_sensor_types ¶
Upload sensor type records, optionally with image attachments.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sensor_types_data
|
Sequence[Mapping[str, Any]]
|
List of sensor type records (e.g. loaded from |
required |
permission_group_ids
|
Sequence[int] | None
|
Permission groups applied to every sensor type. |
required |
path_to_images
|
str | Path | None
|
Optional directory containing sensor type image files. |
None
|
Returns:
| Type | Description |
|---|---|
list[dict[str, Any]]
|
Raw backend responses for each created sensor type. |
Source code in src/owi/metadatabase/shm/upload/sensors.py
upload_sensors ¶
upload_sensors(
sensor_type_name,
sensor_type_params,
sensors_data,
permission_group_ids,
turbines=None,
)
Upload sensor records for a single sensor category across turbines.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sensor_type_name
|
str
|
Key identifying the sensor category within each turbine's data
(e.g. |
required |
sensor_type_params
|
Mapping[str, str]
|
Query parameters used to resolve the backend sensor type id
(e.g. |
required |
sensors_data
|
SensorsDataByTurbine
|
Per-turbine sensor data keyed by turbine identifier. Each turbine
has categories mapping to |
required |
permission_group_ids
|
Sequence[int] | None
|
Permission groups applied to every sensor. |
required |
turbines
|
Sequence[str] | None
|
Optional filter to upload only specific turbines. When None,
all turbines in |
None
|
Returns:
| Type | Description |
|---|---|
list[dict[str, Any]]
|
Raw backend responses for each created sensor. |
Source code in src/owi/metadatabase/shm/upload/sensors.py
upload_sensor_calibrations ¶
upload_sensor_calibrations(
signal_sensor_map_data,
signal_calibration_map_data,
path_to_datasheets,
turbines=None,
)
Upload sensor calibration records with optional PDF attachments.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
signal_sensor_map_data
|
Mapping[str, Mapping[str, Mapping[str, Any]]]
|
Per-turbine signal-to-sensor mapping (keyed by turbine, then signal
name, with sensor lookup params including |
required |
signal_calibration_map_data
|
Mapping[str, Mapping[str, Mapping[str, str]]]
|
Per-turbine calibration data (keyed by turbine, then signal name,
with |
required |
path_to_datasheets
|
str | Path
|
Directory containing calibration PDF files. |
required |
turbines
|
Sequence[str] | None
|
Optional turbine filter. When None, all turbines are processed. |
None
|
Returns:
| Type | Description |
|---|---|
list[dict[str, Any]]
|
Raw backend responses for each created calibration. |
Source code in src/owi/metadatabase/shm/upload/sensors.py
ShmSignalUploader ¶
Upload archive-compatible SHM signal data for arbitrary wind-farm assets.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
shm_api
|
ShmSignalUploadClient
|
SHM transport client, typically :class: |
required |
lookup_service
|
ParentSDKLookupService
|
Parent SDK lookup service used to resolve site, asset, and subassembly ids. |
required |
Source code in src/owi/metadatabase/shm/upload/signals.py
Functions¶
from_clients
classmethod
¶
Construct the uploader from SHM and parent SDK clients.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
shm_api
|
ShmSignalUploadClient
|
SHM transport client used for backend mutations. |
required |
locations_client
|
ParentLocationsLookupClient
|
Parent SDK client that resolves project and asset locations. |
required |
geometry_client
|
ParentGeometryLookupClient
|
Parent SDK client that resolves subassemblies and model definitions. |
required |
Returns:
| Type | Description |
|---|---|
ShmSignalUploader
|
Uploader wired to the canonical SHM lookup service. |
Source code in src/owi/metadatabase/shm/upload/signals.py
upload_asset ¶
Upload main and secondary SHM records for one asset.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
AssetSignalUploadRequest
|
Asset-scoped upload request containing the archive-compatible main and derived signal mappings. |
required |
Returns:
| Type | Description |
|---|---|
AssetSignalUploadResult
|
Created backend ids plus raw backend responses grouped by upload phase. |
Source code in src/owi/metadatabase/shm/upload/signals.py
upload_assets ¶
Upload SHM signal data for multiple assets.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
requests
|
Sequence[AssetSignalUploadRequest]
|
Asset-scoped upload requests to execute in order. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, AssetSignalUploadResult]
|
Upload results keyed by each request's stable result key. |
Source code in src/owi/metadatabase/shm/upload/signals.py
upload_turbines ¶
upload_turbines(
*,
projectsite,
signals_by_turbine,
derived_signals_by_turbine=None,
assetlocations_by_turbine=None,
permission_group_ids=None,
model_definition=None,
sensor_serial_numbers_by_turbine=None,
temperature_compensation_signal_ids_by_turbine=None,
temperature_compensation_signal_refs_by_turbine=None,
)
Upload SHM signal data for multiple turbine-scoped config bundles.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
projectsite
|
str
|
Parent SDK project site title shared by the turbine batch. |
required |
signals_by_turbine
|
SignalConfigMapByTurbine
|
Main signal mappings keyed by turbine identifier. |
required |
derived_signals_by_turbine
|
SignalConfigMapByTurbine | None
|
Optional derived signal mappings keyed by turbine identifier. |
None
|
assetlocations_by_turbine
|
Mapping[str, str] | None
|
Optional turbine-to-asset-location override mapping. |
None
|
permission_group_ids
|
Sequence[int] | None
|
Visibility groups applied to created SHM objects. |
None
|
model_definition
|
str | None
|
Optional parent SDK model-definition title used when the project has multiple model definitions for the same asset location. |
None
|
sensor_serial_numbers_by_turbine
|
Mapping[str, Mapping[str, int]] | None
|
Optional per-turbine mapping of signal identifiers to sensor serial numbers used for signal history rows. |
None
|
temperature_compensation_signal_ids_by_turbine
|
Mapping[str, TemperatureCompensationSignalIDMap] | None
|
Optional per-turbine mapping of temperature-compensation tokens to backend SHM signal ids. |
None
|
temperature_compensation_signal_refs_by_turbine
|
Mapping[str, TemperatureCompensationSignalRefMap] | None
|
Optional per-turbine mapping of temperature-compensation tokens to SHM signal identifiers resolved during upload. |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, AssetSignalUploadResult]
|
Upload results keyed by turbine identifier. |
This keeps the response keyed by turbine while parent lookups use the
|
|
corresponding asset-location title.
|
|
Source code in src/owi/metadatabase/shm/upload/signals.py
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 | |
upload_from_processor ¶
upload_from_processor(
*,
projectsite,
processor,
assetlocations_by_turbine=None,
permission_group_ids=None,
model_definition=None,
sensor_serial_numbers_by_turbine=None,
temperature_compensation_signal_ids_by_turbine=None,
temperature_compensation_signal_refs_by_turbine=None,
)
Process turbine configs and upload them through the generic SHM seam.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
projectsite
|
str
|
Parent SDK project site title shared by the processor output. |
required |
processor
|
SignalConfigUploadSource
|
Processor instance that populates |
required |
assetlocations_by_turbine
|
Mapping[str, str] | None
|
Optional turbine-to-asset-location override mapping. |
None
|
permission_group_ids
|
Sequence[int] | None
|
Visibility groups applied to created SHM objects. |
None
|
model_definition
|
str | None
|
Optional parent SDK model-definition title used when the project has multiple model definitions for the same asset location. |
None
|
sensor_serial_numbers_by_turbine
|
Mapping[str, Mapping[str, int]] | None
|
Optional per-turbine mapping of signal identifiers to sensor serial numbers used for signal history rows. |
None
|
temperature_compensation_signal_ids_by_turbine
|
Mapping[str, TemperatureCompensationSignalIDMap] | None
|
Optional per-turbine mapping of temperature-compensation tokens to backend SHM signal ids. |
None
|
temperature_compensation_signal_refs_by_turbine
|
Mapping[str, TemperatureCompensationSignalRefMap] | None
|
Optional per-turbine mapping of temperature-compensation tokens to SHM signal identifiers resolved during upload. |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, AssetSignalUploadResult]
|
Upload results keyed by turbine identifier. |
Source code in src/owi/metadatabase/shm/upload/signals.py
upload_from_processor_files ¶
upload_from_processor_files(
*,
projectsite,
processor,
path_signal_sensor_map=None,
path_sensor_tc_map=None,
assetlocations_by_turbine=None,
permission_group_ids=None,
model_definition=None,
)
Process configs, resolve optional file maps, and upload by turbine.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
projectsite
|
str
|
Parent SDK project site title shared by the batch. |
required |
processor
|
SignalConfigUploadSource
|
Processor that populates turbine-scoped signal mappings. |
required |
path_signal_sensor_map
|
str | Path | None
|
Optional JSON file keyed by turbine and signal id with SHM sensor
lookup parameters. When |
None
|
path_sensor_tc_map
|
str | Path | None
|
Optional JSON file keyed by turbine with temperature- compensation signal identifiers resolved after main signal creation. |
None
|
assetlocations_by_turbine
|
Mapping[str, str] | None
|
Optional turbine-to-asset-location override mapping. |
None
|
permission_group_ids
|
Sequence[int] | None
|
Visibility groups applied to created SHM objects. |
None
|
model_definition
|
str | None
|
Optional parent SDK model-definition title used when the project has multiple model definitions for the same asset location. |
None
|
Returns:
| Type | Description |
|---|---|
dict[str, AssetSignalUploadResult]
|
Upload results keyed by turbine identifier. |
Examples:
>>> from unittest.mock import Mock
>>> uploader = ShmSignalUploader(shm_api=Mock(), lookup_service=Mock())
>>> processor = Mock()
>>> processor.signals_data = {}
>>> processor.signals_derived_data = {}
>>> uploader.upload_from_processor_files(projectsite="Project A", processor=processor)
{}
Source code in src/owi/metadatabase/shm/upload/signals.py
Functions¶
build_derived_signal_calibration_payloads ¶
Build derived-signal calibration payloads from archive-style data.
Source code in src/owi/metadatabase/shm/upload/payloads.py
build_derived_signal_main_payload ¶
Build the main derived-signal payload from archive-style data.
Source code in src/owi/metadatabase/shm/upload/payloads.py
build_derived_signal_parent_patch ¶
Build the parent-signals patch payload for derived signal status rows.
Source code in src/owi/metadatabase/shm/upload/payloads.py
build_derived_signal_status_payload ¶
Build the derived-signal status payload used before parent patching.
Source code in src/owi/metadatabase/shm/upload/payloads.py
build_sensor_calibration_payloads ¶
Build sensor calibration payload models for one turbine.
Source code in src/owi/metadatabase/shm/upload/payloads.py
build_sensor_payloads ¶
build_sensor_payloads(
sensor_type_id,
serial_numbers,
cabinets,
visibility_groups,
visibility="usergroup",
)
Build sensor payload models from parallel columns.
Source code in src/owi/metadatabase/shm/upload/payloads.py
build_sensor_type_payloads ¶
build_sensor_type_payloads(
sensor_types_data,
visibility_groups,
path_to_images=None,
visibility="usergroup",
)
Build sensor type payload models from raw records.
Source code in src/owi/metadatabase/shm/upload/payloads.py
build_signal_calibration_payloads ¶
Build signal calibration payloads from archive-style offset and CWL data.
Source code in src/owi/metadatabase/shm/upload/payloads.py
build_signal_main_payload ¶
Build the main signal payload from archive-style signal data.
Source code in src/owi/metadatabase/shm/upload/payloads.py
build_signal_status_payloads ¶
Build signal status payloads from archive-style status rows.