fix(configfile): fix bugs, optimize parser, add support for normal an inline comments and add unit tests#198
Open
gmmcosta15 wants to merge 7 commits intodevfrom
Open
fix(configfile): fix bugs, optimize parser, add support for normal an inline comments and add unit tests#198gmmcosta15 wants to merge 7 commits intodevfrom
gmmcosta15 wants to merge 7 commits intodevfrom
Conversation
… inline comments and add unit tests loadWidget: fix bug that would result in a crash
HugoCLSC
previously requested changes
Apr 2, 2026
Member
HugoCLSC
left a comment
There was a problem hiding this comment.
The implementation for this should follow a singleton pattern so that there is only one instance of BlocksScreenConfig and its respective ConfigParser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This pull request introduces:
- Fix data-corruption bug in
_parse_file: separator normalisation was replacing every:and=in a line instead of just the first one, silently mangling URLs, tokens, and sectionnames with colons
- Fix
get(),getint(),getfloat(),getboolean()default-handling: missing options with no default now raiseNoOptionErrorinstead of returningSentinel.MISSING;get()nolonger passes the fallback through the parser
- Fix
add_option(value=None)writing the literal string"None"instead of a value-less option line- Convert all logger calls to
%-style, addexc_info=Trueand file path tosave_configurationerror, add exception chaining (from e) throughout- Ignore regular and inline comments in configfile
- Enforce singleton pattern in
get_configparser(): only oneBlocksScreenConfigand oneConfigParserinstance exists for the application lifetime, using double-checked locking; addreset_configparser()for test isolation- Enforce
:as the sole stored separator:_RE_SEP_NORMALIZEaccepts both=and:from disk and normalises to:; all downstream code (_RE_OPTION,_find_option_line_index,ConfigParser(delimiters=...)) restricted to:only- Remove unused
check_file_on_pathimport; replace withPath.exists()on module-level path constants- Add 80 unit tests covering all of the above plus thread safety, view sharing, and factory behaviour
Motivation
The
configfilemodule had several subtle parsing bugs and inconsistent behaviors that could corrupt configuration values (e.g., URLs, tokens, or section names) and return incorrectresults in some edge cases.
This PR stabilizes the module by fixing multiple correctness issues, tightening error handling, and improving logging. The singleton refactor ensures all consumers share one parsed state so
that
update_option/save_configurationmutations are immediately visible everywhere without a reload. The separator enforcement removes misleading redundancy —=is accepted on readbut normalised before storage, so no downstream code needs to handle it.
To prevent regressions and make future changes safer, a comprehensive unit test suite (80 tests) was added, covering parsing behaviour, comment handling, deduplication, all read methods,
view sharing, add/update/save lifecycle, factory and singleton behaviour, RLock reentrancy, and thread safety.
Tests
tests/util/test_configfile_unit.py: 80 unit tests. Covers parsing, comment handling, deduplication, all read methods,get_sectionview sharing, add/update/save lifecycle,get_configparsersingleton factory,reset_configparser, RLock reentrancy, thread safety, and stale-view-after-reload.