def item_lists(user, version=V2, last_sync=None): if isinstance(user, CommCareUser): pass elif hasattr(user, "_hq_user") and user._hq_user is not None: user = user._hq_user else: return [] items = FixtureDataItem.by_user(user) data_types = {} items_by_type = defaultdict(list) for item in items: if not data_types.has_key(item.data_type_id): try: data_types[item.data_type_id] = FixtureDataType.get(item.data_type_id) except (ResourceNotFound, AttributeError): continue items_by_type[item.data_type_id].append(item) item._data_type = data_types[item.data_type_id] fixtures = [] for data_type in data_types.values(): xFixture = ElementTree.Element('fixture', attrib={'id': 'item-list:%s' % data_type.tag, 'user_id': user.user_id}) xItemList = ElementTree.Element('%s_list' % data_type.tag) xFixture.append(xItemList) for item in items_by_type[data_type.get_id]: xItemList.append(item.to_xml()) fixtures.append(xFixture) return fixtures
def test_sees_own_fixture_and_parent_fixture(self): fixture_items = FixtureDataItem.by_user(self.boston_user) self.assertItemsEqual( [(self._get_value(item, 'cost'), self._get_value(item, 'location_name')) for item in fixture_items], [('8', 'Suffolk'), ('10', 'Boston')] )
def test_ownership(self): self.assertItemsEqual([self.data_item.get_id], FixtureDataItem.by_user(self.user, wrap=False)) self.assertItemsEqual([self.user.get_id], self.data_item.get_all_users(wrap=False)) fixture, = fixturegenerators.item_lists(self.user) check_xml_line_by_line( self, """ <fixture id="item-list:contact" user_id="%s"> <contact_list> <contact> <name>John</name> <number>+15555555555</number> </contact> </contact_list> </fixture> """ % self.user.user_id, ElementTree.tostring(fixture)) self.data_item.remove_user(self.user) self.assertItemsEqual([], self.data_item.get_all_users()) self.fixture_ownership = self.data_item.add_user(self.user) self.assertItemsEqual([self.user.get_id], self.data_item.get_all_users(wrap=False))
def test_sees_own_fixture_and_parent_fixture(self): fixture_items = FixtureDataItem.by_user(self.boston_user) self.assertItemsEqual( [(self._get_value(item, 'cost'), self._get_value(item, 'location_name')) for item in fixture_items], [('8', 'Suffolk'), ('10', 'Boston')] )
def test_ownership(self): self.assertItemsEqual([self.data_item.get_id], FixtureDataItem.by_user(self.user, wrap=False)) self.assertItemsEqual([self.user.get_id], self.data_item.get_all_users(wrap=False)) fixture, = call_fixture_generator(self.user.to_ota_restore_user()) check_xml_line_by_line( self, """ <fixture id="item-list:district" user_id="%s"> <district_list> <district> <state_name>Delhi_state</state_name> <district_name lang="hin">Delhi_in_HIN</district_name> <district_name lang="eng">Delhi_in_ENG</district_name> <district_id>Delhi_id</district_id> </district> </district_list> </fixture> """ % self.user.user_id, ElementTree.tostring(fixture)) self.data_item.remove_user(self.user) self.assertItemsEqual([], self.data_item.get_all_users()) self.fixture_ownership = self.data_item.add_user(self.user) self.assertItemsEqual([self.user.get_id], self.data_item.get_all_users(wrap=False))
def user_to_dctl(self, user): dctl_name = "Unknown DCTL" dctl_id = None data_items = list(FixtureDataItem.by_user(user, domain=self.domain)) for item in data_items: if item.data_type_id == self.dctl_fixture: dctl_id = item.fields_without_attributes.get("id") dctl_name = item.fields_without_attributes.get("name", dctl_name) return dctl_id, dctl_name
def user_to_dctl(self, user): dctl_name = "Unknown DCTL" dctl_id = None data_items = list(FixtureDataItem.by_user(user, domain=self.domain)) for item in data_items: if item.data_type_id == self.dctl_fixture: dctl_id = item.fields.get('id') dctl_name = item.fields.get('name', dctl_name) return dctl_id, dctl_name
def __call__(self, user, version, last_sync=None): assert isinstance(user, CommCareUser) all_types = dict([(t._id, t) for t in FixtureDataType.by_domain(user.domain)]) global_types = dict([(id, t) for id, t in all_types.items() if t.is_global]) items_by_type = defaultdict(list) def _set_cached_type(item, data_type): # set the cached version used by the object so that it doesn't # have to do another db trip later item._data_type = data_type for global_fixture in global_types.values(): items = list( FixtureDataItem.by_data_type(user.domain, global_fixture)) _ = [_set_cached_type(item, global_fixture) for item in items] items_by_type[global_fixture._id] = items other_items = FixtureDataItem.by_user(user) data_types = {} for item in other_items: if item.data_type_id in global_types: continue # was part of the global type so no need to add here if item.data_type_id not in data_types: try: data_types[item.data_type_id] = all_types[ item.data_type_id] except (AttributeError, KeyError): continue items_by_type[item.data_type_id].append(item) _set_cached_type(item, data_types[item.data_type_id]) fixtures = [] all_types = data_types.values() + global_types.values() for data_type in all_types: xFixture = ElementTree.Element('fixture', attrib={ 'id': ':'.join( (self.id, data_type.tag)), 'user_id': user.user_id }) xItemList = ElementTree.Element('%s_list' % data_type.tag) xFixture.append(xItemList) for item in sorted(items_by_type[data_type.get_id], key=lambda x: x.sort_key): xItemList.append(item.to_xml()) fixtures.append(xFixture) return fixtures
def item_lists(user, version=V2, last_sync=None): if isinstance(user, CommCareUser): pass elif hasattr(user, "_hq_user") and user._hq_user is not None: user = user._hq_user else: return [] all_types = dict([(t._id, t) for t in FixtureDataType.by_domain(user.domain)]) global_types = dict([(id, t) for id, t in all_types.items() if t.is_global]) items_by_type = defaultdict(list) def _set_cached_type(item, data_type): # set the cached version used by the object so that it doesn't # have to do another db trip later item._data_type = data_type for global_fixture in global_types.values(): items = list(FixtureDataItem.by_data_type(user.domain, global_fixture)) _ = [_set_cached_type(item, global_fixture) for item in items] items_by_type[global_fixture._id] = items other_items = FixtureDataItem.by_user(user) data_types = {} for item in other_items: if item.data_type_id in global_types: continue # was part of the global type so no need to add here if not data_types.has_key(item.data_type_id): try: data_types[item.data_type_id] = all_types[item.data_type_id] except (AttributeError, KeyError): continue items_by_type[item.data_type_id].append(item) _set_cached_type(item, data_types[item.data_type_id]) fixtures = [] all_types = data_types.values() + global_types.values() for data_type in all_types: xFixture = ElementTree.Element('fixture', attrib={'id': 'item-list:%s' % data_type.tag, 'user_id': user.user_id}) xItemList = ElementTree.Element('%s_list' % data_type.tag) xFixture.append(xItemList) for item in sorted(items_by_type[data_type.get_id], key=lambda x: x.sort_key): xItemList.append(item.to_xml()) fixtures.append(xFixture) return fixtures
def test_ownership(self): self.assertItemsEqual([self.data_item.get_id], FixtureDataItem.by_user(self.user, wrap=False)) self.assertItemsEqual([self.user.get_id], self.data_item.get_all_users(wrap=False)) fixture, = fixturegenerators.item_lists(self.user, version=V2, last_sync=None) check_xml_line_by_line(self, """ <fixture id="item-list:contact" user_id="%s"> <contact_list> <contact> <name>John</name> <number>+15555555555</number> </contact> </contact_list> </fixture> """ % self.user.user_id, ElementTree.tostring(fixture)) self.data_item.remove_user(self.user) self.assertItemsEqual([], self.data_item.get_all_users()) self.fixture_ownership = self.data_item.add_user(self.user) self.assertItemsEqual([self.user.get_id], self.data_item.get_all_users(wrap=False))
def item_lists(user, version=V2, last_sync=None): if isinstance(user, CommCareUser): pass elif hasattr(user, "_hq_user") and user._hq_user is not None: user = user._hq_user else: return [] items = FixtureDataItem.by_user(user) data_types = {} items_by_type = defaultdict(list) for item in items: if not data_types.has_key(item.data_type_id): try: data_types[item.data_type_id] = FixtureDataType.get( item.data_type_id) except (ResourceNotFound, AttributeError): continue items_by_type[item.data_type_id].append(item) item._data_type = data_types[item.data_type_id] fixtures = [] for data_type in data_types.values(): xFixture = ElementTree.Element('fixture', attrib={ 'id': 'item-list:%s' % data_type.tag, 'user_id': user.user_id }) xItemList = ElementTree.Element('%s_list' % data_type.tag) xFixture.append(xItemList) for item in sorted(items_by_type[data_type.get_id], key=lambda x: x.sort_key): xItemList.append(item.to_xml()) fixtures.append(xFixture) return fixtures
def test_ownership(self): self.assertItemsEqual([self.data_item.get_id], FixtureDataItem.by_user(self.user, wrap=False)) self.assertItemsEqual([self.user.get_id], self.data_item.get_all_users(wrap=False)) fixture, = fixturegenerators.item_lists(self.user, V2) check_xml_line_by_line(self, """ <fixture id="item-list:district" user_id="%s"> <district_list> <district> <state_name>Delhi_state</state_name> <district_name lang="hin">Delhi_in_HIN</district_name> <district_name lang="eng">Delhi_in_ENG</district_name> <district_id>Delhi_id</district_id> </district> </district_list> </fixture> """ % self.user.user_id, ElementTree.tostring(fixture)) self.data_item.remove_user(self.user) self.assertItemsEqual([], self.data_item.get_all_users()) self.fixture_ownership = self.data_item.add_user(self.user) self.assertItemsEqual([self.user.get_id], self.data_item.get_all_users(wrap=False))
def test_has_no_assigned_fixture(self): fixture_items = FixtureDataItem.by_user(self.middlesex_user) self.assertEqual(len(fixture_items), 0)
def get_fixture_data_items(self): from corehq.apps.fixtures.models import FixtureDataItem return FixtureDataItem.by_user(self._couch_user)
def test_sees_fixture_at_own_location(self): fixture_items = FixtureDataItem.by_user(self.suffolk_user) self.assertEqual(len(fixture_items), 1) self.assertEqual(self._get_value(fixture_items[0], 'cost'), '8') self.assertEqual(self._get_value(fixture_items[0], 'location_name'), 'Suffolk')
def test_has_no_assigned_fixture(self): fixture_items = FixtureDataItem.by_user(self.middlesex_user) self.assertEqual(len(fixture_items), 0)
def test_sees_fixture_at_own_location(self): fixture_items = FixtureDataItem.by_user(self.suffolk_user) self.assertEqual(len(fixture_items), 1) self.assertEqual(self._get_value(fixture_items[0], 'cost'), '8') self.assertEqual(self._get_value(fixture_items[0], 'location_name'), 'Suffolk')