Commit f35440fb authored by Devaev Maxim's avatar Devaev Maxim

First prototype

parents
import sys
import os
import dbus
import dbus.service
import dbus.glib
import gobject
import settingsd.config
if __name__ == "__main__" :
# future config init here
bus_name = dbus.service.BusName(settingsd.config.GlobalConfig["service_name"], bus = dbus.SessionBus())
main_parent_class = type("MainParent", (object,), {})
setattr(main_parent_class, "busName", lambda self : bus_name)
main_parent = main_parent_class()
sys.path.append("plugins")
services_list = []
for module_name in [ item[:-3] for item in os.listdir("plugins") if item.endswith(".py") ] :
services_list.append(__import__(module_name, globals(), locals(), [""]).Service(main_parent))
services_list[-1].initService()
print "Initialized \"%s\"" % (module_name)
main_loop = gobject.MainLoop()
try :
main_loop.run()
except KeyboardInterrupt :
for services_list_item in services_list :
services_list_item.closeService()
print "Closed \"%s\"" % (module_name)
main_loop.quit()
import sys
sys.path.append("..") # path hook
import settingsd.service
class Hello(settingsd.service.NativeObject) :
@settingsd.service.nativeMethod("test")
def hello(self) :
return "Hello, World!"
@settingsd.service.nativeMethod("test")
def echo(self, text) :
return text
@settingsd.service.customMethod("org.liksys.settingsd")
def dump(self) :
return str(self)
class Service(settingsd.service.Service) :
def initService(self) :
self.addObject(Hello("hello", self))
def closeService(self) :
pass
GlobalConfig = {
"service_name" : "org.etersoft.settingsd",
"service_path" : "/org/etersoft/settingsd"
}
import dbus
import dbus.service
import dbus.glib
import abc
import config
class Service(object) :
__metaclass__ = abc.ABCMeta
def __init__(self, parent) :
object.__init__(self)
self.__parent = parent
self.__objects_list = []
@abc.abstractmethod
def initService(self) :
pass
@abc.abstractmethod
def closeService(self) :
pass
def addObject(self, object) :
self.__objects_list.append(object)
def objectsList(self) :
return self.__objects_list
def parent(self) :
return self.__parent
def busName(self) :
return self.__parent.busName()
class CustomObject(dbus.service.Object) :
def __init__(self, object_path, parent) :
dbus.service.Object.__init__(self, parent.busName(), object_path)
self.__object_path = object_path
self.__parent = parent
def parent(self) :
return self.__parent
def busName(self) :
return self.__parent.busName()
def objectPath(self) :
return self.__object_path
class NativeObject(CustomObject) :
def __init__(self, object_path, parent) :
CustomObject.__init__(self, "%s/%s" % (config.GlobalConfig["service_path"], object_path), parent)
def customMethod(interface_name) :
def decorator(function) :
return dbus.service.method(interface_name)(function)
return decorator
def nativeMethod(interface_name) :
def decorator(function) :
return customMethod("%s.%s" % (config.GlobalConfig["service_name"], interface_name))(function)
return decorator
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment