def test_member_data_element(self): data_el = SimpleMemberDataElement.create() # Test nesteds. self.assert_equal(data_el.nesteds.keys(), []) parent_data_el = SimpleMemberDataElement.create() rc_nested_attr = MyEntityMember.get_attributes()['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(data_el.nesteds.keys(), ['parent']) # Test terminals. self.assert_equal(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 = MyEntityMember.get_attributes()[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(data_el.terminals.keys(), 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_clone(self): rc_attr = MyEntityMember.get_attributes()['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_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 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_printing_with_none_value(self): data_el = SimpleMemberDataElement.create() self.assert_equal(data_el.terminals.keys(), []) rc_attr = MyEntityMember.get_attributes()['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_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 __collect_mapped_attributes(self, mapped_class, key): if isinstance(key, MappedAttributeKey): names = key.names else: names = key collected_mp_attrs = OrderedDict() is_mapped_cls = mapped_class is self.__mapped_cls if len(names) == 0 and is_mapped_cls: # Bootstrapping: fetch resource attributes and create new # mapped attributes. rc_attrs = get_resource_class_attributes(self.__mapped_cls) for rc_attr in itervalues_(rc_attrs): attr_key = names + (rc_attr.resource_attr,) attr_mp_opts = \ self.__configurations[-1].get_attribute_options(attr_key) new_mp_attr = MappedAttribute(rc_attr, options=attr_mp_opts) collected_mp_attrs[new_mp_attr.resource_attr] = new_mp_attr else: # Indirect access - fetch mapped attributes from some other # class' mapping and clone. if is_mapped_cls: mp = self elif len(names) == 0 and self.__is_collection_mapping: if provides_member_resource(mapped_class): # Mapping a polymorphic member class. mapped_coll_cls = get_collection_class(mapped_class) else: # Mapping a derived collection class. mapped_coll_cls = mapped_class mp = self.__mp_reg.find_or_create_mapping(mapped_coll_cls) else: mp = self.__mp_reg.find_or_create_mapping(mapped_class) mp_attrs = mp.get_attribute_map() for mp_attr in itervalues_(mp_attrs): attr_key = names + (mp_attr.name,) attr_mp_opts = \ dict(((k, v) for (k, v) in iteritems_(self.__configurations[-1] .get_attribute_options(attr_key)) if not v is None)) clnd_mp_attr = mp_attr.clone(options=attr_mp_opts) collected_mp_attrs[mp_attr.resource_attr] = clnd_mp_attr return collected_mp_attrs
def test_ignore(self): rc_attr = MyEntityMember.get_attributes()['number'] mp_attr = MappedAttribute(rc_attr, options={IGNORE_OPTION: False}) self.assert_true(mp_attr.ignore_on_read is False) self.assert_true(mp_attr.ignore_on_write is False)
def test_defaults(self): rc_attr = MyEntityMember.get_attributes()['number'] mp_attr = MappedAttribute(rc_attr) self.assert_equal(mp_attr.repr_name, rc_attr.name) self.assert_raises(AttributeError, getattr, mp_attr, 'foo') self.assert_true(str(mp_attr).startswith(mp_attr.__class__.__name__))
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 test_invalid_kind(self): attr = terminal_attribute(str, 'foo') attr.kind = 'INVALID' mp_attr = MappedAttribute(attr, options={IGNORE_OPTION:None}) key = MappedAttributeKey(()) self.assert_raises(ValueError, mp_attr.should_ignore, key)