Beispiel #1
0
 def _custom_validate(self, validation, param_name, param_value, caller_id):
     """
     Implements validation rules that require access to internal ROSHandler state.
     @param validation: name of validation rule to use
     @type  validation: str
     @param param_name: name of parameter being validated
     @type  param_name: str
     @param param_value str: value of parameter
     @type  param_value: str
     @param caller_id: value of caller_id parameter to API method
     @type  caller_id: str
     @raise ParameterInvalid: if the parameter does not meet validation
     @return: new value for parameter, after validation
     """
     if validation == 'is_publishers_list':
         if not type(param_value) == list:
             raise ParameterInvalid("ERROR: param [%s] must be a list" %
                                    param_name)
         for v in param_value:
             if not isinstance(v, str):
                 raise ParameterInvalid(
                     "ERROR: param [%s] must be a list of strings" %
                     param_name)
             parsed = urlparse.urlparse(v)
             if not parsed[0] or not parsed[1]:  #protocol and host
                 raise ParameterInvalid(
                     "ERROR: param [%s] does not contain valid URLs [%s]" %
                     (param_name, v))
         return param_value
     else:
         raise ParameterInvalid(
             "ERROR: param [%s] has an unknown validation type [%s]" %
             (param_name, validation))
Beispiel #2
0
 def validator(param_value, caller_id):
     if not param_value or not isstring(param_value):
         raise ParameterInvalid("ERROR: parameter [%s] must be a non-empty string"%param_name)
     #TODO: actual validation of chars
     if not is_global(param_value):
         raise ParameterInvalid("ERROR: parameter [%s] must be a globally referenced name"%param_name)            
     return param_value
Beispiel #3
0
def valid_name_validator_unresolved(param_name, param_value, caller_id):
    if not param_value or not isstring(param_value):
        raise ParameterInvalid("ERROR: parameter [%s] must be a non-empty string"%param_name)            
    #TODO: actual validation of chars        
    # I added the colon check as the common error will be to send an URI instead of name
    if ':' in param_value or ' ' in param_value:
        raise ParameterInvalid("ERROR: parameter [%s] contains illegal chars"%param_name) 
    return param_value
Beispiel #4
0
def valid_name_validator_resolved(param_name, param_value, caller_id):
    if not param_value or not isstring(param_value):
        raise ParameterInvalid("ERROR: parameter [%s] must be a non-empty string"%param_name)            
    #TODO: actual validation of chars
    # I added the colon check as the common error will be to send an URI instead of name
    if ':' in param_value or ' ' in param_value:
        raise ParameterInvalid("ERROR: parameter [%s] contains illegal chars"%param_name) 
    #don't use our own resolve_name because we do not want to remap
    return rosgraph.names.resolve_name(param_value, caller_id, remappings=None)
Beispiel #5
0
 def _custom_validate(self, validation, param_name, param_value, caller_id):
     if validation == 'is_publishers_list':
         if not type(param_value) == list:
             raise ParameterInvalid("ERROR: param [%s] must be a list"%param_name)
         for v in param_value:
             if not isinstance(v, basestring):
                 raise ParameterInvalid("ERROR: param [%s] must be a list of strings"%param_name)
             parsed = urlparse.urlparse(v)
             if not parsed[0] or not parsed[1]: #protocol and host
                 raise ParameterInvalid("ERROR: param [%s] does not contain valid URLs [%s]"%(param_name, v))
         return param_value
     else:
         raise ParameterInvalid("ERROR: param [%s] has an unknown validation type [%s]"%(param_name, validation))
Beispiel #6
0
 def validator(param_value, caller_id):
     v = valid_name_validator_resolved(param_name, param_value, caller_id)
     if param_value == '/':
         raise ParameterInvalid(
             "ERROR: parameter [%s] cannot be the global namespace" %
             param_name)
     return v
Beispiel #7
0
def parse_rosrpc_uri(uri):
    """
    utility function for parsing ROS-RPC URIs
    @param uri: ROSRPC URI
    @type  uri: str
    @return: address, port
    @rtype: (str, int)
    @raise ParameterInvalid: if uri is not a valid ROSRPC URI
    """
    if uri.startswith(ROSRPC):
        dest_addr = uri[len(ROSRPC):]            
    else:
        raise ParameterInvalid("Invalid protocol for ROS service URL: %s"%uri)
    try:
        if '/' in dest_addr:
            dest_addr = dest_addr[:dest_addr.find('/')]
        dest_addr, dest_port = dest_addr.split(':')
        dest_port = int(dest_port)
    except:
        raise ParameterInvalid("ROS service URL is invalid: %s"%uri)
    return dest_addr, dest_port
 def test_ParameterInvalid(self):
     # not really testing anything here other than typos
     from rospy.impl.validators import ParameterInvalid
     self.assert_(isinstance(ParameterInvalid('param'), Exception))