예제 #1
0
def suppliers_on_framework(data_api_url, data_api_token, questions):
    """
    Generate the CSV
    - takes the data api details
    - iterates through all suppliers
    - foreach supplier hits the declaration API to recover the answers
    - builds CSV row for each supplier
    :param data_api_url:
    :param data_api_token:
    :param questions:
    :return:
    """
    client = DataAPIClient(data_api_url, data_api_token)

    writer = csv.writer(sys.stdout, delimiter=',', quotechar='"')
    writer.writerow(headers(questions))

    for supplier in client.find_suppliers_iter():
        try:
            declaration = client.get_supplier_declaration(
                supplier['id'], 'g-cloud-7')['declaration']
            if not declaration:
                continue
            status = declaration['status']
            processed_supplier_declaration = \
                process_supplier_declaration(
                    declaration,
                    questions
                )

            supplier_declaration = list()
            supplier_declaration.append(supplier['id'])
            supplier_declaration.append(supplier['name'])
            supplier_declaration.append(supplier.get('dunsNumber', ""))
            supplier_declaration.append(status)
            for declaration in processed_supplier_declaration:
                supplier_declaration.append(declaration)

            try:
                writer.writerow(supplier_declaration)
            except UnicodeEncodeError:
                writer.writerow([
                    field.encode('utf-8')
                    if hasattr(field, 'encode') else field
                    for field in supplier_declaration
                ])

        except HTTPError as e:
            if e.status_code == 404:
                # not all suppliers make a declaration so this is fine
                # status = 'unstarted'
                pass
            else:
                # status = 'error-{}'.format(e.status_code)
                raise e
        except KeyError:
            # status = 'error-key-error'
            pass
예제 #2
0
    supplier_id = arguments['<supplier_id>']
    framework = arguments['<framework>']
    s3_file_name = arguments['<s3_file_name>']
    stage = arguments['<stage>'] or 'production'

    bucket_name = f"digitalmarketplace-documents-{stage}-{stage}"
    s3_key_name = f"{framework}/documents/{supplier_id}/{s3_file_name}"
    asset_url = f"https://assets.digitalmarketplace.service.gov.uk/{s3_key_name}"

    user = get_user()
    print(f"Setting user to '{user}'...")

    data_api_client = DataAPIClient(get_api_endpoint_from_stage(stage),
                                    get_auth_token('api', stage),
                                    user=user)
    supplier_declaration = data_api_client.get_supplier_declaration(
        supplier_id, framework)

    bucket = S3(bucket_name)
    with open(file_path, 'br') as source_file:
        bucket.save(s3_key_name, source_file, acl='public-read')
    print(f"Uploaded {file_path} to {bucket.bucket_name}::{s3_key_name}")

    data_api_client.update_supplier_declaration(
        supplier_id=supplier_id,
        framework_slug=framework,
        declaration_update={
            get_slavery_statement_declaration_key(supplier_declaration):
            asset_url
        })

    print(