diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-03-01 11:10:19 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-03-02 10:55:10 +0100 |
commit | 2adbf6bbc9fb0bafb69d2ec291351821b7388aa1 (patch) | |
tree | fe257c1b5c252c3aa63ac5e1865e326f8c18aaba /tools | |
parent | 0107a91db2bd86145fbcd65091bb6dc622842adb (diff) |
Modernize helper tool dump_metaobject.py
Pick-to: 6.2
Change-Id: Id53d9eeb189a190a5b5e7535a9994c213c01fd3c
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/dump_metaobject.py | 59 | ||||
-rw-r--r-- | tools/metaobject_dump.py | 4 |
2 files changed, 37 insertions, 26 deletions
diff --git a/tools/dump_metaobject.py b/tools/dump_metaobject.py index 96acc189c..68b89364c 100644 --- a/tools/dump_metaobject.py +++ b/tools/dump_metaobject.py @@ -1,6 +1,6 @@ ############################################################################# ## -## Copyright (C) 2020 The Qt Company Ltd. +## Copyright (C) 2022 The Qt Company Ltd. ## Contact: https://www.qt.io/licensing/ ## ## This file is part of the Qt for Python project. @@ -39,7 +39,7 @@ """Helper functions for formatting information on QMetaObject""" -from PySide6.QtCore import (QMetaClassInfo, QMetaEnum, QMetaMethod, +from PySide6.QtCore import (QMetaEnum, QMetaMethod, QMetaProperty, QMetaObject, QObject) @@ -47,23 +47,31 @@ def _qbytearray_to_string(b): return bytes(b.data()).decode('utf-8') +def _format_metatype(meta_type): + return meta_type.id() if meta_type.isValid() else '<invalid>' + + def _dump_metaobject_helper(meta_obj, indent): - print('{}class {}:'.format(indent, meta_obj.className())) + meta_id = 0 + # FIXME: Otherwise crashes in Qt + if meta_obj.propertyOffset() < meta_obj.propertyCount(): + meta_id = _format_metatype(meta_obj.metaType()) + print(f'{indent}class {meta_obj.className()}/{meta_id}:') indent += ' ' info_offset = meta_obj.classInfoOffset() info_count = meta_obj.classInfoCount() if info_offset < info_count: - print('{}Info:'.format(indent)) + print(f'{indent}Info:') for i in range(info_offset, info_count): name = meta_obj.classInfo(i).name() value = meta_obj.classInfo(i).value() - print('{}{:4d} {}+{}'.format(indent, i, name, value)) + print(f'{indent}{i:4d} {name}+{value}') enumerator_offset = meta_obj.enumeratorOffset() enumerator_count = meta_obj.enumeratorCount() if enumerator_offset < enumerator_count: - print('{}Enumerators:'.format(indent)) + print(f'{indent}Enumerators:') for e in range(enumerator_offset, enumerator_count): meta_enum = meta_obj.enumerator(e) name = meta_enum.name() @@ -73,27 +81,27 @@ def _dump_metaobject_helper(meta_obj, indent): descr += ' flag' if meta_enum.isScoped(): descr += ' scoped' - for k in range(0, meta_enum.keyCount()): + for k in range(meta_enum.keyCount()): if k > 0: value_str += ', ' - value_str += '{} = {}'.format(meta_enum.key(k), - meta_enum.value(k)) - print('{}{:4d} {}{} ({})'.format(indent, e, name, descr, - value_str)) + key = meta_enum.key(k) + value = meta_enum.value(k) + value_str += f'{key} = {value}' + print(f'{indent}{e:4d} {name}{descr} ({value_str})') property_offset = meta_obj.propertyOffset() property_count = meta_obj.propertyCount() if property_offset < property_count: - print('{}Properties:'.format(indent)) + print(f'{indent}Properties:') for p in range(property_offset, property_count): meta_property = meta_obj.property(p) name = meta_property.name() desc = '' if meta_property.isConstant(): desc += ', constant' - if meta_property.isDesignable: + if meta_property.isDesignable(): desc += ', designable' - if meta_property.isFlagType: + if meta_property.isFlagType(): desc += ', flag' if meta_property.isEnumType(): desc += ', enum' @@ -101,13 +109,15 @@ def _dump_metaobject_helper(meta_obj, indent): desc += ', stored' if meta_property.isWritable(): desc += ', writable' - if meta_property.isResettable: + if meta_property.isResettable(): desc += ', resettable' if meta_property.hasNotifySignal(): - notify_name = meta_property.notifySignal().name() - desc += ', notify={}'.format(_qbytearray_to_string(notify_name)) - print('{}{:4d} {} {}{}'.format(indent, p, meta_property.typeName(), - name, desc)) + notify_name_b = meta_property.notifySignal().name() + notify_name = _qbytearray_to_string(notify_name_b) + desc += f', notify="{notify_name}"' + meta_id = _format_metatype(meta_property.metaType()) + type_name = meta_property.typeName() + print(f'{indent}{p:4d} {type_name}/{meta_id} "{name}"{desc}') method_offset = meta_obj.methodOffset() method_count = meta_obj.methodCount() @@ -129,17 +139,18 @@ def _dump_metaobject_helper(meta_obj, indent): typeString = ' (Slot)' elif type == QMetaMethod.Constructor: typeString = ' (Ct)' - desc = '{}{:4d} {}{} {}{}'.format(indent, m, access, - method.typeName(), signature, - typeString) + type_name = method.typeName() + desc = f'{indent}{m:4d} {access}{type_name} "{signature}"{typeString}' parameter_names = method.parameterNames() if parameter_names: parameter_types = method.parameterTypes() desc += ' Parameters:' for p, bname in enumerate(parameter_names): name = _qbytearray_to_string(bname) - type = _qbytearray_to_string(parameter_types[p]) - desc += ' {}: {}'.format(name if name else '<unnamed>', type) + type_name = _qbytearray_to_string(parameter_types[p]) + if not name: + name = '<unnamed>' + desc += f' "{name}": {type_name}' print(desc) diff --git a/tools/metaobject_dump.py b/tools/metaobject_dump.py index db61ccc4b..5495d89ae 100644 --- a/tools/metaobject_dump.py +++ b/tools/metaobject_dump.py @@ -1,6 +1,6 @@ ############################################################################# ## -## Copyright (C) 2020 The Qt Company Ltd. +## Copyright (C) 2022 The Qt Company Ltd. ## Contact: https://www.qt.io/licensing/ ## ## This file is part of the Qt for Python project. @@ -62,6 +62,6 @@ if __name__ == '__main__': type_name = sys.argv[1] type_instance = eval(type_name) if not type_instance: - print('Invalid type {}'.format(type_name)) + print(f'Invalid type {type_name}') sys.exit(1) dump_metaobject(type_instance.staticMetaObject) |