Official Python SDK for the SPACE GASS API.
Project description
space-gass-api
Official Python SDK for the SPACE GASS API.
The SPACE GASS API gives you programmatic access to SPACE GASS structural analysis — open or create job files, build and edit structural models, run analyses, and query results. The API runs as a local service on your machine with no authentication.
Install
pip install space-gass-api
- Python 3.9+
- SPACE GASS installed with an active licence
- The SPACE GASS API service running locally (default:
http://localhost:34560)
Quick start
import asyncio
from space_gass_api import SpaceGassApiClient
import space_gass_api.models as models
async def main():
client = SpaceGassApiClient.create_client() # no auth; defaults to http://localhost:34560
try:
# Open a built-in sample project
await client.job.open_sample.post(
models.OpenSampleRequest(file_name="Portal Frame.SG"))
# List all nodes in the model
nodes = await client.job.structure.nodes.get()
for n in nodes:
print(f"Node {n.id}: ({n.x}, {n.y}, {n.z})")
finally:
await client.job.close.post() # always release the active job
asyncio.run(main())
Run an analysis and query results
import asyncio
from space_gass_api import SpaceGassApiClient
import space_gass_api.models as models
async def main():
client = SpaceGassApiClient.create_client()
try:
await client.job.open.post(
models.OpenJobRequest(file_path=r"C:\Models\MyProject.sg"))
# Analyses are asynchronous: start a run, then poll for completion.
run = await client.job.analysis.static.run_linear.post(
models.StaticSettingsUpdate())
while True:
await asyncio.sleep(0.5)
result = await client.job.analysis.runs.by_run_id(str(run.run_id)).get()
if result.status in (
models.AnalysisRunStatus.Completed,
models.AnalysisRunStatus.Failed,
models.AnalysisRunStatus.Cancelled,
):
break
# Query node reactions
reactions = await client.job.query.analysis.static.node_reactions.get()
for r in reactions.results:
print(f"Node {r.node}, LC {r.load_case}: Fy={r.fy:.2f} kN")
finally:
await client.job.close.post()
asyncio.run(main())
How this SDK is structured
Most of this SDK is generated from the OpenAPI specification with
Microsoft Kiota. Every endpoint is a
fluent builder chain that ends in the HTTP verb — await client.job.structure.nodes.get(),
...post(body), ...patch(body), ...delete(). Path parameters use .by_*() selectors
(e.g. client.job.analysis.runs.by_run_id(run_id)). If an endpoint isn't shown in these
examples, the same pattern applies — browse the
API Reference.
On top of the generated client, a few hand-written conveniences (below) smooth the rough edges. Everything not listed there is standard Kiota.
Conveniences on top of Kiota
SpaceGassApiClient.create_client(base_url=...) — one-line factory. Configures anonymous
auth, appends /api/v1 to the base URL, disables SSL verification (the local service may use a
self-signed certificate), allows HTTP↔HTTPS redirects, and sets a long timeout for analyses.
Pass base_url only if the service runs on a non-default port (use https:// for HTTPS).
Keyword query parameters on .get() — pass query parameters directly instead of the verbose
RequestConfiguration pattern. Names are the snake_case query fields; invalid names raise
TypeError. Fully type-stubbed, so IDE autocomplete works.
# Keyword form (enhanced)
nodes = await client.job.structure.nodes.get(
node_type=models.NodeTypeFilter.Restrained)
reactions = await client.job.query.analysis.static.node_reactions.get(
cases="1,3-7", nodes="10-12") # ID-list filters use the SG format "1,3-7,10"
# Verbose form (still supported for advanced use)
from kiota_abstractions.base_request_configuration import RequestConfiguration
from space_gass_api.generated.job.structure.nodes.nodes_request_builder import (
NodesRequestBuilder,
)
qp = NodesRequestBuilder.NodesRequestBuilderGetQueryParameters(
node_type=models.NodeTypeFilter.Restrained)
nodes = await client.job.structure.nodes.get(
request_configuration=RequestConfiguration(query_parameters=qp))
File uploads by path — NewFromTemplateRequest / ImportTxtRequest wrap the multipart
upload endpoints so you can pass a file path directly:
from space_gass_api import NewFromTemplateRequest, ImportTxtRequest
await client.job.new_from_template.post(NewFromTemplateRequest("design.sgbase"))
await client.job.import_.txt.post(ImportTxtRequest("model.txt"))
Using with an AI assistant
Writing scripts with an AI coding agent? Point it at these single, machine-readable entry points rather than letting it crawl the source repo:
- Full docs bundle for LLMs: https://api.spacegass.com/docs/llms-full.txt
- OpenAPI spec (JSON): https://api.spacegass.com/docs/api/1/schema.json
- Repo as an MCP server (search docs, examples, code): https://gitmcp.io/SpaceGass/space-gass-api
Documentation
Project details
Release history Release notifications | RSS feed
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 space_gass_api-14.50.134b2.tar.gz.
File metadata
- Download URL: space_gass_api-14.50.134b2.tar.gz
- Upload date:
- Size: 255.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7c47932d0a1f4a1e85765019bb630982763de9bb57d55e3e6cac5a01a9feb1b
|
|
| MD5 |
ed41908a235b4e9a36478492cf611bd4
|
|
| BLAKE2b-256 |
cadc60387f7bfa26dbd037de5c43fc1fb3d6e41cf144dc1e9cc02d91e24e74a1
|
File details
Details for the file space_gass_api-14.50.134b2-py3-none-any.whl.
File metadata
- Download URL: space_gass_api-14.50.134b2-py3-none-any.whl
- Upload date:
- Size: 879.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e659ca0a49e909f077582b34537225824f20da7e8bf9b7638ce9193cac35b12b
|
|
| MD5 |
1dd271a3ca30a1b4cd1d445f24c2cebb
|
|
| BLAKE2b-256 |
f4200f4418d860d5a20852b3ada7cf869b17edf523586ba73b79815c1927d444
|