forked from Ponysearch/Ponysearch
Drop pytomlpp dependency for Python >= 3.11
Rely on tomllib for Python >= 3.11
This commit is contained in:
parent
dbed8da284
commit
ac430a9eaf
2 changed files with 34 additions and 9 deletions
|
@ -15,4 +15,4 @@ setproctitle==1.3.3
|
|||
redis==5.0.4
|
||||
markdown-it-py==3.0.0
|
||||
fasttext-predict==0.9.2.2
|
||||
pytomlpp==1.0.13
|
||||
pytomlpp==1.0.13; python_version < '3.11'
|
||||
|
|
|
@ -13,7 +13,18 @@ import copy
|
|||
import typing
|
||||
import logging
|
||||
import pathlib
|
||||
import pytomlpp as toml
|
||||
|
||||
try:
|
||||
import tomllib
|
||||
|
||||
pytomlpp = None
|
||||
USE_TOMLLIB = True
|
||||
except ImportError:
|
||||
import pytomlpp
|
||||
|
||||
tomllib = None
|
||||
USE_TOMLLIB = False
|
||||
|
||||
|
||||
__all__ = ['Config', 'UNSET', 'SchemaIssue']
|
||||
|
||||
|
@ -61,7 +72,7 @@ class Config:
|
|||
# init schema
|
||||
|
||||
log.debug("load schema file: %s", schema_file)
|
||||
cfg = cls(cfg_schema=toml.load(schema_file), deprecated=deprecated)
|
||||
cfg = cls(cfg_schema=toml_load(schema_file), deprecated=deprecated)
|
||||
if not cfg_file.exists():
|
||||
log.warning("missing config file: %s", cfg_file)
|
||||
return cfg
|
||||
|
@ -69,12 +80,7 @@ class Config:
|
|||
# load configuration
|
||||
|
||||
log.debug("load config file: %s", cfg_file)
|
||||
try:
|
||||
upd_cfg = toml.load(cfg_file)
|
||||
except toml.DecodeError as exc:
|
||||
msg = str(exc).replace('\t', '').replace('\n', ' ')
|
||||
log.error("%s: %s", cfg_file, msg)
|
||||
raise
|
||||
upd_cfg = toml_load(cfg_file)
|
||||
|
||||
is_valid, issue_list = cfg.validate(upd_cfg)
|
||||
for msg in issue_list:
|
||||
|
@ -176,6 +182,25 @@ class Config:
|
|||
return getattr(m, name)
|
||||
|
||||
|
||||
def toml_load(file_name):
|
||||
if USE_TOMLLIB:
|
||||
# Python >= 3.11
|
||||
try:
|
||||
with open(file_name, "rb") as f:
|
||||
return tomllib.load(f)
|
||||
except tomllib.TOMLDecodeError as exc:
|
||||
msg = str(exc).replace('\t', '').replace('\n', ' ')
|
||||
log.error("%s: %s", file_name, msg)
|
||||
raise
|
||||
# fallback to pytomlpp for Python < 3.11
|
||||
try:
|
||||
return pytomlpp.load(file_name)
|
||||
except pytomlpp.DecodeError as exc:
|
||||
msg = str(exc).replace('\t', '').replace('\n', ' ')
|
||||
log.error("%s: %s", file_name, msg)
|
||||
raise
|
||||
|
||||
|
||||
# working with dictionaries
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue