Esempio n. 1
0
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')]
     )
Esempio n. 3
0
    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))
Esempio n. 6
0
 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
Esempio n. 7
0
 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
Esempio n. 8
0
    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
Esempio n. 9
0
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
Esempio n. 10
0
    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))
Esempio n. 11
0
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
Esempio n. 12
0
    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)
Esempio n. 14
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')