Python SDK to simplify integration with GRID services
Project description
GRID Python SDK
A Python SDK to simplify integration with GRID services.
Website: https://gridgs.com
PyPI: https://pypi.org/project/gridgs-sdk/
Installation
pip install gridgs-sdk
Note: This SDK is currently in beta. Please expect potential changes (we'll try to maintain backward compatibility where possible).
Main Components
- GridAuthClient (
gridgs.sdk.auth.Client) - Handles authorization with GRID SSO server - GridApiClient (
gridgs.sdk.api.Client) - Client for GRID REST API to work with main GRID entities - GridEventSubscriber (
gridgs.sdk.event.Subscriber) - Subscriber to receive real-time events about session changes (creation, deletion, starting, etc.) - GridMQTTClient (
gridgs.sdk.mqtt.Client) - Client for GRID MQTT API, useful for real-time communication (receiving downlink frames and sending uplink frames)
Usage Examples
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",
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}')
Iterate All Sessions
Iterates through all sessions in chunks (default chunk size: 500) based on query parameters.
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
Maximum: 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}')
Iterate All Frames
Iterates through all frames in chunks (default chunk size: 500) based on query parameters.
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)
SSL/TLS Configuration
For GridEventSubscriber and GridMQTTClient:
from gridgs.sdk.ssl import Settings as SslSettings
ssl_settings = SslSettings(version=ssl.PROTOCOL_TLSv1_2, verify=True)
Note: When using SSL/TLS settings, use port 8883. Arguments have default values.
GridEventSubscriber
Receive session status events for satellite:
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,
satellite_id=2,
ssl_settings=None,
logger=logging.getLogger('grid_event_subscriber')
)
def on_event(event: SessionEvent):
session = event.session
event_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,
ssl_settings=None,
logger=logging.getLogger('grid_mqtt_client')
)
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.1.0.tar.gz.
File metadata
- Download URL: gridgs_sdk-1.1.0.tar.gz
- Upload date:
- Size: 14.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3425fa199c3cd4e6e9779860786ffb8db4e11cb4993c3ec655aabd52f2388b55
|
|
| MD5 |
e8472915d948a90a9d0057516cb8cf97
|
|
| BLAKE2b-256 |
28d7ced661c7efc4b469ac95774708f17c0be223447f6fde5fa76c8c63754d55
|
File details
Details for the file gridgs_sdk-1.1.0-py3-none-any.whl.
File metadata
- Download URL: gridgs_sdk-1.1.0-py3-none-any.whl
- Upload date:
- Size: 21.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
529f04b63512e7fe9bc07fa5a168d35362c2b607afc985edc37262116056a37c
|
|
| MD5 |
a4d3286e0d573cdbeff791a4ba12132a
|
|
| BLAKE2b-256 |
602e129e084688c017329f2b3046ef85939e47dbdac1dd58d88cc90e541ce3fe
|