return self.protocol.sendData( '%s option value must contain a minimum of 2 connector IDs separated with ";".' % (cmd)) arg = [] for typed_cid in CIDs: try: ctype, cid = validate_typed_connector_id(typed_cid) if ctype == 'http': if cid not in self.protocol.managers[ 'httpccm'].httpccs: raise Exception('Unknown http cid: %s' % (cid)) # Pass ready HttpConnector instance arg.append(self.protocol.managers['httpccm']. httpccs[cid]) elif ctype == 'smpps': # Make instance of SmppServerSystemIdConnector arg.append(SmppServerSystemIdConnector(cid)) else: raise NotImplementedError( "Not implemented yet !") except Exception, e: return self.protocol.sendData(str(e)) # Validate filters if cmd == 'filters': FIDs = arg.split(';') arg = [] for fid in FIDs:
def parse_args_and_call_with_instance(self, *args, **kwargs): cmd = args[0] arg = args[1] # Empty line if cmd is None: return self.protocol.sendData() # Initiate a route from jasmin.routing.Routes with sessBuffer content if cmd == 'ok': # Remove route_class and route_args from self.sessBuffer before checking options # as these 2 options are not user-typed if len(self.sessBuffer) - 2 < len(self.protocol.sessionCompletitions): return self.protocol.sendData('You must set these options before saving: %s' % ', '.join( self.protocol.sessionCompletitions)) route = {} for key, value in self.sessBuffer.iteritems(): if key not in ['order', 'type', 'route_class', 'route_args']: route[key] = value try: # Instanciate a Route RouteInstance = self.sessBuffer['route_class'](**route) # Hand the instance to fCallback return fCallback(self, self.sessBuffer['order'], RouteInstance) except Exception as e: return self.protocol.sendData('Error: %s' % str(e)) else: # Unknown key ra = [] if 'route_args' in self.sessBuffer: ra = self.sessBuffer['route_args'] if cmd not in MORouteKeyMap and cmd not in ra: return self.protocol.sendData('Unknown Route key: %s' % cmd) # IF we got the type, check if it's a correct one if cmd == 'type': _type = None for route in MOROUTES: if arg.lower() == route.lower(): _type = route break if _type is None: return self.protocol.sendData( 'Unknown MO Route type:%s, available types: %s' % (arg, ', '.join(MOROUTES))) elif _type == 'DefaultRoute': self.sessBuffer['order'] = 0 # Before setting a new route class, remove any previous route # sessBuffer keys if 'order' in self.sessBuffer: self.sessBuffer = {'order': self.sessBuffer['order']} else: self.sessBuffer = {} self.sessBuffer['type'] = _type # Route class name must be already imported from jasmin.routing.Routes # in order to get it from globals() self.sessBuffer['route_class'] = globals()[_type] # Show Route help and save Route args RouteClassArgs = inspect.getargspec(self.sessBuffer['route_class'].__init__).args if 'self' in RouteClassArgs: # Remove 'self' from args RouteClassArgs.remove('self') if 'rate' in RouteClassArgs: # MO Routes are not rated RouteClassArgs.remove('rate') self.sessBuffer['route_args'] = RouteClassArgs if len(RouteClassArgs) > 0: # Update completitions self.protocol.sessionCompletitions = MORouteKeyMap.keys() + RouteClassArgs return self.protocol.sendData( '%s arguments:\n%s' % (self.sessBuffer['route_class'], ', '.join(RouteClassArgs))) else: # DefaultRoute's order is always zero if cmd == 'order': if (arg != '0' and 'type' in self.sessBuffer and self.sessBuffer['type'] == 'DefaultRoute'): self.sessBuffer['order'] = 0 return self.protocol.sendData('Route order forced to 0 since it is a DefaultRoute') elif (arg == '0' and 'type' in self.sessBuffer and self.sessBuffer['type'] != 'DefaultRoute'): return self.protocol.sendData( 'This route order (0) is reserved for DefaultRoute only') elif not arg.isdigit() or int(arg) < 0: return self.protocol.sendData('Route order must be a positive integer') else: arg = int(arg) # Validate connector if cmd == 'connector': try: ctype, cid = validate_typed_connector_id(arg) if ctype == 'http': if cid not in self.protocol.managers['httpccm'].httpccs: raise Exception('Unknown http cid: %s' % (cid)) # Pass ready HttpConnector instance arg = self.protocol.managers['httpccm'].httpccs[cid] elif ctype == 'smpps': # Make instance of SmppServerSystemIdConnector arg = SmppServerSystemIdConnector(cid) else: raise NotImplementedError("Not implemented yet !") except Exception as e: return self.protocol.sendData(str(e)) # Validate connectors if cmd == 'connectors': CIDs = arg.split(';') if len(CIDs) == 1: return self.protocol.sendData( '%s option value must contain a minimum of 2 connector IDs separated with ";".' % (cmd)) arg = [] for typed_cid in CIDs: try: ctype, cid = validate_typed_connector_id(typed_cid) if ctype == 'http': if cid not in self.protocol.managers['httpccm'].httpccs: raise Exception('Unknown http cid: %s' % (cid)) # Pass ready HttpConnector instance arg.append(self.protocol.managers['httpccm'].httpccs[cid]) elif ctype == 'smpps': # Make instance of SmppServerSystemIdConnector arg.append(SmppServerSystemIdConnector(cid)) else: raise NotImplementedError("Not implemented yet !") except Exception as e: return self.protocol.sendData(str(e)) # Validate filters if cmd == 'filters': FIDs = arg.split(';') arg = [] for fid in FIDs: if fid not in self.protocol.managers['filter'].filters: return self.protocol.sendData('Unknown fid: %s' % (fid)) else: _Filter = self.protocol.managers['filter'].filters[fid] if _Filter.__class__.__name__ not in MOFILTERS: return self.protocol.sendData( '%s#%s is not a valid filter for MORoute (not in MOFILTERS)' % ( _Filter.__class__.__name__, fid)) else: arg.append(_Filter) # Buffer key for later Route initiating if cmd not in ra: RouteKey = MORouteKeyMap[cmd] else: RouteKey = cmd self.sessBuffer[RouteKey] = arg return self.protocol.sendData()
# Validate connectors if cmd == 'connectors': CIDs = arg.split(';') if len(CIDs) == 1: return self.protocol.sendData('%s option value must contain a minimum of 2 connector IDs separated with ";".' % (cmd)) arg = [] for typed_cid in CIDs: try: ctype, cid = validate_typed_connector_id(typed_cid) if ctype == 'http': if cid not in self.protocol.managers['httpccm'].httpccs: raise Exception('Unknown http cid: %s' % (cid)) # Pass ready HttpConnector instance arg.append(self.protocol.managers['httpccm'].httpccs[cid]) elif ctype == 'smpps': # Make instance of SmppServerSystemIdConnector arg.append(SmppServerSystemIdConnector(cid)) else: raise NotImplementedError("Not implemented yet !") except Exception, e: return self.protocol.sendData(str(e)) # Validate filters if cmd == 'filters': FIDs = arg.split(';') arg = [] for fid in FIDs: if fid not in self.protocol.managers['filter'].filters:
def parse_args_and_call_with_instance(self, *args, **kwargs): cmd = args[0] arg = args[1] # Empty line if cmd is None: return self.protocol.sendData() # Initiate a route from jasmin.routing.Routes with sessBuffer content if cmd == 'ok': # Remove route_class and route_args from self.sessBuffer before checking options # as these 2 options are not user-typed if len(self.sessBuffer) - 2 < len( self.protocol.sessionCompletitions): return self.protocol.sendData( 'You must set these options before saving: %s' % ', '.join(self.protocol.sessionCompletitions)) route = {} for key, value in self.sessBuffer.items(): if key not in ['order', 'type', 'route_class', 'route_args']: route[key] = value try: # Instanciate a Route RouteInstance = self.sessBuffer['route_class'](**route) # Hand the instance to fCallback return fCallback(self, self.sessBuffer['order'], RouteInstance) except Exception as e: return self.protocol.sendData('Error: %s' % str(e)) else: # Unknown key ra = [] if 'route_args' in self.sessBuffer: ra = self.sessBuffer['route_args'] if cmd not in MORouteKeyMap and cmd not in ra: return self.protocol.sendData('Unknown Route key: %s' % cmd) # IF we got the type, check if it's a correct one if cmd == 'type': _type = None for route in MOROUTES: if arg.lower() == route.lower(): _type = route break if _type is None: return self.protocol.sendData( 'Unknown MO Route type:%s, available types: %s' % (arg, ', '.join(MOROUTES))) elif _type == 'DefaultRoute': self.sessBuffer['order'] = 0 # Before setting a new route class, remove any previous route # sessBuffer keys if 'order' in self.sessBuffer: self.sessBuffer = {'order': self.sessBuffer['order']} else: self.sessBuffer = {} self.sessBuffer['type'] = _type # Route class name must be already imported from jasmin.routing.Routes # in order to get it from globals() self.sessBuffer['route_class'] = globals()[_type] # Show Route help and save Route args RouteClassArgs = inspect.getargspec( self.sessBuffer['route_class'].__init__).args if 'self' in RouteClassArgs: # Remove 'self' from args RouteClassArgs.remove('self') if 'rate' in RouteClassArgs: # MO Routes are not rated RouteClassArgs.remove('rate') self.sessBuffer['route_args'] = RouteClassArgs if len(RouteClassArgs) > 0: # Update completitions self.protocol.sessionCompletitions = list( MORouteKeyMap) + RouteClassArgs return self.protocol.sendData( '%s arguments:\n%s' % (self.sessBuffer['route_class'], ', '.join(RouteClassArgs))) else: # DefaultRoute's order is always zero if cmd == 'order': if (arg != '0' and 'type' in self.sessBuffer and self.sessBuffer['type'] == 'DefaultRoute'): self.sessBuffer['order'] = 0 return self.protocol.sendData( 'Route order forced to 0 since it is a DefaultRoute' ) elif (arg == '0' and 'type' in self.sessBuffer and self.sessBuffer['type'] != 'DefaultRoute'): return self.protocol.sendData( 'This route order (0) is reserved for DefaultRoute only' ) elif not arg.isdigit() or int(arg) < 0: return self.protocol.sendData( 'Route order must be a positive integer') else: arg = int(arg) # Validate connector if cmd == 'connector': try: ctype, cid = validate_typed_connector_id(arg) if ctype == 'http': if cid not in self.protocol.managers[ 'httpccm'].httpccs: raise Exception('Unknown http cid: %s' % (cid)) # Pass ready HttpConnector instance arg = self.protocol.managers['httpccm'].httpccs[ cid] elif ctype == 'smpps': # Make instance of SmppServerSystemIdConnector arg = SmppServerSystemIdConnector(cid) else: raise NotImplementedError("Not implemented yet !") except Exception as e: return self.protocol.sendData(str(e)) # Validate connectors if cmd == 'connectors': CIDs = arg.split(';') if len(CIDs) == 1: return self.protocol.sendData( '%s option value must contain a minimum of 2 connector IDs separated with ";".' % (cmd)) arg = [] for typed_cid in CIDs: try: ctype, cid = validate_typed_connector_id(typed_cid) if ctype == 'http': if cid not in self.protocol.managers[ 'httpccm'].httpccs: raise Exception('Unknown http cid: %s' % (cid)) # Pass ready HttpConnector instance arg.append(self.protocol.managers['httpccm']. httpccs[cid]) elif ctype == 'smpps': # Make instance of SmppServerSystemIdConnector arg.append(SmppServerSystemIdConnector(cid)) else: raise NotImplementedError( "Not implemented yet !") except Exception as e: return self.protocol.sendData(str(e)) # Validate filters if cmd == 'filters': FIDs = arg.split(';') arg = [] for fid in FIDs: if fid not in self.protocol.managers['filter'].filters: return self.protocol.sendData('Unknown fid: %s' % (fid)) else: _Filter = self.protocol.managers['filter'].filters[ fid] if _Filter.__class__.__name__ not in MOFILTERS: return self.protocol.sendData( '%s#%s is not a valid filter for MORoute (not in MOFILTERS)' % (_Filter.__class__.__name__, fid)) else: arg.append(_Filter) # Buffer key for later Route initiating if cmd not in ra: RouteKey = MORouteKeyMap[cmd] else: RouteKey = cmd self.sessBuffer[RouteKey] = arg return self.protocol.sendData()