def test_split_model_fields(self): """ Tests splitting a list of field names based on what fields an object has. """ f1 = 'field_one' f2 = 'field_two' f3 = 'no_field_three' f4 = 'no_field_four' obj = DummyClass() fields_to_split = [f1, f2, f3, f4] obj_fields, non_obj_fields = split_model_fields(obj, fields_to_split) self.assertEqual(obj_fields, [f1, f2]) self.assertEqual(non_obj_fields, [f3, f4]) fields_to_split = [f1] obj_fields, non_obj_fields = split_model_fields(obj, fields_to_split) self.assertEqual(obj_fields, [f1]) self.assertEqual(non_obj_fields, []) fields_to_split = [f4] obj_fields, non_obj_fields = split_model_fields(obj, fields_to_split) self.assertEqual(obj_fields, []) self.assertEqual(non_obj_fields, [f4])
def test_split_model_fields(self): """ Tests splitting a list of field names based on what fields an object has. """ f1 = 'field_one' f2 = 'field_two' f3 = 'no_field_three' f4 = 'no_field_four' obj = DummyClass() fields_to_split = [f1, f2, f3, f4] obj_fields, non_obj_fields = split_model_fields(obj, fields_to_split) self.assertEqual(obj_fields, [f1, f2]) self.assertEqual(non_obj_fields, [f3, f4]) fields_to_split = [f1] obj_fields, non_obj_fields = split_model_fields(obj, fields_to_split) self.assertEqual(obj_fields, [f1]) self.assertEqual(non_obj_fields, []) fields_to_split = [f4] obj_fields, non_obj_fields = split_model_fields(obj, fields_to_split) self.assertEqual(obj_fields, []) self.assertEqual(non_obj_fields, [f4])
def to_dict(self, fields=None, include_related_data=True): """ Returns a dict version of the TaxLotState, either with all fields or masked to just those requested. """ # TODO: make this a serializer and/or merge with PropertyState.to_dict if fields: model_fields, ed_fields = split_model_fields(self, fields) extra_data = self.extra_data ed_fields = list(filter(lambda f: f in extra_data, ed_fields)) result = {field: getattr(self, field) for field in model_fields} result['extra_data'] = { field: extra_data[field] for field in ed_fields } # always return id's result['id'] = result['pk'] = self.pk return result d = obj_to_dict(self, include_m2m=include_related_data) return d
def to_dict(self, fields=None, include_related_data=True): """ Returns a dict version of this building, either with all fields or masked to just those requested. """ if fields: model_fields, ed_fields = split_model_fields(self, fields) extra_data = self.extra_data ed_fields = filter(lambda f: f in extra_data, ed_fields) result = { field: getattr(self, field) for field in model_fields } result['extra_data'] = { field: extra_data[field] for field in ed_fields } # always return id's and canonical_building id's result['id'] = result['pk'] = self.pk result['canonical_building'] = ( self.canonical_building and self.canonical_building.pk ) # should probably also return children, parents, and coparent result['children'] = map(lambda c: c.id, self.children.all()) result['parents'] = map(lambda p: p.id, self.parents.all()) result['co_parent'] = (self.co_parent and self.co_parent.pk) result['coparent'] = (self.co_parent and { field: self.co_parent.pk for field in ['pk', 'id'] }) return result d = obj_to_dict(self, include_m2m=include_related_data) if include_related_data: d['parents'] = list(self.parents.values_list('id', flat=True)) d['co_parent'] = self.co_parent.pk if self.co_parent else None return d
def to_dict(self, fields=None, include_related_data=True): """ Returns a dict version of this building, either with all fields or masked to just those requested. """ if fields: model_fields, ed_fields = split_model_fields(self, fields) extra_data = self.extra_data ed_fields = filter(lambda f: f in extra_data, ed_fields) result = { field: getattr(self, field) for field in model_fields } result['extra_data'] = { field: extra_data[field] for field in ed_fields } # always return id's and canonical_building id's result['id'] = result['pk'] = self.pk result['canonical_building'] = ( self.canonical_building and self.canonical_building.pk ) # should probably also return children, parents, and coparent result['children'] = map(lambda c: c.id, self.children.all()) result['parents'] = map(lambda p: p.id, self.parents.all()) result['co_parent'] = (self.co_parent and self.co_parent.pk) result['coparent'] = (self.co_parent and { field: self.co_parent.pk for field in ['pk', 'id'] }) return result d = obj_to_dict(self, include_m2m=include_related_data) if include_related_data: d['parents'] = list(self.parents.values_list('id', flat=True)) d['co_parent'] = self.co_parent.pk if self.co_parent else None return d