Commit cf1eb01e authored by Devaev Maxim's avatar Devaev Maxim

Moved requisites to service class, refactoring

parent b6d81a29
[service] [settingsd]
bus_type = session bus_type = session
log_level = 2 log_level = 2
......
...@@ -22,7 +22,10 @@ class Hello(settingsd.service.FunctionObject) : ...@@ -22,7 +22,10 @@ class Hello(settingsd.service.FunctionObject) :
settingsd.shared.Functions.Hello.removeFromConnection() settingsd.shared.Functions.Hello.removeFromConnection()
settingsd.shared.Functions.removeSharedObject("Hello") settingsd.shared.Functions.removeSharedObject("Hello")
class Requisites(settingsd.service.Requisites) : class Service(settingsd.service.Service) :
def initService(self) :
self.Functions.addSharedObject("Hello", Hello(self.serviceName()))
@classmethod @classmethod
def serviceName(self) : def serviceName(self) :
return "hello" return "hello"
...@@ -30,13 +33,6 @@ class Requisites(settingsd.service.Requisites) : ...@@ -30,13 +33,6 @@ class Requisites(settingsd.service.Requisites) :
@classmethod @classmethod
def options(self) : def options(self) :
return [ return [
("hello", "hello_string", "Hello, World!", str) (self.serviceName(), "hello_string", "Hello, World!", str)
] ]
class Service(settingsd.service.Service) :
def init(self) :
self.Functions.addSharedObject("Hello", Hello("hello"))
def close(self) :
pass
...@@ -48,7 +48,6 @@ class Application(object) : ...@@ -48,7 +48,6 @@ class Application(object) :
self.closeServices() self.closeServices()
self._main_loop.quit() self._main_loop.quit()
def loadModules(self) : def loadModules(self) :
sys.path.append(const.FUNCTIONS_DIR) sys.path.append(const.FUNCTIONS_DIR)
sys.path.append(const.ACTIONS_DIR) sys.path.append(const.ACTIONS_DIR)
...@@ -56,21 +55,17 @@ class Application(object) : ...@@ -56,21 +55,17 @@ class Application(object) :
for modules_path_list_item in (const.FUNCTIONS_DIR, const.ACTIONS_DIR) : for modules_path_list_item in (const.FUNCTIONS_DIR, const.ACTIONS_DIR) :
for module_name in [ item[:-3] for item in os.listdir(modules_path_list_item) if item.endswith(".py") ] : for module_name in [ item[:-3] for item in os.listdir(modules_path_list_item) if item.endswith(".py") ] :
self._modules_list.append(__import__(module_name, globals(), locals(), [""])) self._modules_list.append(__import__(module_name, globals(), locals(), [""]))
if self._modules_list[-1].Requisites.serviceName() != None : self._services_dict[self._modules_list[-1].Service.serviceName()] = {
self._services_dict[self._modules_list[-1].Requisites.serviceName()] = { "service_class" : self._modules_list[-1].Service,
"requisites" : self._modules_list[-1].Requisites, "service" : None
"service" : self._modules_list[-1].Service, }
"instance" : None
}
else :
print >> sys.stderr, "Anonymous modules does not acceped"
sys.path.remove(const.FUNCTIONS_DIR) sys.path.remove(const.FUNCTIONS_DIR)
sys.path.remove(const.ACTIONS_DIR) sys.path.remove(const.ACTIONS_DIR)
def loadConfigs(self) : def loadConfigs(self) :
for service_name in self._services_dict.keys() : for service_name in self._services_dict.keys() :
service_options_list = list(self._services_dict[service_name]["requisites"].options()) service_options_list = list(self._services_dict[service_name]["service_class"].options())
service_options_list.append((service_name, "enabled", "no", validators.validBool)) service_options_list.append((service_name, "enabled", "no", validators.validBool))
for service_options_list_item in service_options_list : for service_options_list_item in service_options_list :
...@@ -79,23 +74,23 @@ class Application(object) : ...@@ -79,23 +74,23 @@ class Application(object) :
config.loadConfig() config.loadConfig()
def initBus(self) : def initBus(self) :
if config.value("service", "bus_type") == const.SERVICE_BUS_TYPE_SYSTEM : if config.value(const.MY_NAME, "bus_type") == const.BUS_TYPE_SYSTEM :
bus = dbus.SystemBus() bus = dbus.SystemBus()
else : else :
bus = dbus.SessionBus() bus = dbus.SessionBus()
self._bus_name = dbus.service.BusName(config.value("service", "name"), bus = bus) self._bus_name = dbus.service.BusName(config.value(const.MY_NAME, "service_name"), bus = bus)
config.setValue("runtime", "bus_name", self._bus_name) config.setValue(const.RUNTIME_NAME, "bus_name", self._bus_name)
def initServices(self) : def initServices(self) :
for service_name in self._services_dict.keys() : for service_name in self._services_dict.keys() :
if config.value(service_name, "enabled") : if config.value(service_name, "enabled") :
self._services_dict[service_name]["instance"] = self._services_dict[service_name]["service"]() self._services_dict[service_name]["service"] = self._services_dict[service_name]["service_class"]()
self._services_dict[service_name]["instance"].init() self._services_dict[service_name]["service"].initService()
def closeServices(self) : def closeServices(self) :
for service_name in self._services_dict.keys() : for service_name in self._services_dict.keys() :
if self._services_dict[service_name]["instance"] != None : if self._services_dict[service_name]["service"] != None :
self._services_dict[service_name]["instance"].close() self._services_dict[service_name]["service"].closeService()
del self._services_dict[service_name]["instance"] del self._services_dict[service_name]["service"]
self._services_dict[service_name]["instance"] = None self._services_dict[service_name]["service"] = None
...@@ -11,10 +11,10 @@ import validators ...@@ -11,10 +11,10 @@ import validators
##### #####
ConfigDictObject = { ConfigDictObject = {
"service" : { const.MY_NAME : {
"name" : (const.DEFAULT_SERVICE_NAME, str), "service_name" : (const.DEFAULT_SERVICE_NAME, str),
"path" : (const.DEFAULT_SERVICE_PATH, str), "service_path" : (const.DEFAULT_SERVICE_PATH, str),
"bus_type" : (const.DEFAULT_SERVICE_BUS_TYPE, ( lambda arg : validators.validRange(arg, const.ALL_SERVICE_BUS_TYPES_LIST) )), "bus_type" : (const.DEFAULT_BUS_TYPE, ( lambda arg : validators.validRange(arg, const.ALL_BUS_TYPES_LIST) )),
"log_level" : (const.DEFAULT_LOG_LEVEL, ( lambda arg : validators.validRange(int(arg), const.ALL_LOG_LEVELS_LIST) )) "log_level" : (const.DEFAULT_LOG_LEVEL, ( lambda arg : validators.validRange(int(arg), const.ALL_LOG_LEVELS_LIST) ))
} }
} }
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
MY_NAME = "settingsd" MY_NAME = "settingsd"
RUNTIME_NAME = "runtime"
FUNCTIONS_DIR = "functions" FUNCTIONS_DIR = "functions"
ACTIONS_DIR = "actions" ACTIONS_DIR = "actions"
...@@ -9,11 +10,11 @@ CONFIGS_DIR = "configs" ...@@ -9,11 +10,11 @@ CONFIGS_DIR = "configs"
CONFIG_FILE_POSTFIX = ".conf" CONFIG_FILE_POSTFIX = ".conf"
SERVICE_BUS_TYPE_SYSTEM = "system" BUS_TYPE_SYSTEM = "system"
SERVICE_BUS_TYPE_SESSION = "session" BUS_TYPE_SESSION = "session"
ALL_SERVICE_BUS_TYPES_LIST = ( ALL_BUS_TYPES_LIST = (
SERVICE_BUS_TYPE_SYSTEM, BUS_TYPE_SYSTEM,
SERVICE_BUS_TYPE_SESSION BUS_TYPE_SESSION
) )
LOG_LEVEL_INFO = 0 LOG_LEVEL_INFO = 0
...@@ -28,6 +29,6 @@ ALL_LOG_LEVELS_LIST = ( ...@@ -28,6 +29,6 @@ ALL_LOG_LEVELS_LIST = (
DEFAULT_SERVICE_NAME = "org.etersoft.%s" % (MY_NAME) DEFAULT_SERVICE_NAME = "org.etersoft.%s" % (MY_NAME)
DEFAULT_SERVICE_PATH = "/org/etersoft/%s" % (MY_NAME) DEFAULT_SERVICE_PATH = "/org/etersoft/%s" % (MY_NAME)
DEFAULT_SERVICE_BUS_TYPE = SERVICE_BUS_TYPE_SYSTEM DEFAULT_BUS_TYPE = BUS_TYPE_SYSTEM
DEFAULT_LOG_LEVEL = LOG_LEVEL_INFO DEFAULT_LOG_LEVEL = LOG_LEVEL_INFO
...@@ -37,7 +37,7 @@ def message(message_type, message) : ...@@ -37,7 +37,7 @@ def message(message_type, message) :
else : else :
raise UnknownMessageType("Message type \"%d\" not in list %s" % (message_type, ALL_MESSAGES_LIST)) raise UnknownMessageType("Message type \"%d\" not in list %s" % (message_type, ALL_MESSAGES_LIST))
if log_level <= config.value("service", "log_level") : if log_level <= config.value(const.MY_NAME, "log_level") :
text_log_levels_list = ( text_log_levels_list = (
"%s [ Info ]:" % (const.MY_NAME), "%s [ Info ]:" % (const.MY_NAME),
"%s [ Details ]:" % (const.MY_NAME), "%s [ Details ]:" % (const.MY_NAME),
......
...@@ -13,17 +13,6 @@ import logger ...@@ -13,17 +13,6 @@ import logger
##### #####
class Requisites(object) :
@classmethod
def serviceName(self) :
return None
@classmethod
def options(self) :
return []
#####
class Service(object) : class Service(object) :
__metaclass__ = abc.ABCMeta __metaclass__ = abc.ABCMeta
...@@ -31,17 +20,26 @@ class Service(object) : ...@@ -31,17 +20,26 @@ class Service(object) :
Actions = shared.Actions Actions = shared.Actions
@abc.abstractmethod @abc.abstractmethod
def init(self) : def initService(self) :
pass pass
def close(self) : def closeService(self) :
pass pass
@classmethod
@abc.abstractmethod
def serviceName(self) :
pass
@classmethod
def options(self) :
return []
##### #####
class CustomObject(dbus.service.Object) : class CustomObject(dbus.service.Object) :
def __init__(self, object_path) : def __init__(self, object_path) :
dbus.service.Object.__init__(self, config.value("runtime", "bus_name"), object_path) dbus.service.Object.__init__(self, config.value(const.RUNTIME_NAME, "bus_name"), object_path)
self._object_path = object_path self._object_path = object_path
...@@ -56,18 +54,18 @@ class CustomObject(dbus.service.Object) : ...@@ -56,18 +54,18 @@ class CustomObject(dbus.service.Object) :
class FunctionObject(CustomObject) : class FunctionObject(CustomObject) :
def __init__(self, object_path) : def __init__(self, object_path) :
CustomObject.__init__(self, dbus_tools.joinPath(config.value("service", "path"), "functions", object_path)) CustomObject.__init__(self, dbus_tools.joinPath(config.value(const.MY_NAME, "service_path"), "functions", object_path))
class ActionObject(CustomObject) : class ActionObject(CustomObject) :
def __init__(self, object_path) : def __init__(self, object_path) :
CustomObject.__init__(self, dbus_tools.joinPath(config.value("service", "path"), "actions", object_path)) CustomObject.__init__(self, dbus_tools.joinPath(config.value(const.MY_NAME, "service_path"), "actions", object_path))
###### ######
def tracer(function) : def tracer(function) :
def wrapper(self, *args_list, **kwargs_dict) : def wrapper(self, *args_list, **kwargs_dict) :
return_value = function(self, *args_list, **kwargs_dict) return_value = function(self, *args_list, **kwargs_dict)
if config.value("service", "log_level") == const.LOG_LEVEL_DEBUG : if config.value(const.MY_NAME, "log_level") == const.LOG_LEVEL_DEBUG :
logger.message(logger.DEBUG_MESSAGE, "Called \"%s::%s\" with args (%s, %s) --> %s" % ( logger.message(logger.DEBUG_MESSAGE, "Called \"%s::%s\" with args (%s, %s) --> %s" % (
self.__class__.__name__, function.__name__, str(args_list), str(kwargs_dict), str(return_value) )) self.__class__.__name__, function.__name__, str(args_list), str(kwargs_dict), str(return_value) ))
return return_value return return_value
...@@ -84,11 +82,11 @@ def customMethod(interface_name) : ...@@ -84,11 +82,11 @@ def customMethod(interface_name) :
def functionMethod(interface_name) : def functionMethod(interface_name) :
def decorator(function) : def decorator(function) :
return customMethod(dbus_tools.joinMethod(config.value("service", "name"), "functions", interface_name))(function) return customMethod(dbus_tools.joinMethod(config.value(const.MY_NAME, "service_name"), "functions", interface_name))(function)
return decorator return decorator
def actionsMethod(interface_name) : def actionsMethod(interface_name) :
def decorator(function) : def decorator(function) :
return customMethod(dbus_tools.joinMethod(config.value("service", "name"), "actions", interface_name))(function) return customMethod(dbus_tools.joinMethod(config.value(const.MY_NAME, "service_name"), "actions", interface_name))(function)
return decorator 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