Skip to content
/ pydonfig Public template

PyDonfig: A simple, human-readable configuration language for Python, with a runtime parser to integrate .pydl files seamlessly into your code.

License

Notifications You must be signed in to change notification settings

juliusthejules/pydonfig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Specification for Python Declarative Language (PyDonfig)

Version: 1.0
Author: Joseph D. Smith
File Extension: .pydl
Purpose: PyDonfig provides a simple, declarative syntax for configuring Python applications. It eliminates the need for hardcoding settings directly into Python scripts by allowing developers to define configuration files in a clear, human-readable format that can be parsed at runtime using a lightweight parsing function.


Specification for PyDonfig

1. Structure

PyDonfig files use a hierarchical structure consisting of sections and key-value pairs.

  • Sections: Represented by identifiers followed by a colon (:).
    Example:

    device:
    
  • Key-Value Pairs: Defined using the format key > value.

    • Keys are case-sensitive and written in camelCase.
    • Values can be strings, numbers, booleans (true or false), or null.

    Example:

    macAddress > "00:00:00:00:00:00"
    

2. Comments

Comments are prefixed with //. Anything after // is ignored during parsing.
Example:

// This is a comment

3. Key-Value Pair Details

  • Strings: Enclosed in double quotes (").
    Example:
    hostname > "localhost"
    
  • Numbers: Written as-is (integers or floats).
    Example:
    port > 8080
    
  • Booleans: Written as true or false (case-insensitive).
    Example:
    enabled > false
    
  • Null: Represented as null.
    Example:
    primary > null
    

Example PyDonfig File (config.pydl)

// Device configuration
device:
    macAddress > "00:00:00:00:00:00"
    btAddress > "00:00:00:00:00:00"

// IP configuration
ipAddress:
    ip4 > "127.0.0.1"
    ip6 > "::1"

// Firewall rules
firewallRule:
    deny > true
    port > 0
    protocol > "ALL"

// Telemetry settings
telemetry:
    enabled > false

// Hostname configuration
hostname > "localhost"

// DNS configuration
dns:
    primary > "127.0.0.0"
    secondary > "::1"

// Encryption settings
encryption:
    method > "AES-256"
    enable > true

// Traceroute blocking
traceroute:
    block > true

// Fingerprinting settings
fingerprinting:
    obfuscate > true

4. Parsing PyDonfig Files in Python

Parsing Function

The following function can be used to parse .pydl files into a Python dictionary.

def load_pydl(file_path):
    config = {}
    with open(file_path, "r") as file:
        current_section = None
        for line in file:
            line = line.strip()

            # Skip comments and empty lines
            if line.startswith("//") or not line:
                continue

            if line.endswith(":"):  # Section header
                current_section = line[:-1]
                config[current_section] = {}
            else:  # Key-value pair
                key, value = line.split(">", 1)
                key = key.strip()
                value = value.strip().strip('"')  # Remove quotes
                # Convert booleans and numbers
                if value.lower() == "true":
                    value = True
                elif value.lower() == "false":
                    value = False
                elif value.lower() == "null":
                    value = None
                elif value.isdigit():
                    value = int(value)
                elif value.replace(".", "", 1).isdigit():
                    value = float(value)

                if current_section:
                    config[current_section][key] = value
                else:
                    config[key] = value
    return config

5. Accessing Configuration

Once parsed, the .pydl configuration is stored in a Python dictionary, making it easy to access and use in your code.

Example Usage

# Load PyDonfig file
config = load_pydl("config.pydl")

# Access values
print(config["device"]["macAddress"])  # Output: 00:00:00:00:00:00
print(config["dns"]["primary"])        # Output: 127.0.0.1
print(config["firewallRule"]["deny"])  # Output: True

6. Benefits of PyDonfig

  • Human-Readable: Simple syntax for quick configuration changes.
  • Lightweight: No external libraries or parsers needed.
  • Extensible: Easy to modify and adapt to additional use cases.
  • Seamless Integration: Works directly with Python scripts, just like standard config files.

This specification ensures PyDonfig remains consistent, user-friendly, and versatile for Python application configuration.

7. Licensing

PyDonfig is open-source and available under the MIT License, allowing developers to freely use, modify, and distribute it.


8. Future Directions

  • Community Contributions: Expand the capabilities of PyDonfig with more advanced features.
  • Tooling: Develop an official PyDonfig parser library to simplify integration.
  • Documentation: Provide more detailed documentation and examples for users.

About

PyDonfig: A simple, human-readable configuration language for Python, with a runtime parser to integrate .pydl files seamlessly into your code.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks