def main(): args = docopt(__doc__) frameworks_repo = Path(args["--frameworks-repo"]).resolve() framework_slug = args["<framework_slug>"] stage = args["<stage>"] lot = args["<lot>"] data_api_client = DataAPIClient(get_api_endpoint_from_stage(stage), get_auth_token('api', stage)) content_loader = ContentLoader(frameworks_repo) content_loader.load_manifest(framework_slug, "services", "services_search_filters") manifest = content_loader.get_manifest(framework_slug, "services_search_filters") # FIXME there isn't a uniform way to get the lots from the framework # content repo, hard code for G-Cloud for now framework_lots = [ {"name": "Cloud hosting", "slug": "cloud-hosting"}, {"name": "Cloud software", "slug": "cloud-software"}, {"name": "Cloud support", "slug": "cloud-support"}, ] writer = csv.writer(sys.stdout) # do the thing writer.writerow(['serviceId', 'topLevelCategories']) for service in data_api_client.find_services_iter(framework=framework_slug, status='published', lot=lot): service_categories = service['serviceCategories'] if service.get('serviceCategories') else [] top_level_categories = [] for f in filters_for_lot(service['lot'], manifest, framework_lots)['categories']['filters']: children = [f['label'] for f in f['children']] if f.get('children') else [] if any(item in service_categories for item in children): top_level_categories.append(f['label']) writer.writerow([service['id'], '; '.join(top_level_categories)])
args = parser.parse_args() FILENAME = f'{args.framework_slug}-all-successful-suppliers.csv' client = DataAPIClient(base_url=get_api_endpoint_from_stage(args.stage), auth_token=get_auth_token('api', args.stage)) logger.info('Retrieving framework ...') all_lot_names = [ lot['name'] for lot in client.get_framework(args.framework_slug) ['frameworks']['lots'] ] map_suppliers_to_lots = {} logger.info('Looking up supplier services ...') all_framework_services = client.find_services_iter( framework=args.framework_slug) for service in all_framework_services: if service['supplierId'] not in map_suppliers_to_lots: map_suppliers_to_lots[service['supplierId']] = { 'name': service['supplierName'], 'lots': set() } map_suppliers_to_lots[service['supplierId']]['lots'].add( service['lotName']) with open(FILENAME, 'w') as csvfile: writer = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL) writer.writerow(['Supplier'] + all_lot_names) sorted_suppliers = (x for x in sorted(map_suppliers_to_lots.values(),