예제 #1
0
 def _get_global_items(self, global_types, domain):
     items_by_type = defaultdict(list)
     for item in FixtureDataItem.by_data_types(domain, global_types):
         data_type = global_types[item.data_type_id]
         self._set_cached_type(item, data_type)
         items_by_type[data_type].append(item)
     return self._get_fixtures(global_types, items_by_type, GLOBAL_USER_ID)
예제 #2
0
 def _get_global_items(self, global_types, domain, bypass_cache):
     items_by_type = defaultdict(list)
     for item in FixtureDataItem.by_data_types(domain, global_types, bypass_cache):
         data_type = global_types[item.data_type_id]
         self._set_cached_type(item, data_type)
         items_by_type[data_type].append(item)
     return self._get_fixtures(global_types, items_by_type, GLOBAL_USER_ID)
예제 #3
0
    def __call__(self, restore_state):
        restore_user = restore_state.restore_user

        all_types = {t._id: t for t in FixtureDataType.by_domain(restore_user.domain)}
        global_types = {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

        items = FixtureDataItem.by_data_types(restore_user.domain, global_types)
        for item in items:
            _set_cached_type(item, global_types[item.data_type_id])
            items_by_type[item.data_type_id].append(item)

        if set(all_types) - set(global_types):
            # only query ownership models if there are non-global types
            other_items = restore_user.get_fixture_data_items()

            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
                try:
                    _set_cached_type(item, all_types[item.data_type_id])
                except (AttributeError, KeyError):
                    continue
                items_by_type[item.data_type_id].append(item)

        fixtures = []
        types_sorted_by_tag = sorted(all_types.iteritems(), key=lambda (id_, type_): type_.tag)
        for data_type_id, data_type in types_sorted_by_tag:
            if data_type.is_indexed:
                fixtures.append(self._get_schema_element(data_type))
            items = sorted(items_by_type.get(data_type_id, []), key=lambda x: x.sort_key)
            fixtures.append(self._get_fixture_element(data_type, restore_user.user_id, items))
        return fixtures