New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

setconfig

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

setconfig

Multi-structure YAML config loader 🐍🔌

pipPyPI
Version
1.4.1
Maintainers
1

setconfig 🔌

[!TIP] Don't forget to star this repo if you like it! ⭐

Some developers prefer to use @dataclass while others prefer BaseModel. This holy war is not going to end soon. So now they can use the same loader and config file in different parts/microservices of one project.

Currently supported:

  • @dataclass
  • Pydantic BaseModel
  • Python SimpleNamespace (dotted dict)

Features:

  • Loading from streams
  • Multiple config files
  • Value overriding
  • Tuple-friendly

Installation

pip install setconfig

Usage sample

Dataclass, full sample here

from dataclasses import dataclass
from setconfig import load_config

@dataclass
class Node:
    host: str
    port: int

@dataclass
class Config:
    nodes: list[Node]

config = load_config('config.yaml', into=Config)

print(config)
# >>> Config(nodes=[Node(host='1.1.1.1', port=1000)])
print(config.nodes[0].host)
# >>> '1.1.1.1'

Pydantic, full sample here

from pydantic import BaseModel
from setconfig import load_config

class Node(BaseModel):
    host: str
    port: int

class Config(BaseModel):
    nodes: list[Node]

config = load_config('config.yaml', into=Config)

print(config)
# >>> Config(nodes=[Node(host='1.1.1.1', port=1000)])
print(config.nodes[0].host)
# >>> '1.1.1.1'

SimpleNamespace, full sample here

from setconfig import load_config

config = load_config('config.yaml')

print(config)
# >>> Config(nodes=[Node(host='1.1.1.1', port=1000)])
print(config.nodes[0].host)
# >>> '1.1.1.1'

Features

Loading from string/StringIO/etc

from setconfig import load_config_stream

config = load_config_stream('done: true')

Multiple config files, full sample here

config = load_config('config.base.yaml', 'config.dev.yaml', 'config.feature-x.yaml', into=Config)

Configs are processed in the order they are passed to load_config (from left to right), where last overrides the previous ones

Value overriding, full sample here

config = load_config('config.yaml', into=Config, override={'timeout': 10})

Extra parsing params

config = load_config('config.yaml', into=Config, check_types=False)

Where check_types is a dacite flag, see https://github.com/konradhalas/dacite#type-checking

Tuple-friendly

There is known issue in dacite that raises type error when loading list into tuple. Pull request with fix is ready since May 2023, but not merged yet... That's why setconfig has its own fix

FAQ

Why only YAML?

There should be one-- and preferably only one --obvious way to do it

(c) Zen of Python

I want to use structure from X package

Create an issue or PR :)

More

PyPI: https://pypi.org/project/setconfig

Repository: https://github.com/abionics/setconfig

Developer: Alex Ermolaev (Abionics)

Email: abionics.dev@gmail.com

License: MIT (see LICENSE.txt)

Keywords

config yaml dataclass pydantic init

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts