Custom Query (121 matches)
Results (40 - 42 of 121)
| Ticket | Resolution | Summary | Owner | Reporter |
|---|---|---|---|---|
| #48 | wontfix | yaml.load does not call __init__ of objects | xi | aymanbahrain@… |
| Description |
I noticed that my init code is not called when an object is created via yaml.load. Try this one: In this example, fy.secret will raise an error about secret not an attribute of fy object. import yaml
class Field:
def __init__(self):
print 'init called'
self.secret = 'password'
f = Field()
print f.secret
fy = yaml.load(file('fld.yaml', 'r'))
print fy.hide_value
print fy.secret
have fld.yaml contain:
!!python/object:__main__.Field
hide_value: true
|
|||
| #49 | fixed | yaml confused by python float repr() | xi | cems a.t. lanl.gov |
| Description |
platform: intel macintosh, python2.5 , latest yaml. Description: depending on a floats value dump() will output a different representation format. Sometimes it uses a tag format and others a standard float notation depending on the value. example: In [160]:dat ="""
float1: 1.0E-8
float2: 1.0E-9
"""
In [165]:t = yaml.load(dat)
In [166]:t
Out[166]:{'float1': 1e-08, 'float2': 1.0000000000000001e-09}
In [167]:yaml.dump(t)
Out[167]:"{float1: !!float '1e-08', float2: 1.0000000000000001e-09}\n"
notice the !!float tag followed by a string. regression: this appears to be an attempt to compensate for fact that python's string representation of some float values having different formats: that is in python2.5 the repr() of 1.0e-8 is actually 1e-08 (it supresses the decimal point). Since YAML does not recognize floats without the decimal point the dump command adds the float tag. However while the repr() of 1.0E-9 is 1.0000000000000001e-09. which has the decimal point making it legal YAML and it dump avoids the float tag It seems to me that a more consistent and desirable result would be obtained if dump were to output 1e-8 as 1.0e-8 rather than using the float if one is parsing a yaml file in another language the tagged format of the float can't be read easily. (e.g. consider reading this in fortran or perl without using a yaml lib to read the file.) |
|||
| #50 | fixed | ScannerError TypeError | xi | edemaine@… |
| Description |
I encountered a small bug in error reporting with the libyaml interface: ## A "real-world" example: mistaken input HTML instead of YAML.
>>> x='<HTML>\n <HEAD>\n <STYLE>\n TABLE { border-collapse: collapse; }\n </STYLE>\n </HEAD>\n</HTML>'
>>> yaml.load(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/__init__.py", line 66, in load
return loader.get_data()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/constructor.py", line 38, in get_data
return self.construct_document(self.get_node())
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/composer.py", line 27, in get_node
return self.compose_document()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/composer.py", line 37, in compose_document
self.get_event()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/parser.py", line 115, in get_event
self.current_event = self.state()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/parser.py", line 186, in parse_document_end
token = self.peek_token()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/scanner.py", line 128, in peek_token
self.fetch_more_tokens()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/scanner.py", line 220, in fetch_more_tokens
return self.fetch_value()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/scanner.py", line 579, in fetch_value
self.get_mark())
yaml.scanner.ScannerError: mapping values are not allowed here
in "<string>", line 4, column 30:
TABLE { border-collapse: collapse; }
^
## great error reporting
>>> yaml.load(x,yaml.CLoader) Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/__init__.py", line 66, in load
return loader.get_data()
File "/toc/home/edemaine/Packages/lib/python2.6/site-packages/yaml/constructor.py", line 38, in get_data
return self.construct_document(self.get_node())
File "_yaml.pyx", line 664, in _yaml.CParser.get_node
File "_yaml.pyx", line 669, in _yaml.CParser._compose_document
File "_yaml.pyx", line 848, in _yaml.CParser._parse_next_event
TypeError: exceptions must be strings, classes, or instances, not ScannerError
## not so useful--seems to be a bug
I didn't investigate why ScannerError is considered to be a class in the first case but not the second; perhaps _yaml defines its own ScannerError? type? Should probably just use yaml.scanner.ScannerError instead. |
|||
