Skip to main content

Parser for ini files

Project description

ini_parser.py

This module is a utility that extends Python's built-in configparser module. It provides enhanced functionality for reading from and writing to INI files, including support for type conversion and default value interpolation.

function

It can get and set configuration information in ini format.

This library is an enhanced parser for INI configuration files that allows you to define type information and default values in advance. When a value is missing from the INI file, the parser automatically fills in the predefined default value. Additionally, string values in the INI file are automatically converted to the specified types (e.g., int, bool, List[str], etc.) based on the provided type definitions.

Usage

import ini_cfg_parser as ini
from typing import List

def get_ini_dict_val(section: str) -> ini.IniDict:
    return {
        section: {
            'lst_language': {'type': List[str], 'inf': ['English','Japanese','Russian','Korean']},
            'langage': {'type': int, 'inf': 0},
            'CygwinDirectory': {'type': str, 'inf': r'c:\uty\cygwin'},
            'ComPort': {'type': int, 'inf': 1},
            'lst_Parity': {'type': List[str], 'inf': ['even','odd','none','mark','space']},
            'parity': {'type': int, 'inf': 0},
            'DataBit': {'type': int, 'inf': 8},
            'StopBit': {'type': int, 'inf': 1},
        },
    }

encoding = "utf8"
ini_file = "config.ini"
section = 'setting1'
default_ini = get_ini_dict_val(section)
ini_parser = ini.IniParser(ini_file, default_ini, encoding)
lst_language = ini_parser.get(section, 'lst_language')
print(f"lst_language={lst_language},type={type(lst_language)}")
langage = ini_parser.get(section, 'langage')
print(f"langage={langage},type={type(langage)}")
print(f"langage setting={lst_language[langage]},type={type(lst_language[langage])}")
CygwinDirectory = ini_parser.get(section, 'CygwinDirectory')
print(f"CygwinDirectory={CygwinDirectory},type={type(CygwinDirectory)}")
ComPort = ini_parser.get(section, 'ComPort')
print(f"ComPort={ComPort},type={type(ComPort)}")
lst_Parity = ini_parser.get(section, 'lst_Parity')
print(f"lst_Parity={lst_Parity},type={type(lst_Parity)}")
parity = ini_parser.get(section, 'parity')
print(f"parity={parity},type={type(parity)}")
print(f"parity setting={lst_Parity[parity]},type={type(lst_Parity[parity])}")
DataBit = ini_parser.get(section, 'DataBit')
print(f"DataBit={DataBit},type={type(DataBit)}")
StopBit = ini_parser.get(section, 'StopBit')
print(f"StopBit={StopBit},type={type(StopBit)}")

If the ini file does not exist, the following config.ini will be created.

# config.ini
[DEFAULT]
lst_language = English,Japanese,Russian,Korean
langage = 0
cygwindirectory = c:\uty\cygwin
comport = 1
lst_parity = even,odd,none,mark,space
parity = 0
databit = 8
stopbit = 1

[setting1]
lst_language = English,Japanese,Russian,Korean
langage = 0
cygwindirectory = c:\uty\cygwin
comport = 1
lst_parity = even,odd,none,mark,space
parity = 0
databit = 8
stopbit = 1

The result of executing the above script.

lst_language=['English', 'Japanese', 'Russian', 'Korean'],type=<class 'list'>
langage=0,type=<class 'int'>
langage setting=English,type=<class 'str'>
CygwinDirectory=c:\uty\cygwin,type=<class 'str'>
ComPort=1,type=<class 'int'>
lst_Parity=['even', 'odd', 'none', 'mark', 'space'],type=<class 'list'>
parity=0,type=<class 'int'>
parity setting=even,type=<class 'str'>
DataBit=8,type=<class 'int'>
StopBit=1,type=<class 'int'>

overview

  • The ini_cfg_parser instance is initialized with the parameter get_ini_dict_val of type IniDict.
  • The get_ini_dict_val parameter is a user-defined dictionary structure that specifies default values ​​and their expected types.
# @param[in]    ini_path        : Path information for the ini file.(type=str)
# @param[in]    get_ini_dict_val: This parameter is a user-defined dictionary structure that specifies default values ​​and their expected types.(type=IniDict)
# @param[in]    encoding        : The type of character code encoding.(type=str)
ini_parser = ini.IniParser(ini_path=ini_file, get_ini_dict_val=default_ini, encoding=encoding)

Section structure

IniDict = Dict[str, Dict[str, IniItem]]

Type of each ini item

class IniItem(TypedDict):
    type: IniType
    inf: IniValue

Defining a type alias

IniType = Union[Type[str], Type[int], Type[float], Type[bool], Type[List[str]], Type[List[int]], Type[List[float]], Type[List[bool]]]
IniValue = Union[str, int, float, bool, List[str], List[int], List[float], List[bool]]

When an error occurs in this library, the function die_print() is used to display a message.

Operation Mode: There are four operation modes.

  • nSysExit: Executes sys.exit(1) to terminate the script.
  • nTkInter: Uses tkinter to display a message in a dialog. Then executes sys.exit(1) to terminate the script.
  • nException: Raises exception IniParserError. The error message is passed as the error information of the exception.
  • nTkInterException: Uses tkinter to display a message in a dialog and then raises the exception IniParserError.

Setting the Mode: Use set_die_mode() to set the mode.

How to set it up:

ini.IniParser.set_die_mode(ini.DieMode.nSysExit)

license

MIT License

author

pukkunk

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ini_cfg_parser-0.1.6.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ini_cfg_parser-0.1.6-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file ini_cfg_parser-0.1.6.tar.gz.

File metadata

  • Download URL: ini_cfg_parser-0.1.6.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for ini_cfg_parser-0.1.6.tar.gz
Algorithm Hash digest
SHA256 9bb0d295742d21ca1bc3e064203d4ea5cddefd6a5472cf8bf8b2c2e8679e544b
MD5 6503a390f9e226607e4555885b394610
BLAKE2b-256 ec8a9c621637ea303f0a96f2077e0800901b76aa2e4e874b2e144082e3c30b65

See more details on using hashes here.

File details

Details for the file ini_cfg_parser-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: ini_cfg_parser-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for ini_cfg_parser-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 575b97b10addc422c3d029c0bccc30539dba8dfef722b358948bce0ba5982ee8
MD5 ebd62520cc5a11423f4efa781c0027d3
BLAKE2b-256 9dbd20e86eccbb698a84a4673ba02c5fc7c1d604f5ba79417473e309d94e832b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page