# The SkyCiv Pip Package
This package provides helpful tools to create objects and interact with the SkyCiv API. These components can be used to quickly construct models by providing code completion, parameter information and examples.
> **_Note: We strongly recommend using VSCode and the Pylance plugin for VSCode. Pylance is still in preview mode and requires some polishing however, it will help provide intellisense options as seen in the image below._**
<div style="text-align: center;">
<img style="max-width: 100%" src="https://github.com/skyciv/skyciv-pip/raw/master/img/intellisense.png"/>
</div>
---
## Documentation
The SkyCiv API documentation can be found here: https://skyciv.com/api/v3/
The Python Pip package documentation is a work in progress but for now, you can refer to the [JavaScript package docs](https://skyciv.com/api/v3/docs/packages/#npm---javascript) which are not exactly the same but very similar. The main difference being that methods use `snake_case` in python rather than `camelCase` in JavaScript.
For example, `sections.loadCustomFromLibrary()` in the NPM package would translate to `sections.load_custom_from_library()` for the Pip package.
---
## Install
```
pip3 install skyciv
```
---
## Example
The recommended use of this package is by using the `Model()` and `ApiObject()` classes.
```py
import skyciv
# Create an instance of the Model class
model = skyciv.Model("metric")
# Nodes
model.nodes.add(0, 0, 0)
model.nodes.add(0, 0.5, 0)
model.nodes.add(0, 1, 0)
model.nodes.add(0.5, 1, 0)
model.nodes.add(0.5, 0.5, 0)
model.nodes.add(1, 0.6, 0)
model.nodes.add(1, 0.1, 0)
model.nodes.add(1.5, 0.1, 0)
model.nodes.add(1.5, 0.6, 0)
model.nodes.add(1.5, 0, 0)
model.nodes.add(1.5, -0.4, 0)
model.nodes.add(1, -0.6, 0)
model.nodes.add(2, 0, 0)
model.nodes.add(2, 0.7, 0)
model.nodes.add(2, 1, 0)
model.nodes.add(1.7, 0.7, 0)
model.nodes.add(2.3, 0.7, 0)
model.nodes.add(2.5, 1, 0)
model.nodes.add(2.5, 0.5, 0)
model.nodes.add(2.5, 0, 0)
model.nodes.add(3, 0.5, 0)
model.nodes.add(3, 0, 0)
model.nodes.add(3.3, 0.5, 0)
model.nodes.add(3.3, 0.14, 0)
model.nodes.add(3.7, 0.14, 0)
model.nodes.add(3.7, 0.5, 0)
model.nodes.add(4, 0.5, 0)
model.nodes.add(4, 0.4, 0)
model.nodes.add(4, 0, 0)
model.nodes.add(4.5, 0.5, 0)
model.nodes.add(4.5, 0, 0)
model.nodes.add(-0.5, 0, 0)
model.nodes.add(3.3, 0, 0)
model.nodes.add(3.7, 0, 0)
model.nodes.add(4.9, 0, 0)
# Members
model.members.add(1, 2, 1)
model.members.add(2, 3, 1)
model.members.add(3, 4, 1)
model.members.add(4, 5, 1)
model.members.add(5, 2, 1)
model.members.add(6, 7, 1)
model.members.add(7, 8, 1)
model.members.add(8, 9, 1)
model.members.add(8, 10, 1)
model.members.add(10, 11, 1)
model.members.add(11, 12, 1)
model.members.add(15, 14, 1)
model.members.add(14, 13, 1)
model.members.add(16, 14, 1)
model.members.add(14, 17, 1)
model.members.add(18, 19, 1)
model.members.add(19, 20, 1)
model.members.add(19, 21, 1)
model.members.add(21, 22, 1)
model.members.add(24, 25, 1)
model.members.add(25, 26, 1)
model.members.add(26, 23, 1)
model.members.add(23, 24, 1)
model.members.add(27, 28, 1)
model.members.add(28, 29, 1)
model.members.add(28, 30, 1)
model.members.add(30, 31, 1)
model.members.add(32, 1, 2)
model.members.add(1, 10, 2)
model.members.add(10, 13, 2)
model.members.add(13, 20, 2)
model.members.add(20, 22, 2)
model.members.add(22, 33, 2)
model.members.add(33, 34, 2)
model.members.add(34, 29, 2)
model.members.add(29, 31, 2)
model.members.add(31, 35, 2)
model.members.add(24, 33, None, "FFFfff", "FFFfff", "rigid")
model.members.add(25, 34, None, "FFFfff", "FFFfff", "rigid")
# Plates
model.plates.add([5, 4, 3, 2], 12, 1, is_meshed=True)
# Meshed plate
model.meshed_plates.add(1, 5, 4, 3, 2)
# Sections
model.sections.add_library_section(
skyciv.sections.Australian_Steel_300_Grade_CHS_Grade_350_101_6x3_2_CHS, 1)
model.sections.add_library_section(
skyciv.sections.Australian_Steel_300_Grade_Universal_beams_150_UB_14_0, 1)
# Material
model.materials.add("Structural Steel") # For metric
# model.materials.add("Structural Steel", "imperial") # For imperial
# model.materials.add("Structural Steel", model.settings.units.get_unit_system()) # For the model's current units
# model.materials.addCustom("Custom Steel", 7850, 210000, 0.29, 300, 440, "steel") # For custom material
# Supports
model.supports.add(32, "FFFFRR")
model.supports.add(35, "FFFFRR")
# Settlements
model.settlements.add(35, ty=-10)
# Add point load
model.point_loads.add("m", member=3, position=30.4, y_mag=-5, load_group="LG1")
model.point_loads.add("n", node=13, y_mag=1.6, load_group="LG1")
model.point_loads.add("n", node=12, y_mag=-3.7, load_group="LG1")
# Add moment
model.moments.add("n", node=12, y_mag=0.3, load_group="LG1")
model.moments.add("m", member=16, position=0, x_mag=-0.1, load_group="LG1")
# Add distributed load
model.distributed_loads.add(32, y_mag_A=-10, y_mag_B=-2, position_B=100, load_group="LG1")
# Pressure
model.pressures.add(1, "global", 0, 0, 0.1, "LG1")
# Area load
model.area_loads.add("one_way", [23, 24, 25, 26], 1.3, "Z", column_direction=[23, 26], LG="LG1")
# Selfweight
model.self_weight.add(y=-1, LG="SW1")
# Make a load combination
model.load_combinations.add("SW1 + LG1", {"SW1": 1, "LG1": 1})
# Create an API Object
ao = skyciv.ApiObject()
# Set auth
ao.auth.username = "YOUR_SKYCIV_USERNAME"
ao.auth.key = "YOUR_SKYCIV_API_KEY"
# Set functions
ao.functions.add("S3D.session.start", {"keep_open": True})
ao.functions.add("S3D.model.set", {"s3d_model": model})
# Uncomment the next line to run a solve as well.
# ao.functions.add("S3D.model.solve", {"analysis_type": "linear"})
ao.functions.add("S3D.file.save", {"name": "package-debut", "path": "api/PIP/"})
res = ao.request()
print(res["response"])
```
Now, we can even view the model in [S3D](https://platform.skyciv.com/structural).
<div style="text-align: center;">
<img style="max-width: 100%" src="https://github.com/skyciv/skyciv-pip/raw/master/img/result-in-s3d.png"/>
</div>
---
## Sections Database
Section library paths for all sections can be found in the `skyciv.sections` object.
For example:
By typing something like this: `skyciv.sections.aus300150ub`.
<div style="text-align: center;">
<img style="max-width: 100%" src="https://github.com/skyciv/skyciv-pip/raw/master/img/sections-autocomplete.png"/>
</div>
Intellisense will offer the closest sections which you can select with autocompletion. Resulting in the path shown below.
```py
path = skyciv.sections.Australian_Steel_300_Grade_Universal_beams_150_UB_14_0
# path is now equal to:
["Australian", "Steel (300 Grade)", "Universal beams", "150 UB 14.0"]
```
Although it does not look great, this way, auto completion will ensure the string arrays are correct.
---
## Global Methods
### `skyciv.request(api_object, options?)`
Make a request to the SkyCiv API.
```py
skyciv_response = skyciv.request(api_object, options)
# Do something with the response
```
#### Options (optional dictionary)
- _version_ - _2 | 3_ (Defaults to 3)
- _http_or_https_ - _http | https_ (Defaults to https)
```py
options = {
"http_or_https": "http",
"version": 3,
}
```
---
## Manually building the API Object
Visit the [API docs](https://skyciv.com/api/v3/docs/getting-started) for instructions on how to create an instance of the SkyCiv API object.
---
## Changelog
| Version | Breaking | Description |
| :------ | :-------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2.3.1 | false | Added s3d_name to add_custom_section. |
| 2.2.0 | false | Added member rotation angle to members.add(). |
| 2.1.0 | false | Fixed usage of hasAttr() in model collection component. |
| 2.0.4 | false | Fixed dependency issue affecting Python 3.7 It should fix the error `TypeError: 'type' object is not subscriptable` and the error `cannot import name 'Literal' from 'typing'`. |
| 2.0.3 | false | Fixed packaging bug. |
| 2.0.0 | Breaks `model.plates`. | • Plates can now have additional attributes: `diaphragm`, `membrane_thickness`, `bending_thickness`, `shear_thickness`, `holes`. This may misalign inputs of existing plates.<br/>• `plate.type` now defaults to `"auto"`. |
| 1.2.0 | false | • `Materials.add()` method now takes a second parameter for units. See sample above. |
| 1.1.3 | Breaks `model.self_weight`. | • `Model().set` method now can now accept a downloaded JSON model from platform.skyciv.com/structural.<br/>• Fixed self_weight data structure.<br/>• `Functions` and `Function` class now defaults `args` to an empty object. |
| 1.1.2 | false | • Typos.<br/>• Improved in-code docs.<br/>• Fixed Canadian bridging channel lookup in `skyciv.sections`.<br/>• The `request()` method of the `ApiObject()` will now automatically store the `last_session_id` to the `auth.session_id` property of the `ApiObject` instance. |
| 1.1.1 | false | • README.md patch. |
| 1.1.0 | false | • Added 37 new classes including the `ApiObject()` and `Model()` classes. |
| 1.0.4 | false | • Package will now only use dumps on input if `api_object` is not a string. |
| 1.0.3 | false | • Fixed options dictionary to be optional. |
| 1.0.2 | false | • Updated readme. |
| 1.0.1 | false | • Changed `skyciv.request()`. to print msg if SkyCiv returns error rather than throw an exception. |
| 1.0.0 | - | Initial release. |
Raw data
{
"_id": null,
"home_page": "https://github.com/skyciv/skyciv-pip",
"name": "skyciv",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "skyciv structural analysis design API AISC Eurocode CSA steel concrete BIM",
"author": "SkyCiv API team",
"author_email": "support@skyciv.com",
"download_url": "https://files.pythonhosted.org/packages/97/6d/ee12cb1a3df77bbbe21c621cc4634665275c4dbad680fe5d1c35d5e79c08/skyciv-2.3.1.tar.gz",
"platform": null,
"description": "# The SkyCiv Pip Package\r\n\r\nThis package provides helpful tools to create objects and interact with the SkyCiv API. These components can be used to quickly construct models by providing code completion, parameter information and examples.\r\n\r\n> **_Note: We strongly recommend using VSCode and the Pylance plugin for VSCode. Pylance is still in preview mode and requires some polishing however, it will help provide intellisense options as seen in the image below._**\r\n\r\n<div style=\"text-align: center;\">\r\n <img style=\"max-width: 100%\" src=\"https://github.com/skyciv/skyciv-pip/raw/master/img/intellisense.png\"/>\r\n</div>\r\n\r\n---\r\n\r\n## Documentation\r\n\r\nThe SkyCiv API documentation can be found here: https://skyciv.com/api/v3/\r\n\r\nThe Python Pip package documentation is a work in progress but for now, you can refer to the [JavaScript package docs](https://skyciv.com/api/v3/docs/packages/#npm---javascript) which are not exactly the same but very similar. The main difference being that methods use `snake_case` in python rather than `camelCase` in JavaScript.\r\n\r\nFor example, `sections.loadCustomFromLibrary()` in the NPM package would translate to `sections.load_custom_from_library()` for the Pip package.\r\n\r\n---\r\n\r\n## Install\r\n\r\n```\r\npip3 install skyciv\r\n```\r\n\r\n---\r\n\r\n## Example\r\n\r\nThe recommended use of this package is by using the `Model()` and `ApiObject()` classes.\r\n\r\n```py\r\nimport skyciv\r\n\r\n# Create an instance of the Model class\r\nmodel = skyciv.Model(\"metric\")\r\n\r\n# Nodes\r\nmodel.nodes.add(0, 0, 0)\r\nmodel.nodes.add(0, 0.5, 0)\r\nmodel.nodes.add(0, 1, 0)\r\nmodel.nodes.add(0.5, 1, 0)\r\nmodel.nodes.add(0.5, 0.5, 0)\r\nmodel.nodes.add(1, 0.6, 0)\r\nmodel.nodes.add(1, 0.1, 0)\r\nmodel.nodes.add(1.5, 0.1, 0)\r\nmodel.nodes.add(1.5, 0.6, 0)\r\nmodel.nodes.add(1.5, 0, 0)\r\nmodel.nodes.add(1.5, -0.4, 0)\r\nmodel.nodes.add(1, -0.6, 0)\r\nmodel.nodes.add(2, 0, 0)\r\nmodel.nodes.add(2, 0.7, 0)\r\nmodel.nodes.add(2, 1, 0)\r\nmodel.nodes.add(1.7, 0.7, 0)\r\nmodel.nodes.add(2.3, 0.7, 0)\r\nmodel.nodes.add(2.5, 1, 0)\r\nmodel.nodes.add(2.5, 0.5, 0)\r\nmodel.nodes.add(2.5, 0, 0)\r\nmodel.nodes.add(3, 0.5, 0)\r\nmodel.nodes.add(3, 0, 0)\r\nmodel.nodes.add(3.3, 0.5, 0)\r\nmodel.nodes.add(3.3, 0.14, 0)\r\nmodel.nodes.add(3.7, 0.14, 0)\r\nmodel.nodes.add(3.7, 0.5, 0)\r\nmodel.nodes.add(4, 0.5, 0)\r\nmodel.nodes.add(4, 0.4, 0)\r\nmodel.nodes.add(4, 0, 0)\r\nmodel.nodes.add(4.5, 0.5, 0)\r\nmodel.nodes.add(4.5, 0, 0)\r\nmodel.nodes.add(-0.5, 0, 0)\r\nmodel.nodes.add(3.3, 0, 0)\r\nmodel.nodes.add(3.7, 0, 0)\r\nmodel.nodes.add(4.9, 0, 0)\r\n\r\n# Members\r\nmodel.members.add(1, 2, 1)\r\nmodel.members.add(2, 3, 1)\r\nmodel.members.add(3, 4, 1)\r\nmodel.members.add(4, 5, 1)\r\nmodel.members.add(5, 2, 1)\r\nmodel.members.add(6, 7, 1)\r\nmodel.members.add(7, 8, 1)\r\nmodel.members.add(8, 9, 1)\r\nmodel.members.add(8, 10, 1)\r\nmodel.members.add(10, 11, 1)\r\nmodel.members.add(11, 12, 1)\r\nmodel.members.add(15, 14, 1)\r\nmodel.members.add(14, 13, 1)\r\nmodel.members.add(16, 14, 1)\r\nmodel.members.add(14, 17, 1)\r\nmodel.members.add(18, 19, 1)\r\nmodel.members.add(19, 20, 1)\r\nmodel.members.add(19, 21, 1)\r\nmodel.members.add(21, 22, 1)\r\nmodel.members.add(24, 25, 1)\r\nmodel.members.add(25, 26, 1)\r\nmodel.members.add(26, 23, 1)\r\nmodel.members.add(23, 24, 1)\r\nmodel.members.add(27, 28, 1)\r\nmodel.members.add(28, 29, 1)\r\nmodel.members.add(28, 30, 1)\r\nmodel.members.add(30, 31, 1)\r\nmodel.members.add(32, 1, 2)\r\nmodel.members.add(1, 10, 2)\r\nmodel.members.add(10, 13, 2)\r\nmodel.members.add(13, 20, 2)\r\nmodel.members.add(20, 22, 2)\r\nmodel.members.add(22, 33, 2)\r\nmodel.members.add(33, 34, 2)\r\nmodel.members.add(34, 29, 2)\r\nmodel.members.add(29, 31, 2)\r\nmodel.members.add(31, 35, 2)\r\nmodel.members.add(24, 33, None, \"FFFfff\", \"FFFfff\", \"rigid\")\r\nmodel.members.add(25, 34, None, \"FFFfff\", \"FFFfff\", \"rigid\")\r\n\r\n# Plates\r\nmodel.plates.add([5, 4, 3, 2], 12, 1, is_meshed=True)\r\n\r\n# Meshed plate\r\nmodel.meshed_plates.add(1, 5, 4, 3, 2)\r\n\r\n# Sections\r\nmodel.sections.add_library_section(\r\n skyciv.sections.Australian_Steel_300_Grade_CHS_Grade_350_101_6x3_2_CHS, 1)\r\nmodel.sections.add_library_section(\r\n skyciv.sections.Australian_Steel_300_Grade_Universal_beams_150_UB_14_0, 1)\r\n\r\n# Material\r\nmodel.materials.add(\"Structural Steel\") # For metric\r\n# model.materials.add(\"Structural Steel\", \"imperial\") # For imperial\r\n# model.materials.add(\"Structural Steel\", model.settings.units.get_unit_system()) # For the model's current units\r\n# model.materials.addCustom(\"Custom Steel\", 7850, 210000, 0.29, 300, 440, \"steel\") # For custom material\r\n\r\n# Supports\r\nmodel.supports.add(32, \"FFFFRR\")\r\nmodel.supports.add(35, \"FFFFRR\")\r\n\r\n# Settlements\r\nmodel.settlements.add(35, ty=-10)\r\n\r\n# Add point load\r\nmodel.point_loads.add(\"m\", member=3, position=30.4, y_mag=-5, load_group=\"LG1\")\r\nmodel.point_loads.add(\"n\", node=13, y_mag=1.6, load_group=\"LG1\")\r\nmodel.point_loads.add(\"n\", node=12, y_mag=-3.7, load_group=\"LG1\")\r\n\r\n# Add moment\r\nmodel.moments.add(\"n\", node=12, y_mag=0.3, load_group=\"LG1\")\r\nmodel.moments.add(\"m\", member=16, position=0, x_mag=-0.1, load_group=\"LG1\")\r\n\r\n# Add distributed load\r\nmodel.distributed_loads.add(32, y_mag_A=-10, y_mag_B=-2, position_B=100, load_group=\"LG1\")\r\n\r\n# Pressure\r\nmodel.pressures.add(1, \"global\", 0, 0, 0.1, \"LG1\")\r\n\r\n# Area load\r\nmodel.area_loads.add(\"one_way\", [23, 24, 25, 26], 1.3, \"Z\", column_direction=[23, 26], LG=\"LG1\")\r\n\r\n# Selfweight\r\nmodel.self_weight.add(y=-1, LG=\"SW1\")\r\n\r\n# Make a load combination\r\nmodel.load_combinations.add(\"SW1 + LG1\", {\"SW1\": 1, \"LG1\": 1})\r\n\r\n# Create an API Object\r\nao = skyciv.ApiObject()\r\n\r\n# Set auth\r\nao.auth.username = \"YOUR_SKYCIV_USERNAME\"\r\nao.auth.key = \"YOUR_SKYCIV_API_KEY\"\r\n\r\n# Set functions\r\nao.functions.add(\"S3D.session.start\", {\"keep_open\": True})\r\nao.functions.add(\"S3D.model.set\", {\"s3d_model\": model})\r\n# Uncomment the next line to run a solve as well.\r\n# ao.functions.add(\"S3D.model.solve\", {\"analysis_type\": \"linear\"})\r\nao.functions.add(\"S3D.file.save\", {\"name\": \"package-debut\", \"path\": \"api/PIP/\"})\r\n\r\nres = ao.request()\r\n\r\nprint(res[\"response\"])\r\n```\r\n\r\nNow, we can even view the model in [S3D](https://platform.skyciv.com/structural).\r\n\r\n<div style=\"text-align: center;\">\r\n <img style=\"max-width: 100%\" src=\"https://github.com/skyciv/skyciv-pip/raw/master/img/result-in-s3d.png\"/>\r\n</div>\r\n\r\n---\r\n\r\n## Sections Database\r\n\r\nSection library paths for all sections can be found in the `skyciv.sections` object.\r\n\r\nFor example:\r\n\r\nBy typing something like this: `skyciv.sections.aus300150ub`.\r\n\r\n<div style=\"text-align: center;\">\r\n <img style=\"max-width: 100%\" src=\"https://github.com/skyciv/skyciv-pip/raw/master/img/sections-autocomplete.png\"/>\r\n</div>\r\n\r\nIntellisense will offer the closest sections which you can select with autocompletion. Resulting in the path shown below.\r\n\r\n```py\r\npath = skyciv.sections.Australian_Steel_300_Grade_Universal_beams_150_UB_14_0\r\n\r\n# path is now equal to:\r\n[\"Australian\", \"Steel (300 Grade)\", \"Universal beams\", \"150 UB 14.0\"]\r\n```\r\n\r\nAlthough it does not look great, this way, auto completion will ensure the string arrays are correct.\r\n\r\n---\r\n\r\n## Global Methods\r\n\r\n### `skyciv.request(api_object, options?)`\r\n\r\nMake a request to the SkyCiv API.\r\n\r\n```py\r\nskyciv_response = skyciv.request(api_object, options)\r\n# Do something with the response\r\n```\r\n\r\n#### Options (optional dictionary)\r\n\r\n- _version_ - _2 | 3_ (Defaults to 3)\r\n- _http_or_https_ - _http | https_ (Defaults to https)\r\n\r\n```py\r\noptions = {\r\n \"http_or_https\": \"http\",\r\n \"version\": 3,\r\n}\r\n```\r\n\r\n---\r\n\r\n## Manually building the API Object\r\n\r\nVisit the [API docs](https://skyciv.com/api/v3/docs/getting-started) for instructions on how to create an instance of the SkyCiv API object.\r\n\r\n---\r\n\r\n## Changelog\r\n\r\n| Version | Breaking | Description |\r\n| :------ | :-------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| 2.3.1 | false | Added s3d_name to add_custom_section. |\r\n| 2.2.0 | false | Added member rotation angle to members.add(). |\r\n| 2.1.0 | false | Fixed usage of hasAttr() in model collection component. |\r\n| 2.0.4 | false | Fixed dependency issue affecting Python 3.7 It should fix the error `TypeError: 'type' object is not subscriptable` and the error `cannot import name 'Literal' from 'typing'`. |\r\n| 2.0.3 | false | Fixed packaging bug. |\r\n| 2.0.0 | Breaks `model.plates`. | \u00e2\u20ac\u00a2 Plates can now have additional attributes: `diaphragm`, `membrane_thickness`, `bending_thickness`, `shear_thickness`, `holes`. This may misalign inputs of existing plates.<br/>\u00e2\u20ac\u00a2\u00c2\u00a0`plate.type` now defaults to `\"auto\"`. |\r\n| 1.2.0 | false | \u00e2\u20ac\u00a2 `Materials.add()` method now takes a second parameter for units. See sample above. |\r\n| 1.1.3 | Breaks `model.self_weight`. | \u00e2\u20ac\u00a2 `Model().set` method now can now accept a downloaded JSON model from platform.skyciv.com/structural.<br/>\u00e2\u20ac\u00a2\u00c2\u00a0Fixed self_weight data structure.<br/>\u00e2\u20ac\u00a2\u00c2\u00a0`Functions` and `Function` class now defaults `args` to an empty object. |\r\n| 1.1.2 | false | \u00e2\u20ac\u00a2 Typos.<br/>\u00e2\u20ac\u00a2\u00c2\u00a0Improved in-code docs.<br/>\u00e2\u20ac\u00a2\u00c2\u00a0Fixed Canadian bridging channel lookup in `skyciv.sections`.<br/>\u00e2\u20ac\u00a2\u00c2\u00a0The `request()` method of the `ApiObject()` will now automatically store the `last_session_id` to the `auth.session_id` property of the `ApiObject` instance. |\r\n| 1.1.1 | false | \u00e2\u20ac\u00a2 README.md patch. |\r\n| 1.1.0 | false | \u00e2\u20ac\u00a2 Added 37 new classes including the `ApiObject()` and `Model()` classes. |\r\n| 1.0.4 | false | \u00e2\u20ac\u00a2 Package will now only use dumps on input if `api_object` is not a string. |\r\n| 1.0.3 | false | \u00e2\u20ac\u00a2 Fixed options dictionary to be optional. |\r\n| 1.0.2 | false | \u00e2\u20ac\u00a2 Updated readme. |\r\n| 1.0.1 | false | \u00e2\u20ac\u00a2 Changed `skyciv.request()`. to print msg if SkyCiv returns error rather than throw an exception. |\r\n| 1.0.0 | - | Initial release. |\r\n",
"bugtrack_url": null,
"license": null,
"summary": "A simplified way to use the SkyCiv API with Python.",
"version": "2.3.1",
"project_urls": {
"Homepage": "https://github.com/skyciv/skyciv-pip"
},
"split_keywords": [
"skyciv",
"structural",
"analysis",
"design",
"api",
"aisc",
"eurocode",
"csa",
"steel",
"concrete",
"bim"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "71eb0af032319f857c92de3ad15b5cd472dc4127c262c3a9e981da0232744d2e",
"md5": "4f9e5e2de4a8daf110a51bec1e592b0f",
"sha256": "a65d856c7440764b0696c440c04a2828faa2d02c505d980aa9c647ccf6edacf0"
},
"downloads": -1,
"filename": "skyciv-2.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4f9e5e2de4a8daf110a51bec1e592b0f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 145660,
"upload_time": "2024-06-06T08:28:35",
"upload_time_iso_8601": "2024-06-06T08:28:35.256818Z",
"url": "https://files.pythonhosted.org/packages/71/eb/0af032319f857c92de3ad15b5cd472dc4127c262c3a9e981da0232744d2e/skyciv-2.3.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "976dee12cb1a3df77bbbe21c621cc4634665275c4dbad680fe5d1c35d5e79c08",
"md5": "4efbd56da8e86d372d55b64e13766deb",
"sha256": "9d5ef57f1316226bb8a20a80151dd6b6e61ae3ebb4261197f9f94878bcd0041e"
},
"downloads": -1,
"filename": "skyciv-2.3.1.tar.gz",
"has_sig": false,
"md5_digest": "4efbd56da8e86d372d55b64e13766deb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 116966,
"upload_time": "2024-06-06T08:28:37",
"upload_time_iso_8601": "2024-06-06T08:28:37.344392Z",
"url": "https://files.pythonhosted.org/packages/97/6d/ee12cb1a3df77bbbe21c621cc4634665275c4dbad680fe5d1c35d5e79c08/skyciv-2.3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-06 08:28:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "skyciv",
"github_project": "skyciv-pip",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "skyciv"
}