Skip to main content

ConfigConverter

PyPI Version Python Versions License Documentation

ConfigConverter is a powerful and easy-to-use tool designed to convert configuration files between various formats, including JSON, YAML, TOML, INI, and XML.

Features

  • Multi-Format Support: Seamlessly convert between JSON, YAML, TOML, INI, and XML formats.
  • Command-Line Interface (CLI): Perform conversions directly from your terminal with simple commands.
  • Python API: Integrate conversion functionality into your Python projects effortlessly.
  • Extensible and Customizable: Easily extend the tool to support additional formats or custom conversion logic.
  • User-Friendly: Intuitive design ensures a smooth experience for both beginners and advanced users.

Installation

Via PyPI

Install ConfigConverter using pip:

pip install configconverter

From Source

Clone the repository and install using Poetry:

git clone https://github.com/ankit-aglawe/configconverter.git
cd configconverter
poetry install

Quick Start

Command-Line Usage

Convert config.json to config.yaml:

configconverter config.json config.yaml

Specify input and output formats explicitly:

configconverter -i ini -o toml settings.conf settings.toml

Output the converted configuration to standard output:

configconverter config.toml -o json --stdout

Python API Usage

Convert Using File Paths

from configconverter import convert

# Convert JSON to YAML and save to a file
convert('config.json', 'json', 'yaml', output_file='config.yaml')

Convert Using Data Strings

from configconverter import convert

# Convert JSON string to YAML string
json_data = '{"name": "John", "age": 30}'
yaml_data = convert(json_data, 'json', 'yaml', from_file=False)
print(yaml_data)

Detailed Documentation

For comprehensive guides, advanced usage, and API references, visit the ConfigConverter Documentation.

Examples

Batch Conversion

Convert all JSON files in a directory to YAML:

import os
from configconverter import convert

input_dir = 'json_configs'
output_dir = 'yaml_configs'
os.makedirs(output_dir, exist_ok=True)

for filename in os.listdir(input_dir):
    if filename.endswith('.json'):
        input_file = os.path.join(input_dir, filename)
        output_file = os.path.join(output_dir, filename.replace('.json', '.yaml'))
        convert(input_file, 'json', 'yaml', output_file=output_file)

Custom Indentation

Convert a file with custom indentation:

configconverter config.json config.yaml --indent 2

Handling Complex Data Structures

When dealing with configurations that contain complex nested structures or special data types, consider the following:

  • Avoid Incompatible Formats: As INI format does not support nested structures, avoid converting complex configurations to INI.

  • Custom Serialization: If you must convert to a format with limitations, consider serializing complex data types into strings using JSON serialization.

  • Example:

    import json
    from configconverter import convert
    
    # Serialize complex data to JSON strings before conversion
    def serialize_complex_data(data):
        if isinstance(data, (dict, list)):
            return json.dumps(data)
        return data
    
    # Custom converter function
    def custom_convert(input_file, output_file):
        with open(input_file, 'r') as f:
            data = json.load(f)
    
        # Serialize complex data
        for key, value in data.items():
            data[key] = serialize_complex_data(value)
    
        # Convert to INI
        convert(data, 'json', 'ini', output_file=output_file, from_file=False)
    
    custom_convert('complex_config.json', 'config.ini')
    

Limitations and Known Issues

While ConfigConverter is designed to handle a wide range of configuration files, there are some limitations due to inherent differences between configuration formats:

  • Format Incompatibilities:

    • INI Format Limitations:

      • No Nested Structures: INI files do not support nested sections or hierarchical data.
      • All Values are Strings: INI treats all values as strings, lacking native support for integers, booleans, or lists.
      • Loss of Hierarchy: Nested data from formats like JSON, YAML, or TOML may be flattened when converted to INI, leading to potential loss of context.
    • XML Format Limitations:

      • Complex Representation: XML can represent nested structures but may not handle data types like booleans or integers without additional schema definitions.
      • Attributes vs. Elements: Differentiating between attributes and elements can complicate the parsing and emitting processes.

Detailed Documentation

For comprehensive guides, advanced usage, and API references, visit the ConfigConverter Documentation.

  • Usage Guidelines: Best practices for using ConfigConverter effectively.
  • Handling Complex Data: Strategies for dealing with nested structures and special data types.
  • Error Handling: Information on error messages and logging to help you troubleshoot issues.
  • Examples: Additional examples demonstrating various conversion scenarios and edge cases.

Examples

Batch Conversion

Convert all JSON files in a directory to YAML:

import os
from configconverter import convert

input_dir = 'json_configs'
output_dir = 'yaml_configs'
os.makedirs(output_dir, exist_ok=True)

for filename in os.listdir(input_dir):
    if filename.endswith('.json'):
        input_file = os.path.join(input_dir, filename)
        output_file = os.path.join(output_dir, filename.replace('.json', '.yaml'))
        convert(input_file, 'json', 'yaml', output_file=output_file)

Contributing

Contributions are welcome! Whether it's reporting a bug, suggesting a feature, or submitting a pull request, your help is greatly appreciated.

  1. Fork the Repository

  2. Create a Feature Branch

    git checkout -b feature/your-feature-name
    
  3. Commit Your Changes

    git commit -m "Add awesome feature"
    
  4. Push to the Branch

    git push origin feature/your-feature-name
    
  5. Open a Pull Request

For more detailed guidelines, refer to the Contributing Guide.

License

This project is licensed under the MIT License.

Contact

Useful Links

Metadata

Release files for configconverter 0.3.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 configconverter 0.3.0
File Size Uploaded
configconverter-0.3.0.tar.gz 10.3 kB Details

Built distribution (wheel)

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

Total release size: 20.8 kB

Release files / configconverter-0.3.0.tar.gz

Download URL configconverter-0.3.0.tar.gz
Size 10.3 kB
Tags Source
SHA-256 checksum
How to use checksums
e49f0eb8a5eb72713a8d3d26d4ac9c7e28c459eb5615c11e0b0db5ecdbf1e4c6
BLAKE2b-256 checksum
How to use checksums
c4b4cd91a1d09a2e8a71878fb584a4bc7fced05f0b4bc117403feb43f9557071
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-41-generic

Release files / configconverter-0.3.0-py3-none-any.whl

Download URL configconverter-0.3.0-py3-none-any.whl
Size 10.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8b68b35e116f8a26cf545eab751c3ad9c2fa856d3ab2b9fc7631558b2fb7f06d
BLAKE2b-256 checksum
How to use checksums
ab11cb9b5555d82b03c27a291fd14b87f8382d53360d0ffa9cb148cf8b8ad02e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-41-generic

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

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