Python parser and converter for the Nyx 0.1.2 data serialization language
Project description
nyx-lang
A small, dependency-free Python parser and converter for the Nyx 0.1.2 data serialization language.
Nyx is a flat, context-stateful format built around boxes, items, sub-items,
pieces, and tape seals. It maps cleanly to JSON while keeping authoring
readable for nested personal data.
Installation
pip install nyx-lang
Quick Start
import nyx_lang
source = """
^nyx=0.1.2
box: "Inventory"
sub-box: "Electronics"
item: "Console"
sub-item: "manufacturer"
sub-item: "Nintendo"
tape
sub-item: "controllers"
piece: "Pro Controller"
piece: "Joy-Con"
"""
data = nyx_lang.parse(source)
print(nyx_lang.to_json(data))
Output:
{
"Inventory": {
"Electronics": {
"Console": {
"manufacturer": "Nintendo",
"controllers": [
"Pro Controller",
"Joy-Con"
]
}
}
}
}
Command Line
The package installs a nyx command. You can also run it as a module with
python -m nyx_lang.
# Nyx -> JSON
nyx to-json input.nyx --output output.json
python -m nyx_lang to-json input.nyx --output output.json
# JSON -> Nyx
nyx to-nyx input.json --output output.nyx
python -m nyx_lang to-nyx input.json --output output.nyx
# Print parsed JSON to the terminal
nyx parse input.nyx
# Validate a Nyx document
nyx validate input.nyx
On Windows, prefer --output over shell redirection so files are written as
UTF-8.
API
nyx_lang.parse(source, *, strict=True) -> dict
Parse a Nyx document string into a Python dictionary.
from nyx_lang import parse
data = parse('^nyx=0.1.2\nbox: "Settings"\nitem: "theme"\nsub-item: "dark"')
assert data == {"Settings": {"theme": "dark"}}
strict=True raises NyxSyntaxError for unsupported versions. Version 0.1
documents are accepted for compatibility with earlier package builds.
nyx_lang.to_json(data, *, indent=2, **kwargs) -> str
Serialize parsed Nyx data to JSON. Extra keyword arguments are passed to
json.dumps.
from nyx_lang import to_json
print(to_json({"Settings": {"theme": "dark"}}, indent=2))
nyx_lang.to_nyx(data) -> str
Serialize a Python dictionary to a Nyx 0.1.2 document.
from nyx_lang import to_nyx
print(to_nyx({"Settings": {"theme": "dark"}}))
Nyx Primer
Every document starts with a version header:
^nyx=0.1.2
Core statements:
| Keyword | Effect |
|---|---|
box: "Name" |
Open a root container. |
sub-box: "Name" |
Open a nested container inside the active box. |
sub-box: "" |
Open the next anonymous array-object slot. |
item: "Name" |
Create an item in the active box. |
sub-item: "key" |
Add a child key under the active item. |
piece: value |
Append a scalar element to the active item list. |
tape |
Seal the current context and step up one level. |
Primitive values:
sub-item: "string"
sub-item: 42
sub-item: 3.14
sub-item: true
sub-item: false
sub-item: null
A sub-item with exactly one scalar child collapses to a key-value pair:
sub-item: "temperature"
sub-item: -4.5
Result:
{ "temperature": -4.5 }
Flat arrays use piece:
item: "controllers"
piece: "Pro Controller"
piece: "Joy-Con"
Arrays of objects use anonymous sub-boxes:
box: "tabs"
sub-box: ""
item: "pageTitle"
sub-item: "Home"
tape
tape
sub-box: ""
item: "pageTitle"
sub-item: "Settings"
Result:
{
"tabs": [
{ "pageTitle": "Home" },
{ "pageTitle": "Settings" }
]
}
Exceptions
| Exception | When raised |
|---|---|
NyxSyntaxError |
Invalid syntax, invalid keyword, missing header, wrong context, or mixed item/list usage. |
NyxVersionWarning |
Unsupported version in lenient mode. |
Development
python -m pip install -e ".[dev]"
python -m pytest
python -m build
Build artifacts are written to dist/.
Publishing Checklist
- Confirm
pyproject.tomlhas the intended version. - Run
python -m pytest. - Run
python -m build. - Inspect the wheel and source distribution in
dist/. - Upload to TestPyPI first:
python -m twine upload --repository testpypi dist/*
- Upload to PyPI:
python -m twine upload dist/*
License
Proprietary. See LICENSE for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nyx_lang-0.1.3.tar.gz.
File metadata
- Download URL: nyx_lang-0.1.3.tar.gz
- Upload date:
- Size: 13.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a43cf6af8040ece252f1cf2e309fde9393931df6d1a6073e48c17ba4cdecb8f6
|
|
| MD5 |
b803e42db7172ca3539f87cc00d1ad7f
|
|
| BLAKE2b-256 |
1f8d4e177bf2b14f4382a46176406f62998af7a09a160d2ec109048d9db7dc69
|
File details
Details for the file nyx_lang-0.1.3-py3-none-any.whl.
File metadata
- Download URL: nyx_lang-0.1.3-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e89cce495eac364c8600c54cc16688b1a0c83ed2a5981ee1f8e87569906b7e7f
|
|
| MD5 |
421c37cbc563519f7ab3e3601c7e908e
|
|
| BLAKE2b-256 |
4bf6be58a43c94ce6941912e241ff4a1dac105006839f7b26854da5f06ac95e4
|