Python SDK to simplify integration with GRID services
Project description
GRID Python SDK
Python SDK to simplify integration with GRID services: https://gridgs.com
It's in beta state now. Please expect changes (we'll try to keep them backward-compatible).
Main parts
GridAuthClient - Used to authorize on GRID SSO server.
GridApiClient - Client for GRID RespAPI that can work with main Grid entities.
GridEventSubscriber - subscriber to receive real-time events about changes in sessions (creation, deletion, starting and so on).
GridMQTTClient - Client for GRID MQTT API. It useful for realtime connection (receive downlink frames and send uplink frames).
Examples how to use
GridAuthClient
from keycloak import KeycloakOpenID
from gridgs.sdk.auth import Client as GridAuthClient
keycloak_openid = KeycloakOpenID(server_url="https://login.gridgs.com", client_id="grid-api", realm_name="grid")
grid_auth_client = GridAuthClient(open_id_client=keycloak_openid, username="user@gridgs.com", password="userpass", company_id=1, logger=logging.getLogger('grid_auth_client'))
GridApiClient
from gridgs.sdk.api import Client as GridApiClient
grid_api_client = GridApiClient(base_url="https://api.gridgs.com" auth_client=grid_auth_client, logger=logging.getLogger('grid_api_client'))
Get sessions
from gridgs.sdk.api import SortOrder, SessionQueryParams, SessionSortField
params = SessionQueryParams(
satellite=1,
ground_station=13,
status=Session.STATUS_SUCCESS,
offset=0, limit=3,
sort_by=SessionSortField.END_DATE, sort_order=SortOrder.ASC)
sessions_result = grid_api_client.find_sessions(params)
print(f'Total: {sessions_result.total}')
Get and Iterate ALL sessions
it iterates by chunks all sessions which can be found on api based on SessionQueryParams. Default chunk size is 500.
from gridgs.sdk.api import SortOrder, SessionQueryParams, SessionSortField
params = SessionQueryParams(
offset=0, limit=1000000,
satellite=1,
ground_station=13,
status=Session.STATUS_SUCCESS,
sort_by=SessionSortField.END_DATE, sort_order=SortOrder.ASC)
for session in grid_api_client.iterate_sessions(params):
print(session)
Get session by Id
session = grid_api_client.find_session(session_uuid)
Predict sessions
max - 100 sessions
from gridgs.sdk.api import NonPaginatedSessionQueryParams
params = NonPaginatedSessionQueryParams(
satellite=1,
ground_station=13,
date_from=datetime.fromisoformat("2025-01-01 00:00:00"),
date_to=datetime.fromisoformat("2025-01-02 00:00:00"),
min_tca_elevation=20,
)
sessions = grid_api_client.predict_sessions(params)
Create session
session = Session() # A session from get_predicted_sessions
session = grid_api_client.create_session(session)
Delete session
grid_api_client.delete_session(session_uuid)
Get frames
from gridgs.sdk.api import SortOrder, FrameSortField, FrameQueryParams
params = FrameQueryParams(
satellite=2,
ground_station=13,
date_from=datetime.fromisoformat("2025-02-07 00:00:00"),
date_to=datetime.fromisoformat("2025-02-07 00:48:00"),
offset=0, limit=5,
sort_by=FrameSortField.CREATED_AT, sort_order=SortOrder.ASC)
)
frames_result = grid_api_client.find_frames(params)
print(f'Total: {frames_result.total}')
Get and Iterate ALL frames
it iterates by chunks all frames which can be found on api based on FrameQueryParams. Default chunk size is 500
from gridgs.sdk.api import SortOrder, FrameSortField, FrameQueryParams
params = FrameQueryParams(
offset=0, limit=1000000,
satellite=1,
ground_station=13,
date_from=datetime.fromisoformat("2025-02-07 00:00:00"),
date_to=datetime.fromisoformat("2025-02-07 00:48:00"),
sort_by=FrameSortField.CREATED_AT, sort_order=SortOrder.ASC)
for frame in grid_api_client.iterate_frames(params):
print(frame)
GridEventSubscriber
Receive statuses of sessions
from gridgs.sdk.entity import SessionEvent
from gridgs.sdk.event import Subscriber as GridEventSubscriber
grid_event_subscriber = GridEventSubscriber(host="api.gridgs.com", port=1883, auth_client=grid_auth_client, logger=logging.getLogger('grid_event_subscriber'))
def on_event(event: SessionEvent):
session = event.session
type = event.type # Create, Update, Delete
grid_event_subscriber.on_event(on_event)
grid_event_subscriber.run()
GridMQTTClient
from gridgs.sdk.entity import Frame
from gridgs.sdk.mqtt import Client as GridMQTTClient
grid_mqtt_client = GridMQTTClient(host="api.gridgs.com", port=1883, auth_client=grid_auth_client, logger=logging.getLogger('grid_event_subscriber'))
def on_downlink_frame(frame: Frame):
pass
grid_mqtt_client.on_downlink(on_downlink_frame)
grid_mqtt_client.connect(session)
Sending a frame
grid_mqtt_client.send(b'Uplink frame data')
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gridgs_sdk-1.0.23.tar.gz.
File metadata
- Download URL: gridgs_sdk-1.0.23.tar.gz
- Upload date:
- Size: 12.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5319265595f18b202fe71aa45a0ea8a49ec60d326731d67d67c1d0b96157c938
|
|
| MD5 |
84a30005954489c638be26fae4b8f033
|
|
| BLAKE2b-256 |
09957514e6848e0c5bee5a8eabcc60e44b07f45e8a06555f40445201da2b2378
|
File details
Details for the file gridgs_sdk-1.0.23-py3-none-any.whl.
File metadata
- Download URL: gridgs_sdk-1.0.23-py3-none-any.whl
- Upload date:
- Size: 18.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba0ef4cfa56bbee7895f76289d4d6c8b6c355cc0eb9b49cb77eb638dfbd78e86
|
|
| MD5 |
4c480543953e889eef81865d630987b9
|
|
| BLAKE2b-256 |
e34e5f2757c2a364ec109394f2bfedda922e1e17c16d7f785bb28fea4ae1215f
|