Как получить отправителя (клиентский процесс) при запуске службы pydbus - PullRequest
0 голосов
/ 30 апреля 2020

Я пишу службу pydbus, я зарегистрировал интерфейс и предоставляю метод, подобный

import pydbus
from pydbus import SessionBus
from gi.repository import GLib

class Server():
    """
    <node>
      <interface name="org.freedesktop.testSrv">
        <method name="test">
          <arg direction="in" type="s" name="testarg"/>
         </method>
      </interface>
    </node>
   """
   def test(testarg):
       # here i want to access the sender id
       print(testarg)


bus = SessionBus()
bus.publish("org.freedesktop.testSrv", Server())
loop = GLib.MainLoop()
loop.run()

Когда клиент вызывает метод этой конечной точки, я хочу знать источник (отправителя), который просто выполняет функцию test ().

Я знаю, что dbus предоставляет это в запросе, например. например: .1.23, но я не нашел решения для доступа к этой информации с помощью python.

1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете включить MethodCallContext в сигнатуру вашего метода (это именованный аргумент, поэтому он должен быть dbus_context):

  def test(self, testarg, dbus_context):
    print(f'"{testarg}" received from {dbus_context.sender}')

Я понятия не имею, считается ли это деталью реализации pydbus или части API.

...