Skip to content
Snippets Groups Projects
dataproductinfo.py 2.28 KiB
Newer Older
from lofardata.models import DataProduct


def retrieve_combined_information(sas_id):
    # Per SAS ID, the retrieved data products should have these unique values
    data_products = DataProduct.objects.filter(obs_id=sas_id).values('dataproduct_source',
                                                                     'dataproduct_type',
                                                                     'project',
                                                                     'location',
                                                                     'activity',
                                                                     'antenna_set',
                                                                     'instrument_filter',
                                                                     'dysco_compression').distinct()

    if len(data_products) == 0:
        return {}

    combined_data_products_on_key = combine_dataproducts_on_key(data_products)

    dysco_compressions = combined_data_products_on_key['dysco_compression']
    if len(dysco_compressions) == 0:  # the dysco_compression is unknown i.e. None
        combined_data_products_on_key['dysco_compression'] = [0]
    else:
        true_count = len([dysco_compression for dysco_compression in dysco_compressions if dysco_compression])
        dysco_compression_true_percentage = true_count / len(combined_data_products_on_key['dysco_compression'])
        # put in a list for template convenience
        combined_data_products_on_key['dysco_compression'] = [dysco_compression_true_percentage]

    return combined_data_products_on_key


def combine_dataproducts_on_key(data_products):
    combined_data_products = {}
    for data_product in data_products:
        combined_data_products = fill_unique_nested_dict(data_product, combined_data_products)
    return combined_data_products


def fill_unique_nested_dict(data_product, combined_data_products_on_key):
    for key, value in data_product.items():
        if combined_data_products_on_key.get(key) and value not in combined_data_products_on_key.get(key):
            combined_data_products_on_key[key].append(value)
        else:
            combined_data_products_on_key[key] = [value] if value is not None and value != '' else []
    return combined_data_products_on_key