def suppliers_lot_count(data_api_url, data_api_token): """ Generate the CSV - takes the data api details - iterates through all suppliers - foreach supplier hits the draft API to recover the services - builds CSV row for each supplier :param data_api_url: :param data_api_token: :return: """ client = DataAPIClient(data_api_url, data_api_token) writer = csv.writer(sys.stdout, delimiter=',', quotechar='"') writer.writerow(headers()) for supplier in client.find_suppliers_iter(): try: drafts = list() for draft_service in client.find_draft_services_iter( supplier['id']): drafts.append(draft_service) if drafts: aggregations = aggregate(drafts) supplier_row = list() supplier_row.append(supplier['id']) supplier_row.append(supplier['name']) supplier_row.append(supplier.get('dunsNumber', "")) supplier_row.append( submitted_count(aggregations.get('iaas', {}))) supplier_row.append( not_submitted_count(aggregations.get('iaas', {}))) supplier_row.append( submitted_count(aggregations.get('paas', {}))) supplier_row.append( not_submitted_count(aggregations.get('paas', {}))) supplier_row.append( submitted_count(aggregations.get('saas', {}))) supplier_row.append( not_submitted_count(aggregations.get('saas', {}))) supplier_row.append( submitted_count(aggregations.get('scs', {}))) supplier_row.append( not_submitted_count(aggregations.get('scs', {}))) writer.writerow(supplier_row) except HTTPError as e: if e.status_code == 404: # not all suppliers make a declaration so this is fine pass else: raise e
def suppliers_lot_count(data_api_url, data_api_token): """ Generate the CSV - takes the data api details - iterates through all suppliers - foreach supplier hits the draft API to recover the services - builds CSV row for each supplier :param data_api_url: :param data_api_token: :return: """ client = DataAPIClient(data_api_url, data_api_token) writer = csv.writer(sys.stdout, delimiter=',', quotechar='"') writer.writerow(headers()) for supplier in client.find_suppliers_iter(): try: drafts = list() for draft_service in client.find_draft_services_iter(supplier['id']): drafts.append(draft_service) if drafts: aggregations = aggregate(drafts) supplier_row = list() supplier_row.append(supplier['id']) supplier_row.append(supplier['name']) supplier_row.append(supplier.get('dunsNumber', "")) supplier_row.append(submitted_count(aggregations.get('iaas', {}))) supplier_row.append(not_submitted_count(aggregations.get('iaas', {}))) supplier_row.append(submitted_count(aggregations.get('paas', {}))) supplier_row.append(not_submitted_count(aggregations.get('paas', {}))) supplier_row.append(submitted_count(aggregations.get('saas', {}))) supplier_row.append(not_submitted_count(aggregations.get('saas', {}))) supplier_row.append(submitted_count(aggregations.get('scs', {}))) supplier_row.append(not_submitted_count(aggregations.get('scs', {}))) writer.writerow(supplier_row) except HTTPError as e: if e.status_code == 404: # not all suppliers make a declaration so this is fine pass else: raise e
def count_g12_recovery_drafts_by_status(data_api_client: DataAPIClient, supplier_id: int) -> Tuple[int, int]: """ Counts the number of a supplier's G12 recovery draft services which are either 'submitted' or 'not-submitted' Returns ------- A tuple (not_submitted_count, submitted_count) """ g12_recovery_draft_ids = get_g12_recovery_draft_ids() drafts = [ draft for draft in data_api_client.find_draft_services_iter(supplier_id=supplier_id, framework="g-cloud-12") ] not_submitted_ids = { draft["id"] for draft in drafts if draft["status"] == "not-submitted" }.intersection(g12_recovery_draft_ids) submitted_ids = { draft["id"] for draft in drafts if draft["status"] == "submitted" }.intersection(g12_recovery_draft_ids) return len(not_submitted_ids), len(submitted_ids)