Example #1
0
 def _test_accessors(self, obj):
     names = list(get_domain_class_attribute_names(obj))
     self.assert_equal(list(names),
                       ['id', 'parent', 'children', 'text', 'text_ent',
                        'number', 'date_time', 'parent.text_ent'])
     self.assert_equal(list(get_domain_class_attributes(obj).keys()),
                       names)
     term_attr_name = 'number'
     term_attr = get_domain_class_attribute(obj, term_attr_name)
     self.assert_equal(term_attr.entity_attr, term_attr_name)
     self.assert_true(
                 is_domain_class_terminal_attribute(obj, term_attr_name))
     ent_attr_name = 'parent'
     ent_attr = get_domain_class_attribute(obj, ent_attr_name)
     self.assert_equal(ent_attr.entity_attr, ent_attr_name)
     self.assert_true(
                 is_domain_class_member_attribute(obj, ent_attr_name))
     self.assert_true(
                 is_domain_class_domain_attribute(obj, ent_attr_name))
     agg_attr_name = 'children'
     agg_attr = get_domain_class_attribute(obj, agg_attr_name)
     self.assert_equal(agg_attr.entity_attr, agg_attr_name)
     self.assert_true(
                 is_domain_class_collection_attribute(obj, agg_attr_name))
     self.assert_true(
                 is_domain_class_domain_attribute(obj, agg_attr_name))
     for attr in get_domain_class_terminal_attribute_iterator(obj):
         self.assert_equal(attr.kind, RESOURCE_ATTRIBUTE_KINDS.TERMINAL)
     for attr in get_domain_class_member_attribute_iterator(obj):
         self.assert_equal(attr.kind, RESOURCE_ATTRIBUTE_KINDS.MEMBER)
     for attr in get_domain_class_collection_attribute_iterator(obj):
         self.assert_equal(attr.kind, RESOURCE_ATTRIBUTE_KINDS.COLLECTION)
     for attr in get_domain_class_relationship_attribute_iterator(obj):
         self.assert_true(attr.kind in (RESOURCE_ATTRIBUTE_KINDS.MEMBER,
                                        RESOURCE_ATTRIBUTE_KINDS.COLLECTION))
Example #2
0
 def inspect(entity_class, attribute_name):
     attr_tokens = attribute_name.split('.')
     infos = []
     for idx, attr_token in enumerate(attr_tokens):
         do_append = True
         try:
             attr = get_domain_class_attributes(entity_class)[attr_token]
         except KeyError:
             if attr_token != 'slug':
                 # If we encounter a non-resource attribute, we assume
                 # an embedded document (which implies that the last
                 # token was a terminal).
                 infos[-1][-1] = \
                     '.'.join([infos[-1][-1]] + attr_tokens[idx:])
                 # Unfortunately, we can not infer the type of embedded
                 # attributes.
                 infos[-1][1] = None
                 do_append = False
             else:
                 # The 'slug' attribute is special as it is not a properly
                 # declared resource attribute but needs to be queryable.
                 attr_kind = RESOURCE_ATTRIBUTE_KINDS.TERMINAL
                 attr_type = str
         else:
             attr_kind = attr.kind
             if attr_kind != RESOURCE_ATTRIBUTE_KINDS.TERMINAL:
                 entity_class = get_entity_class(attr.attr_type)
                 attr_type = entity_class
             else:
                 attr_type = attr.attr_type
         if do_append:
             infos.append([attr_kind, attr_type, attr_token])
     return infos