We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Hi.
The documentation is not clear and the example is not functional.
How set a signal receiver without having to handle the "introspection" ?
I'd like to have def cb_on_tested(testid) called :
def cb_on_tested(testid)
#!/usr/bin/env python3 # author: d.koch # coding: utf-8 # naming: pep-0008 # typing: pep-0484 # docstring: pep-0257 # indentation: tabulation """ dbus_interface.py DBus interface """ # --- IMPORT --- # Standard libraries (installed with python) import sys sys.path.insert(0, "..") import logging import os # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # External libraries (installed with pip, conda, setup.py, ...) import asyncio import json # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . # Included libraries (this module, local files) # https://pypi.org/project/dbus-next/ try: from dbus_next import BusType from dbus_next import Message from dbus_next import MessageType from dbus_next import Variant from dbus_next.aio import MessageBus #from dbus_next.aio.message_bus import MessageBus from dbus_next.service import ServiceInterface from dbus_next.service import dbus_property from dbus_next.service import method from dbus_next.service import signal except ImportError: print(f'dbus-next not installed') # --- GLOBAL --- logging.basicConfig(level = logging.DEBUG) G_LOG = logging.getLogger("dbus_interface") G_LOG.info(f'Starting...') # Local settings (might be present in other files yet with different values) # https://develop.kde.org/docs/features/d-bus/introduction_to_dbus/ # https://telepathy.freedesktop.org/doc/book/sect.basics.dbus.html # https://dbus-cxx.github.io/local-and-remote.html # https://dbus.freedesktop.org/doc/dbus-api-design.html # DBus topology : # Service : org.me.project ("well-known bus name", or :1.xx) # Object : /zb/... (object path) # Interface : org.freedesktop.DBus.Introspectable # Method : Introspect (return a XML) # Interface : org.me.project.test # Methods : # Properties (R/W) : # Signals : G_BUS_TEST = 'org.me.project' G_PATH_TEST = '/test' G_INTERFACE_TEST = 'org.me.project.test' G_SIGNAL_TESTED = 'Tested' # --- CLASS --- # https://python-dbus-next.readthedocs.io/en/latest/type-system/index.html class TestInterface(ServiceInterface): """ Test interface Receive : Signals Tested Checked signal Send : Signals Tested : {testid} Signal to be checked """ def __init__(self, i_oStrName): super().__init__(i_oStrName) if True: def cb_on_tested(testid): # NEVER CALLED <---------------- G_LOG.info(f'Received message (1): {testid}') def on_tested(self, cb_on_tested): pass @signal(name = G_SIGNAL_TESTED) def signal_tested(self) -> 's': return '00000001' # - - - MAIN - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - async def main(): l_eBusType = BusType.SESSION l_oBus = await MessageBus(bus_type = l_eBusType).connect() #negotiate_unix_fd = True l_oTestInterface = TestInterface(G_INTERFACE_TEST) l_oBus.export(G_PATH_TEST, l_oTestInterface) # Work on BusType.SESSION await l_oBus.request_name(G_BUS_TEST) print(f'Waiting...') # FIRST TRY if True: l_oTestInterface.signal_tested() # SECOND TRY if True: def new_cb_on_tested(testid): G_LOG.info(f'Received message (2): {testid}') l_oTestInterface.on_tested(new_cb_on_tested) l_oTestInterface.signal_tested() # THIRD TRY if False: l_oIntrospect = await l_oBus.introspect(G_INTERFACE_TEST, G_PATH_TEST) l_oProxyObject = l_oBus.get_proxy_object(G_INTERFACE_TEST, G_PATH_TEST, l_oIntrospect) l_oInterface = l_oProxyObject.get_interface(G_INTERFACE_TEST) await l_oBus.wait_for_disconnect() # --- MAIN --- def __main__(): """ Basic self test (debugging) """ l_oLoop = asyncio.get_event_loop() l_oLoop.set_debug(1) if True: try: l_oLoop.run_until_complete(main()) #asyncio.run(main()) except KeyboardInterrupt: print(f'') G_LOG.info(f'Process interrupted...') pass finally: l_oLoop.stop() l_oLoop.close() else: pass if __name__ == "__main__": """ Routine selector """ __main__()
Regards
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Hi.
The documentation is not clear and the example is not functional.
How set a signal receiver without having to handle the "introspection" ?
I'd like to have
def cb_on_tested(testid)
called :Regards
The text was updated successfully, but these errors were encountered: