# 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/dc/ea/884618b4af703a1619e7f4f20f6ad98d6c705bbade486208987fdc07f45e/yangcore-0.0.97.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.97",
"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": null,
"digests": {
"blake2b_256": "dcea884618b4af703a1619e7f4f20f6ad98d6c705bbade486208987fdc07f45e",
"md5": "d60c864dfb2089bcb1e8fc8b20dd5560",
"sha256": "c034b53029a4d464cba9808344b9e49c6110b8f6004dc5a2d1ad78aa221bb440"
},
"downloads": -1,
"filename": "yangcore-0.0.97.tar.gz",
"has_sig": false,
"md5_digest": "d60c864dfb2089bcb1e8fc8b20dd5560",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.13,>=3.11",
"size": 119916,
"upload_time": "2025-07-08T15:45:40",
"upload_time_iso_8601": "2025-07-08T15:45:40.227159Z",
"url": "https://files.pythonhosted.org/packages/dc/ea/884618b4af703a1619e7f4f20f6ad98d6c705bbade486208987fdc07f45e/yangcore-0.0.97.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-08 15:45:40",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "yangcore"
}