Skip to main content

kurde

Simple configuration language based on Python.

Features

  • Python syntax
  • Flexible Enums
  • Easily created nested dictionaries
  • Direct addess to environment variables
  • Calling/capturing shell commands
  • Path manipulation
  • Module re immediately available

Concepts

Kurde is pure Python with some built-ins added for your convenience (see below).

After invoking your script, any JSON-serializable variable defined in the global scope will be serialized and printed to stdout.

Alternatively you can define ROOT variable in the global scope. It will be considered as the root object to be serialized.

After installing Kurde, command kurde becomes available. Use it as:

kurde path/to/your/script.py

For clarity it is recommended to add kurde in the shebang of your script: #!/usr/bin/env kurde.

For more information see examples below.

Built-Ins

Variable Value
Path pathlib.Path
Dict addict.Dict
Enum simplenum.Enum
enum simplenum
env addict.Dict(**os.environ)
cmd plumbum.local.cmd
re re

For reference see:

Examples

Simple Example

#!/usr/bin/env kurde

user = dict(
    name = 'admin',
    password = 'admin123',
)
remotes = [
    '192.168.0.100',
    '192.168.0.101',
    '192.168.0.102',
]
timeout = 100

Renders as:

{
  "user": {
    "name": "admin",
    "password": "admin123"
  },
  "remotes": [
    "192.168.0.100",
    "192.168.0.101",
    "192.168.0.102"
  ],
  "timeout": 100
}

Advanced Example

#!/usr/bin/env kurde

# Enum from `simple-enum` package is available.
# By default enum items are serialized by names.
class Color(Enum):
    red
    green
    blue
    white
    black

# Alternatively, enum items can be replaced by numbers assigned automatically.
class Priority(Enum, values=enum.from_zero):
    low
    medium
    high

# In the simple cases, standard dictionary is sufficient.
# It is serialized as JSON object.
theme = dict(
    foreground = Color.black,
    background = Color.green,
)

# Dictionary can be also created by assigning the the attributes.
# Dict comes from `addicts` package.
user = Dict()

# Environment variables can be accessed directly.
user.name = env.USER or 'admin'
user.full_name = "Tom Brown"

# Module re immediately available.
user.last_name = re.findall('[^ ]+', user.full_name)[-1]

# lists, dicts, sets are serialized as JSON arrays.
user.aliases = ('tommy', 'tbrown', 'brown')
user.nick = None

network = Dict()

# Non-existing attributes are created on the fly.
network.local.priority = Priority.medium

# Shell commands can be easily invoked.
# Behind `cmd` we get `plumbum.local.cmd`.
network.local.name = cmd.hostname().strip()

# pathlib.Path immediately available.
network.local.cert_path = Path(__file__).parent.absolute() / 'cert.pem'

# Closures and other constructs available.
network.remotes = {f"proxy{n}": f'192.168.0.{100 + n}' for n in range(3)}
network.remotes['localhost'] = '127.0.0.1'

Renders as:

{
  "theme": {
    "foreground": "black",
    "background": "green"
  },
  "user": {
    "name": "kendo",
    "full_name": "Tom Brown",
    "last_name": "Brown",
    "aliases": [
      "tommy",
      "tbrown",
      "brown"
    ],
    "nick": null
  },
  "network": {
    "local": {
      "priority": 1,
      "name": "precision",
      "cert_path": "/home/kendo/wrk/kurde/examples/cert.pem"
    },
    "remotes": {
      "proxy0": "192.168.0.100",
      "proxy1": "192.168.0.101",
      "proxy2": "192.168.0.102",
      "localhost": "127.0.0.1"
    }
  }
}

Example with ROOT defined

#!/usr/bin/env kurde

min_value = 2
max_value = 6

ROOT = Dict()
ROOT.numbers = list(range(min_value, max_value+1))

Renders as:

{
  "numbers": [
    2,
    3,
    4,
    5,
    6
  ]
}

Disclaimer

Kurde doesn't do any sandboxing. Invoke the scripts only if you absolutely trust them. You are doing it on your own responsibility.

Known Issues

There is an issue between addict and simplenum when calling Dict with enum items as arguments, e.g.:

theme = Dict(
    foreground = Color.white,
    background = Color.green,
)

Metadata

Release files for kurde 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for kurde 0.2.0
File Size Uploaded
kurde-0.2.0.tar.gz 3.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for kurde 0.2.0
File Interpreter ABI Platform
kurde-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 8.1 kB

Release files / kurde-0.2.0.tar.gz

Download URL kurde-0.2.0.tar.gz
Size 3.6 kB
Tags Source
SHA-256 checksum
How to use checksums
e9c663e838488a2fdcb18a075d14b577282e17baccb55b5e485ded41e1bfd272
BLAKE2b-256 checksum
How to use checksums
45dc30224bbfbd3001b0ab0fdc56fe989d1fdfdd2ec83c2f4588120705441983
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.6.1 CPython/3.10.12 Linux/5.15.0-84-generic

Release files / kurde-0.2.0-py3-none-any.whl

Download URL kurde-0.2.0-py3-none-any.whl
Size 4.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8e0e53f4f5bea81d857e1e0522b40714fd4cfab841daf66a1dc13002e82facb2
BLAKE2b-256 checksum
How to use checksums
29060f332b7b988f0faf665bdcfe5b7b975da3cdb4be2d9aa5d13431fe88153b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.6.1 CPython/3.10.12 Linux/5.15.0-84-generic

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page