Skip to content

Comment not parsed when value is booleanΒ #119

Closed

Description

@lmmx

I've just tried to set up comment parsing in a TOML config file to see if I could use it for documentation, and it seems like it'll work except for when the configured value is a boolean.

When I drop into a debugger and look at the attributes of the parsed value:

(Pdb) p default_toml[section]
{'CONVERT_TO_PDF': False}
(Pdb) x = default_toml[section]
(Pdb) y = x["CONVERT_TO_PDF"]

and then tab complete to show the attributes, the dict x has a trivia attribute but the value y does not:

(Pdb) p y.
y.__abs__            y.__floor__          y.__invert__         y.__radd__           y.__rpow__           y.__trunc__
y.__add__            y.__floordiv__       y.__le__             y.__rand__           y.__rrshift__        y.__xor__
y.__and__            y.__format__         y.__lshift__         y.__rdivmod__        y.__rshift__         y.as_integer_ratio
y.__bool__           y.__ge__             y.__lt__             y.__reduce__         y.__rsub__           y.bit_length
y.__ceil__           y.__getattribute__   y.__mod__            y.__reduce_ex__      y.__rtruediv__       y.conjugate
y.__class__          y.__getnewargs__     y.__mul__            y.__repr__           y.__rxor__           y.denominator
y.__delattr__        y.__gt__             y.__ne__             y.__rfloordiv__      y.__setattr__        y.from_bytes
y.__dir__            y.__hash__           y.__neg__            y.__rlshift__        y.__sizeof__         y.imag
y.__divmod__         y.__index__          y.__new__            y.__rmod__           y.__str__            y.numerator
y.__doc__            y.__init__           y.__or__             y.__rmul__           y.__sub__            y.real
y.__eq__             y.__init_subclass__  y.__pos__            y.__ror__            y.__subclasshook__   y.to_bytes
y.__float__          y.__int__            y.__pow__            y.__round__          y.__truediv__
  • I checked in x.trivia.comment but there's nothing there
  • For other types of value (integer, float and string) comments are expected to be in the trivia.comment attribute

Is this a bug, or should I be looking for the comment in another place?

To minimally reproduce:

import tomlkit
d = tomlkit.loads("""
[foo]
bar = 1 # hello
baz = false # goodbye
""")
v1 = d["foo"]["bar"]
v2 = d["foo"]["baz"]
print(hasattr(v1, "trivia"))
print(getattr(v1.trivia, "comment"))
print(hasattr(v2, "trivia"))

⇣

True
# hello
False

Activity

  1. frostming commented on May 19, 2021

    @frostming
    Contributor

    Is this a bug, or should I be looking for the comment in another place?

    Yes, the boolean value is a real bool while others are tomlkit wrapped objects. This is intended as users may compare the value with boolean singletons with is

  2. zmievsa commented on Oct 31, 2021

    @zmievsa

    @frostming so is there any other way of getting the comment for it?

  3. frostming commented on Nov 1, 2021

    @frostming
    Contributor

    @Ovsyanka83

    v2 = d['foo'].value.item('baz')
    print(v2.trivia.comment)
  4. zmievsa commented on Nov 1, 2021

    @zmievsa

    @frostming thanks for the quick reply! Spent an hour trying to figure it out on my own but gave up. I think, the problem is the lack of documentation on the topic. I.e. ".value" was never mentioned in the README.md, and I haven't found any other documentation for tomlkit. I think, there should be a small section on manually extracting all information from tables that mentions how "value" actually has the "item" method.

    Also, there's the issue of Bool being not json-serializable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions