Example #1
0
def _recurse_through_generics(ref):
    yield ref
    if isinstance(ref, ConfigTypeMeta) and ConfigTypeKind.is_closed_generic(
            ref.kind):
        for type_param_ref in ref.type_param_refs:
            for inner_ref in _recurse_through_generics(type_param_ref):
                yield inner_ref
Example #2
0
 def get_child_type_keys(self):
     if ConfigTypeKind.is_closed_generic(self.kind):
         return self.type_param_keys
     elif ConfigTypeKind.has_fields(self.kind):
         return [field.type_key for field in self.fields]
     else:
         return []
Example #3
0
def _get_next_level_refs(ref):
    # if a generic type, get type params
    # if a type with fields, get refs of the fields
    if ConfigTypeKind.is_closed_generic(ref.kind):
        return ref.type_param_refs
    elif (ConfigTypeKind.has_fields(ref.kind)
          and ref.fields):  # still check fields because permissive
        return [field_meta.type_ref for field_meta in ref.fields]
Example #4
0
def type_ref_of(config_type):
    check.inst_param(config_type, 'config_type', ConfigType)
    if ConfigTypeKind.is_closed_generic(config_type.kind):
        return meta_from_config_type(config_type)
    else:
        return NonGenericTypeRefMeta(key=config_type.key)