| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| Expand Up | @@ -18,7 +18,8 @@ | |
| delimiters=('=', ':'), comment_prefixes=('#', ';'), | ||
| inline_comment_prefixes=None, strict=True, | ||
| empty_lines_in_values=True, default_section='DEFAULT', | ||
| interpolation=<unset>, converters=<unset>): | ||
| interpolation=<unset>, converters=<unset>, | ||
| allow_unnamed_section=False): | ||
|
|
||
| Create the parser. When `defaults` is given, it is initialized into the | ||
| dictionary or intrinsic defaults. The keys must be strings, the values | ||
| Expand Down Expand Up | @@ -68,6 +69,12 @@ | |
| converter gets its corresponding get*() method on the parser object and | ||
| section proxies. | ||
|
|
||
| When `allow_unnamed_section` is True (default: False), options | ||
| without section are accepted: the section for this is | ||
|
Comment thread
Copy link
Copy Markdown
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Qualityoptions without a section?
Sorry, something went wrong.
All reactions
|
||
| ``configparser.UNNAMED_SECTION``. In the file, they are placed before | ||
|
Comment thread
Copy link
Copy Markdown
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Qualityconfigparser.TOP_LEVEL?
Sorry, something went wrong.
All reactions
|
||
| the first explicit section header. This also allows reading and writing | ||
| files that don't contain any explicit section headers. | ||
|
|
||
| sections() | ||
| Return all the configuration section names, sans DEFAULT. | ||
|
|
||
| Expand Down Expand Up | @@ -156,7 +163,7 @@ | |
| "ConfigParser", "RawConfigParser", | ||
| "Interpolation", "BasicInterpolation", "ExtendedInterpolation", | ||
| "LegacyInterpolation", "SectionProxy", "ConverterMapping", | ||
| "DEFAULTSECT", "MAX_INTERPOLATION_DEPTH") | ||
| "DEFAULTSECT", "MAX_INTERPOLATION_DEPTH", "TOP_LEVEL") | ||
|
|
||
| _default_dict = dict | ||
| DEFAULTSECT = "DEFAULT" | ||
| Expand Down Expand Up | @@ -323,6 +330,20 @@ def __init__(self, filename, lineno, line): | |
| self.args = (filename, lineno, line) | ||
|
|
||
|
|
||
| class _UnnamedSection: | ||
|
|
||
| def __repr__(self): | ||
| return "<TOP_LEVEL>" | ||
|
|
||
| def __eq__(self, other): | ||
| return repr(self) == repr(other) | ||
|
Comment thread
Copy link
Copy Markdown
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityWhy did __eq__ get implemented? It makes more sense to me to keep the default inherited implementation. Doesn’t the class only get instantiated once anyway? Won’t this make a valid section headed [<TOP_LEVEL>] match the headerless section in some cases?
Sorry, something went wrong.
All reactions
|
||
|
|
||
| def __hash__(self): | ||
| return hash(repr(self)) | ||
|
|
||
| TOP_LEVEL = _UnnamedSection() | ||
|
|
||
|
|
||
| # Used in parser getters to indicate the default behaviour when a specific | ||
| # option is not found it to raise an exception. Created to enable `None` as | ||
| # a valid fallback value. | ||
| Expand Down Expand Up | @@ -902,7 +923,8 @@ def write(self, fp, space_around_delimiters=True): | |
|
|
||
| def _write_section(self, fp, section_name, section_items, delimiter): | ||
| """Write a single section to the specified `fp`.""" | ||
| fp.write("[{}]\n".format(section_name)) | ||
| if section_name is not TOP_LEVEL: | ||
| fp.write(f"[{section_name}]\n") | ||
| for key, value in section_items: | ||
| value = self._interpolation.before_write(self, section_name, key, | ||
| value) | ||
| Expand Down Expand Up | @@ -1038,6 +1060,10 @@ def _read(self, fp, fpname): | |
| cursect[optname].append(value) | ||
| # a section header or option header? | ||
| else: | ||
| if self.default_section is TOP_LEVEL and cursect is None: | ||
| sectname = TOP_LEVEL | ||
| cursect = self._defaults | ||
|
|
||
|
Comment thread
pslacerda marked this conversation as resolved.
|
||
| indent_level = cur_indent_level | ||
| # is it a section header? | ||
| mo = self.SECTCRE.match(value) | ||
| Expand All | @@ -1058,7 +1084,7 @@ def _read(self, fp, fpname): | |
| elements_added.add(sectname) | ||
| # So sections can't start with a continuation line | ||
| optname = None | ||
| # no section header in the file? | ||
| # no section header? | ||
| elif cursect is None: | ||
| raise MissingSectionHeaderError(fpname, lineno, line) | ||
| # an option line? | ||
|
Comment thread
pslacerda marked this conversation as resolved.
|
||
| Expand Down Expand Up | @@ -1088,6 +1114,7 @@ def _read(self, fp, fpname): | |
| # raised at the end of the file and will contain a | ||
| # list of all bogus lines | ||
| e = self._handle_error(e, fpname, lineno, line) | ||
|
|
||
| self._join_multiline_values() | ||
| # if any parsing errors occurred, raise an exception | ||
| if e: | ||
| Expand Down | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| :class:`configparser.ConfigParser` now accepts unnamed sections before named | ||
| ones, if configured to do so. | ||
|
Comment thread
Copy link
Copy Markdown
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality“accepts an unnamed section before named ones” might be clearer
Sorry, something went wrong.
All reactions
|
||
|
|
||
| Contributed by Pedro Sousa Lacerda and Christian Siefkes. | ||
| Back | FazBrowse Home | New Git URL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Qualityallow_unnamed_section not implemented
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityThis seems ok.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.