def _update_total_meters_count(request, filters): ''' Temporarily stores total_meters_count into session for speeding up queries Result expires after 1000 seconds or filter criteria has changed. :param request: Django request object criteria: :return: (int) total meters' count ''' if 'limit' in filters: filters.pop('limit') if 'skip' in filters: filters.pop('skip') if 'total_meters_count' in request.session: refreshed_time = request.session['refreshed_time'] delta = time.time() - refreshed_time if delta < 1000 and request.session['criteria_hash'] == filters: return request.session['refreshed_time'] = time.time() request.session['criteria_hash'] = filters # TODO: Error handling for hashing meter_list # Resend the request purged of limit and skip to get total record number token_id = request.session['token'].id new_ceilometer_api = CeilometerApi(token_id) try: meter_list = new_ceilometer_api.get_meters(**filters) request.session['total_meters_count'] = len(meter_list) except (err.ClientSideError, err.ServerSideError), e: request.session['total_meters_count'] = 0 return _report_error(e.message)