# YANGcore
YANGcore is a Python based application server having a [RESTCONF](https://tools.ietf.org/html/rfc8040)-based interface binding to a [SQL Alchemy](https://www.sqlalchemy.org)-based database backend.
## Installation
`pip install yangcore`
## Overview
- HTTPS or HTTP
- RESTCONF HEAD, GET, POST, PUT, and DELETE work over entire tree.
- Ordered-by user query parameters ('insert' and 'point') work.
- [List Pagination](https://datatracker.ietf.org/doc/html/draft-ietf-netconf-list-pagination-rc) query parameters ('limit', 'offset', and 'direction') work.
- The ./well-known/host-meta, RESTCONF root (i.e., {+restconf}), and YANG-library resources.
- Tested using in-memory, file-base, MySQL and, a long time ago, AWS Aurora and Postgres.
- TLS connection to backend RDBMS, with or w/o client certificate.
- Logging and dynamic callouts for Audit log and Notifications log
- Database-level transactions and concurrent access.
- In-memory database support for ephemeral use-cases.
- Lightweight and fast: single-threaded [Asynchronous I/O](https://docs.python.org/3/library/asyncio.html).
- Python 3.11 and 3.12
## Motivation
RESTCONF is great REST API right out of the box. The API is auto-generated off of a collection of
YANG modules, which defines the API contract. YANG is the popular data modelling langauge defined
by the IETF ([RFC 7950](https://www.rfc-editor.org/rfc/rfc7950.html))and recommended by the Internet
Architecture Board.
As far as APIs go, RESTCONF ([RFC 8040](https://www.rfc-editor.org/rfc/rfc8040.html)) scores high on
both the [Richardson Maturity Model](https://martinfowler.com/articles/richardsonMaturityModel.html)
and the [Amundsen Maturity Model](http://amundsen.com/talks/2016-11-apistrat-wadm/index.html) models.
See [API Maturity](https://medium.com/good-api/api-maturity-fb25560151a3) for a description for what
makes for a good API.
Python is a popular programming language. A Python implementation of a RESTCONF server
seems like it could be popular. Searching for Python-based RESTCONF tooling found
[Jetconf](https://github.com/CZ-NIC/jetconf), but its been abandoned.
Thus there seemed to be an opportunity to work and YANGcore became something.
<!--
An API contract is key to success. But popular API-modelling languages ([Swagger/OpenAI](https://swagger.io/specification/), [RAML](https://raml.org), [API Blueprint](https://apiblueprint.org), etc.) seem weak relative to [YANG](https://datatracker.ietf.org/doc/html/rfc8341) when coupled with [RESTCONF](https://tools.ietf.org/html/rfc8040).
-->
<!--
[RESTful JSON](https://restfuljson.org) and [Marshmallow](https://marshmallow.readthedocs.io/en/stable)
YANG is a better API modelling language than [JSON Schema](https://json-schema.org).
-->
## More Information
Please see the [documentation](https://watsen.net/docs) for more information.
Raw data
{
"_id": null,
"home_page": "https://watsen.net/products/yangcore",
"name": "yangcore",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.13,>=3.11",
"maintainer_email": null,
"keywords": "ietf, rfc, 7950, yang, 8040, restconf",
"author": "Watsen Networks",
"author_email": "info@watsen.net",
"download_url": "https://files.pythonhosted.org/packages/58/05/59f7c83546cf48b7ae3d0caacff3c6f974e24a999edba08c5e84f0adf75f/yangcore-0.0.67.tar.gz",
"platform": null,
"description": "# YANGcore\n\nYANGcore is a Python based application server having a [RESTCONF](https://tools.ietf.org/html/rfc8040)-based interface binding to a [SQL Alchemy](https://www.sqlalchemy.org)-based database backend.\n\n\n## Installation\n\n `pip install yangcore`\n\n## Overview\n\n - HTTPS or HTTP\n - RESTCONF HEAD, GET, POST, PUT, and DELETE work over entire tree.\n - Ordered-by user query parameters ('insert' and 'point') work.\n - [List Pagination](https://datatracker.ietf.org/doc/html/draft-ietf-netconf-list-pagination-rc) query parameters ('limit', 'offset', and 'direction') work.\n - The ./well-known/host-meta, RESTCONF root (i.e., {+restconf}), and YANG-library resources.\n - Tested using in-memory, file-base, MySQL and, a long time ago, AWS Aurora and Postgres.\n - TLS connection to backend RDBMS, with or w/o client certificate.\n - Logging and dynamic callouts for Audit log and Notifications log\n - Database-level transactions and concurrent access.\n - In-memory database support for ephemeral use-cases.\n - Lightweight and fast: single-threaded [Asynchronous I/O](https://docs.python.org/3/library/asyncio.html).\n - Python 3.11 and 3.12\n\n## Motivation\n\nRESTCONF is great REST API right out of the box. The API is auto-generated off of a collection of\nYANG modules, which defines the API contract. YANG is the popular data modelling langauge defined\nby the IETF ([RFC 7950](https://www.rfc-editor.org/rfc/rfc7950.html))and recommended by the Internet\nArchitecture Board.\n\nAs far as APIs go, RESTCONF ([RFC 8040](https://www.rfc-editor.org/rfc/rfc8040.html)) scores high on\nboth the [Richardson Maturity Model](https://martinfowler.com/articles/richardsonMaturityModel.html)\nand the [Amundsen Maturity Model](http://amundsen.com/talks/2016-11-apistrat-wadm/index.html) models.\nSee [API Maturity](https://medium.com/good-api/api-maturity-fb25560151a3) for a description for what\nmakes for a good API.\n\nPython is a popular programming language. A Python implementation of a RESTCONF server\nseems like it could be popular. Searching for Python-based RESTCONF tooling found\n[Jetconf](https://github.com/CZ-NIC/jetconf), but its been abandoned.\n\nThus there seemed to be an opportunity to work and YANGcore became something.\n\n<!--\nAn API contract is key to success. But popular API-modelling languages ([Swagger/OpenAI](https://swagger.io/specification/), [RAML](https://raml.org), [API Blueprint](https://apiblueprint.org), etc.) seem weak relative to [YANG](https://datatracker.ietf.org/doc/html/rfc8341) when coupled with [RESTCONF](https://tools.ietf.org/html/rfc8040).\n-->\n\n<!--\n[RESTful JSON](https://restfuljson.org) and [Marshmallow](https://marshmallow.readthedocs.io/en/stable)\nYANG is a better API modelling language than [JSON Schema](https://json-schema.org).\n-->\n\n\n## More Information\n\nPlease see the [documentation](https://watsen.net/docs) for more information.\n\n",
"bugtrack_url": null,
"license": "Non Production Use License",
"summary": "YANGcore (a RESTCONF-based Application Server)",
"version": "0.0.67",
"project_urls": {
"Documentation": "https://watsen.net/docs/yangcore",
"Homepage": "https://watsen.net/products/yangcore",
"License": "https://watsen.net/sales/non-production-use.html"
},
"split_keywords": [
"ietf",
" rfc",
" 7950",
" yang",
" 8040",
" restconf"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "2c184759e8ef4232d7f30923ada5971409460a6774de3f2199e36973c7ccd433",
"md5": "86793eda2dafe0f2c41717d5efd5c48f",
"sha256": "168690dce7948655a5446ed4da8da3a953f31a34263ce7e66044335879f87eaf"
},
"downloads": -1,
"filename": "yangcore-0.0.67-py3-none-any.whl",
"has_sig": false,
"md5_digest": "86793eda2dafe0f2c41717d5efd5c48f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.13,>=3.11",
"size": 46610,
"upload_time": "2025-01-22T16:32:29",
"upload_time_iso_8601": "2025-01-22T16:32:29.116376Z",
"url": "https://files.pythonhosted.org/packages/2c/18/4759e8ef4232d7f30923ada5971409460a6774de3f2199e36973c7ccd433/yangcore-0.0.67-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "580559f7c83546cf48b7ae3d0caacff3c6f974e24a999edba08c5e84f0adf75f",
"md5": "6dfc757dd858fc816ed12366c5dec89d",
"sha256": "7797ec38800dfa70db25d335d7dbaecb45a5e8adeccff0516247411e85ce043f"
},
"downloads": -1,
"filename": "yangcore-0.0.67.tar.gz",
"has_sig": false,
"md5_digest": "6dfc757dd858fc816ed12366c5dec89d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.13,>=3.11",
"size": 44559,
"upload_time": "2025-01-22T16:32:30",
"upload_time_iso_8601": "2025-01-22T16:32:30.458474Z",
"url": "https://files.pythonhosted.org/packages/58/05/59f7c83546cf48b7ae3d0caacff3c6f974e24a999edba08c5e84f0adf75f/yangcore-0.0.67.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-22 16:32:30",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "yangcore"
}