def compute_import(msg_context, package, type_): """ Compute python import statement for specified message type implementation. :param package: package that type is being imported into, ``str`` :param type_: message type (package resource name), ``str`` :returns: list of import statements (no newline) required to use type_ from package, ``[str]`` """ # orig_base_type is the unresolved type orig_base_type = genmsg.msgs.bare_msg_type(type_) # strip array-suffix # resolve orig_base_type based on the current package context. # base_type is the resolved type stripped of any package name. # pkg is the actual package of type_. pkg, base_type = compute_pkg_type(package, orig_base_type) full_msg_type = '%s/%s' % (pkg, base_type) # compute fully-qualified type # important: have to do is_builtin check first. We do this check # against the unresolved type builtins/specials are never # relative. This requires some special handling for Header, which has # two names (Header and std_msgs/Header). if genmsg.msgs.is_builtin(orig_base_type) or \ genmsg.msgs.is_header_type(orig_base_type): # of the builtin types, only special types require import # handling. we switch to base_type as special types do not # include package names. if is_special(base_type): retval = [get_special(base_type).import_str] else: retval = [] elif not msg_context.is_registered(full_msg_type): retval = [] else: retval = ['import %s.msg' % pkg] iter_types = get_registered_ex(msg_context, full_msg_type).types for t in iter_types: assert t != full_msg_type, 'msg [%s] has circular self-dependencies' % ( full_msg_type) full_sub_type = '%s/%s' % (package, t) log('compute_import', full_msg_type, package, t) sub = compute_import(msg_context, package, t) retval.extend([x for x in sub if x not in retval]) return retval
def compute_import(msg_context, package, type_): """ Compute python import statement for specified message type implementation :param package: package that type is being imported into, ``str`` :param type_: message type (package resource name), ``str`` :returns: list of import statements (no newline) required to use type_ from package, ``[str]`` """ # orig_base_type is the unresolved type orig_base_type = genmsg.msgs.bare_msg_type(type_) # strip array-suffix # resolve orig_base_type based on the current package context. # base_type is the resolved type stripped of any package name. # pkg is the actual package of type_. pkg, base_type = compute_pkg_type(package, orig_base_type) full_msg_type = "%s/%s"%(pkg, base_type) # compute fully-qualified type # important: have to do is_builtin check first. We do this check # against the unresolved type builtins/specials are never # relative. This requires some special handling for Header, which has # two names (Header and std_msgs/Header). if genmsg.msgs.is_builtin(orig_base_type) or \ genmsg.msgs.is_header_type(orig_base_type): # of the builtin types, only special types require import # handling. we switch to base_type as special types do not # include package names. if is_special(base_type): retval = [get_special(base_type).import_str] else: retval = [] elif not msg_context.is_registered(full_msg_type): retval = [] else: retval = ['import %s.msg'%pkg] iter_types = get_registered_ex(msg_context, full_msg_type).types for t in iter_types: assert t != full_msg_type, "msg [%s] has circular self-dependencies"%(full_msg_type) full_sub_type = "%s/%s"%(package, t) log("compute_import", full_msg_type, package, t) sub = compute_import(msg_context, package, t) retval.extend([x for x in sub if not x in retval]) return retval
def test_log(): from genmsg.base import log log("hello", "there")