"""Interface to the ows-analytics microservice.""" import json from oto import response from owsrequest import request from analytics.connectors import redis from analytics.consts import services def get_available_feeds(account_type, account_id, orchard_user_id): """Get available feeds. Result for each Orchard-User-Id is cached for 1 hour. Return response.Response: response object containing available feeds """ resource = '/feeds' headers = { 'Grass-Account-Type': account_type, 'Grass-Account-Id': account_id, 'Orchard-User-Id': orchard_user_id } cache_key = 'feeds:{account_type}:{account_id}:{orchard_user_id}'.format( account_type=account_type, account_id=account_id, orchard_user_id=orchard_user_id) cached_result = redis.client.get(cache_key) if cached_result: return response.Response(json.loads(cached_result.decode('utf8'))) ows_analytics_response = request.get( services.OWS_ANALYTICS, resource, headers=headers) response_body = ows_analytics_response.json() if ows_analytics_response.status_code != 200: return response.create_error_response( status=ows_analytics_response.status_code, code=response_body.get('code'), message=response_body.get('message')) # cache results for 1 hour redis.client.set(cache_key, json.dumps(response_body), ex=60*60) return response.Response(message=response_body)