Skip to content

DotSetup is a versatile Python package designed for streamlined management of multiple configurations. It simplifies the storage and retrieval of settings from .env and .json files, offering a seamless solution for your project's setup needs.

License

Notifications You must be signed in to change notification settings

muhammad-fiaz/dotsetup

Repository files navigation

DotSetup

PyPI Version Python Versions License: MIT Downloads Last Commit GitHub Issues GitHub Stars GitHub Forks

DotSetup is a Python package designed for flexible configuration management, supporting .ini, .json, .env, and custom file types. Simplify the storage and retrieval of settings in your projects effortlessly.

Table of Contents

  1. DotSetup
  2. Features
  3. Installation
  4. Getting Started
  5. Custom File Syntax
  6. Contributing
  7. Code of Conduct
  8. License
  9. Support the Project

Features

  • Multi-format Support: Seamlessly handle configurations from files like .ini, .json, .env, and custom file types.
  • Intuitive API: Easy-to-use methods for 🔄 loading, accessing, and saving configurations.
  • File Type Extension: Customize DotSetup to support additional file types beyond the included formats.
  • Nested Configurations: Load nested configurations from files like .ini and .json files.
  • Custom File Syntax: Define your own syntax for custom file types.
  • Custom File Path: Load configurations from a custom path for different file types.
  • Error Handling: Handle errors that may occur when loading configurations.
  • Lightweight: DotSetup is a lightweight package with no external dependencies.
  • Cross-Platform: DotSetup is compatible with Windows, macOS, and Linux.
  • Open-Source: DotSetup is an open-source project licensed under the MIT License.

Installation

pip install dotsetup

Getting Started

To get started with DotSetup, follow these steps:

Import the DotSetup class in your Python script or project to get started.

Simple Example:

from dotsetup import DotSetup

# Initialize DotSetup
ds = DotSetup()

# Load from env file
value_env = ds.load('version', file_type='env')
print(f"Value from JSON File: {value_env}")
    

the above example loads the value of the variable version from the .env file in the root folder of the project.

Breaking down Example:

from dotsetup import DotSetup, DotSetupException, FileNotFoundError, VariableNotFoundError, JSONDecodeError

def main():
    # Initialize DotSetup
    ds = DotSetup()

    try:
        # Load from JSON file
        value_json = ds.load('database', file_type='json')
        print(f"Value from JSON File: {value_json}")
    except (FileNotFoundError, VariableNotFoundError, JSONDecodeError) as e:
        print(f"Error: {e}")

    try:
        # Load from ENV file with default path
        value_env = ds.load('DATABASE_URL', file_type='env')
        print(f"Value from ENV (default path): {value_env}")
    except (FileNotFoundError, VariableNotFoundError) as e:
        print(f"Error: {e}")

    try:
        # Load from custom file
        value_custom = ds.load('num2', file_type='custom', file_path='config.con')
        print(f"Value from Custom File: {value_custom}")
    except (FileNotFoundError, VariableNotFoundError, JSONDecodeError) as e:
        print(f"Error: {e}")

    try:
        # Load from INI file
        value_ini = ds.load('section1.option1', file_type='ini')
        print(f"Value from INI File: {value_ini}")
    except (FileNotFoundError, VariableNotFoundError) as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    main()

here you can also see how to handle errors that may occur when loading configurations.

Custom Path for File Types

To load configurations from a custom path for different file types:

from dotsetup import DotSetup
ds = DotSetup()

# Load configuration from the specified custom path
value = ds.load('key_name', file_type='type', file_path='path/to/config.con')

The default path for the env file is .env in the root folder. The default path for the ini file is config.ini in the root folder, and the default path for the json file is config.json in the root folder. For the custom file, the default path is config.con in the root folder. Alternatively, you can specify your own path using the file_path parameter

Nested Configurations

you can also load the nested configuration from the json and ini files by using the dot notation for example

json Example:

{
  "database": {
    "host": "localhost",
    "port": 5432,
    "username": "user",
    "password": "password"
  },
  "api_key": "your_api_key"
}
from dotsetup import DotSetup
ds = DotSetup()
# Load value from nested JSON file
value_json = ds.load('database.host', file_type='json', file_path='config.json')
print(f"Value from JSON File: {value_json}")

Custom File Syntax

DotSetup supports custom file types. To use a custom file type, you must define a custom file syntax. The custom file syntax is a dictionary that maps variable names to their values.

USERNAME="johndoe"
PASSWORD="mysecretpassword"
API_KEY="abc123"
NUMBER=1
Numbers={1,2,3,4,5}
num2=(1,2)
num3=[1,2,3]
num4=1.2
str="Hello World"
str2=("Hello World","Hello World")
str3=["Hello World","Hello World"]
LINKS=["https://www.google.com","https://www.facebook.com","https://www.twitter.com"]
LINKS2={"KEY":"https://www.google.com","KEY2":"https://www.facebook.com"}

In this example, variables and values are defined using the format key=value. You can define your own syntax for custom files with custom file extension(filename.custom_extension) based on your project's requirements. Make sure to follow this syntax when defining your custom file syntax.

Contributing

Contributions are welcome! Before contributing, please read our Contributing Guidelines to ensure a smooth and collaborative development process.

Code of Conduct

Please review our Code of Conduct to understand the standards of behavior we expect from contributors and users of this project.

License

This project is licensed under the MIT License. See LICENSE for more details.

Support the Project


💰 You can help me improve more by a little support

BuyMeACoffee Patreon Ko-Fi Sponsor muhammad-fiaz

Happy Coding ❤️