Skip to main content

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 14.5 or later 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:

Documentation

Metadata

Release files for space-gass-api 14.50.165

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for space-gass-api 14.50.165
File Size Uploaded
space_gass_api-14.50.165.tar.gz 274.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for space-gass-api 14.50.165
File Interpreter ABI Platform
space_gass_api-14.50.165-py3-none-any.whl Python 3 none any Details

Total release size: 1.2 MB

Release files / space_gass_api-14.50.165.tar.gz

Download URL space_gass_api-14.50.165.tar.gz
Size 274.9 kB
Tags Source
SHA-256 checksum
How to use checksums
6b2d09ed38224b2307421f641af61a37899b6bad5f5e9ced5c4351720d6a3cc3
BLAKE2b-256 checksum
How to use checksums
4b9fffd67b0c20901374c30e201e0f8a1335efaaa31e665c67cfbc84d33f2ad2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / space_gass_api-14.50.165-py3-none-any.whl

Download URL space_gass_api-14.50.165-py3-none-any.whl
Size 927.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
39701566a4cac84cb3f11efed5e54d44c3d92767ada0d3a86a6165cd16a22f3b
BLAKE2b-256 checksum
How to use checksums
9112698a31867b5b7700e07b5c247441ab012820780ebb6f7014dd439299b1e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page