ics-wivi-analytics-ingest 0.1.5__tar.gz → 0.1.7__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.
- {ics_wivi_analytics_ingest-0.1.5/src/ics_wivi_analytics_ingest.egg-info → ics_wivi_analytics_ingest-0.1.7}/PKG-INFO +17 -17
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/README.md +15 -15
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/pyproject.toml +4 -2
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/ingest_client.py +1 -3
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/schemas/gps_schema.py +2 -2
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/schemas/ingest_config_schema.py +3 -4
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/graphql_executor.py +1 -5
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7/src/ics_wivi_analytics_ingest.egg-info}/PKG-INFO +17 -17
- ics_wivi_analytics_ingest-0.1.7/tests/test_settings.py +1 -0
- ics_wivi_analytics_ingest-0.1.5/tests/test_settings.py +0 -1
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/LICENSE +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/setup.cfg +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/__init__.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/__init__.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/schemas/__init__.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/schemas/configuration_schema.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/schemas/dtc_schema.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/schemas/message_schema.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/schemas/network_schema.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/schemas/signal_schema.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/__init__.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/batching.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/configuration.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/dtc.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/gps.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/message.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/mutations.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/network.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/serialization.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/internal/utils/signal_buffer_manager.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/__init__.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/configuration.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/dtc.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/gps.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/init_schema_factory.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/message.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/network_stats.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/signal.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/ics_wivi_analytics_ingest.egg-info/SOURCES.txt +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/ics_wivi_analytics_ingest.egg-info/dependency_links.txt +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/ics_wivi_analytics_ingest.egg-info/requires.txt +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/ics_wivi_analytics_ingest.egg-info/top_level.txt +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_add_signal.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_buffer.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_client_init.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_dtc.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_executer.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_gps.py +0 -0
- {ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_network_stats.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ics-wivi-analytics-ingest
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary: - Bearing accept
|
|
3
|
+
Version: 0.1.7
|
|
4
|
+
Summary: - Bearing accept only float.
|
|
5
5
|
Author-email: Haseeb Saif Ullah <hsaif@intrepidcs.com>, Scott VanDeWater <svandewater@intrepidcs.com>
|
|
6
6
|
License: Copyright (c) 2018-2025 Intrepid Control Systems, Inc.
|
|
7
7
|
|
|
@@ -55,7 +55,7 @@ A lightweight Python library to batch and send automotive telemetry — like sig
|
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
58
|
-
##
|
|
58
|
+
## Features
|
|
59
59
|
|
|
60
60
|
* Python 3.11+ support
|
|
61
61
|
* Clean, single-class interface: `IcsAnalytics`
|
|
@@ -68,24 +68,24 @@ A lightweight Python library to batch and send automotive telemetry — like sig
|
|
|
68
68
|
|
|
69
69
|
---
|
|
70
70
|
|
|
71
|
-
##
|
|
71
|
+
## Installation
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
74
|
pip install ics-wivi-analytics-ingest
|
|
75
75
|
```
|
|
76
76
|
---
|
|
77
77
|
|
|
78
|
-
##
|
|
78
|
+
## Setting Endpoint via Environment Variables
|
|
79
79
|
|
|
80
80
|
You can avoid hardcoding sensitive values like GraphQL endpoints by using environment variables.
|
|
81
81
|
|
|
82
82
|
### Example (Linux / macOS)
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
export GRAPHQL_ENDPOINT="https://
|
|
85
|
+
export GRAPHQL_ENDPOINT="https://graph.{server}.wlnv.srv:8080/graphql" # example endpoint = https://graph.a7f1.wlnv.srv:8080/graphql
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
##
|
|
88
|
+
## Quick Usage
|
|
89
89
|
|
|
90
90
|
```python
|
|
91
91
|
from analytics_ingest import IcsAnalytics
|
|
@@ -95,7 +95,7 @@ client = IcsAnalytics(
|
|
|
95
95
|
vehicle_id=456,
|
|
96
96
|
fleet_id=789,
|
|
97
97
|
org_id=1011,
|
|
98
|
-
graphql_endpoint="https://
|
|
98
|
+
graphql_endpoint="https://graph.{server}.wlnv.srv:8080/graphql", # example endpoint = https://graph.a7f1.wlnv.srv:8080/graphql
|
|
99
99
|
batch_size=100,
|
|
100
100
|
batch_interval_seconds=10,
|
|
101
101
|
max_signal_count=100
|
|
@@ -185,7 +185,7 @@ client.close()
|
|
|
185
185
|
|
|
186
186
|
---
|
|
187
187
|
|
|
188
|
-
##
|
|
188
|
+
## Config Options
|
|
189
189
|
|
|
190
190
|
Set through constructor or environment variables.
|
|
191
191
|
|
|
@@ -205,7 +205,7 @@ Set through constructor or environment variables.
|
|
|
205
205
|
|
|
206
206
|
---
|
|
207
207
|
|
|
208
|
-
###
|
|
208
|
+
### Payload Reference
|
|
209
209
|
|
|
210
210
|
#### `add_signal` Payload
|
|
211
211
|
|
|
@@ -245,7 +245,7 @@ Set through constructor or environment variables.
|
|
|
245
245
|
| `ecuId` | ECU ID | Optional |
|
|
246
246
|
| `messageDate` | Message timestamp (ISO 8601) | Optional |
|
|
247
247
|
| `fileId` | File ID for trace reference | Optional |
|
|
248
|
-
| `data` | List of DTC data objects |
|
|
248
|
+
| `data` | List of DTC data objects | Optional |
|
|
249
249
|
|
|
250
250
|
**Inside `data`:**
|
|
251
251
|
|
|
@@ -293,7 +293,7 @@ Set through constructor or environment variables.
|
|
|
293
293
|
|
|
294
294
|
---
|
|
295
295
|
|
|
296
|
-
##
|
|
296
|
+
## Error Handling & Logging
|
|
297
297
|
|
|
298
298
|
* Raises exceptions for bad input or backend failures
|
|
299
299
|
* Use logging instead of print in production
|
|
@@ -301,7 +301,7 @@ Set through constructor or environment variables.
|
|
|
301
301
|
|
|
302
302
|
---
|
|
303
303
|
|
|
304
|
-
##
|
|
304
|
+
## Testing
|
|
305
305
|
|
|
306
306
|
Run all tests:
|
|
307
307
|
|
|
@@ -320,7 +320,7 @@ python -m twine upload dist/*
|
|
|
320
320
|
|
|
321
321
|
---
|
|
322
322
|
|
|
323
|
-
##
|
|
323
|
+
## Improvements & Roadmap
|
|
324
324
|
|
|
325
325
|
* Full async API support
|
|
326
326
|
* Runtime config updates
|
|
@@ -330,7 +330,7 @@ python -m twine upload dist/*
|
|
|
330
330
|
|
|
331
331
|
---
|
|
332
332
|
|
|
333
|
-
##
|
|
333
|
+
## Contributing
|
|
334
334
|
|
|
335
335
|
We welcome PRs and issues! Please follow PEP8 and include tests with any changes.
|
|
336
336
|
|
|
@@ -343,7 +343,7 @@ pre-commit install
|
|
|
343
343
|
|
|
344
344
|
---
|
|
345
345
|
|
|
346
|
-
##
|
|
346
|
+
## Dev Quick Start
|
|
347
347
|
|
|
348
348
|
```bash
|
|
349
349
|
git clone http://lustra.intrepidcs.corp/ics/wivi/ipa-py-library.git
|
|
@@ -367,7 +367,7 @@ PYTHONPATH=src python3 integeration_test.py
|
|
|
367
367
|
|
|
368
368
|
---
|
|
369
369
|
|
|
370
|
-
##
|
|
370
|
+
## License
|
|
371
371
|
|
|
372
372
|
MIT License
|
|
373
373
|
Readme.txt
|
|
@@ -4,7 +4,7 @@ A lightweight Python library to batch and send automotive telemetry — like sig
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Features
|
|
8
8
|
|
|
9
9
|
* Python 3.11+ support
|
|
10
10
|
* Clean, single-class interface: `IcsAnalytics`
|
|
@@ -17,24 +17,24 @@ A lightweight Python library to batch and send automotive telemetry — like sig
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
-
##
|
|
20
|
+
## Installation
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
23
|
pip install ics-wivi-analytics-ingest
|
|
24
24
|
```
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
-
##
|
|
27
|
+
## Setting Endpoint via Environment Variables
|
|
28
28
|
|
|
29
29
|
You can avoid hardcoding sensitive values like GraphQL endpoints by using environment variables.
|
|
30
30
|
|
|
31
31
|
### Example (Linux / macOS)
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
export GRAPHQL_ENDPOINT="https://
|
|
34
|
+
export GRAPHQL_ENDPOINT="https://graph.{server}.wlnv.srv:8080/graphql" # example endpoint = https://graph.a7f1.wlnv.srv:8080/graphql
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
##
|
|
37
|
+
## Quick Usage
|
|
38
38
|
|
|
39
39
|
```python
|
|
40
40
|
from analytics_ingest import IcsAnalytics
|
|
@@ -44,7 +44,7 @@ client = IcsAnalytics(
|
|
|
44
44
|
vehicle_id=456,
|
|
45
45
|
fleet_id=789,
|
|
46
46
|
org_id=1011,
|
|
47
|
-
graphql_endpoint="https://
|
|
47
|
+
graphql_endpoint="https://graph.{server}.wlnv.srv:8080/graphql", # example endpoint = https://graph.a7f1.wlnv.srv:8080/graphql
|
|
48
48
|
batch_size=100,
|
|
49
49
|
batch_interval_seconds=10,
|
|
50
50
|
max_signal_count=100
|
|
@@ -134,7 +134,7 @@ client.close()
|
|
|
134
134
|
|
|
135
135
|
---
|
|
136
136
|
|
|
137
|
-
##
|
|
137
|
+
## Config Options
|
|
138
138
|
|
|
139
139
|
Set through constructor or environment variables.
|
|
140
140
|
|
|
@@ -154,7 +154,7 @@ Set through constructor or environment variables.
|
|
|
154
154
|
|
|
155
155
|
---
|
|
156
156
|
|
|
157
|
-
###
|
|
157
|
+
### Payload Reference
|
|
158
158
|
|
|
159
159
|
#### `add_signal` Payload
|
|
160
160
|
|
|
@@ -194,7 +194,7 @@ Set through constructor or environment variables.
|
|
|
194
194
|
| `ecuId` | ECU ID | Optional |
|
|
195
195
|
| `messageDate` | Message timestamp (ISO 8601) | Optional |
|
|
196
196
|
| `fileId` | File ID for trace reference | Optional |
|
|
197
|
-
| `data` | List of DTC data objects |
|
|
197
|
+
| `data` | List of DTC data objects | Optional |
|
|
198
198
|
|
|
199
199
|
**Inside `data`:**
|
|
200
200
|
|
|
@@ -242,7 +242,7 @@ Set through constructor or environment variables.
|
|
|
242
242
|
|
|
243
243
|
---
|
|
244
244
|
|
|
245
|
-
##
|
|
245
|
+
## Error Handling & Logging
|
|
246
246
|
|
|
247
247
|
* Raises exceptions for bad input or backend failures
|
|
248
248
|
* Use logging instead of print in production
|
|
@@ -250,7 +250,7 @@ Set through constructor or environment variables.
|
|
|
250
250
|
|
|
251
251
|
---
|
|
252
252
|
|
|
253
|
-
##
|
|
253
|
+
## Testing
|
|
254
254
|
|
|
255
255
|
Run all tests:
|
|
256
256
|
|
|
@@ -269,7 +269,7 @@ python -m twine upload dist/*
|
|
|
269
269
|
|
|
270
270
|
---
|
|
271
271
|
|
|
272
|
-
##
|
|
272
|
+
## Improvements & Roadmap
|
|
273
273
|
|
|
274
274
|
* Full async API support
|
|
275
275
|
* Runtime config updates
|
|
@@ -279,7 +279,7 @@ python -m twine upload dist/*
|
|
|
279
279
|
|
|
280
280
|
---
|
|
281
281
|
|
|
282
|
-
##
|
|
282
|
+
## Contributing
|
|
283
283
|
|
|
284
284
|
We welcome PRs and issues! Please follow PEP8 and include tests with any changes.
|
|
285
285
|
|
|
@@ -292,7 +292,7 @@ pre-commit install
|
|
|
292
292
|
|
|
293
293
|
---
|
|
294
294
|
|
|
295
|
-
##
|
|
295
|
+
## Dev Quick Start
|
|
296
296
|
|
|
297
297
|
```bash
|
|
298
298
|
git clone http://lustra.intrepidcs.corp/ics/wivi/ipa-py-library.git
|
|
@@ -316,7 +316,7 @@ PYTHONPATH=src python3 integeration_test.py
|
|
|
316
316
|
|
|
317
317
|
---
|
|
318
318
|
|
|
319
|
-
##
|
|
319
|
+
## License
|
|
320
320
|
|
|
321
321
|
MIT License
|
|
322
322
|
Readme.txt
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ics-wivi-analytics-ingest"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.7"
|
|
4
4
|
description = """
|
|
5
|
-
- Bearing accept
|
|
5
|
+
- Bearing accept only float.
|
|
6
|
+
- JWT token removed.
|
|
7
|
+
- graphql_endpoint added.
|
|
6
8
|
"""
|
|
7
9
|
authors = [{ name = "Haseeb Saif Ullah", email = "hsaif@intrepidcs.com" }, { name = "Scott VanDeWater", email = "svandewater@intrepidcs.com" }]
|
|
8
10
|
readme = "README.md"
|
|
@@ -26,9 +26,7 @@ from analytics_ingest.internal.utils.signal_buffer_manager import SignalBufferMa
|
|
|
26
26
|
class IcsAnalytics:
|
|
27
27
|
def __init__(self, **kwargs):
|
|
28
28
|
self.config = IngestConfigSchema(**kwargs)
|
|
29
|
-
self.executor = GraphQLExecutor(
|
|
30
|
-
self.config.graphql_endpoint, self.config.debug, self.config.jwt_token
|
|
31
|
-
)
|
|
29
|
+
self.executor = GraphQLExecutor(self.config.graphql_endpoint, self.config.debug)
|
|
32
30
|
|
|
33
31
|
self.configuration_id = ConfigurationService(self.executor).create(
|
|
34
32
|
self.config.model_dump()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# analytics_ingest/src/analytics_ingest/internal/schemas/gps_schema.py
|
|
2
2
|
|
|
3
3
|
from datetime import datetime
|
|
4
|
-
from typing import Optional
|
|
4
|
+
from typing import Optional
|
|
5
5
|
|
|
6
6
|
from pydantic import BaseModel
|
|
7
7
|
|
|
@@ -21,7 +21,7 @@ class GPSSchema(BaseModel):
|
|
|
21
21
|
accuracy: Optional[float] = None
|
|
22
22
|
altitude: Optional[float] = None
|
|
23
23
|
speed: Optional[float] = None
|
|
24
|
-
bearing: Optional[
|
|
24
|
+
bearing: Optional[float] = None
|
|
25
25
|
available: Optional[AvailableSchema] = None
|
|
26
26
|
|
|
27
27
|
@classmethod
|
|
@@ -17,12 +17,11 @@ class IngestConfigSchema(BaseModel):
|
|
|
17
17
|
graphql_endpoint: str = Field(default_factory=lambda: os.getenv("GRAPH_ENDPOINT"))
|
|
18
18
|
max_signal_count: Optional[int] = Field(default=1, ge=1)
|
|
19
19
|
debug: Optional[bool] = True
|
|
20
|
-
jwt_token: Optional[str] = Field(
|
|
21
|
-
default_factory=lambda: os.getenv("SEC_AUTH_TOKEN")
|
|
22
|
-
)
|
|
23
20
|
|
|
24
21
|
@model_validator(mode="after")
|
|
25
22
|
def validate_env_or_param(self):
|
|
26
23
|
if not self.graphql_endpoint:
|
|
27
|
-
|
|
24
|
+
raise ValueError(
|
|
25
|
+
"Missing GraphQL endpoint. Set via param or GRAPH_ENDPOINT env."
|
|
26
|
+
)
|
|
28
27
|
return self
|
|
@@ -8,10 +8,9 @@ from requests.exceptions import RequestException
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class GraphQLExecutor:
|
|
11
|
-
def __init__(self, graphql_endpoint, debug=False
|
|
11
|
+
def __init__(self, graphql_endpoint, debug=False):
|
|
12
12
|
self.graphql_endpoint = graphql_endpoint
|
|
13
13
|
self.debug = debug
|
|
14
|
-
self.jwt_token = jwt_token
|
|
15
14
|
self._semaphore = asyncio.Semaphore(1)
|
|
16
15
|
self._pending_requests = []
|
|
17
16
|
self._executor_pool = ThreadPoolExecutor(max_workers=10)
|
|
@@ -35,9 +34,6 @@ class GraphQLExecutor:
|
|
|
35
34
|
parsed_query = print_ast(parse(query))
|
|
36
35
|
headers = {"Content-Type": "application/json"}
|
|
37
36
|
|
|
38
|
-
if self.jwt_token:
|
|
39
|
-
headers["Authorization"] = f"Bearer {self.jwt_token}"
|
|
40
|
-
|
|
41
37
|
request_data = {"query": parsed_query, "variables": variables}
|
|
42
38
|
|
|
43
39
|
if self.debug:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ics-wivi-analytics-ingest
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary: - Bearing accept
|
|
3
|
+
Version: 0.1.7
|
|
4
|
+
Summary: - Bearing accept only float.
|
|
5
5
|
Author-email: Haseeb Saif Ullah <hsaif@intrepidcs.com>, Scott VanDeWater <svandewater@intrepidcs.com>
|
|
6
6
|
License: Copyright (c) 2018-2025 Intrepid Control Systems, Inc.
|
|
7
7
|
|
|
@@ -55,7 +55,7 @@ A lightweight Python library to batch and send automotive telemetry — like sig
|
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
58
|
-
##
|
|
58
|
+
## Features
|
|
59
59
|
|
|
60
60
|
* Python 3.11+ support
|
|
61
61
|
* Clean, single-class interface: `IcsAnalytics`
|
|
@@ -68,24 +68,24 @@ A lightweight Python library to batch and send automotive telemetry — like sig
|
|
|
68
68
|
|
|
69
69
|
---
|
|
70
70
|
|
|
71
|
-
##
|
|
71
|
+
## Installation
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
74
|
pip install ics-wivi-analytics-ingest
|
|
75
75
|
```
|
|
76
76
|
---
|
|
77
77
|
|
|
78
|
-
##
|
|
78
|
+
## Setting Endpoint via Environment Variables
|
|
79
79
|
|
|
80
80
|
You can avoid hardcoding sensitive values like GraphQL endpoints by using environment variables.
|
|
81
81
|
|
|
82
82
|
### Example (Linux / macOS)
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
export GRAPHQL_ENDPOINT="https://
|
|
85
|
+
export GRAPHQL_ENDPOINT="https://graph.{server}.wlnv.srv:8080/graphql" # example endpoint = https://graph.a7f1.wlnv.srv:8080/graphql
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
##
|
|
88
|
+
## Quick Usage
|
|
89
89
|
|
|
90
90
|
```python
|
|
91
91
|
from analytics_ingest import IcsAnalytics
|
|
@@ -95,7 +95,7 @@ client = IcsAnalytics(
|
|
|
95
95
|
vehicle_id=456,
|
|
96
96
|
fleet_id=789,
|
|
97
97
|
org_id=1011,
|
|
98
|
-
graphql_endpoint="https://
|
|
98
|
+
graphql_endpoint="https://graph.{server}.wlnv.srv:8080/graphql", # example endpoint = https://graph.a7f1.wlnv.srv:8080/graphql
|
|
99
99
|
batch_size=100,
|
|
100
100
|
batch_interval_seconds=10,
|
|
101
101
|
max_signal_count=100
|
|
@@ -185,7 +185,7 @@ client.close()
|
|
|
185
185
|
|
|
186
186
|
---
|
|
187
187
|
|
|
188
|
-
##
|
|
188
|
+
## Config Options
|
|
189
189
|
|
|
190
190
|
Set through constructor or environment variables.
|
|
191
191
|
|
|
@@ -205,7 +205,7 @@ Set through constructor or environment variables.
|
|
|
205
205
|
|
|
206
206
|
---
|
|
207
207
|
|
|
208
|
-
###
|
|
208
|
+
### Payload Reference
|
|
209
209
|
|
|
210
210
|
#### `add_signal` Payload
|
|
211
211
|
|
|
@@ -245,7 +245,7 @@ Set through constructor or environment variables.
|
|
|
245
245
|
| `ecuId` | ECU ID | Optional |
|
|
246
246
|
| `messageDate` | Message timestamp (ISO 8601) | Optional |
|
|
247
247
|
| `fileId` | File ID for trace reference | Optional |
|
|
248
|
-
| `data` | List of DTC data objects |
|
|
248
|
+
| `data` | List of DTC data objects | Optional |
|
|
249
249
|
|
|
250
250
|
**Inside `data`:**
|
|
251
251
|
|
|
@@ -293,7 +293,7 @@ Set through constructor or environment variables.
|
|
|
293
293
|
|
|
294
294
|
---
|
|
295
295
|
|
|
296
|
-
##
|
|
296
|
+
## Error Handling & Logging
|
|
297
297
|
|
|
298
298
|
* Raises exceptions for bad input or backend failures
|
|
299
299
|
* Use logging instead of print in production
|
|
@@ -301,7 +301,7 @@ Set through constructor or environment variables.
|
|
|
301
301
|
|
|
302
302
|
---
|
|
303
303
|
|
|
304
|
-
##
|
|
304
|
+
## Testing
|
|
305
305
|
|
|
306
306
|
Run all tests:
|
|
307
307
|
|
|
@@ -320,7 +320,7 @@ python -m twine upload dist/*
|
|
|
320
320
|
|
|
321
321
|
---
|
|
322
322
|
|
|
323
|
-
##
|
|
323
|
+
## Improvements & Roadmap
|
|
324
324
|
|
|
325
325
|
* Full async API support
|
|
326
326
|
* Runtime config updates
|
|
@@ -330,7 +330,7 @@ python -m twine upload dist/*
|
|
|
330
330
|
|
|
331
331
|
---
|
|
332
332
|
|
|
333
|
-
##
|
|
333
|
+
## Contributing
|
|
334
334
|
|
|
335
335
|
We welcome PRs and issues! Please follow PEP8 and include tests with any changes.
|
|
336
336
|
|
|
@@ -343,7 +343,7 @@ pre-commit install
|
|
|
343
343
|
|
|
344
344
|
---
|
|
345
345
|
|
|
346
|
-
##
|
|
346
|
+
## Dev Quick Start
|
|
347
347
|
|
|
348
348
|
```bash
|
|
349
349
|
git clone http://lustra.intrepidcs.corp/ics/wivi/ipa-py-library.git
|
|
@@ -367,7 +367,7 @@ PYTHONPATH=src python3 integeration_test.py
|
|
|
367
367
|
|
|
368
368
|
---
|
|
369
369
|
|
|
370
|
-
##
|
|
370
|
+
## License
|
|
371
371
|
|
|
372
372
|
MIT License
|
|
373
373
|
Readme.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
GRAPHQL_ENDPOINT = "https://graph.{server}.wlnv.srv:8080/graphql"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
GRAPHQL_ENDPOINT = "https://0.0.0.0:8092/graphql"
|
|
File without changes
|
|
File without changes
|
{ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/analytics_ingest/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/__init__.py
RENAMED
|
File without changes
|
{ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/configuration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/message.py
RENAMED
|
File without changes
|
{ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/src/factories/network_stats.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_add_signal.py
RENAMED
|
File without changes
|
|
File without changes
|
{ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_client_init.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ics_wivi_analytics_ingest-0.1.5 → ics_wivi_analytics_ingest-0.1.7}/tests/test_network_stats.py
RENAMED
|
File without changes
|