Source code for pacifica.policy.reporting.transaction.transaction_summary

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""CherryPy Status Metadata object class."""
import requests
from cherrypy import tools, request
from pacifica.policy.validation import validate_user
from pacifica.policy.config import get_config
from pacifica.policy.reporting.transaction.query_base import QueryBase


# pylint: disable=too-few-public-methods
[docs]class TransactionSummary(QueryBase): """Retrieves a summary of all transactions matching the search criteria.""" exposed = True
[docs] @staticmethod # pylint: disable=too-many-arguments def _get_transaction_list_summary( time_basis, object_list, object_type, start_date, end_date, user_id ): header_list = {'Content-Type': 'application/json'} url = '{0}/summaryinfo/by_date/'.format( get_config().get('metadata', 'endpoint_url') ) url += '{0}/{1}/{2}/{3}'.format( time_basis, object_type, start_date, end_date ) req = requests.post( url=url, json=object_list, headers=header_list ) user_info = QueryBase._merge_two_dicts( QueryBase.base_user_info, QueryBase.get_full_user_info(user_id), ) req_json = req.json() types_to_check = ['instrument', 'project'] for entry_type in types_to_check: req_json['summary_totals']['upload_stats'][entry_type] = TransactionSummary._cleanup_object_stats( object_listing=req_json['summary_totals']['upload_stats'][entry_type], object_type=entry_type, user_info=user_info ) return req_json
[docs] @staticmethod def _cleanup_object_stats(object_listing, object_type, user_info): valid_object_list = map(str, user_info[object_type + '_list']) clean_object_stats = {} for object_id, object_stats in object_listing.items(): if object_id in valid_object_list or user_info['emsl_employee']: clean_object_stats[object_id] = object_stats else: if 'Other' not in clean_object_stats.keys(): clean_object_stats['Other'] = 0 clean_object_stats['Other'] += object_stats return clean_object_stats
# pylint: enable=too-many-arguments # CherryPy requires these named methods # pylint: disable=invalid-name
[docs] @staticmethod @tools.json_in() @tools.json_out() @validate_user('user') def POST(time_basis=None, object_type=None, start_date=None, end_date=None, **kwargs): """CherryPy GET method.""" object_list = request.json user_id = kwargs['user'] return TransactionSummary._get_transaction_list_summary( time_basis, object_list, object_type, start_date, end_date, user_id )
# pylint: enable=too-few-public-methods