# danielogg92/etabs-api-python architecture

> Architecture diagram of the GitHub repository danielogg92/etabs-api-python, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-23). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/danielogg92/etabs-api-python
- Repository: https://github.com/danielogg92/etabs-api-python

## Overview

Etabs-API-Python is a small Python helper library for connecting to CSI ETABS and making model queries or edits through its COM API. The typical workflow is a Python user attaches to a running ETABS instance, obtains the model handle, then calls helpers to extract model data or change units/materials. Database-table helpers expose table metadata and an Australian-standard spandrel-design extraction. Main.py duplicates some getters; the sampled code does not show a higher-level application orchestrating these calls.

Main entry points: [`Etabs_Set_Functions.py`](https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Set_Functions.py) (Australian Concrete Setup), [`Etabs_Get_Functions.py`](https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Get_Functions.py) (Material Extraction), [`Main.py`](https://github.com/danielogg92/etabs-api-python/blob/master/Main.py) (Connection Helpers), [`Database_Tables.py`](https://github.com/danielogg92/etabs-api-python/blob/master/Database_Tables.py) (Table Catalog Queries)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_connection["ETABS Connection"]
  node_main_connection["Connection Helpers<br/>[Main.py]"]
  node_get_connection["Connection Helper"]
end

subgraph group_model["Model Queries"]
  node_main_queries["Story, Frame, Point Queries<br/>[Main.py]"]
  node_get_queries["Story, Frame, Point Queries"]
  node_units["Unit Selection"]
end

subgraph group_materials["Material Tools"]
  node_material_query["Material Extraction"]
  node_material_edit["Australian Concrete Setup"]
end

subgraph group_tables["Database Tables"]
  node_table_catalog["Table Catalog Queries<br/>[Database_Tables.py]"]
  node_spandrel_design["Spandrel Design Extraction<br/>[Database_Tables.py]"]
end

node_user(("Python User"))
node_etabs["CSI ETABS"]

node_user -->|"calls"| node_main_connection
node_user -->|"calls"| node_get_connection
node_main_connection -->|"attaches to"| node_etabs
node_get_connection -->|"attaches to"| node_etabs
node_user -->|"calls"| node_main_queries
node_user -->|"calls"| node_get_queries
node_user -->|"calls"| node_units
node_user -->|"calls"| node_material_query
node_user -->|"calls"| node_material_edit
node_user -->|"calls"| node_table_catalog
node_user -->|"calls"| node_spandrel_design
node_main_queries -->|"queries model"| node_etabs
node_get_queries -->|"queries model"| node_etabs
node_units -->|"sets units"| node_etabs
node_material_query -->|"queries materials"| node_etabs
node_material_edit -->|"edits materials"| node_etabs
node_material_edit -.->|"optionally reads"| node_material_query
node_table_catalog -->|"queries tables"| node_etabs
node_spandrel_design -->|"reads table"| node_etabs

click node_main_connection "https://github.com/danielogg92/etabs-api-python/blob/master/Main.py"
click node_get_connection "https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Get_Functions.py"
click node_main_queries "https://github.com/danielogg92/etabs-api-python/blob/master/Main.py"
click node_get_queries "https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Get_Functions.py"
click node_units "https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Get_Functions.py"
click node_material_query "https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Get_Functions.py"
click node_material_edit "https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Set_Functions.py"
click node_table_catalog "https://github.com/danielogg92/etabs-api-python/blob/master/Database_Tables.py"
click node_spandrel_design "https://github.com/danielogg92/etabs-api-python/blob/master/Database_Tables.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main_connection,node_get_connection,node_user toneBlue
class node_main_queries,node_get_queries,node_units toneAmber
class node_material_query,node_material_edit toneMint
class node_table_catalog,node_spandrel_design toneRose
class node_etabs toneIndigo
```

## Components

### ETABS Connection

- [Connection Helpers](https://github.com/danielogg92/etabs-api-python/blob/master/Main.py): `Main.py`
- [Connection Helper](https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Get_Functions.py): `Etabs_Get_Functions.py`

### Model Queries

- [Story, Frame, Point Queries](https://github.com/danielogg92/etabs-api-python/blob/master/Main.py): `Main.py`
- [Story, Frame, Point Queries](https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Get_Functions.py): `Etabs_Get_Functions.py`
- [Unit Selection](https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Get_Functions.py): `Etabs_Get_Functions.py`

### Material Tools

- [Material Extraction](https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Get_Functions.py): `Etabs_Get_Functions.py`
- [Australian Concrete Setup](https://github.com/danielogg92/etabs-api-python/blob/master/Etabs_Set_Functions.py): `Etabs_Set_Functions.py`

### Database Tables

- [Table Catalog Queries](https://github.com/danielogg92/etabs-api-python/blob/master/Database_Tables.py): `Database_Tables.py`
- [Spandrel Design Extraction](https://github.com/danielogg92/etabs-api-python/blob/master/Database_Tables.py): `Database_Tables.py`

### Other components

- **Python User**
- **CSI ETABS**

## Connections

- Python User → Connection Helpers: calls
- Python User → Connection Helper: calls
- Connection Helpers → CSI ETABS: attaches to
- Connection Helper → CSI ETABS: attaches to
- Python User → Story, Frame, Point Queries: calls
- Python User → Story, Frame, Point Queries: calls
- Python User → Unit Selection: calls
- Python User → Material Extraction: calls
- Python User → Australian Concrete Setup: calls
- Python User → Table Catalog Queries: calls
- Python User → Spandrel Design Extraction: calls
- Story, Frame, Point Queries → CSI ETABS: queries model
- Story, Frame, Point Queries → CSI ETABS: queries model
- Unit Selection → CSI ETABS: sets units
- Material Extraction → CSI ETABS: queries materials
- Australian Concrete Setup → CSI ETABS: edits materials
- Australian Concrete Setup → Material Extraction: optionally reads
- Table Catalog Queries → CSI ETABS: queries tables
- Spandrel Design Extraction → CSI ETABS: reads table
