def update( self, product_name: Optional[str], year: Optional[int] = None, month: Optional[int] = None, day: Optional[int] = None, generate_missing_children: Optional[bool] = True, force_refresh: Optional[bool] = False, ): """Update the given summary and return the new one""" product = self._product(product_name) get_child = self.get_or_update if generate_missing_children else self.get if year and month and day: # Don't store days, they're quick. return self._summariser.calculate_summary( product_name, _utils.as_time_range(year, month, day)) elif year and month: summary = self._summariser.calculate_summary( product_name, _utils.as_time_range(year, month)) elif year: summary = TimePeriodOverview.add_periods( get_child(product_name, year, month_, None, force_refresh=force_refresh) for month_ in range(1, 13)) elif product_name: if product.dataset_count > 0: years = range(product.time_earliest.year, product.time_latest.year + 1) else: years = [] summary = TimePeriodOverview.add_periods( get_child(product_name, year_, None, None, force_refresh=force_refresh) for year_ in years) else: summary = TimePeriodOverview.add_periods( get_child(product.name, None, None, None, force_refresh=force_refresh) for product in self.all_dataset_types()) self._do_put(product_name, year, month, day, summary) for listener in self._update_listeners: listener(product_name, year, month, day, summary) return summary
def test_add_period_list(): total = TimePeriodOverview.add_periods([]) assert total.dataset_count == 0 joined = TimePeriodOverview.add_periods([_overview(), _overview(), total]) assert joined.dataset_count == _overview().dataset_count * 2 assert _overview().footprint_geometry.area == pytest.approx( joined.footprint_geometry.area) assert sum(joined.region_dataset_counts.values()) == joined.dataset_count assert sum(joined.timeline_dataset_counts.values()) == joined.dataset_count assert joined.crses == _overview().crses assert joined.size_bytes == _overview().size_bytes * 2 assert sorted(joined.region_dataset_counts.keys()) == ["1_2", "3_4", "4_5"]