Newer
Older

Fanna Lautenbach
committed
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 {}

Fanna Lautenbach
committed
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