def _assert_module_exists(self, parser, module_name): try: file, module_path, desc = find_module_recursive(module_name) except ImportError: args = repr(module_name), sys.path msg = 'service %s not found. sys.path is %s' % args parser.error(msg)
def __init__(self, parent, name, module, cfg_dir, main_cfg, queue_name = None): self.parent = parent self.name = name self.cfg_dir = cfg_dir self.main_cfg = main_cfg self.queue_name = queue_name self.parent.service_added(self) try: fp, filename, description = find_module_recursive(module) except ImportError: raise Exception('invalid module name: %s' % module) filename = os.path.join(filename, 'service.py') with open(filename) as file: content = file.read() code = compile(content, filename, 'exec') self.vars = {} self.vars['__builtin__'] = __builtin__ self.vars['__file__'] = filename self.vars['__module__'] = module self.vars['__service__'] = self self.vars['__exscriptd__'] = parent self.vars['__main_cfg__'] = self.main_cfg # Load the module using evil path manipulation, but oh well... # can't think of a sane way to do this. sys.path.insert(0, os.path.dirname(filename)) result = eval(code, self.vars) sys.path.pop(0) self.check_func = self.vars.get('check') self.enter_func = self.vars.get('enter') if not self.enter_func: msg = filename + ': required function enter() not found.' raise Exception(msg)
def __init__(self, parent, name, module, cfg_dir, main_cfg, queue_name=None): self.parent = parent self.name = name self.cfg_dir = cfg_dir self.main_cfg = main_cfg self.queue_name = queue_name self.parent.service_added(self) try: fp, filename, description = find_module_recursive(module) except ImportError: raise Exception('invalid module name: %s' % module) filename = os.path.join(filename, 'service.py') with open(filename) as file: content = file.read() code = compile(content, filename, 'exec') self.vars = {} self.vars['__builtin__'] = __builtin__ self.vars['__file__'] = filename self.vars['__module__'] = module self.vars['__service__'] = self self.vars['__exscriptd__'] = parent self.vars['__main_cfg__'] = self.main_cfg # Load the module using evil path manipulation, but oh well... # can't think of a sane way to do this. sys.path.insert(0, os.path.dirname(filename)) result = eval(code, self.vars) sys.path.pop(0) self.check_func = self.vars.get('check') self.enter_func = self.vars.get('enter') if not self.enter_func: msg = filename + ': required function enter() not found.' raise Exception(msg)
def add_service(self, service_name, module_name=None, daemon_name=None, queue_name=None): pathname = self._get_service_file_from_name(service_name) changed = False if not pathname: if not module_name: raise Exception('module name is required') # Find the installation path of the module. file, module_path, desc = find_module_recursive(module_name) # Create a directory for the new service, if it does not # already exist. service_dir = os.path.join(self.service_dir, service_name) if not os.path.isdir(service_dir): os.makedirs(service_dir) # Copy the default config file. cfg_file = os.path.join(module_path, 'config.xml.tmpl') pathname = os.path.join(service_dir, 'config.xml') if not os.path.isfile(pathname): shutil.copy(cfg_file, pathname) changed = True # Create an XML segment for the service. doc = etree.parse(pathname) xml = doc.getroot() service_ele = xml.find('service[@name="%s"]' % service_name) if service_ele is None: changed = True service_ele = etree.SubElement(xml, 'service', name=service_name) # By default, use the first daemon defined in the main config file. if daemon_name is None: daemon_name = self.cfgtree.find('daemon').get('name') if self._add_or_update_elem(service_ele, 'daemon', daemon_name): changed = True # Add an XML statement pointing to the module. if module_name is not None: if self._add_or_update_elem(service_ele, 'module', module_name): changed = True # By default, use the first queue defined in the main config file. if queue_name is None: queue_name = self.cfgtree.find('queue').get('name') if not self.has_queue(queue_name): raise Exception('no such queue: ' + queue_name) if self._add_or_update_elem(service_ele, 'queue', queue_name): changed = True if not changed: return False # Write the resulting XML. self._write_xml(xml, pathname) return True
def __init__(self, module): file, path, description = find_module_recursive(module) try: self.module = load_module(module, file, path, description) finally: file.close()
def add_service(self, service_name, module_name = None, daemon_name = None, queue_name = None): pathname = self._get_service_file_from_name(service_name) changed = False if not pathname: if not module_name: raise Exception('module name is required') # Find the installation path of the module. file, module_path, desc = find_module_recursive(module_name) # Create a directory for the new service, if it does not # already exist. service_dir = os.path.join(self.service_dir, service_name) if not os.path.isdir(service_dir): os.makedirs(service_dir) # Copy the default config file. cfg_file = os.path.join(module_path, 'config.xml.tmpl') pathname = os.path.join(service_dir, 'config.xml') if not os.path.isfile(pathname): shutil.copy(cfg_file, pathname) changed = True # Create an XML segment for the service. doc = etree.parse(pathname) xml = doc.getroot() service_ele = xml.find('service[@name="%s"]' % service_name) if service_ele is None: changed = True service_ele = etree.SubElement(xml, 'service', name = service_name) # By default, use the first daemon defined in the main config file. if daemon_name is None: daemon_name = self.cfgtree.find('daemon').get('name') if self._add_or_update_elem(service_ele, 'daemon', daemon_name): changed = True # Add an XML statement pointing to the module. if module_name is not None: if self._add_or_update_elem(service_ele, 'module', module_name): changed = True # By default, use the first queue defined in the main config file. if queue_name is None: queue_name = self.cfgtree.find('queue').get('name') if not self.has_queue(queue_name): raise Exception('no such queue: ' + queue_name) if self._add_or_update_elem(service_ele, 'queue', queue_name): changed = True if not changed: return False # Write the resulting XML. self._write_xml(xml, pathname) return True