def __init__(self, file): self.file = file dict.__init__(self) try: xml = ET.parse(file) except SyntaxError, msg: raise SyntaxError, msg
def __init__(self, file): self.file = file dict.__init__(self) try: xml = ET.parse(file) except SyntaxError, msg: raise SyntaxError, msg
def __init__(self, file): self.file = file dict.__init__(self) try: xml = ET.parse(file) except (SyntaxError, IOError): raise except Exception, msg: raise SyntaxError(msg)
def __init__(self, file): self.file = file dict.__init__(self) try: xml = ET.parse(file) except (SyntaxError, IOError): raise except Exception, msg: raise SyntaxError(msg)
def init_var_and_actions(self): desc_file = util.sibpath( __file__, os.path.join('xml-service-descriptions', '%s%d.xml' % (self.id, int(self.version)))) tree = ET.parse(desc_file) for action_node in tree.findall('.//action'): name = action_node.findtext('name') implementation = 'required' needs_callback = False if action_node.attrib.get( '{urn:schemas-beebits-net:service-1-0}X_needs_backend', None) != None: needs_callback = True if action_node.find('Optional') != None: implementation = 'optional' if (action_node.find('Optional').attrib.get( '{urn:schemas-beebits-net:service-1-0}X_needs_backend', None ) != None or action_node.attrib.get( '{urn:schemas-beebits-net:service-1-0}X_needs_backend', None) != None): needs_callback = True arguments = [] for argument in action_node.findall('.//argument'): arg_name = argument.findtext('name') arg_direction = argument.findtext('direction') arg_state_var = argument.findtext('relatedStateVariable') arguments.append( action.Argument(arg_name, arg_direction, arg_state_var)) if (arg_state_var[0:11] == 'A_ARG_TYPE_' and arg_direction == 'out'): needs_callback = True #print arg_name, arg_direction, needs_callback """ check for action in backend """ callback = getattr(self.backend, "upnp_%s" % name, None) if callback == None: """ check for action in ServiceServer """ callback = getattr(self, "upnp_%s" % name, None) if (needs_callback == True and callback == None): """ we have one or more 'A_ARG_TYPE_' variables issue a warning for now """ if implementation == 'optional': self.info( '%s has a missing callback for %s action %s, action disabled' % (self.id, implementation, name)) continue else: if ((hasattr(self, 'implementation') and self.implementation == 'required') or not hasattr(self, 'implementation')): self.warning( '%s has a missing callback for %s action %s, service disabled' % (self.id, implementation, name)) raise LookupError, "missing callback" new_action = action.Action(self, name, implementation, arguments) self._actions[name] = new_action if callback != None: new_action.set_callback(callback) self.info('Add callback %s for %s/%s' % (callback, self.id, name)) backend_vendor_value_defaults = getattr(self.backend, "vendor_value_defaults", None) service_value_defaults = None if backend_vendor_value_defaults: service_value_defaults = backend_vendor_value_defaults.get( self.id, None) backend_vendor_range_defaults = getattr(self.backend, "vendor_range_defaults", None) service_range_defaults = None if backend_vendor_range_defaults: service_range_defaults = backend_vendor_range_defaults.get(self.id) for var_node in tree.findall('.//stateVariable'): instance = 0 name = var_node.findtext('name') implementation = 'required' if action_node.find('Optional') != None: implementation = 'optional' #if implementation == 'optional': # for action_object in self._actions.values(): # if name in [a.get_state_variable() for a in action_object.arguments_list]: # break # else: # continue send_events = var_node.findtext('sendEventsAttribute') data_type = var_node.findtext('dataType') values = [] for allowed in var_node.findall('.//allowedValue'): values.append(allowed.text) self._variables.get(instance)[name] = variable.StateVariable( self, name, implementation, instance, send_events, data_type, values) dependant_variable = var_node.findtext( '{urn:schemas-beebits-net:service-1-0}X_dependantVariable') if dependant_variable: self._variables.get( instance)[name].dependant_variable = dependant_variable default_value = var_node.findtext('defaultValue') if default_value: self._variables.get(instance)[name].set_default_value( default_value) if var_node.find('sendEventsAttribute') != None: never_evented = var_node.find( 'sendEventsAttribute' ).attrib.get( '{urn:schemas-beebits-net:service-1-0}X_no_means_never', None) if never_evented is not None: self._variables.get(instance)[name].set_never_evented( never_evented) allowed_value_list = var_node.find('allowedValueList') if allowed_value_list != None: vendor_values = allowed_value_list.attrib.get( '{urn:schemas-beebits-net:service-1-0}X_withVendorDefines', None) if service_value_defaults: variable_value_defaults = service_value_defaults.get( name, None) if variable_value_defaults: self.info("overwriting %s default value with %s" % (name, variable_value_defaults)) self._variables.get(instance)[name].set_allowed_values( variable_value_defaults) if vendor_values != None: self._variables.get( instance)[name].has_vendor_values = True allowed_value_range = var_node.find('allowedValueRange') if allowed_value_range: vendor_values = allowed_value_range.attrib.get( '{urn:schemas-beebits-net:service-1-0}X_withVendorDefines', None) range = {} for e in list(allowed_value_range): range[e.tag] = e.text if (vendor_values != None): if service_range_defaults: variable_range_defaults = service_range_defaults.get( name) if (variable_range_defaults != None and variable_range_defaults.get( e.tag) != None): self.info( "overwriting %s attribute %s with %s" % (name, e.tag, str(variable_range_defaults[e.tag]))) range[e.tag] = variable_range_defaults[e.tag] elif e.text == None: self.info( "missing vendor definition for %s, attribute %s" % (name, e.tag)) self._variables.get(instance)[name].set_allowed_value_range( **range) if vendor_values != None: self._variables.get( instance)[name].has_vendor_values = True elif service_range_defaults: variable_range_defaults = service_range_defaults.get(name) if variable_range_defaults != None: self._variables.get( instance)[name].set_allowed_value_range( **variable_range_defaults) self._variables.get( instance)[name].has_vendor_values = True for v in self._variables.get(0).values(): if isinstance(v.dependant_variable, str): v.dependant_variable = self._variables.get(instance).get( v.dependant_variable)
def init_var_and_actions(self): desc_file = util.sibpath(__file__, os.path.join('xml-service-descriptions', '%s%d.xml' % (self.id, int(self.version)))) tree = ET.parse(desc_file) for action_node in tree.findall('.//action'): name = action_node.findtext('name') implementation = 'required' if action_node.find('Optional') != None: implementation = 'optional' arguments = [] needs_callback = False for argument in action_node.findall('.//argument'): arg_name = argument.findtext('name') arg_direction = argument.findtext('direction') arg_state_var = argument.findtext('relatedStateVariable') arguments.append(action.Argument(arg_name, arg_direction, arg_state_var)) if( arg_state_var[0:11] == 'A_ARG_TYPE_' and arg_direction == 'out'): needs_callback = True #print arg_name, arg_direction, needs_callback """ check for action in backend """ callback = getattr(self.backend, "upnp_%s" % name, None) if callback == None: """ check for action in ServiceServer """ callback = getattr(self, "upnp_%s" % name, None) if( needs_callback == True and callback == None): """ we have one or more 'A_ARG_TYPE_' variables issue a warning for now """ if implementation == 'optional': self.info('%s has a missing callback for %s action %s, action disabled' % (self.id,implementation,name)) continue else: self.warning('%s has a missing callback for %s action %s, service disabled' % (self.id,implementation,name)) raise LookupError,"missing callback" new_action = action.Action(self, name, implementation, arguments) self._actions[name] = new_action if callback != None: new_action.set_callback(callback) self.info('Add callback %s for %s/%s' % (callback, self.id, name)) backend_vendor_value_defaults = getattr(self.backend, "vendor_value_defaults", None) service_value_defaults = None if backend_vendor_value_defaults: service_value_defaults = backend_vendor_value_defaults.get(self.id,None) backend_vendor_range_defaults = getattr(self.backend, "vendor_range_defaults", None) service_range_defaults = None if backend_vendor_range_defaults: service_range_defaults = backend_vendor_range_defaults.get(self.id) for var_node in tree.findall('.//stateVariable'): instance = 0 name = var_node.findtext('name') implementation = 'required' if action_node.find('Optional') != None: implementation = 'optional' send_events = var_node.findtext('sendEventsAttribute') data_type = var_node.findtext('dataType') values = [] for allowed in var_node.findall('.//allowedValue'): values.append(allowed.text) self._variables.get(instance)[name] = variable.StateVariable(self, name, implementation, instance, send_events, data_type, values) default_value = var_node.findtext('defaultValue') if default_value: self._variables.get(instance)[name].set_default_value(default_value) if var_node.find('sendEventsAttribute') != None: never_evented = var_node.find('sendEventsAttribute').attrib.get( '{urn:schemas-beebits-net:service-1-0}X_no_means_never', None) if never_evented is not None: self._variables.get(instance)[name].set_never_evented(never_evented) dependant_variable = var_node.findtext('{urn:schemas-beebits-net:service-1-0}X_dependantVariable') if dependant_variable: self._variables.get(instance)[name].dependant_variable = dependant_variable allowed_value_list = var_node.find('allowedValueList') if allowed_value_list != None: vendor_values = allowed_value_list.attrib.get( '{urn:schemas-beebits-net:service-1-0}X_withVendorDefines', None) if service_value_defaults: variable_value_defaults = service_value_defaults.get(name, None) if variable_value_defaults: self.info("overwriting %s default value with %s" % (name, variable_value_defaults)) self._variables.get(instance)[name].set_allowed_values(variable_value_defaults) if vendor_values != None: self._variables.get(instance)[name].has_vendor_values = True allowed_value_range = var_node.find('allowedValueRange') if allowed_value_range: vendor_values = allowed_value_range.attrib.get( '{urn:schemas-beebits-net:service-1-0}X_withVendorDefines', None) range = {} for e in list(allowed_value_range): range[e.tag] = e.text if( vendor_values != None): if service_range_defaults: variable_range_defaults = service_range_defaults.get(name) if( variable_range_defaults != None and variable_range_defaults.get(e.tag) != None): self.info("overwriting %s attribute %s with %s" % (name, e.tag, str(variable_range_defaults[e.tag]))) range[e.tag] = variable_range_defaults[e.tag] elif e.text == None: self.info("missing vendor definition for %s, attribute %s" % (name, e.tag)) self._variables.get(instance)[name].set_allowed_value_range(**range) if vendor_values != None: self._variables.get(instance)[name].has_vendor_values = True for v in self._variables.get(0).values(): if isinstance( v.dependant_variable, str): v.dependant_variable = self._variables.get(instance).get(v.dependant_variable)