transport-wrapper 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. transport_wrapper-0.1.0/.gitignore +7 -0
  2. transport_wrapper-0.1.0/LICENSE +21 -0
  3. transport_wrapper-0.1.0/PKG-INFO +120 -0
  4. transport_wrapper-0.1.0/README.md +106 -0
  5. transport_wrapper-0.1.0/pyproject.toml +32 -0
  6. transport_wrapper-0.1.0/sapient_msg/__init__.py +7 -0
  7. transport_wrapper-0.1.0/sapient_msg/_exports.py +60 -0
  8. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/__init__.py +5 -0
  9. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/alert.proto +66 -0
  10. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/alert_ack.proto +33 -0
  11. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/alert_ack_pb2.py +34 -0
  12. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/alert_ack_pb2.pyi +28 -0
  13. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/alert_pb2.py +42 -0
  14. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/alert_pb2.pyi +82 -0
  15. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/associated_detection.proto +32 -0
  16. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/associated_detection_pb2.py +35 -0
  17. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/associated_detection_pb2.pyi +33 -0
  18. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/associated_file.proto +21 -0
  19. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/associated_file_pb2.py +32 -0
  20. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/associated_file_pb2.pyi +14 -0
  21. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/detection_report.proto +102 -0
  22. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/detection_report_pb2.py +76 -0
  23. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/detection_report_pb2.pyi +122 -0
  24. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/error.proto +24 -0
  25. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/error_pb2.py +30 -0
  26. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/error_pb2.pyi +15 -0
  27. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/follow.proto +21 -0
  28. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/follow_pb2.py +30 -0
  29. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/follow_pb2.pyi +12 -0
  30. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/location.proto +48 -0
  31. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/location_pb2.py +44 -0
  32. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/location_pb2.pyi +56 -0
  33. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/range_bearing.proto +70 -0
  34. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/range_bearing_pb2.py +47 -0
  35. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/range_bearing_pb2.pyi +90 -0
  36. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/registration.proto +319 -0
  37. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/registration_ack.proto +24 -0
  38. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/registration_ack_pb2.py +30 -0
  39. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/registration_ack_pb2.pyi +15 -0
  40. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/registration_pb2.py +219 -0
  41. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/registration_pb2.pyi +503 -0
  42. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/sapient_message.proto +57 -0
  43. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/sapient_message_pb2.py +46 -0
  44. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/sapient_message_pb2.pyi +46 -0
  45. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/status_report.proto +111 -0
  46. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/status_report_pb2.py +58 -0
  47. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/status_report_pb2.pyi +142 -0
  48. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/task.proto +116 -0
  49. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/task_ack.proto +35 -0
  50. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/task_ack_pb2.py +35 -0
  51. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/task_ack_pb2.pyi +33 -0
  52. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/task_pb2.py +81 -0
  53. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/task_pb2.pyi +145 -0
  54. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/velocity.proto +47 -0
  55. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/velocity_pb2.py +38 -0
  56. transport_wrapper-0.1.0/sapient_msg/bsi_flex_335_v2_0/velocity_pb2.pyi +40 -0
  57. transport_wrapper-0.1.0/sapient_msg/latest/__init__.py +5 -0
  58. transport_wrapper-0.1.0/sapient_msg/latest/alert_ack_pb2.py +34 -0
  59. transport_wrapper-0.1.0/sapient_msg/latest/alert_ack_pb2.pyi +28 -0
  60. transport_wrapper-0.1.0/sapient_msg/latest/alert_pb2.py +42 -0
  61. transport_wrapper-0.1.0/sapient_msg/latest/alert_pb2.pyi +82 -0
  62. transport_wrapper-0.1.0/sapient_msg/latest/associated_detection_pb2.py +35 -0
  63. transport_wrapper-0.1.0/sapient_msg/latest/associated_detection_pb2.pyi +33 -0
  64. transport_wrapper-0.1.0/sapient_msg/latest/associated_file_pb2.py +32 -0
  65. transport_wrapper-0.1.0/sapient_msg/latest/associated_file_pb2.pyi +14 -0
  66. transport_wrapper-0.1.0/sapient_msg/latest/detection_report_pb2.py +76 -0
  67. transport_wrapper-0.1.0/sapient_msg/latest/detection_report_pb2.pyi +122 -0
  68. transport_wrapper-0.1.0/sapient_msg/latest/error_pb2.py +30 -0
  69. transport_wrapper-0.1.0/sapient_msg/latest/error_pb2.pyi +15 -0
  70. transport_wrapper-0.1.0/sapient_msg/latest/follow_pb2.py +30 -0
  71. transport_wrapper-0.1.0/sapient_msg/latest/follow_pb2.pyi +12 -0
  72. transport_wrapper-0.1.0/sapient_msg/latest/location_pb2.py +44 -0
  73. transport_wrapper-0.1.0/sapient_msg/latest/location_pb2.pyi +56 -0
  74. transport_wrapper-0.1.0/sapient_msg/latest/range_bearing_pb2.py +47 -0
  75. transport_wrapper-0.1.0/sapient_msg/latest/range_bearing_pb2.pyi +90 -0
  76. transport_wrapper-0.1.0/sapient_msg/latest/registration_ack_pb2.py +30 -0
  77. transport_wrapper-0.1.0/sapient_msg/latest/registration_ack_pb2.pyi +15 -0
  78. transport_wrapper-0.1.0/sapient_msg/latest/registration_pb2.py +219 -0
  79. transport_wrapper-0.1.0/sapient_msg/latest/registration_pb2.pyi +503 -0
  80. transport_wrapper-0.1.0/sapient_msg/latest/sapient_message_pb2.py +46 -0
  81. transport_wrapper-0.1.0/sapient_msg/latest/sapient_message_pb2.pyi +46 -0
  82. transport_wrapper-0.1.0/sapient_msg/latest/status_report_pb2.py +58 -0
  83. transport_wrapper-0.1.0/sapient_msg/latest/status_report_pb2.pyi +142 -0
  84. transport_wrapper-0.1.0/sapient_msg/latest/task_ack_pb2.py +35 -0
  85. transport_wrapper-0.1.0/sapient_msg/latest/task_ack_pb2.pyi +33 -0
  86. transport_wrapper-0.1.0/sapient_msg/latest/task_pb2.py +81 -0
  87. transport_wrapper-0.1.0/sapient_msg/latest/task_pb2.pyi +145 -0
  88. transport_wrapper-0.1.0/sapient_msg/latest/velocity_pb2.py +38 -0
  89. transport_wrapper-0.1.0/sapient_msg/latest/velocity_pb2.pyi +40 -0
  90. transport_wrapper-0.1.0/sapient_msg/proto_options.proto +58 -0
  91. transport_wrapper-0.1.0/sapient_msg/proto_options_pb2.py +32 -0
  92. transport_wrapper-0.1.0/sapient_msg/proto_options_pb2.pyi +58 -0
