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)
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)
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