예제 #1
0
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)