On Thu, Jul 30, 2020 at 01:51:10PM +0200, Markus Armbruster wrote: > Daniel P. Berrangé <berra...@redhat.com> writes: > > > modify them so that we can load the > > files straight into the python intepretor as code, and not parse > > them as data. I feel unhappy about treating data as code though. > > Stress on *can* load. Doesn't mean we should. > > Ancient prior art: Lisp programs routinely use s-expressions as > configuration file syntax. They don't load them as code, they read them > as data. > > With Python, it's ast.parse(), I think.
Yes, that could work > > struct: ImageInfoSpecificQCow2 > > data: > > compat: str > > "*data-file": str > > "*data-file-raw": bool > > "*lazy-refcounts": bool > > "*corrupt": bool > > refcount-bits: int > > "*encrypt": ImageInfoSpecificQCow2Encryption > > "*bitmaps": > > - Qcow2BitmapInfo > > compression-type: Qcow2CompressionType > > > > > > Then we could use a regular off the shelf YAML parser in python. > > > > The uglyiness with quotes is due to the use of "*". Slightly less ugly > > if we simply declare that quotes are always used, even where they're > > not strictly required. > > StrictYAML insists on quotes. I wouldn't suggest StrictYAML, just normal YAML is what pretty much everyone uses. If we came up with a different way to mark a field as optional instead of using the magic "*" then we wouldn't need to quote anything > I hate having to quote identifiers. There's a reason we don't write > > 'int' > 'main'('int', 'argc', 'char' *'argv'[]) > { > 'printf'("hello world\n"); > return 0; > } > > > struct: ImageInfoSpecificQCow2 > > data: > > "compat": "str" > > "*data-file": "str" > > "*data-file-raw": "bool" > > "*lazy-refcounts": "bool" > > "*corrupt": "bool" > > "refcount-bits": "int" > > "*encrypt": "ImageInfoSpecificQCow2Encryption" > > "*bitmaps": > > - "Qcow2BitmapInfo" > > "compression-type": "Qcow2CompressionType" > > > > With the use of "---" to denote the start of document, we have no trouble > > parsing our files which would actually be a concatenation of multiple > > documents. The python YAML library provides the easy yaml.load_all() > > method. > > Required reading on YAML: > https://www.arp242.net/yaml-config.html I don't think this is especially helpful to our evaluation. You can write such blog posts about pretty much any thing if you want to pick holes in a proposal. Certainly there's plenty of awful stuff you can write about JSON, and Python. > Some of the criticism there doesn't matter for our use case. Yeah, what matters is whether it can do the job we need in a way that is better than what we have today, and whether there are any further options to consider that might be viable alternatives. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|