Source code for pacifica.metadata.rest.reporting_queries.detailed_transactions_list

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""CherryPy Status Metadata object class."""
from cherrypy import tools, request
from peewee import fn
from pacifica.metadata.rest.reporting_queries.query_base import QueryBase
from pacifica.metadata.orm import TransSIP, Files
from pacifica.metadata.orm.base import db_connection_decorator
from pacifica.metadata.rest.reporting_queries.summarize_by_date import SummarizeByDate


# pylint: disable=too-few-public-methods
[docs]class DetailedTransactionList(QueryBase): """Retrieves a list of all transactions matching the search criteria.""" exposed = True
[docs] @staticmethod def get_transaction_list_details(transaction_list): """Return complete data set on a specified transaction.""" # pylint: disable=no-member query = ( Files().select( Files.transaction.alias('upload_id'), fn.Max(TransSIP.updated).alias('upload_date'), fn.Min(Files.mtime).alias('file_date_start'), fn.Max(Files.mtime).alias('file_date_end'), fn.Min(TransSIP.submitter).alias('uploaded_by_id'), fn.Sum(Files.size).alias('bundle_size'), fn.Count(Files.id).alias('file_count'), fn.Min(TransSIP.updated).alias('upload_datetime'), fn.Min(TransSIP.project).alias('project_id'), fn.Min(TransSIP.instrument).alias('instrument_id') ).join( TransSIP, on=(TransSIP.id == Files.transaction) ).where(Files.transaction << transaction_list).group_by(Files.transaction) ) # pylint: enable=no-member return {str(r['upload_id']): { 'upload_id': str(r['upload_id']), 'upload_date': r['upload_date'].date().strftime('%Y-%m-%d'), 'file_date_start': SummarizeByDate.utc_to_local(r['file_date_start']).date().strftime('%Y-%m-%d'), 'file_date_end': SummarizeByDate.utc_to_local(r['file_date_end']).date().strftime('%Y-%m-%d'), 'uploaded_by_id': int(r['uploaded_by_id']), 'bundle_size': int(r['bundle_size']), 'file_count': int(r['file_count']), 'upload_datetime': SummarizeByDate.utc_to_local(r['upload_date']).strftime('%Y-%m-%d %H:%M:%S'), 'project_id': r['project_id'], 'instrument_id': r['instrument_id'] } for r in query.dicts()}
# Cherrypy requires these named methods. # pylint: disable=invalid-name @staticmethod @tools.json_in() @tools.json_out() @db_connection_decorator def POST(): """Return summaryinfo for a given object type/id/time range combo.""" # parse object list transaction_list = request.json return DetailedTransactionList.get_transaction_list_details(transaction_list)