@@ -24,6 +24,10 @@ def _handle_extended_enum_values(v):
24
24
in the Enum class.
25
25
Otherwise returns v unchanged.
26
26
"""
27
+ if isinstance(v, list):
28
+ return [_handle_extended_enum_values(_item) for _item in v]
29
+ if isinstance(v, dict):
30
+ return {_key: _handle_extended_enum_values(_value) for _key, _value in v.items()}
27
31
if isinstance(v, Enum):
28
32
# v may be an Enum value which itself is an Enum value!
29
33
# E.g. QNetworkRequest.Attribute(QgsNetworkRequestParameters.RequestAttributes.AttributeInitiatorClass)
@@ -56,3 +60,47 @@ def install_extended_enum_wrapper(f):
56
60
"""
57
61
return _extended_enum_wrapper(f)
58
62
63
+
64
+ def _convert_enum_values_to_int(v):
65
+ """
66
+ If v is an Enum, returns an integer representation of its value wrapped
67
+ in the Enum class.
68
+ Otherwise returns v unchanged.
69
+ """
70
+ if isinstance(v, list):
71
+ return [_convert_enum_values_to_int(_item) for _item in v]
72
+ if isinstance(v, dict):
73
+ return {_key: _convert_enum_values_to_int(_value) for _key, _value in v.items()}
74
+ if isinstance(v, Enum):
75
+ # v may be an Enum value which itself is an Enum value!
76
+ # E.g. QNetworkRequest.Attribute(QgsNetworkRequestParameters.RequestAttributes.AttributeInitiatorClass)
77
+ # in this case v is an Enum of the class QNetworkRequest.Attribute, while v.value is an Enum of the
78
+ # class QgsNetworkRequestParameters.RequestAttributes. For this to work, we need to extract the integer
79
+ # value from QgsNetworkRequestParameters.RequestAttributes.AttributeInitiatorClass and then convert it
80
+ # to a QNetworkRequest.Attribute enum value!
81
+ if isinstance(v.value, Enum):
82
+ return int(v.value.value)
83
+ return int(v.value)
84
+ return v
85
+
86
+
87
+ def _enum_to_int_wrapper(method):
88
+ """
89
+ Calls a function, first converting all passed Enum arguments to integer
90
+ values.
91
+ """
92
+ @functools.wraps(method)
93
+ def wrapped(*args, **kwargs):
94
+ parsed_args = [_convert_enum_values_to_int(arg) for arg in args]
95
+ parsed_kwargs = {k: _convert_enum_values_to_int(v) for k, v in kwargs.items()}
96
+ return method(*parsed_args, **parsed_kwargs)
97
+
98
+ return wrapped
99
+
100
+
101
+ def install_enum_to_int_wrapper(f):
102
+ """
103
+ Installs a wrapper on a function so that all passed Enum arguments are converted to integer values.
104
+ """
105
+ return _enum_to_int_wrapper(f)
106
+
0 commit comments