On Fri, Jan 26, 2024 at 06:40:23 -0800, Andrea Bolognani wrote: > On Fri, Jan 26, 2024 at 09:33:13AM +0100, Peter Krempa wrote: > > On Thu, Jan 25, 2024 at 09:47:11 -0800, Andrea Bolognani wrote: > > > On Tue, Jan 16, 2024 at 05:12:41PM +0100, Peter Krempa wrote: > > > > +def validate_qmp_schema_check_keys(entry, mandatory, optional): [...] > > > > + for k, t in optional: > > > > + if k in keys: > > > > + keys.discard(k) > > > > + > > > > + if t is not None: > > > > + if not isinstance(entry[k], t): > > > > + raise qmpSchemaException("key '%s' is not of the expected type '%s' in schema '%s'" % (k, t, entry)) > > > > > > This doesn't cover the case where the value for the key is supposed > > > to be JSON null. You can either change this to something like > > > > > > if ((t is not None and not isinstance(entry[k], t)) or > > > (t is None and entry[k] is not None)): > > > raise qmpSchemaException(...) > > > > > > or, more simply, drop the check on t being None... > > > > > > > +def validate_qmp_schema(schemalist): > > > > + for entry in schemalist: > > > > + if not isinstance(entry, dict): > > > > + raise qmpSchemaException("schema entry '%s' is not a JSON Object (dict)" % (entry)) > > > > + > > > > + match entry.get('meta-type', None): > > > > + case 'object': > > > > + for m in entry.get('members', []): > > > > + validate_qmp_schema_check_keys(m, > > > > + mandatory=[('name', str), > > > > + ('type', str)], > > > > + optional=[('default', None), > > > > > > ... and change the second member of the tuple to type(None) here.a I liked this version in the end. > > > > > > > def process_one(filename, args): > > > > try: > > > > conv = qemu_replies_load(filename) > > > > > > > > modify_replies(conv) > > > > _______________________________________________ Devel mailing list -- devel@xxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx