in gnm_deliverables/views/deliverables_dash_views.py [0:0]
def invert_data(raw_response:dict, start_date:datetime, end_date: datetime) -> dict:
"""
the data from the database contains a list of dates for each platform.
the graph requires a list of platforms for each date.
:param raw_response: raw aggregation response from the database
:param start_date: starting date of the requested range
:param end_date: ending date of the requested range
:return: a dictionary of data
"""
current_date = start_date
day_count = (end_date - start_date).days + 1
logger.debug("day_count is {0}".format(day_count))
platform_count = len(raw_response.keys())
i=0
content = {
"dates": numpy.empty(day_count, dtype=datetime),
"platforms": numpy.empty(platform_count, dtype=object)
}
#set up date index
while True:
content["dates"][i] = current_date.isoformat("T")
i += 1
current_date = current_date + timedelta(days=1)
if current_date > end_date:
break
i = 0
for platform, entries in raw_response.items():
content["platforms"][i] = {
"name": platform,
"data": numpy.zeros(day_count, dtype=numpy.int)
}
entry_count = len(entries)
dest_ctr = 0
src_ctr = 0
current_date = start_date
while src_ctr<entry_count and dest_ctr<day_count:
if entries[src_ctr]["day"] == current_date:
content["platforms"][i]["data"][dest_ctr] = entries[src_ctr]["count"]
src_ctr += 1
else:
content["platforms"][i]["data"][dest_ctr] = 0
dest_ctr += 1
current_date = current_date + timedelta(days=1)
i += 1
return content