@@ -0,0 +1,7 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ dist/
5
+ build/
6
+ .venv/
7
+ .env
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Volodya
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,120 @@
1
+ Metadata-Version: 2.4
2
+ Name: transport-wrapper
3
+ Version: 0.1.0
4
+ Summary: SAPIENT protobuf bindings (BSI Flex 335 v2.0)
5
+ Project-URL: Repository, https://github.com/nbowisdar/sapient-msg
6
+ Project-URL: Homepage, https://github.com/nbowisdar/sapient-msg
7
+ Project-URL: Documentation, https://github.com/nbowisdar/sapient-msg/blob/main/IntegrationGuide.md
8
+ Author-email: Virtuoz <virtuoz@demo-iot.technology>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Requires-Python: >=3.11
12
+ Requires-Dist: protobuf<7,>=4.25
13
+ Description-Content-Type: text/markdown
14
+
15
+ # transport-wrapper
16
+
17
+ Python protobuf bindings for the SAPIENT protocol (BSI Flex 335 v2.0).
18
+
19
+ Repository: https://github.com/nbowisdar/sapient-msg
20
+
21
+ ## Install
22
+
23
+ From PyPI:
24
+
25
+ ```bash
26
+ pip install transport-wrapper
27
+ ```
28
+
29
+ ```bash
30
+ uv add transport-wrapper
31
+ ```
32
+
33
+ From GitHub:
34
+
35
+ ```bash
36
+ uv add "transport-wrapper @ git+https://github.com/nbowisdar/sapient-msg.git@v0.1.0"
37
+ ```
38
+
39
+ For local development:
40
+
41
+ ```bash
42
+ uv add --editable /path/to/transport-wrapper
43
+ ```
44
+
45
+ ## Documentation
46
+
47
+ See [IntegrationGuide.md](IntegrationGuide.md) for connection setup, message flows, and compliance requirements.
48
+
49
+ ## Usage
50
+
51
+ Import protobuf modules directly from the package root:
52
+
53
+ ```python
54
+ from sapient_msg import sapient_message_pb2, registration_pb2
55
+ ```
56
+
57
+ Create a registration message:
58
+
59
+ ```python
60
+ from sapient_msg import registration_pb2
61
+
62
+ registration = registration_pb2.Registration(
63
+ name="sensor-01",
64
+ short_name="s01",
65
+ icd_version="BSI Flex 335 v2.0",
66
+ )
67
+ ```
68
+
69
+ Wrap it in a SAPIENT envelope:
70
+
71
+ ```python
72
+ from datetime import datetime, timezone
73
+
74
+ from google.protobuf.timestamp_pb2 import Timestamp
75
+ from sapient_msg import sapient_message_pb2, registration_pb2
76
+
77
+ timestamp = Timestamp()
78
+ timestamp.FromDatetime(datetime.now(timezone.utc))
79
+
80
+ message = sapient_message_pb2.SapientMessage(
81
+ timestamp=timestamp,
82
+ node_id="sensor-01",
83
+ registration=registration_pb2.Registration(name="sensor-01"),
84
+ )
85
+ ```
86
+
87
+ Serialize and parse:
88
+
89
+ ```python
90
+ from sapient_msg import sapient_message_pb2
91
+
92
+ data = message.SerializeToString()
93
+ parsed = sapient_message_pb2.SapientMessage()
94
+ parsed.ParseFromString(data)
95
+ ```
96
+
97
+ Version-specific imports still work when needed:
98
+
99
+ ```python
100
+ from sapient_msg.bsi_flex_335_v2_0 import sapient_message_pb2
101
+ from sapient_msg.latest import registration_pb2
102
+ ```
103
+
104
+ ## Regenerate bindings
105
+
106
+ Requires `grpcio-tools`:
107
+
108
+ ```bash
109
+ uv pip install grpcio-tools
110
+ ./scripts/generate.sh
111
+ ```
112
+
113
+ ## Release
114
+
115
+ Push a version tag to publish to PyPI via GitHub Actions (trusted publishing):
116
+
117
+ ```bash
118
+ git tag v0.1.0
119
+ git push origin v0.1.0
120
+ ```
@@ -0,0 +1,106 @@
1
+ # transport-wrapper
2
+
3
+ Python protobuf bindings for the SAPIENT protocol (BSI Flex 335 v2.0).
4
+
5
+ Repository: https://github.com/nbowisdar/sapient-msg
6
+
7
+ ## Install
8
+
9
+ From PyPI:
10
+
11
+ ```bash
12
+ pip install transport-wrapper
13
+ ```
14
+
15
+ ```bash
16
+ uv add transport-wrapper
17
+ ```
18
+
19
+ From GitHub:
20
+
21
+ ```bash
22
+ uv add "transport-wrapper @ git+https://github.com/nbowisdar/sapient-msg.git@v0.1.0"
23
+ ```
24
+
25
+ For local development:
26
+
27
+ ```bash
28
+ uv add --editable /path/to/transport-wrapper
29
+ ```
30
+
31
+ ## Documentation
32
+
33
+ See [IntegrationGuide.md](IntegrationGuide.md) for connection setup, message flows, and compliance requirements.
34
+
35
+ ## Usage
36
+
37
+ Import protobuf modules directly from the package root:
38
+
39
+ ```python
40
+ from sapient_msg import sapient_message_pb2, registration_pb2
41
+ ```
42
+
43
+ Create a registration message:
44
+
45
+ ```python
46
+ from sapient_msg import registration_pb2
47
+
48
+ registration = registration_pb2.Registration(
49
+ name="sensor-01",
50
+ short_name="s01",
51
+ icd_version="BSI Flex 335 v2.0",
52
+ )
53
+ ```
54
+
55
+ Wrap it in a SAPIENT envelope:
56
+
57
+ ```python
58
+ from datetime import datetime, timezone
59
+
60
+ from google.protobuf.timestamp_pb2 import Timestamp
61
+ from sapient_msg import sapient_message_pb2, registration_pb2
62
+
63
+ timestamp = Timestamp()
64
+ timestamp.FromDatetime(datetime.now(timezone.utc))
65
+
66
+ message = sapient_message_pb2.SapientMessage(
67
+ timestamp=timestamp,
68
+ node_id="sensor-01",
69
+ registration=registration_pb2.Registration(name="sensor-01"),
70
+ )
71
+ ```
72
+
73
+ Serialize and parse:
74
+
75
+ ```python
76
+ from sapient_msg import sapient_message_pb2
77
+
78
+ data = message.SerializeToString()
79
+ parsed = sapient_message_pb2.SapientMessage()
80
+ parsed.ParseFromString(data)
81
+ ```
82
+
83
+ Version-specific imports still work when needed:
84
+
85
+ ```python
86
+ from sapient_msg.bsi_flex_335_v2_0 import sapient_message_pb2
87
+ from sapient_msg.latest import registration_pb2
88
+ ```
89
+
90
+ ## Regenerate bindings
91
+
92
+ Requires `grpcio-tools`:
93
+
94
+ ```bash
95
+ uv pip install grpcio-tools
96
+ ./scripts/generate.sh
97
+ ```
98
+
99
+ ## Release
100
+
101
+ Push a version tag to publish to PyPI via GitHub Actions (trusted publishing):
102
+
103
+ ```bash
104
+ git tag v0.1.0
105
+ git push origin v0.1.0
106
+ ```
@@ -0,0 +1,32 @@
1
+ [project]
2
+ name = "transport-wrapper"
3
+ version = "0.1.0"
4
+ description = "SAPIENT protobuf bindings (BSI Flex 335 v2.0)"
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ authors = [
8
+ { name = "Virtuoz", email = "virtuoz@demo-iot.technology" },
9
+ ]
10
+ requires-python = ">=3.11"
11
+ dependencies = [
12
+ "protobuf>=4.25,<7",
13
+ ]
14
+
15
+ [project.urls]
16
+ Repository = "https://github.com/nbowisdar/sapient-msg"
17
+ Homepage = "https://github.com/nbowisdar/sapient-msg"
18
+ Documentation = "https://github.com/nbowisdar/sapient-msg/blob/main/IntegrationGuide.md"
19
+
20
+ [build-system]
21
+ requires = ["hatchling"]
22
+ build-backend = "hatchling.build"
23
+
24
+ [tool.hatch.build.targets.wheel]
25
+ packages = ["sapient_msg"]
26
+
27
+ [tool.hatch.build.targets.sdist]
28
+ include = [
29
+ "sapient_msg/**/*.proto",
30
+ "sapient_msg/**/*.py",
31
+ "sapient_msg/**/*.pyi",
32
+ ]
@@ -0,0 +1,7 @@
1
+ """SAPIENT protobuf bindings."""
2
+
3
+ from sapient_msg._exports import _ROOT_PUBLIC_NAMES, make_getattr, make_root_dir
4
+
5
+ __all__ = list(_ROOT_PUBLIC_NAMES)
6
+ __getattr__ = make_getattr(__name__)
7
+ __dir__ = make_root_dir
@@ -0,0 +1,60 @@
1
+ from __future__ import annotations
2
+
3
+ import importlib
4
+ from typing import Final
5
+
6
+ PB2_MODULES: Final[frozenset[str]] = frozenset(
7
+ {
8
+ "alert_ack_pb2",
9
+ "alert_pb2",
10
+ "associated_detection_pb2",
11
+ "associated_file_pb2",
12
+ "detection_report_pb2",
13
+ "error_pb2",
14
+ "follow_pb2",
15
+ "location_pb2",
16
+ "range_bearing_pb2",
17
+ "registration_ack_pb2",
18
+ "registration_pb2",
19
+ "sapient_message_pb2",
20
+ "status_report_pb2",
21
+ "task_ack_pb2",
22
+ "task_pb2",
23
+ "velocity_pb2",
24
+ }
25
+ )
26
+
27
+ _ROOT_PUBLIC_NAMES: Final[tuple[str, ...]] = ("proto_options_pb2", *sorted(PB2_MODULES))
28
+ _VERSION_PUBLIC_NAMES: Final[tuple[str, ...]] = tuple(sorted(PB2_MODULES))
29
+
30
+
31
+ def _resolve_module(package: str, name: str, *, version: str | None) -> object:
32
+ if name == "proto_options_pb2":
33
+ if version is not None:
34
+ raise AttributeError(f"module {package!r} has no attribute {name!r}")
35
+ return importlib.import_module("sapient_msg.proto_options_pb2")
36
+
37
+ if name not in PB2_MODULES:
38
+ raise AttributeError(f"module {package!r} has no attribute {name!r}")
39
+
40
+ if version is None:
41
+ module_name = f"sapient_msg.latest.{name}"
42
+ else:
43
+ module_name = f"sapient_msg.{version}.{name}"
44
+
45
+ return importlib.import_module(module_name)
46
+
47
+
48
+ def make_getattr(package: str, *, version: str | None = None):
49
+ def __getattr__(name: str) -> object:
50
+ return _resolve_module(package, name, version=version)
51
+
52
+ return __getattr__
53
+
54
+
55
+ def make_root_dir() -> list[str]:
56
+ return list(_ROOT_PUBLIC_NAMES)
57
+
58
+
59
+ def make_version_dir() -> list[str]:
60
+ return list(_VERSION_PUBLIC_NAMES)
@@ -0,0 +1,5 @@
1
+ from sapient_msg._exports import _VERSION_PUBLIC_NAMES, make_getattr, make_version_dir
2
+
3
+ __all__ = list(_VERSION_PUBLIC_NAMES)
4
+ __getattr__ = make_getattr(__name__, version="bsi_flex_335_v2_0")
5
+ __dir__ = make_version_dir
@@ -0,0 +1,66 @@
1
+ // Dstl (c) Crown Copyright 2024
2
+ //
3
+ // [START declaration]
4
+ syntax = "proto3";
5
+ package sapient_msg.bsi_flex_335_v2_0;
6
+
7
+ import "sapient_msg/bsi_flex_335_v2_0/associated_detection.proto";
8
+ import "sapient_msg/bsi_flex_335_v2_0/associated_file.proto";
9
+ import "sapient_msg/bsi_flex_335_v2_0/location.proto";
10
+ import "sapient_msg/bsi_flex_335_v2_0/range_bearing.proto";
11
+ import "sapient_msg/proto_options.proto";
12
+ // [END declaration]
13
+
14
+ // [START java_declaration]
15
+ option java_multiple_files = true;
16
+ option java_package = "uk.gov.dstl.sapientmsg.bsiflex335v2";
17
+ option java_outer_classname = "AlertProto";
18
+ // [END java_declaration]
19
+
20
+
21
+ // [START messages]
22
+ message Alert {
23
+
24
+ optional string alert_id = 1 [(field_options) = {is_mandatory: true, is_ulid: true}]; // ULID for the message
25
+ optional AlertType alert_type = 2; // Type of alert message
26
+ optional AlertStatus status = 3; // State of the information in this message
27
+ optional string description = 4; // Description of the alert (normally displayed on a GUI)
28
+ oneof location_oneof { // The position of the event/object that caused the alert
29
+ RangeBearing range_bearing = 5; // Location of the alert in Sphereical coordinates
30
+ Location location = 6; // Location of the alert in Geo coordinates
31
+ }
32
+ optional string region_id = 7 [(field_options) = {is_ulid: true}]; // ULID of the region the alert is from
33
+ optional DiscretePriority priority = 8; // Priority of the alert
34
+ optional float ranking = 9; // 0-1
35
+ optional float confidence = 10; // Confidence (0-1) that the alert is not a false-alarm
36
+ repeated AssociatedFile associated_file = 11; // URL linking to any files associated with the alert
37
+ repeated AssociatedDetection associated_detection = 12; // Detections associated with the alert
38
+ optional string additional_information = 13; // Any additional information that may be useful for the alert consumer
39
+
40
+ enum AlertType {
41
+ ALERT_TYPE_UNSPECIFIED = 0; // Unset enum
42
+ ALERT_TYPE_INFORMATION = 1;
43
+ ALERT_TYPE_WARNING = 2;
44
+ ALERT_TYPE_CRITICAL = 3;
45
+ ALERT_TYPE_ERROR = 4;
46
+ ALERT_TYPE_FATAL = 5;
47
+ ALERT_TYPE_MODE_CHANGE = 6;
48
+ }
49
+
50
+ enum AlertStatus {
51
+ ALERT_STATUS_UNSPECIFIED = 0; // Unset enum
52
+ ALERT_STATUS_ACTIVE = 1;
53
+ ALERT_STATUS_ACKNOWLEDGE = 2;
54
+ ALERT_STATUS_REJECT = 3;
55
+ ALERT_STATUS_IGNORE = 4;
56
+ ALERT_STATUS_CLEAR = 5;
57
+ }
58
+
59
+ enum DiscretePriority {
60
+ DISCRETE_PRIORITY_UNSPECIFIED = 0; // Alert priority not set
61
+ DISCRETE_PRIORITY_LOW = 1; // Low alert priority
62
+ DISCRETE_PRIORITY_MEDIUM = 2; // Medium alert priority
63
+ DISCRETE_PRIORITY_HIGH = 3; // High alert priority
64
+ }
65
+ }
66
+ // [END messages]
@@ -0,0 +1,33 @@
1
+ // Dstl (c) Crown Copyright 2024
2
+ //
3
+ // [START declaration]
4
+ syntax = "proto3";
5
+ package sapient_msg.bsi_flex_335_v2_0;
6
+
7
+ import "sapient_msg/proto_options.proto";
8
+ // [END declaration]
9
+
10
+ // [START java_declaration]
11
+ option java_multiple_files = true;
12
+ option java_package = "uk.gov.dstl.sapientmsg.bsiflex335v2";
13
+ option java_outer_classname = "AlertAckProto";
14
+ // [END java_declaration]
15
+
16
+
17
+ // [START messages]
18
+ message AlertAck {
19
+ reserved 2,3; // Reason field has been changed to an array to allow multiple reasons for rejection/failure to be reported
20
+ optional string alert_id = 1 [(field_options) = {is_mandatory: true, is_ulid: true}]; // ULID for the message
21
+ // optional AlertStatus alert_status = 2 [(field_options) = {is_mandatory: true}]; // State of the information in this message
22
+ // optional string reason = 3; // Reason why alert was not accepted
23
+ repeated string reason = 4; // Reason(s) why alert was not accepted
24
+ optional AlertAckStatus alert_ack_status = 5 [(field_options) = {is_mandatory: true}]; // State of the information in this message
25
+
26
+ enum AlertAckStatus {
27
+ ALERT_ACK_STATUS_UNSPECIFIED = 0; // Reason not set
28
+ ALERT_ACK_STATUS_ACCEPTED = 1; // Alert accepted
29
+ ALERT_ACK_STATUS_REJECTED = 2; // Alert rejected
30
+ ALERT_ACK_STATUS_CANCELLED = 3; // Alert cancelled
31
+ }
32
+ }
33
+ // [END messages]
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: sapient_msg/bsi_flex_335_v2_0/alert_ack.proto
4
+ # Protobuf Python Version: 4.25.0
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from sapient_msg import proto_options_pb2 as sapient__msg_dot_proto__options__pb2
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-sapient_msg/bsi_flex_335_v2_0/alert_ack.proto\x12\x1dsapient_msg.bsi_flex_335_v2_0\x1a\x1fsapient_msg/proto_options.proto\"\xdb\x02\n\x08\x41lertAck\x12\x1f\n\x08\x61lert_id\x18\x01 \x01(\tB\x08\x8a\xb5\x18\x04\x08\x01\x10\x01H\x00\x88\x01\x01\x12\x0e\n\x06reason\x18\x04 \x03(\t\x12]\n\x10\x61lert_ack_status\x18\x05 \x01(\x0e\x32\x36.sapient_msg.bsi_flex_335_v2_0.AlertAck.AlertAckStatusB\x06\x8a\xb5\x18\x02\x08\x01H\x01\x88\x01\x01\"\x90\x01\n\x0e\x41lertAckStatus\x12 \n\x1c\x41LERT_ACK_STATUS_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x41LERT_ACK_STATUS_ACCEPTED\x10\x01\x12\x1d\n\x19\x41LERT_ACK_STATUS_REJECTED\x10\x02\x12\x1e\n\x1a\x41LERT_ACK_STATUS_CANCELLED\x10\x03\x42\x0b\n\t_alert_idB\x13\n\x11_alert_ack_statusJ\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04\x42\x36\n#uk.gov.dstl.sapientmsg.bsiflex335v2B\rAlertAckProtoP\x01\x62\x06proto3')
19
+
20
+ _globals = globals()
21
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapient_msg.bsi_flex_335_v2_0.alert_ack_pb2', _globals)
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+ _globals['DESCRIPTOR']._options = None
25
+ _globals['DESCRIPTOR']._serialized_options = b'\n#uk.gov.dstl.sapientmsg.bsiflex335v2B\rAlertAckProtoP\001'
26
+ _globals['_ALERTACK'].fields_by_name['alert_id']._options = None
27
+ _globals['_ALERTACK'].fields_by_name['alert_id']._serialized_options = b'\212\265\030\004\010\001\020\001'
28
+ _globals['_ALERTACK'].fields_by_name['alert_ack_status']._options = None
29
+ _globals['_ALERTACK'].fields_by_name['alert_ack_status']._serialized_options = b'\212\265\030\002\010\001'
30
+ _globals['_ALERTACK']._serialized_start=114
31
+ _globals['_ALERTACK']._serialized_end=461
32
+ _globals['_ALERTACK_ALERTACKSTATUS']._serialized_start=271
33
+ _globals['_ALERTACK_ALERTACKSTATUS']._serialized_end=415
34
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,28 @@
1
+ from sapient_msg import proto_options_pb2 as _proto_options_pb2
2
+ from google.protobuf.internal import containers as _containers
3
+ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
4
+ from google.protobuf import descriptor as _descriptor
5
+ from google.protobuf import message as _message
6
+ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Optional as _Optional, Union as _Union
7
+
8
+ DESCRIPTOR: _descriptor.FileDescriptor
9
+
10
+ class AlertAck(_message.Message):
11
+ __slots__ = ("alert_id", "reason", "alert_ack_status")
12
+ class AlertAckStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
13
+ __slots__ = ()
14
+ ALERT_ACK_STATUS_UNSPECIFIED: _ClassVar[AlertAck.AlertAckStatus]
15
+ ALERT_ACK_STATUS_ACCEPTED: _ClassVar[AlertAck.AlertAckStatus]
16
+ ALERT_ACK_STATUS_REJECTED: _ClassVar[AlertAck.AlertAckStatus]
17
+ ALERT_ACK_STATUS_CANCELLED: _ClassVar[AlertAck.AlertAckStatus]
18
+ ALERT_ACK_STATUS_UNSPECIFIED: AlertAck.AlertAckStatus
19
+ ALERT_ACK_STATUS_ACCEPTED: AlertAck.AlertAckStatus
20
+ ALERT_ACK_STATUS_REJECTED: AlertAck.AlertAckStatus
21
+ ALERT_ACK_STATUS_CANCELLED: AlertAck.AlertAckStatus
22
+ ALERT_ID_FIELD_NUMBER: _ClassVar[int]
23
+ REASON_FIELD_NUMBER: _ClassVar[int]
24
+ ALERT_ACK_STATUS_FIELD_NUMBER: _ClassVar[int]
25
+ alert_id: str
26
+ reason: _containers.RepeatedScalarFieldContainer[str]
27
+ alert_ack_status: AlertAck.AlertAckStatus
28
+ def __init__(self, alert_id: _Optional[str] = ..., reason: _Optional[_Iterable[str]] = ..., alert_ack_status: _Optional[_Union[AlertAck.AlertAckStatus, str]] = ...) -> None: ...
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: sapient_msg/bsi_flex_335_v2_0/alert.proto
4
+ # Protobuf Python Version: 4.25.0
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from sapient_msg.bsi_flex_335_v2_0 import associated_detection_pb2 as sapient__msg_dot_bsi__flex__335__v2__0_dot_associated__detection__pb2
16
+ from sapient_msg.bsi_flex_335_v2_0 import associated_file_pb2 as sapient__msg_dot_bsi__flex__335__v2__0_dot_associated__file__pb2
17
+ from sapient_msg.bsi_flex_335_v2_0 import location_pb2 as sapient__msg_dot_bsi__flex__335__v2__0_dot_location__pb2
18
+ from sapient_msg.bsi_flex_335_v2_0 import range_bearing_pb2 as sapient__msg_dot_bsi__flex__335__v2__0_dot_range__bearing__pb2
19
+ from sapient_msg import proto_options_pb2 as sapient__msg_dot_proto__options__pb2
20
+
21
+
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)sapient_msg/bsi_flex_335_v2_0/alert.proto\x12\x1dsapient_msg.bsi_flex_335_v2_0\x1a\x38sapient_msg/bsi_flex_335_v2_0/associated_detection.proto\x1a\x33sapient_msg/bsi_flex_335_v2_0/associated_file.proto\x1a,sapient_msg/bsi_flex_335_v2_0/location.proto\x1a\x31sapient_msg/bsi_flex_335_v2_0/range_bearing.proto\x1a\x1fsapient_msg/proto_options.proto\"\xc6\n\n\x05\x41lert\x12\x1f\n\x08\x61lert_id\x18\x01 \x01(\tB\x08\x8a\xb5\x18\x04\x08\x01\x10\x01H\x01\x88\x01\x01\x12G\n\nalert_type\x18\x02 \x01(\x0e\x32..sapient_msg.bsi_flex_335_v2_0.Alert.AlertTypeH\x02\x88\x01\x01\x12\x45\n\x06status\x18\x03 \x01(\x0e\x32\x30.sapient_msg.bsi_flex_335_v2_0.Alert.AlertStatusH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x04 \x01(\tH\x04\x88\x01\x01\x12\x44\n\rrange_bearing\x18\x05 \x01(\x0b\x32+.sapient_msg.bsi_flex_335_v2_0.RangeBearingH\x00\x12;\n\x08location\x18\x06 \x01(\x0b\x32\'.sapient_msg.bsi_flex_335_v2_0.LocationH\x00\x12\x1e\n\tregion_id\x18\x07 \x01(\tB\x06\x8a\xb5\x18\x02\x10\x01H\x05\x88\x01\x01\x12L\n\x08priority\x18\x08 \x01(\x0e\x32\x35.sapient_msg.bsi_flex_335_v2_0.Alert.DiscretePriorityH\x06\x88\x01\x01\x12\x14\n\x07ranking\x18\t \x01(\x02H\x07\x88\x01\x01\x12\x17\n\nconfidence\x18\n \x01(\x02H\x08\x88\x01\x01\x12\x46\n\x0f\x61ssociated_file\x18\x0b \x03(\x0b\x32-.sapient_msg.bsi_flex_335_v2_0.AssociatedFile\x12P\n\x14\x61ssociated_detection\x18\x0c \x03(\x0b\x32\x32.sapient_msg.bsi_flex_335_v2_0.AssociatedDetection\x12#\n\x16\x61\x64\x64itional_information\x18\r \x01(\tH\t\x88\x01\x01\"\xbc\x01\n\tAlertType\x12\x1a\n\x16\x41LERT_TYPE_UNSPECIFIED\x10\x00\x12\x1a\n\x16\x41LERT_TYPE_INFORMATION\x10\x01\x12\x16\n\x12\x41LERT_TYPE_WARNING\x10\x02\x12\x17\n\x13\x41LERT_TYPE_CRITICAL\x10\x03\x12\x14\n\x10\x41LERT_TYPE_ERROR\x10\x04\x12\x14\n\x10\x41LERT_TYPE_FATAL\x10\x05\x12\x1a\n\x16\x41LERT_TYPE_MODE_CHANGE\x10\x06\"\xac\x01\n\x0b\x41lertStatus\x12\x1c\n\x18\x41LERT_STATUS_UNSPECIFIED\x10\x00\x12\x17\n\x13\x41LERT_STATUS_ACTIVE\x10\x01\x12\x1c\n\x18\x41LERT_STATUS_ACKNOWLEDGE\x10\x02\x12\x17\n\x13\x41LERT_STATUS_REJECT\x10\x03\x12\x17\n\x13\x41LERT_STATUS_IGNORE\x10\x04\x12\x16\n\x12\x41LERT_STATUS_CLEAR\x10\x05\"\x8a\x01\n\x10\x44iscretePriority\x12!\n\x1d\x44ISCRETE_PRIORITY_UNSPECIFIED\x10\x00\x12\x19\n\x15\x44ISCRETE_PRIORITY_LOW\x10\x01\x12\x1c\n\x18\x44ISCRETE_PRIORITY_MEDIUM\x10\x02\x12\x1a\n\x16\x44ISCRETE_PRIORITY_HIGH\x10\x03\x42\x10\n\x0elocation_oneofB\x0b\n\t_alert_idB\r\n\x0b_alert_typeB\t\n\x07_statusB\x0e\n\x0c_descriptionB\x0c\n\n_region_idB\x0b\n\t_priorityB\n\n\x08_rankingB\r\n\x0b_confidenceB\x19\n\x17_additional_informationB3\n#uk.gov.dstl.sapientmsg.bsiflex335v2B\nAlertProtoP\x01\x62\x06proto3')
23
+
24
+ _globals = globals()
25
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
26
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'sapient_msg.bsi_flex_335_v2_0.alert_pb2', _globals)
27
+ if _descriptor._USE_C_DESCRIPTORS == False:
28
+ _globals['DESCRIPTOR']._options = None
29
+ _globals['DESCRIPTOR']._serialized_options = b'\n#uk.gov.dstl.sapientmsg.bsiflex335v2B\nAlertProtoP\001'
30
+ _globals['_ALERT'].fields_by_name['alert_id']._options = None
31
+ _globals['_ALERT'].fields_by_name['alert_id']._serialized_options = b'\212\265\030\004\010\001\020\001'
32
+ _globals['_ALERT'].fields_by_name['region_id']._options = None
33
+ _globals['_ALERT'].fields_by_name['region_id']._serialized_options = b'\212\265\030\002\020\001'
34
+ _globals['_ALERT']._serialized_start=318
35
+ _globals['_ALERT']._serialized_end=1668
36
+ _globals['_ALERT_ALERTTYPE']._serialized_start=1010
37
+ _globals['_ALERT_ALERTTYPE']._serialized_end=1198
38
+ _globals['_ALERT_ALERTSTATUS']._serialized_start=1201
39
+ _globals['_ALERT_ALERTSTATUS']._serialized_end=1373
40
+ _globals['_ALERT_DISCRETEPRIORITY']._serialized_start=1376
41
+ _globals['_ALERT_DISCRETEPRIORITY']._serialized_end=1514
42
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,82 @@
1
+ from sapient_msg.bsi_flex_335_v2_0 import associated_detection_pb2 as _associated_detection_pb2
2
+ from sapient_msg.bsi_flex_335_v2_0 import associated_file_pb2 as _associated_file_pb2
3
+ from sapient_msg.bsi_flex_335_v2_0 import location_pb2 as _location_pb2
4
+ from sapient_msg.bsi_flex_335_v2_0 import range_bearing_pb2 as _range_bearing_pb2
5
+ from sapient_msg import proto_options_pb2 as _proto_options_pb2
6
+ from google.protobuf.internal import containers as _containers
7
+ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
8
+ from google.protobuf import descriptor as _descriptor
9
+ from google.protobuf import message as _message
10
+ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
11
+
12
+ DESCRIPTOR: _descriptor.FileDescriptor
13
+
14
+ class Alert(_message.Message):
15
+ __slots__ = ("alert_id", "alert_type", "status", "description", "range_bearing", "location", "region_id", "priority", "ranking", "confidence", "associated_file", "associated_detection", "additional_information")
16
+ class AlertType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
17
+ __slots__ = ()
18
+ ALERT_TYPE_UNSPECIFIED: _ClassVar[Alert.AlertType]
19
+ ALERT_TYPE_INFORMATION: _ClassVar[Alert.AlertType]
20
+ ALERT_TYPE_WARNING: _ClassVar[Alert.AlertType]
21
+ ALERT_TYPE_CRITICAL: _ClassVar[Alert.AlertType]
22
+ ALERT_TYPE_ERROR: _ClassVar[Alert.AlertType]
23
+ ALERT_TYPE_FATAL: _ClassVar[Alert.AlertType]
24
+ ALERT_TYPE_MODE_CHANGE: _ClassVar[Alert.AlertType]
25
+ ALERT_TYPE_UNSPECIFIED: Alert.AlertType
26
+ ALERT_TYPE_INFORMATION: Alert.AlertType
27
+ ALERT_TYPE_WARNING: Alert.AlertType
28
+ ALERT_TYPE_CRITICAL: Alert.AlertType
29
+ ALERT_TYPE_ERROR: Alert.AlertType
30
+ ALERT_TYPE_FATAL: Alert.AlertType
31
+ ALERT_TYPE_MODE_CHANGE: Alert.AlertType
32
+ class AlertStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
33
+ __slots__ = ()
34
+ ALERT_STATUS_UNSPECIFIED: _ClassVar[Alert.AlertStatus]
35
+ ALERT_STATUS_ACTIVE: _ClassVar[Alert.AlertStatus]
36
+ ALERT_STATUS_ACKNOWLEDGE: _ClassVar[Alert.AlertStatus]
37
+ ALERT_STATUS_REJECT: _ClassVar[Alert.AlertStatus]
38
+ ALERT_STATUS_IGNORE: _ClassVar[Alert.AlertStatus]
39
+ ALERT_STATUS_CLEAR: _ClassVar[Alert.AlertStatus]
40
+ ALERT_STATUS_UNSPECIFIED: Alert.AlertStatus
41
+ ALERT_STATUS_ACTIVE: Alert.AlertStatus
42
+ ALERT_STATUS_ACKNOWLEDGE: Alert.AlertStatus
43
+ ALERT_STATUS_REJECT: Alert.AlertStatus
44
+ ALERT_STATUS_IGNORE: Alert.AlertStatus
45
+ ALERT_STATUS_CLEAR: Alert.AlertStatus
46
+ class DiscretePriority(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
47
+ __slots__ = ()
48
+ DISCRETE_PRIORITY_UNSPECIFIED: _ClassVar[Alert.DiscretePriority]
49
+ DISCRETE_PRIORITY_LOW: _ClassVar[Alert.DiscretePriority]
50
+ DISCRETE_PRIORITY_MEDIUM: _ClassVar[Alert.DiscretePriority]
51
+ DISCRETE_PRIORITY_HIGH: _ClassVar[Alert.DiscretePriority]
52
+ DISCRETE_PRIORITY_UNSPECIFIED: Alert.DiscretePriority
53
+ DISCRETE_PRIORITY_LOW: Alert.DiscretePriority
54
+ DISCRETE_PRIORITY_MEDIUM: Alert.DiscretePriority
55
+ DISCRETE_PRIORITY_HIGH: Alert.DiscretePriority
56
+ ALERT_ID_FIELD_NUMBER: _ClassVar[int]
57
+ ALERT_TYPE_FIELD_NUMBER: _ClassVar[int]
58
+ STATUS_FIELD_NUMBER: _ClassVar[int]
59
+ DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
60
+ RANGE_BEARING_FIELD_NUMBER: _ClassVar[int]
61
+ LOCATION_FIELD_NUMBER: _ClassVar[int]
62
+ REGION_ID_FIELD_NUMBER: _ClassVar[int]
63
+ PRIORITY_FIELD_NUMBER: _ClassVar[int]
64
+ RANKING_FIELD_NUMBER: _ClassVar[int]
65
+ CONFIDENCE_FIELD_NUMBER: _ClassVar[int]
66
+ ASSOCIATED_FILE_FIELD_NUMBER: _ClassVar[int]
67
+ ASSOCIATED_DETECTION_FIELD_NUMBER: _ClassVar[int]
68
+ ADDITIONAL_INFORMATION_FIELD_NUMBER: _ClassVar[int]
69
+ alert_id: str
70
+ alert_type: Alert.AlertType
71
+ status: Alert.AlertStatus
72
+ description: str
73
+ range_bearing: _range_bearing_pb2.RangeBearing
74
+ location: _location_pb2.Location
75
+ region_id: str
76
+ priority: Alert.DiscretePriority
77
+ ranking: float
78
+ confidence: float
79
+ associated_file: _containers.RepeatedCompositeFieldContainer[_associated_file_pb2.AssociatedFile]
80
+ associated_detection: _containers.RepeatedCompositeFieldContainer[_associated_detection_pb2.AssociatedDetection]
81
+ additional_information: str
82
+ def __init__(self, alert_id: _Optional[str] = ..., alert_type: _Optional[_Union[Alert.AlertType, str]] = ..., status: _Optional[_Union[Alert.AlertStatus, str]] = ..., description: _Optional[str] = ..., range_bearing: _Optional[_Union[_range_bearing_pb2.RangeBearing, _Mapping]] = ..., location: _Optional[_Union[_location_pb2.Location, _Mapping]] = ..., region_id: _Optional[str] = ..., priority: _Optional[_Union[Alert.DiscretePriority, str]] = ..., ranking: _Optional[float] = ..., confidence: _Optional[float] = ..., associated_file: _Optional[_Iterable[_Union[_associated_file_pb2.AssociatedFile, _Mapping]]] = ..., associated_detection: _Optional[_Iterable[_Union[_associated_detection_pb2.AssociatedDetection, _Mapping]]] = ..., additional_information: _Optional[str] = ...) -> None: ...