def cached_time_series(identifier, start, end): """ Cached time series """ def time_series_key(identifier, start, end): return str(hash(('ts::%s::%s:%s' % ( str(identifier), start, end)).replace(' ', '_'))) cache_key = time_series_key(identifier, start, end) ts = cache.get(cache_key) if ts is None: # Actually fetching time series source_name = identifier['fews_norm_source_slug'] source = FewsNormSource.objects.get(slug=source_name) params = {} if 'geo_ident' in identifier: params['location'] = identifier['geo_ident'] if 'par_ident' in identifier: params['parameter'] = identifier['par_ident'] if 'mod_ident' in identifier: params['moduleinstance'] = identifier['mod_ident'] if 'stp_ident' in identifier: params['timestep'] = identifier['stp_ident'] if 'qua_ident' in identifier and identifier['qua_ident']: params['qualifierset'] = identifier['qua_ident'] series = Series.from_raw( schema_prefix=source.database_schema_name, params=params).using(source.database_name) ts = Event.time_series(source, series, start, end) cache.set(cache_key, ts) return ts
def time_series( self, series=None, dt_start=None, dt_end=None, with_comments=False): """ Return dictionary of timeseries. Low level fewsnorm stuff. Keys are (location, parameter), value is timeseries object. 1) which series 2) retrieve events (with comments) for each series Note: with_comments does nothing anymore, comments are always returned. The option is still there for compatibility. """ if not series: series = self.series() source = self.fews_norm_source events = Event.time_series(source, series, dt_start, dt_end) return events