|
4 | 4 |
|
5 | 5 | from xml.etree import ElementTree |
6 | 6 |
|
| 7 | +from pydbus.generic import signal |
| 8 | + |
7 | 9 |
|
8 | 10 | PROPERTY_EMITS_SIGNAL = "org.freedesktop.DBus.Property.EmitsChangedSignal" |
9 | 11 |
|
@@ -145,7 +147,7 @@ def valid_member(member): |
145 | 147 | """Only select members with the correct type and name.""" |
146 | 148 | if isinstance(member, property): |
147 | 149 | member = member.fget |
148 | | - elif not ismethod(member): |
| 150 | + elif not ismethod(member) and not isinstance(member, signal): |
149 | 151 | return False |
150 | 152 | return member.__name__[0].isupper() |
151 | 153 |
|
@@ -186,6 +188,17 @@ def valid_member(member): |
186 | 188 | entry, "annotation", |
187 | 189 | {"name": PROPERTY_EMITS_SIGNAL, "value": "true"}) |
188 | 190 | attributes["access"] = "readwrite" |
| 191 | + elif isinstance(value, signal): |
| 192 | + if hasattr(value, "arguments"): |
| 193 | + arguments = value.arguments |
| 194 | + elif require_strong_typing: |
| 195 | + raise ValueError( |
| 196 | + "No argument definitions for signal " |
| 197 | + "'{}'".format(value.__name__)) |
| 198 | + entry = ElementTree.SubElement(value, "signal") |
| 199 | + for arg, arg_type in arguments: |
| 200 | + ElementTree.SubElement( |
| 201 | + entry, "arg", {"name": arg, "type": arg_type}) |
189 | 202 | elif ismethod(value): |
190 | 203 | arg_types, ret_type = verify_arguments(value) |
191 | 204 | entry = ElementTree.SubElement(get_interface(value), "method") |
|
0 commit comments