On Fri, Feb 19, 2016 at 10:01:07AM -0700, Eric Blake wrote: > On 02/19/2016 09:47 AM, Daniel P. Berrange wrote: > > The qdict_flatten() method will take a dict whose elements are > > further nested dicts/lists and flatten them by concatenating > > keys. > > > > The qdict_crumple() method aims todo the reverse, taking a flat > > s/todo/to do/ > > > qdict, and turning it into a set of nested dicts/lists. It will > > apply nesting based on the key name, with a '.' indicating a > > new level in the hierarchy. If the keys in the nested structure > > are all numeric, it will create a list, otherwise it will create > > a dict. > > > > Interesting idea. I haven't closely reviewed the patch yet, but do have > a comment on the commit message: > > > > > If the key is intended to contain a literal '.', then it must > > be escaped as '..'. ie a flat dict > > Hmm. We forbid the use of '.' inside QAPI key names in most places, but > have an exception that downstream extensions use '.'. So, I guess the > only place you'd really use this is trying to target a > downstream-extension key name:
I originally put code into object_property_add() to forbid use of a '.' in a property name, but quickly found we have alot of such usage already :-( On a x86_64 default machine I get: Property sse4.1 on class qemu64-x86_64-cpu Property sse4.2 on class qemu64-x86_64-cpu Property pc.ram[*] on class container Property pc.ram[0] on class container Property pc.bios[*] on class container Property pc.bios[0] on class container Property pc.rom[*] on class container Property pc.rom[0] on class container Property fwcfg.dma[*] on class fw_cfg_io Property fwcfg.dma[0] on class fw_cfg_io Property pci.0 on class i440FX-pcihost Property isa.0 on class PIIX3 Property vga.vram[*] on class VGA Property vga.vram[0] on class VGA Property vga.mmio[*] on class container Property vga.mmio[0] on class container Property vga.rom[*] on class VGA Property vga.rom[0] on class VGA Property e1000.rom[*] on class e1000 Property e1000.rom[0] on class e1000 Property ide.0 on class piix3-ide Property ide.1 on class piix3-ide Now none of those are implementing the UserCreatable interface right now, so wouldn't be a problem for -object usage, but I felt if we allow '.' in property names for devices, we ought to make sure the code deals with it everything. So it seems forbiding '.' in property names won't fly :-( Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|