import logging import json import pandas as pd import numpy as np import os import azure.functions as func from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient import json def main(req: func.HttpRequest) -> func.HttpResponse: logging.info('Python HTTP trigger function processed a request.') name = req.params.get('name') if not name: try: req_body = req.get_json() except ValueError: pass else: name = req_body.get('name') if name: return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.") else: return func.HttpResponse( "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.", status_code=200 ) filename = "jira_jsondata" container_name="jiratosnowflakecontainer" conn_str = ("BlobEndpoint=https://jiratosnowflakestracc.blob.core.windows.net/;QueueEndpoint=https://jiratosnowflakestracc.queue.core.windows.net/;FileEndpoint=https://jiratosnowflakestracc.file.core.windows.net/;TableEndpoint=https://jiratosnowflakestracc.table.core.windows.net/;SharedAccessSignature=sv=2020-02-10&ss=bfqt&srt=sco&sp=rwdlacuptfx&se=2021-06-22T23:59:46Z&st=2021-06-22T15:59:46Z&spr=https&sig=%2FqNHAUPRB%2FIO9Q%2B7RkIzijNUyXAfyFsKCs1ATeOoy0E%3D") blob_service_client = BlobServiceClient.from_connection_string(conn_str) container_client = blob_service_client.get_container_client(container_name) blob_client = container_client.get_blob_client(filename) streamdownloader = blob_client.download_blob() fileReader = json.loads(streamdownloader.readall()) a_file = open("fileReader.json", "w") a_file = json. dump(fileReader, a_file) with open("fileReader.json", 'r',encoding='utf-8-sig') as f: data = json.load(f) #loads the json file def from_dict_to_list(data,parent_key): new_data = {} new_data_keys = [] for key in data.keys(): val = data[key] new_data[parent_key+"_"+key] = val #appending key names with parent key name - content{parent}_epic{key} del_keys=[] flat_dict = {} for key in new_data.keys(): new_data_keys.append(key) #saving keys to avoid runtime error for expanding the dict data for key in new_data_keys: if isinstance(new_data[key],dict): #checking if key values is nested flat_dict = from_dict_to_list(new_data[key],key) #flatteing the nested dict del_keys.append(key) for new_key in flat_dict.keys(): new_data[new_key] = flat_dict[new_key] #appending flattened key names to parent dict for del_key in del_keys: val = new_data.pop(del_key) #deleting parent keys return new_data #part 1 columns = 'contents contents_id contents_key contents_hidden contents_typeName contents_typeId contents_summary contents_typeUrl contents_priorityUrl contents_priorityName contents_done contents_assignee contents_assigneeKey contents_assigneeAccountId contents_assigneeName contents_avatarUrl contents_hasCustomUserAvatar contents_flagged contents_epic contents_epicField_id contents_epicField_label contents_epicField_editable contents_epicField_renderer contents_epicField_epicKey contents_epicField_epicColor contents_epicField_text contents_epicField_canRemoveEpic contents_currentEstimateStatistic_statFieldId contents_currentEstimateStatistic_statFieldValue_value contents_estimateStatisticRequired contents_estimateStatistic_statFieldId contents_estimateStatistic_statFieldValue_value contents_trackingStatistic_statFieldId contents_trackingStatistic_statFieldValue_value contents_trackingStatistic_statFieldValue_text contents_statusId contents_statusName contents_statusUrl contents_status_id contents_status_name contents_status_description contents_status_iconUrl contents_status_statusCategory_id contents_status_statusCategory_key contents_status_statusCategory_colorName contents_fixVersions contents_projectId contents_linkedPagesCount_sprint_id'.split('\t') columns.append('sprint_id') df = pd.DataFrame(columns=columns) rows = ['completedIssues','issuesNotCompletedInCurrentSprint', 'puntedIssues'] for row in rows: for ci in data['contents'][row]: s = from_dict_to_list(ci,'contents') vals = [] for c in columns: if c == 'contents': vals.append(row) elif c=='sprint_id': vals.append(data['sprint']['id']) else: if c in s.keys(): vals.append(s[c]) else: vals.append('NA') df.loc[len(df.index)] = vals df.to_csv('jira_child1.csv',index=False) #PART2 columns = ['contents'] df_part2 = pd.DataFrame(columns=columns) rows = ['completedIssuesInitialEstimateSum','issuesNotCompletedInitialEstimateSum', 'allIssuesEstimateSum','puntedIssuesInitialEstimateSum','issuesCompletedInAnotherSprintInitialEstimateSum'] for key in data['contents'][rows[0]].keys(): columns.append(key) columns.append('sprint_id') for row in rows: vals = {} ci = data['contents'][row] for key in ci.keys(): vals['contents_'+key] =ci[key] vals['contents'] = row vals['sprint_id'] = data['sprint']['id'] df_part2 = df_part2.append(vals, ignore_index = True) df_part2.to_csv('jira_child2.csv',index=False) #part 3 columns = ['contents'] df_part3 = pd.DataFrame(columns=columns) rows = ['issueKeysAddedDuringSprint'] for key in data['contents'][rows[0]].keys(): columns.append(key) columns.append('sprint_id') for row in rows: vals = {} ci = data['contents'][row] for key in ci.keys(): vals['contents_'+key] = 'TRUE' if ci[key] else 'FALSE' vals['contents'] = row vals['sprint_id'] = data['sprint']['id'] df_part3 = df_part3.append(vals, ignore_index = True) df_part3.to_csv('jira_child3.csv',index=False) #part4 columns = [] for key in data['sprint'].keys(): columns.append(key) df_part4 = pd.DataFrame(columns=columns) df_part4 = df_part4.append(data['sprint'],ignore_index=True) df_part4.to_csv('jira_child4.csv',index=False) from azure.storage.blob import BlobClient blob = BlobClient.from_connection_string(conn_str="BlobEndpoint=https://jiratosnowflakestracc.blob.core.windows.net/;QueueEndpoint=https://jiratosnowflakestracc.queue.core.windows.net/;FileEndpoint=https://jiratosnowflakestracc.file.core.windows.net/;TableEndpoint=https://jiratosnowflakestracc.table.core.windows.net/;SharedAccessSignature=sv=2020-02-10&ss=bfqt&srt=sco&sp=rwdlacuptfx&se=2021-06-22T23:59:46Z&st=2021-06-22T15:59:46Z&spr=https&sig=%2FqNHAUPRB%2FIO9Q%2B7RkIzijNUyXAfyFsKCs1ATeOoy0E%3D", container_name="jiratosnowflakecontainer", blob_name="my_blob1") with open("./jira_child1.csv", "rb") as data: blob.upload_blob(data) blob = BlobClient.from_connection_string(conn_str="BlobEndpoint=https://jiratosnowflakestracc.blob.core.windows.net/;QueueEndpoint=https://jiratosnowflakestracc.queue.core.windows.net/;FileEndpoint=https://jiratosnowflakestracc.file.core.windows.net/;TableEndpoint=https://jiratosnowflakestracc.table.core.windows.net/;SharedAccessSignature=sv=2020-02-10&ss=bfqt&srt=sco&sp=rwdlacuptfx&se=2021-06-22T23:59:46Z&st=2021-06-22T15:59:46Z&spr=https&sig=%2FqNHAUPRB%2FIO9Q%2B7RkIzijNUyXAfyFsKCs1ATeOoy0E%3D", container_name="jiratosnowflakecontainer", blob_name="my_blob2") with open("./jira_child2.csv", "rb") as data: blob.upload_blob(data) blob = BlobClient.from_connection_string(conn_str="BlobEndpoint=https://jiratosnowflakestracc.blob.core.windows.net/;QueueEndpoint=https://jiratosnowflakestracc.queue.core.windows.net/;FileEndpoint=https://jiratosnowflakestracc.file.core.windows.net/;TableEndpoint=https://jiratosnowflakestracc.table.core.windows.net/;SharedAccessSignature=sv=2020-02-10&ss=bfqt&srt=sco&sp=rwdlacuptfx&se=2021-06-22T23:59:46Z&st=2021-06-22T15:59:46Z&spr=https&sig=%2FqNHAUPRB%2FIO9Q%2B7RkIzijNUyXAfyFsKCs1ATeOoy0E%3D", container_name="jiratosnowflakecontainer", blob_name="my_blob3") with open("./jira_child3.csv", "rb") as data: blob.upload_blob(data) blob = BlobClient.from_connection_string(conn_str="BlobEndpoint=https://jiratosnowflakestracc.blob.core.windows.net/;QueueEndpoint=https://jiratosnowflakestracc.queue.core.windows.net/;FileEndpoint=https://jiratosnowflakestracc.file.core.windows.net/;TableEndpoint=https://jiratosnowflakestracc.table.core.windows.net/;SharedAccessSignature=sv=2020-02-10&ss=bfqt&srt=sco&sp=rwdlacuptfx&se=2021-06-22T23:59:46Z&st=2021-06-22T15:59:46Z&spr=https&sig=%2FqNHAUPRB%2FIO9Q%2B7RkIzijNUyXAfyFsKCs1ATeOoy0E%3D", container_name="jiratosnowflakecontainer", blob_name="my_blob4") with open("./jira_child4.csv", "rb") as data: blob.upload_blob(data) msg = 'Files : \n' for i in range(1,5): msg = msg+f'jira_child{i}.csv \n' print(msg,"Created Successfully.... :)")