All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- README formatting of "stringify" section.
- Support for Python 3.9, 3.10, 3.11, and 3.12. The way
pathlib.Path
was being subclassed was causing issues in newer Python versions anddistutils.util.strtobool
has been removed in newer Python versions so a backported version is now being used.
-
Extra
toml
andyaml
dependencies have been updated.- The
toml
extra now installstomlkit
version0.7.2
on Python 3.6 and constrained to^0.12.2
on Python 3.7 and greater. Previously, it was constrained to^0.6.0
. - The
yaml
extra now installsruamel.yaml
constrained to^0.17.16
. Previously, it was constrained to^0.16.10
.
- The
-
Replaced deprecated use of
ruamel.yaml
methods in the YAML parser (via #28, thanks @JaWeRn).
- Deprecated
stringify()
method onConfigFile
. Usestr()
on theConfigFile
instead.
-
Python's built-in
in
keyword now works with a ConfigFile.Example:
config = ConfigFile('./pyproject.toml') 'tool.poetry' in config >>> True
- Depreciated
stringify()
in favor of just using the built-instr()
.
- Addresses issue #25 (INI parser isn't converting back to string).
-
ConfigFile
can now accept yaml and toml files as optional extra file types. As long as the extras (yaml
andtoml
) are installed, those file types can also be used. -
ConfigFile
can now be indexed into using an array notation to get, set, and delete keys. -
path
property toConfigFile
-
original_path
property toConfigFile
-
wild
optional argument tohas
onConfigFile
to check if the file has an occurrence of the key anywhere in the file.
-
BaseParser
from the public API. -
parser
optional argument from theConfigFile
constructor.
-
path
on theConfigFile
is now a property that can only be retrieved.contents
is now private but you can use.stringify()
instead to get the contents.parser
is now also private. -
restore_original
inConfigFile
now raises aFileNotFoundError
instead of anOSError
if the original file path does not exist. -
restore_original
's optional argument is now calledoriginal_path
rather thanoriginal_file_path
.
default
inConfigFile
'sget
method can now beNone
. Previously, it was defaulted to the valueNone
so there was no way of distinguishing between the default value and a user inputted value ofNone
.
-
toml
andpyyaml
are now optional extra dependencies. This allows you to not have to install them if you aren't using them. -
retrieve_all
inJsonParser
'sget
method is now calledget_all
for consistency. It isn't publicly available yet. The thought is to write a custom ini parser first that supports multiple of the same keys and subsections. This way you can have theget_all
,set_all
,delete_all
, etc. methods for all file type parsers. I would have to weight if that added complexity of not using the built-in configparser and roll our own for some added features is worth it or see if there are ways to work around it with configparser that are ideal.
- You can now specify a default and still coerce your return type. Previously, if you specified a default, there was no logic in that branch to coerce your return type as well.
-
default
optional parameter to theget()
method ofConfigFile
. The allows a default value to be fallen back to if the given key is missing. -
return_type
optional parameter toget()
method ofConfigFile
. This allows you to coerce the return type to one of your choosing by feeding it the return value.
-
Automatic type parsing is now off by default. This is because of the addition of the
return_type
optional parameter. After using the package more, I think the explicitness of specifying the type you're after or that you'd like to automatically parse the type to one of the basic types is more maintainable. However, I think the option to automatically parse or parse a whole section of values is still a useful one. -
The
parse_type
parameter toConfigFile
'sget()
method is now calledparse_types
.
- More type hints to
ConfigFile
andIniParser
. nested_lookup
dependency to help with modifying deeply nested structures (JSON + YAML)JsonParser
so you can now specify.json
files to be parsed.
- The original content of the passed in file is now called
content
instead ofcontents
. This is for consistency since the parsed version is calledparsed_content
.
- Support for using custom parsers with
ConfigFile
with theparser
optional argument. This was technically supported before, but it was not tested and found to not actually use the passed in parser once tested.
- The
reset()
method onConfigFile
is now calledrestore_original()
. The behavior is the same. This was done to better describe what exactly that method is doing. Since the file is not written back out with everyset()
ordelete()
and callingsave()
explicitly is required,reset()
may have been confused with resetting the changes you've made rather than deleting and restoring the original configuration file.
- Bumped down python version requirement to 3.6 and now test 3.6, 3.7, and 3.8 on CI.
- Support for retrieving entire sections as a
dict
withget()
.
-
reset()
andsave()
methods toConfigFile
. This allows you to reset your configuration file to an "original state," given the original config file path. However, say you have aconfig/config.json
file. Then it will automatically try to look forconfig/config.original.json
if no file path is specified. Thesave()
method should be called after your changes to the config file. It will write them back out. -
Raise test coverage to 93%.
_split_on_dot
is no longer in base parser (now in a utils file). Also, the default behavior is now to split on every dot and split on only the last dot if specified
-
ConfigFile
was trying to use_split_on_dot
, but it no longer inherited from base parser. -
TypeError
when setting the key/value pairs since configparser requires the option to be a string. The parser now just converts the value to a string if it is not one and then adds the key/value pair. It would still be parsed correctly when retrieving it.
isinstance
call forBaseParser
to be correctly used.
-
Abstract base parser as a contract for concrete file format parser implementations.
-
Exposed
ConfigFile
,BaseParser
, andParsingError
to the Public API. The base parser is exposed to allow future custom extensions of the config file and what it can parse by its users. -
has_section
andhas_key
is now changed to a singlehas
method which determines whether you're checking a section or key by the presence of a dot. -
IniParser
to support the ini format. It uses configparser internally, but it is only exposed through theConfigFile
object.
- Parsing of strings to their native values
- Initial Release