def test_defaults(self): rc_attr = get_resource_class_attribute(MyEntityMember, 'number') mp_attr = MappedAttribute(rc_attr) assert mp_attr.repr_name == rc_attr.entity_attr with pytest.raises(AttributeError): getattr(mp_attr, 'foo') assert str(mp_attr).startswith(mp_attr.attr_type.__name__)
def visit(self, key, attribute_options): # We only collect load options for attributes which are explicitly not # ignored or member attributes unless they are explicitly ignored. ignore_opt = attribute_options.get(IGNORE_OPTION) if not ignore_opt is True: rc = get_member_class(self._context) entity_attr_names = [] store_key = True for idx, attr_name in enumerate(key): attr = get_resource_class_attribute(rc, attr_name) if attr is None: # Referencing non-existing attribute; ignore. store_key = False break elif idx == 0 \ and is_collection_attribute(attr) \ and not ignore_opt is False: # Referencing collection attribute which was not # explicitly enabled. store_key = False break entity_attr_name = attr.entity_attr if is_terminal_attribute(attr): if '.' in entity_attr_name: entity_attr_name = \ entity_attr_name[:entity_attr_name.rfind('.')] else: store_key = False break entity_attr_names.append(entity_attr_name) rc = attr.attr_type if store_key: self.__attr_map[key] = entity_attr_names
def test_inheritance(self): class MyEntityDerivedMember(MyEntityMember): text = terminal_attribute(int, 'text') attr = get_resource_class_attribute(MyEntityDerivedMember, 'text') self.assert_equal(attr.kind, RESOURCE_ATTRIBUTE_KINDS.TERMINAL) self.assert_equal(attr.entity_attr, 'text') self.assert_equal(attr.attr_type, int)
def test_printing_with_none_value(self): data_el = SimpleMemberDataElement.create() self.assert_equal(list(data_el.terminals.keys()), []) rc_attr = get_resource_class_attribute(MyEntityMember, 'text') mp_attr = MappedAttribute(rc_attr) data_el.set_terminal(mp_attr, None) # Need one None attr value. prt_str = str(data_el) self.assert_true(prt_str.startswith(data_el.__class__.__name__)) self.assert_true(prt_str.endswith(')'))
def test_printing_with_none_value(self): data_el = SimpleMemberDataElement.create() assert list(data_el.terminals.keys()) == [] rc_attr = get_resource_class_attribute(MyEntityMember, 'text') mp_attr = MappedAttribute(rc_attr) data_el.set_terminal(mp_attr, None) # Need one None attr value. prt_str = str(data_el) assert prt_str.startswith(data_el.__class__.__name__) assert prt_str.endswith(')')
def test_member_data_element(self): data_el = SimpleMemberDataElement.create() # Test nesteds. assert list(data_el.nesteds.keys()) == [] parent_data_el = SimpleMemberDataElement.create() rc_nested_attr = \ get_resource_class_attribute(MyEntityMember, 'parent') mp_nested_attr = MappedAttribute(rc_nested_attr) data_el.set_nested(mp_nested_attr, parent_data_el) assert data_el.get_nested(mp_nested_attr) is parent_data_el assert list(data_el.nesteds.keys()) == ['parent'] # Test terminals. assert list(data_el.terminals.keys()) == [] utc = timezone('UTC') ldt = datetime.datetime(2012, 8, 29, 16, 20, 0, tzinfo=utc) term_attr_data = OrderedDict(text='foo', number=0, date_time=ldt) for term_attr_name, term_attr_value in term_attr_data.items(): rc_attr = get_resource_class_attribute(MyEntityMember, term_attr_name) mp_attr = MappedAttribute(rc_attr) # Check setting to None value. data_el.set_terminal(mp_attr, None) assert data_el.get_terminal(mp_attr) is None data_el.set_terminal_converted(mp_attr, None) assert data_el.get_terminal(mp_attr) is None # Check setting to value. data_el.set_terminal(mp_attr, term_attr_value) assert data_el.get_terminal(mp_attr) == term_attr_value rpr_val = data_el.get_terminal_converted(mp_attr) data_el.set_terminal_converted(mp_attr, rpr_val) assert data_el.get_terminal(mp_attr) == term_attr_value assert list(data_el.terminals.keys()) == list(term_attr_data.keys()) # Printing. prt_str = str(data_el) assert prt_str.startswith(data_el.__class__.__name__) assert prt_str.endswith(')') # Attribute iteration. for attr_name, attr_value in iteritems_(term_attr_data): assert data_el.get_attribute(attr_name) == attr_value for de_attr_name, de_attr_value in data_el.iterator(): if de_attr_name in term_attr_data: assert de_attr_value == term_attr_data[de_attr_name]
def test_clone(self): rc_attr = get_resource_class_attribute(MyEntityMember, 'number') mp_attr = MappedAttribute(rc_attr) mp_attr_clone = mp_attr.clone() self.assert_equal(mp_attr.options, mp_attr_clone.options) self.assert_equal(mp_attr.name, mp_attr_clone.name) self.assert_equal(mp_attr.kind, mp_attr_clone.kind) self.assert_equal(mp_attr.value_type, mp_attr_clone.value_type) self.assert_equal(mp_attr.entity_name, mp_attr_clone.entity_name) self.assert_equal(mp_attr.cardinality, mp_attr_clone.cardinality)
def test_clone(self): rc_attr = get_resource_class_attribute(MyEntityMember, 'number') mp_attr = MappedAttribute(rc_attr) mp_attr_clone = mp_attr.clone() assert mp_attr.options == mp_attr_clone.options assert mp_attr.name == mp_attr_clone.name assert mp_attr.kind == mp_attr_clone.kind assert mp_attr.value_type == mp_attr_clone.value_type assert mp_attr.entity_name == mp_attr_clone.entity_name assert mp_attr.cardinality == mp_attr_clone.cardinality
def test_member_data_element(self): data_el = SimpleMemberDataElement.create() # Test nesteds. self.assert_equal(list(data_el.nesteds.keys()), []) parent_data_el = SimpleMemberDataElement.create() rc_nested_attr = \ get_resource_class_attribute(MyEntityMember, 'parent') mp_nested_attr = MappedAttribute(rc_nested_attr) data_el.set_nested(mp_nested_attr, parent_data_el) self.assert_true(data_el.get_nested(mp_nested_attr) is parent_data_el) self.assert_equal(list(data_el.nesteds.keys()), ['parent']) # Test terminals. self.assert_equal(list(data_el.terminals.keys()), []) utc = timezone('UTC') ldt = datetime.datetime(2012, 8, 29, 16, 20, 0, tzinfo=utc) term_attr_data = OrderedDict(text='foo', number=0, date_time=ldt) for term_attr_name, term_attr_value in term_attr_data.items(): rc_attr = get_resource_class_attribute(MyEntityMember, term_attr_name) mp_attr = MappedAttribute(rc_attr) # Check setting to None value. data_el.set_terminal(mp_attr, None) self.assert_true(data_el.get_terminal(mp_attr) is None) data_el.set_terminal_converted(mp_attr, None) self.assert_true(data_el.get_terminal(mp_attr) is None) # Check setting to value. data_el.set_terminal(mp_attr, term_attr_value) self.assert_equal(data_el.get_terminal(mp_attr), term_attr_value) rpr_val = data_el.get_terminal_converted(mp_attr) data_el.set_terminal_converted(mp_attr, rpr_val) self.assert_equal(data_el.get_terminal(mp_attr), term_attr_value) self.assert_equal(list(data_el.terminals.keys()), list(term_attr_data.keys())) # Printing. prt_str = str(data_el) self.assert_true(prt_str.startswith(data_el.__class__.__name__)) self.assert_true(prt_str.endswith(')'))
def test_make_relationship(self): ent = MyEntity(id=0) coll = get_root_collection(IMyEntity) mb = coll.create_member(ent) attr = get_resource_class_attribute(IMyEntity, "parent") rel = attr.make_relationship(mb) self.assert_true(isinstance(rel, ResourceRelationship)) parent = MyEntityParent(id=0) parent_coll = get_root_collection(IMyEntityParent) parent_mb = parent_coll.create_member(parent) self.assert_true(ent.parent is None) rel.add(parent_mb) self.assert_true(ent.parent is parent) rel.remove(parent_mb) self.assert_true(ent.parent is None) rel = attr.make_relationship(ent) self.assert_true(isinstance(rel, DomainRelationship)) self.assert_raises(ValueError, attr.make_relationship, None)
def test_make_relationship(self): ent = MyEntity(id=0) coll = get_root_collection(IMyEntity) mb = coll.create_member(ent) attr = get_resource_class_attribute(IMyEntity, 'parent') rel = attr.make_relationship(mb) self.assert_true(isinstance(rel, ResourceRelationship)) parent = MyEntityParent(id=0) parent_coll = get_root_collection(IMyEntityParent) parent_mb = parent_coll.create_member(parent) self.assert_true(ent.parent is None) rel.add(parent_mb) self.assert_true(ent.parent is parent) rel.remove(parent_mb) self.assert_true(ent.parent is None) rel = attr.make_relationship(ent) self.assert_true(isinstance(rel, DomainRelationship)) self.assert_raises(ValueError, attr.make_relationship, None)
def __convert_to_entity_attr(self, rc_attr_name): entity_attr_tokens = [] rc_class = self.__rc_class for rc_attr_token in rc_attr_name.split('.'): rc_attr = get_resource_class_attribute(rc_class, rc_attr_token) if rc_attr is None: raise ValueError('%s resource does not have an attribute ' '"%s".' % (rc_class.__name__, rc_attr_name)) ent_attr_name = rc_attr.entity_attr if ent_attr_name is None: raise ValueError('Resource attribute "%s" does not have a ' 'corresponding entity attribute.' % rc_attr.resource_attr) if rc_attr.kind != RESOURCE_ATTRIBUTE_KINDS.TERMINAL: # Look up the member class for the specified member or # collection resource interface. rc_class = get_member_class(rc_attr.attr_type) entity_attr_tokens.append(ent_attr_name) return '.'.join(entity_attr_tokens)
def __convert_to_entity_attr(self, rc_attr_name): entity_attr_tokens = [] rc_class = self.__rc_class for rc_attr_token in rc_attr_name.split('.'): rc_attr = get_resource_class_attribute(rc_class, rc_attr_token) if rc_attr is None: raise AttributeError('%s resource does not have an attribute ' '"%s".' % (rc_class.__name__, rc_attr_name)) ent_attr_name = rc_attr.entity_attr if ent_attr_name is None: raise ValueError('Resource attribute "%s" does not have a ' 'corresponding entity attribute.' % rc_attr.resource_attr) if rc_attr.kind != RESOURCE_ATTRIBUTE_KINDS.TERMINAL: # Look up the member class for the specified member or # collection resource interface. rc_class = get_member_class(rc_attr.attr_type) entity_attr_tokens.append(ent_attr_name) return '.'.join(entity_attr_tokens)
def test_ignore(self): rc_attr = get_resource_class_attribute(MyEntityMember, 'number') mp_attr = MappedAttribute(rc_attr, options={IGNORE_OPTION:False}) self.assert_true(getattr(mp_attr, IGNORE_OPTION) is False)
def test_defaults(self): rc_attr = get_resource_class_attribute(MyEntityMember, 'number') mp_attr = MappedAttribute(rc_attr) self.assert_equal(mp_attr.repr_name, rc_attr.entity_attr) self.assert_raises(AttributeError, getattr, mp_attr, 'foo') self.assert_true(str(mp_attr).startswith(mp_attr.attr_type.__name__))
def __getitem__(self, item): ident = identifier_from_slug(item) attr = get_resource_class_attribute(self.__class__, ident) if attr is None or attr.kind == RESOURCE_ATTRIBUTE_KINDS.TERMINAL: raise KeyError('%s' % ident) return getattr(self, ident)
def test_ignore(self): rc_attr = get_resource_class_attribute(MyEntityMember, 'number') mp_attr = MappedAttribute(rc_attr, options={IGNORE_OPTION: False}) assert getattr(mp_attr, IGNORE_OPTION) is False
def __getitem__(self, item): ident = identifier_from_slug(item) attr = get_resource_class_attribute(self.__class__, ident) if attr is None: raise KeyError('%s' % ident) return getattr(self, ident)