Skip to main content

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

  1. Confirm pyproject.toml has the intended version.
  2. Run python -m pytest.
  3. Run python -m build.
  4. Inspect the wheel and source distribution in dist/.
  5. Upload to TestPyPI first:
python -m twine upload --repository testpypi dist/*
  1. 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

nyx_lang-0.1.3.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nyx_lang-0.1.3-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

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

Hashes for nyx_lang-0.1.3.tar.gz
Algorithm Hash digest
SHA256 a43cf6af8040ece252f1cf2e309fde9393931df6d1a6073e48c17ba4cdecb8f6
MD5 b803e42db7172ca3539f87cc00d1ad7f
BLAKE2b-256 1f8d4e177bf2b14f4382a46176406f62998af7a09a160d2ec109048d9db7dc69

See more details on using hashes here.

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

Hashes for nyx_lang-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e89cce495eac364c8600c54cc16688b1a0c83ed2a5981ee1f8e87569906b7e7f
MD5 421c37cbc563519f7ab3e3601c7e908e
BLAKE2b-256 4bf6be58a43c94ce6941912e241ff4a1dac105006839f7b26854da5f06ac95e4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page