def generate(client, parameters, progress_callback): query = R() if parameters.get('date') and parameters['date']['after'] != '': query &= R().events.created.at.ge(parameters['date']['after']) query &= R().events.created.at.le(parameters['date']['before']) if parameters.get('product') and parameters['product']['all'] is False: query &= R().product.id.oneof(parameters['product']['choices']) if parameters.get('mkp') and parameters['mkp']['all'] is False: query &= R().marketplace.id.oneof(parameters['mkp']['choices']) if parameters.get('period') and parameters['period']['all'] is False: query &= R().billing.period.uom.oneof(parameters['period']['choices']) if parameters.get('status') and parameters['status']['all'] is False: query &= R().status.oneof(parameters['status']['choices']) subscriptions = client.ns('subscriptions').assets.filter(query) progress = 0 total = subscriptions.count() for subscription in subscriptions: yield ( subscription.get('id'), subscription.get('external_id', '-'), convert_to_datetime(subscription['events']['created']['at']), convert_to_datetime(subscription['events']['updated']['at']), subscription.get('status'), calculate_period( subscription['billing']['period']['delta'], subscription['billing']['period']['uom'], ) if 'billing' in subscription else '-', get_anniversary_day(subscription['billing']) if 'billing' in subscription else '-', get_anniversary_month(subscription['billing']) if 'billing' in subscription else '-', subscription['contract']['id'] if 'contract' in subscription else '-', subscription['contract']['name'] if 'contract' in subscription else '-', get_value(subscription.get('tiers', ''), 'customer', 'id'), get_value(subscription.get('tiers', ''), 'customer', 'name'), get_value(subscription.get('tiers', ''), 'customer', 'external_id'), get_value(subscription.get('tiers', ''), 'tier1', 'id'), get_value(subscription.get('tiers', ''), 'tier1', 'name'), get_value(subscription.get('tiers', ''), 'tier1', 'external_id'), get_value(subscription.get('tiers', ''), 'tier2', 'id'), get_value(subscription.get('tiers', ''), 'tier2', 'name'), get_value(subscription.get('tiers', ''), 'tier2', 'external_id'), get_value(subscription['connection'], 'provider', 'id'), get_value(subscription['connection'], 'provider', 'name'), get_value(subscription['connection'], 'vendor', 'id'), get_value(subscription['connection'], 'vendor', 'name'), get_value(subscription, 'product', 'id'), get_value(subscription, 'product', 'name'), get_value(subscription['connection'], 'hub', 'id'), get_value(subscription['connection'], 'hub', 'name'), ) progress += 1 progress_callback(progress, total)
def generate(client, parameters, progress_callback): query = R() query &= R().created.ge(parameters['date']['after']) query &= R().created.le(parameters['date']['before']) if parameters.get('product') and parameters['product']['all'] is False: query &= R().asset.product.id.oneof(parameters['product']['choices']) if parameters.get('mkp') and parameters['mkp']['all'] is False: query &= R().asset.marketplace.id.oneof(parameters['mkp']['choices']) if parameters.get('hub') and parameters['hub']['all'] is False: query &= R().asset.connection.hub.id.oneof(parameters['hub']['choices']) requests = client.ns('subscriptions').requests.filter(query) progress = 0 total = requests.count() for request in requests: connection = request['asset']['connection'] for item in request['items']: yield ( request['id'], convert_to_datetime(request['period']['from']), convert_to_datetime(request['period']['to']), get_basic_value(request['period'], 'delta'), get_basic_value(request['period'], 'uom'), get_basic_value(item['billing'], 'cycle_number'), get_basic_value(item, 'global_id'), get_basic_value(item, 'display_name'), get_basic_value(item, 'item_type'), get_basic_value(item, 'type'), get_basic_value(item, 'mpn'), get_basic_value(item, 'period'), get_basic_value(item, 'quantity'), get_value(request['asset']['tiers'], 'customer', 'id'), get_value(request['asset']['tiers'], 'customer', 'name'), get_value(request['asset']['tiers'], 'customer', 'external_id'), get_value(request['asset']['tiers'], 'tier1', 'id'), get_value(request['asset']['tiers'], 'tier1', 'name'), get_value(request['asset']['tiers'], 'tier1', 'external_id'), get_value(request['asset']['tiers'], 'tier2', 'id'), get_value(request['asset']['tiers'], 'tier2', 'name'), get_value(request['asset']['tiers'], 'tier2', 'external_id'), get_value(request['asset']['connection'], 'provider', 'id'), get_value(request['asset']['connection'], 'provider', 'name'), get_value(request['asset']['connection'], 'vendor', 'id'), get_value(request['asset']['connection'], 'vendor', 'name'), get_value(request['asset'], 'product', 'id'), get_value(request['asset'], 'product', 'name'), get_value(request, 'asset', 'id'), get_value(request, 'asset', 'external_id'), get_value(request, 'asset', 'status'), get_value(request['asset'], 'connection', 'type'), get_value(connection, 'hub', 'id') if 'hub' in connection else '', get_value(connection, 'hub', 'name') if 'hub' in connection else '', ) progress += 1 progress_callback(progress, total)
def generate(client, parameters, progress_callback): query = R() query &= R().created.ge(parameters['date']['after']) query &= R().created.le(parameters['date']['before']) if parameters.get('product') and parameters['product']['all'] is False: query &= R().asset.product.id.oneof(parameters['product']['choices']) if parameters.get('rr_type') and parameters['rr_type']['all'] is False: query &= R().type.oneof(parameters['rr_type']['choices']) query &= R().status.eq('failed') if parameters.get('connection_type') and parameters['connection_type']['all'] is False: query &= R().asset.connection.type.oneof(parameters['connection_type']['choices']) requests = client.requests.filter(query) progress = 0 total = requests.count() today = datetime.today().strftime('%Y-%m-%d-%H:%M:%S') for request in requests: connection = request['asset']['connection'] yield ( get_basic_value(request, 'id'), get_basic_value(request, 'type'), convert_to_datetime( get_basic_value(request, 'created'), ), convert_to_datetime( get_basic_value(request, 'updated'), ), today, get_value(request['asset']['tiers'], 'customer', 'id'), get_value(request['asset']['tiers'], 'customer', 'name'), get_value(request['asset']['tiers'], 'customer', 'external_id'), get_value(request['asset']['tiers'], 'tier1', 'id'), get_value(request['asset']['tiers'], 'tier1', 'name'), get_value(request['asset']['tiers'], 'tier1', 'external_id'), get_value(request['asset']['tiers'], 'tier2', 'id'), get_value(request['asset']['tiers'], 'tier2', 'name'), get_value(request['asset']['tiers'], 'tier2', 'external_id'), get_value(request['asset']['connection'], 'provider', 'id'), get_value(request['asset']['connection'], 'provider', 'name'), get_value(request['asset']['connection'], 'vendor', 'id'), get_value(request['asset']['connection'], 'vendor', 'name'), get_value(request['asset'], 'product', 'id'), get_value(request['asset'], 'product', 'name'), get_value(request, 'asset', 'id'), get_value(request, 'asset', 'external_id'), get_value(request['asset'], 'connection', 'type'), get_value(connection, 'hub', 'id') if 'hub' in connection else '', get_value(connection, 'hub', 'name') if 'hub' in connection else '', get_value(request, 'asset', 'status'), get_basic_value(request, 'reason'), ) progress += 1 progress_callback(progress, total)
def generate(client, parameters, progress_callback): query = R() if parameters.get('type') and parameters['type']['all'] is False: query &= R().type.oneof(parameters['type']['choices']) if parameters.get('status') and parameters['status']['all'] is False: query &= R().status.oneof(parameters['status']['choices']) contracts = client.contracts.filter(query).select("agreement").order_by( "-status") progress = 0 total = contracts.count() for contract in contracts: yield ( get_basic_value(contract, 'id'), get_basic_value(contract, 'type'), get_basic_value(contract, 'version'), 'Yes' if get_basic_value(contract, 'latest') is False else '-', get_value(contract, 'agreement', 'id'), get_value(contract, 'agreement', 'name'), get_value(contract, 'issuer', 'name'), convert_to_datetime(get_value(contract['events'], 'created', 'at')), get_value(contract, 'marketplace', 'id'), get_value(contract, 'marketplace', 'name'), get_value(contract['sourcing'], 'product', 'id') if 'sourcing' in contract else '-', get_value(contract['sourcing'], 'product', 'name') if 'sourcing' in contract else '-', get_value( contract['events']['signed'], 'by', 'name', ) if 'signed' in contract['events'] else '-', convert_to_datetime( get_value( contract['events'], 'signed', 'at', ), ) if 'created' in contract['events'] else '-', get_value( contract['events']['countersigned'], 'by', 'name', ) if 'countersigned' in contract['events'] else '-', convert_to_datetime( get_value( contract['events'], 'countersigned', 'at', ), ) if 'countersigned' in contract['events'] else '-', ) progress += 1 progress_callback(progress, total)
def generate(client, parameters, progress_callback): requests = _get_requests(client, parameters) progress = 0 total = requests.count() for request in requests: connection = request['asset']['connection'] for item in request['items']: yield ( request['id'], convert_to_datetime(request['period']['from']), convert_to_datetime(request['period']['to']), get_basic_value(request['period'], 'delta'), get_basic_value(request['period'], 'uom'), get_basic_value(item['billing'], 'cycle_number'), get_basic_value(item, 'global_id'), get_basic_value(item, 'display_name'), get_basic_value(item, 'item_type'), get_basic_value(item, 'type'), get_basic_value(item, 'mpn'), get_basic_value(item, 'period'), get_basic_value(item, 'quantity'), get_value(request['asset']['tiers'], 'customer', 'id'), get_value(request['asset']['tiers'], 'customer', 'name'), get_value(request['asset']['tiers'], 'customer', 'external_id'), get_value(request['asset']['tiers'], 'tier1', 'id'), get_value(request['asset']['tiers'], 'tier1', 'name'), get_value(request['asset']['tiers'], 'tier1', 'external_id'), get_value(request['asset']['tiers'], 'tier2', 'id'), get_value(request['asset']['tiers'], 'tier2', 'name'), get_value(request['asset']['tiers'], 'tier2', 'external_id'), get_value(request['asset']['connection'], 'provider', 'id'), get_value(request['asset']['connection'], 'provider', 'name'), get_value(request['asset']['connection'], 'vendor', 'id'), get_value(request['asset']['connection'], 'vendor', 'name'), get_value(request['asset'], 'product', 'id'), get_value(request['asset'], 'product', 'name'), get_value(request, 'asset', 'id'), get_value(request, 'asset', 'external_id'), get_value(request, 'asset', 'status'), get_value(request['asset'], 'connection', 'type'), get_value(connection, 'hub', 'id') if 'hub' in connection else '', get_value(connection, 'hub', 'name') if 'hub' in connection else '', ) progress += 1 progress_callback(progress, total)
def generate(client, parameters, progress_callback): all_status = ['draft', 'reviewing', 'deploying', 'completed', 'canceled'] query = R() if parameters.get('date') and parameters['date']['after'] != '': query &= R().created.ge(parameters['date']['after']) query &= R().created.le(parameters['date']['before']) if parameters.get('product') and parameters['product']['all'] is False: query &= R().listing.product.id.oneof(parameters['product']['choices']) if parameters.get('mkp') and parameters['mkp']['all'] is False: query &= R().listing.contract.marketplace.id.oneof( parameters['mkp']['choices']) if parameters.get('rr_status') and parameters['rr_status']['all'] is False: query &= R().state.oneof(parameters['rr_status']['choices']) else: query &= R().state.oneof(all_status) requests = client.listing_requests.filter(query).order_by("-created") progress = 0 total = requests.count() output = [] today = datetime.today().strftime('%Y-%m-%d %H:%M:%S') for request in requests: yield ( get_basic_value(request, 'id'), get_basic_value(request, 'type'), get_basic_value(request, 'state'), convert_to_datetime(get_basic_value(request, 'created')), convert_to_datetime(get_basic_value(request, 'updated')), today, get_value(request, 'listing', 'id'), get_value(request['listing'], 'contract', 'id'), get_value(request, 'product', 'id'), get_value(request, 'product', 'name'), get_value(request['listing'], 'provider', 'id'), get_value(request['listing'], 'provider', 'name'), get_value(request['listing'], 'vendor', 'id'), get_value(request['listing'], 'vendor', 'name'), ) progress += 1 progress_callback(progress, total) return output
def _process_line(usage_file): return ( usage_file['id'], usage_file['vendor']['id'], usage_file['vendor']['name'], usage_file['product']['id'], usage_file['product']['name'], usage_file['provider']['id'], usage_file['provider']['name'], usage_file['marketplace']['id'], usage_file['marketplace']['name'], usage_file['stats'].get('uploaded', 0), usage_file['stats'].get('pending', 0), usage_file['stats'].get('accepted', 0), usage_file['stats'].get('closed', 0), convert_to_datetime(get_value(usage_file['events'], 'created', 'at')), convert_to_datetime(get_value(usage_file['events'], 'accepted', 'at')), convert_to_datetime(get_value(usage_file['events'], 'closed', 'at')), usage_file['status'], )
def _process_line(subscription): return ( subscription.get('id'), subscription.get('external_id', '-'), get_value(subscription, 'connection', 'type'), convert_to_datetime(subscription['events']['created']['at']), convert_to_datetime(subscription['events']['updated']['at']), subscription.get('status'), calculate_period( subscription['billing']['period']['delta'], subscription['billing']['period']['uom'], ) if 'billing' in subscription else '-', get_anniversary_day(subscription['billing']) if 'billing' in subscription else '-', get_anniversary_month(subscription['billing']) if 'billing' in subscription else '-', subscription['contract']['id'] if 'contract' in subscription else '-', subscription['contract']['name'] if 'contract' in subscription else '-', get_value(subscription.get('tiers', ''), 'customer', 'id'), get_value(subscription.get('tiers', ''), 'customer', 'name'), get_value(subscription.get('tiers', ''), 'customer', 'external_id'), get_value(subscription.get('tiers', ''), 'tier1', 'id'), get_value(subscription.get('tiers', ''), 'tier1', 'name'), get_value(subscription.get('tiers', ''), 'tier1', 'external_id'), get_value(subscription.get('tiers', ''), 'tier2', 'id'), get_value(subscription.get('tiers', ''), 'tier2', 'name'), get_value(subscription.get('tiers', ''), 'tier2', 'external_id'), get_value(subscription['connection'], 'provider', 'id'), get_value(subscription['connection'], 'provider', 'name'), get_value(subscription['connection'], 'vendor', 'id'), get_value(subscription['connection'], 'vendor', 'name'), get_value(subscription, 'product', 'id'), get_value(subscription, 'product', 'name'), get_value(subscription['connection'], 'hub', 'id'), get_value(subscription['connection'], 'hub', 'name'), get_asset_parameter(subscription, 'previous_contract_number'), get_asset_parameter(subscription, 'vendor_subscription_id'), )
def generate(client, parameters, progress_callback): all_status = ['listed', 'unlisted'] query = R() if parameters.get('date') and parameters['date']['after'] != '': query &= R().created.ge(parameters['date']['after']) query &= R().created.le(parameters['date']['before']) if parameters.get('product') and parameters['product']['all'] is False: query &= R().product.id.oneof(parameters['product']['choices']) if parameters.get('mkp') and parameters['mkp']['all'] is False: query &= R().contract.marketplace.id.oneof( parameters['mkp']['choices']) if parameters.get('rr_status') and parameters['rr_status']['all'] is False: query &= R().state.oneof(parameters['rr_status']['choices']) else: query &= R().state.oneof(all_status) listings = client.listings.filter(query).order_by("-created") progress = 0 total = listings.count() today = datetime.today().strftime('%Y-%m-%d %H:%M:%S') for listing in listings: yield ( get_basic_value(listing, 'id'), get_basic_value(listing, 'status'), convert_to_datetime(get_basic_value(listing, 'created'), ), convert_to_datetime(get_basic_value(listing, 'updated'), ), today, get_value(listing, 'contract', 'id'), get_value(listing, 'product', 'id'), get_value(listing, 'product', 'name'), get_value(listing, 'provider', 'id'), get_value(listing, 'provider', 'name'), get_value(listing, 'vendor', 'id'), get_value(listing, 'vendor', 'name'), ) progress += 1 progress_callback(progress, total)
def get_record(client, asset, start_date, end_date, progress): billable_status = ['approved', 'closed'] rql = R().asset.id.eq(asset['id']) & R().status.oneof(billable_status) & ( (R().start_date.ge(f'{start_date}') & R().start_date.lt(f'{end_date}')) | (R().end_date.ge(f'{start_date}') & R().end_date.lt(f'{end_date}'))) usage_records = client.ns('usage').records.filter(rql) uf = [] for record in usage_records: if record['usagefile']['id'] not in uf: uf.append(record['usagefile']['id']) progress.increment() return [ get_basic_value(asset, 'id'), get_basic_value(asset, 'external_id'), get_basic_value(asset, 'status'), convert_to_datetime(asset['events']['created']['at']), convert_to_datetime(asset['events']['updated']['at']), get_value(asset['tiers'], 'customer', 'id'), get_value(asset['tiers'], 'customer', 'name'), get_value(asset['tiers'], 'customer', 'external_id'), get_value(asset['tiers'], 'tier1', 'id'), get_value(asset['tiers'], 'tier1', 'name'), get_value(asset['tiers'], 'tier1', 'external_id'), get_value(asset['tiers'], 'tier2', 'id'), get_value(asset['tiers'], 'tier2', 'name'), get_value(asset['tiers'], 'tier2', 'external_id'), get_value(asset['connection'], 'provider', 'id'), get_value(asset['connection'], 'provider', 'name'), get_value(asset['connection'], 'vendor', 'id'), get_value(asset['connection'], 'vendor', 'name'), get_value(asset, 'product', 'id'), get_value(asset, 'product', 'name'), get_value(asset['connection'], 'hub', 'id'), get_value(asset['connection'], 'hub', 'name'), len(uf), ', '.join(uf) ]
def get_record(client, asset, start_date, end_date, progress): rql = f"eq(asset.id,{asset['id']}),in(status,(approved,closed)),(and(ge(start_date," rql += f"{start_date}),lt(start_date,{end_date}))|and(ge(end_date,{start_date})," rql += f"lt(end_date,{end_date})))" usage_records = client.ns('usage').records.filter(rql) uf = [] for record in usage_records: if record['usagefile']['id'] not in uf: uf.append(record['usagefile']['id']) progress.increment() return [ get_basic_value(asset, 'id'), get_basic_value(asset, 'external_id'), get_basic_value(asset, 'status'), convert_to_datetime(asset['events']['created']['at']), convert_to_datetime(asset['events']['updated']['at']), get_value(asset['tiers'], 'customer', 'id'), get_value(asset['tiers'], 'customer', 'name'), get_value(asset['tiers'], 'customer', 'external_id'), get_value(asset['tiers'], 'tier1', 'id'), get_value(asset['tiers'], 'tier1', 'name'), get_value(asset['tiers'], 'tier1', 'external_id'), get_value(asset['tiers'], 'tier2', 'id'), get_value(asset['tiers'], 'tier2', 'name'), get_value(asset['tiers'], 'tier2', 'external_id'), get_value(asset['connection'], 'provider', 'id'), get_value(asset['connection'], 'provider', 'name'), get_value(asset['connection'], 'vendor', 'id'), get_value(asset['connection'], 'vendor', 'name'), get_value(asset, 'product', 'id'), get_value(asset, 'product', 'name'), get_value(asset['connection'], 'hub', 'id'), get_value(asset['connection'], 'hub', 'name'), len(uf), ', '.join(uf), ]
def generate(client, parameters, progress_callback): all_types = ['tiers_setup', 'inquiring', 'pending', 'approved', 'failed'] query = R() query &= R().events.created.at.ge(parameters['date']['after']) query &= R().events.created.at.le(parameters['date']['before']) if parameters.get('product') and parameters['product']['all'] is False: query &= R().product.id.oneof(parameters['product']['choices']) if parameters.get('mkp') and parameters['mkp']['all'] is False: query &= R().marketplace.id.oneof(parameters['mkp']['choices']) if parameters.get('rr_type') and parameters['rr_type']['all'] is False: query &= R().type.oneof(parameters['rr_type']['choices']) if parameters.get('rr_status') and parameters['rr_status']['all'] is False: query &= R().status.oneof(parameters['rr_status']['choices']) else: query &= R().status.oneof(all_types) requests = client.ns('tier').collection('config-requests').filter(query).order_by('-created') progress = 0 total = requests.count() today = datetime.today().strftime('%Y-%m-%d %H:%M:%S') for request in requests: config = request['configuration'] yield( get_basic_value(request, 'id'), get_basic_value(request, 'type'), convert_to_datetime(get_value(request['events'], 'created', 'at')), convert_to_datetime(get_value(request['events'], 'updated', 'at')), today, get_basic_value(request, 'status'), get_value( config, 'connection', 'type' ), get_value(request, 'configuration', 'id'), get_value(request, 'configuration', 'tier_level'), get_value(config, 'account', 'name'), get_value(config, 'account', 'external_id'), get_value(config, 'account', 'id'), get_value(request, 'parent_configuration', 'id'), get_value(request, 'parent_configuration', 'tier_level'), get_value( request['parent_configuration'], 'account', 'name' ) if 'parent_configuration' in request else '-', get_value( request['parent_configuration'], 'account', 'external_id' ) if 'parent_configuration' in request else '-', get_value( request['parent_configuration'], 'account', 'id' ) if 'parent_configuration' in request else '-', get_value( config['connection'], 'provider', 'id' ) if 'connection' in config else '-', get_value( config['connection'], 'provider', 'name' ) if 'connection' in config else '-', get_value( config['connection'], 'vendor', 'id' ) if 'connection' in config else '-', get_value( config['connection'], 'vendor', 'name' ) if 'connection' in config else '-', get_value( config, 'product', 'id' ), get_value( config, 'product', 'name' ), get_value( config['connection'], 'hub', 'id' ) if 'connection' in config else '-', get_value( config['connection'], 'hub', 'name' ) if 'connection' in config else '-', get_value( config, 'contract', 'id' ), get_value( config, 'marketplace', 'id' ), get_value( config, 'marketplace', 'name' ), ) progress += 1 progress_callback(progress, total)
def generate(client, parameters, progress_callback): warm_up_tcs(client, parameters['products']['choices']) subscriptions_rql = R() if not parameters.get("products") or len( parameters['products']['choices']) < 1: raise RuntimeError("AWS products was not selected") if parameters.get("date"): subscriptions_rql &= R().events.created.at.ge( parameters['date']['after']) subscriptions_rql &= R().events.created.at.le( parameters['date']['before']) subscriptions_rql &= R().product.id.oneof( parameters['products']['choices']) subscriptions_rql &= R().status.ne('draft') subscriptions = client.assets.filter(subscriptions_rql) total_subscriptions = subscriptions.count() progress = 0 for subscription in subscriptions: yield ( subscription['id'], subscription.get('external_id', "-"), subscription['status'], subscription['marketplace']['name'], subscription['product']['id'], convert_to_datetime(subscription['events']['created']['at']), get_asset_parameter(subscription, "awsAccountId"), get_value(subscription['tiers'], "customer", "external_id"), get_value(subscription['tiers'], "customer", "name"), get_value(subscription['tiers']["customer"], "contact_info", "address_line1"), get_value(subscription['tiers']["customer"], "contact_info", "address_line2"), get_value(subscription['tiers']["customer"], "contact_info", "city"), get_value(subscription['tiers']["customer"], "contact_info", "state"), get_value(subscription['tiers']["customer"], "contact_info", "postal_code"), get_value(subscription['tiers']["customer"], "contact_info", "country"), get_value(subscription['tiers']["customer"]["contact_info"], "contact", "email"), get_asset_parameter(subscription, "isGovernmentEntity"), get_asset_parameter(subscription, "useAccountFor"), get_value(subscription['tiers'], "tier1", "external_id"), get_value(subscription['tiers'], "tier1", "name"), get_value(subscription['tiers']["tier1"], "contact_info", "address_line1"), get_value(subscription['tiers']["tier1"], "contact_info", "address_line2"), get_value(subscription['tiers']["tier1"], "contact_info", "city"), get_value(subscription['tiers']["tier1"], "contact_info", "state"), get_value(subscription['tiers']["tier1"], "contact_info", "postal_code"), get_value(subscription['tiers']["tier1"], "contact_info", "country"), get_value(subscription['tiers']["tier1"]["contact_info"], "contact", "email"), # get_aws_mpn(client, get_value(subscription['tiers'], "tier1", 'id'), subscription['product']['id']) get_awsmpn(get_value(subscription['tiers'], "tier1", 'id'), subscription['product']['id'])) progress += 1 progress_callback(progress, total_subscriptions)
def get_subscription_record(client, subscription, progress): param_values = get_product_specifics(subscription, client) output = [] try: for item in subscription["items"]: output.append([ subscription["type"].capitalize() + " Billing", subscription["id"], subscription["asset"]["product"]["id"], subscription["asset"]["product"]["name"], subscription["asset"]["connection"]["vendor"]['id'], subscription["asset"]["connection"]["vendor"]["name"], convert_to_datetime(subscription["events"]["created"]["at"]), convert_to_datetime( subscription["asset"]["events"]["created"]["at"]), subscription["asset"]["id"], subscription["asset"]["status"], subscription["asset"]["external_id"], subscription["asset"]["tiers"]["customer"]["name"], (subscription["asset"]["tiers"]["customer"]["external_id"] if "external_id" in subscription["asset"]["tiers"]["customer"] else subscription["asset"]["tiers"]["customer"]["external_uid"]), subscription["asset"]["tiers"]["customer"]["contact_info"] ["country"], subscription["asset"]["tiers"]["tier1"]["name"], (subscription["asset"]["tiers"]["tier1"]["external_id"] if "external_id" in subscription["asset"]["tiers"]["tier1"] else subscription["asset"]["tiers"]["tier1"]["external_uid"]), subscription["asset"]["tiers"]["tier1"]["contact_info"] ["country"], (subscription["asset"]["tiers"]["tier2"]["name"] if "tier2" in subscription["asset"]["tiers"] else "-"), (subscription["asset"]["tiers"]["tier2"]["external_id"] if "tier2" in subscription["asset"]["tiers"] else "-"), (subscription["asset"]["tiers"]["tier2"]["contact_info"] ["country"] if "tier2" in subscription["asset"]["tiers"] else "-"), item["global_id"], item["mpn"], item["display_name"], item.get("period", item.get("item_type")), 0, ("unlimited" if item["quantity"] == -1 else item["quantity"]), ("unlimited" if item["quantity"] == -1 else item["quantity"]), subscription["asset"]["connection"]["provider"]["id"], subscription["asset"]["connection"]["provider"]["name"], subscription["asset"]["marketplace"]["id"], subscription["asset"]["marketplace"]["name"], ("Syndication" if "CRU" in subscription["asset"]["contract"]["id"] else "Distribution"), param_values["microsoft_domain"], param_values["subscription_id"], param_values["ms_customer_id"], param_values["microsoft_order_id"], param_values["microsoft_plan_subscription_id"], param_values["microsoft_tier1_mpn"], ]) except Exception: pass progress.increment() return output
def get_request_record(client, request, progress): param_values = get_product_specifics(request, client) output = [] for item in request["asset"]["items"]: try: if item["quantity"] == "0" and item["old_quantity"] == "0": continue output.append([ request["type"].capitalize(), request["id"], request["asset"]["product"]["id"], request["asset"]["product"]["name"], request["asset"]["connection"]["vendor"]['id'], request["asset"]["connection"]["vendor"]["name"], convert_to_datetime(request["created"]), convert_to_datetime( request["asset"]["events"]["created"]["at"]), request["asset"]["id"], request["asset"]["status"], request["asset"]["external_id"], request["asset"]["tiers"]["customer"]["name"], (request["asset"]["tiers"]["customer"]["external_id"] if "external_id" in request["asset"]["tiers"]["customer"] else request["asset"]["tiers"]["customer"]["external_uid"]), request["asset"]["tiers"]["customer"]["contact_info"] ["country"], request["asset"]["tiers"]["tier1"]["name"], (request["asset"]["tiers"]["tier1"]["external_id"] if "external_id" in request["asset"]["tiers"]["tier1"] else request["asset"]["tiers"]["tier1"]["external_uid"]), request["asset"]["tiers"]["tier1"]["contact_info"]["country"], (request["asset"]["tiers"]["tier2"]["name"] if "name" in request["asset"]["tiers"]["tier2"] else "-"), (request["asset"]["tiers"]["tier2"]["external_id"] if "external_id" in request["asset"]["tiers"]["tier2"] else "-"), (request["asset"]["tiers"]["tier2"]["contact_info"]["country"] if request["asset"]["tiers"]["tier2"] and "country" in request["asset"]["tiers"]["tier2"]["contact_info"] else "-"), item["global_id"], item["mpn"], item["display_name"], item.get("period", item.get("item_type")), item["old_quantity"], item["quantity"], delta(item["old_quantity"], item["quantity"]), request["asset"]["connection"]["provider"]["id"], request["asset"]["connection"]["provider"]["name"], request["asset"]["marketplace"]["id"], request["asset"]["marketplace"]["name"], request["asset"]["contract"].get("type", "distribution").capitalize(), param_values["microsoft_domain"], param_values["subscription_id"], param_values["ms_customer_id"], param_values["microsoft_order_id"], param_values["microsoft_plan_subscription_id"], param_values["microsoft_tier1_mpn"], ]) except Exception: pass progress.increment() return output
def test_generate( progress, client_factory, response_factory, sla_response, mocker, monkeypatch, ): class MyDatetimeClass(): def utcnow(): return FAKE_DATE monkeypatch.setattr(reports.sla.entrypoint.datetime, 'datetime', MyDatetimeClass) mocker.patch( 'connect.client.models.resourceset.ResourceSet.count', return_value=9, ) responses = [] responses.append(response_factory(value=sla_response, ), ) client = client_factory(responses) parameters = {'offset_red_days': 5, 'offset_yellow_days': 2} generator = generate( client, parameters, progress, renderer_type='xlsx', extra_context_callback=mocker.MagicMock(), ) expected = [] for row in sla_response: days = (FAKE_DATE - convert_to_datetime(row['created'])).days sla_group = _get_sla_group(convert_to_datetime(row['created'])) expected.append(( row['id'], get_dict_element(row, 'asset', 'product', 'id'), get_dict_element(row, 'asset', 'product', 'name'), get_dict_element(row, 'asset', 'connection', 'vendor', 'id'), get_dict_element(row, 'asset', 'connection', 'vendor', 'name'), get_dict_element(row, 'asset', 'connection', 'provider', 'id'), get_dict_element(row, 'asset', 'connection', 'provider', 'name'), get_dict_element(row, 'type'), days, convert_to_datetime(get_dict_element(row, 'created')), get_dict_element(row, 'status'), get_dict_element(row, 'asset', 'connection', 'type'), get_dict_element(row, 'assignee', 'email'), get_dict_element(row, 'asset', 'tiers', 'customer', 'id'), get_dict_element(row, 'asset', 'tiers', 'customer', 'external_id'), get_dict_element(row, 'asset', 'tiers', 'customer', 'name'), _concat_if_content( get_dict_element( row, 'asset', 'tiers', 'customer', 'contact_info', 'contact', 'last_name', ), get_dict_element( row, 'asset', 'tiers', 'customer', 'contact_info', 'contact', 'first_name', ), ), get_dict_element( row, 'asset', 'tiers', 'customer', 'contact_info', 'contact', 'email', ), get_dict_element(row, 'asset', 'tiers', 'tier1', 'name'), get_dict_element(row, 'asset', 'tiers', 'tier1', 'external_id'), _concat_if_content( get_dict_element( row, 'asset', 'tiers', 'tier1', 'contact_info', 'contact', 'last_name', ), get_dict_element( row, 'asset', 'tiers', 'tier1', 'contact_info', 'contact', 'first_name', ), ), get_dict_element( row, 'asset', 'tiers', 'tier1', 'contact_info', 'contact', 'email', ), get_dict_element(row, 'asset', 'tiers', 'tier2', 'name'), get_dict_element(row, 'asset', 'tiers', 'tier2', 'external_id'), _concat_if_content( get_dict_element( row, 'asset', 'tiers', 'tier2', 'contact_info', 'contact', 'last_name', ), get_dict_element( row, 'asset', 'tiers', 'tier2', 'contact_info', 'contact', 'first_name', ), ), get_dict_element( row, 'asset', 'tiers', 'tier2', 'contact_info', 'contact', 'email', ), get_dict_element(row, 'marketplace', 'id'), get_dict_element(row, 'marketplace', 'name'), sla_group, )) index = 0 items = list(generator) for element in items: assert element == expected[index] index += 1
def generate(client, parameters, progress_callback): """ Extracts data from Connect using the ConnectClient instance and input parameters provided as arguments, applies required transformations (if any) and returns an iterator of rows that will be used to fill the Excel file. Each element returned by the iterator must be an iterator over the columns value. :param client: An instance of the CloudBlue Connect client. :type client: connect.client.ConnectClient :param parameters: Input parameters used to calculate the resulting dataset. :type parameters: dict :param progress_callback: A function that accepts t argument of type int that must be invoked to notify the progress of the report generation. :type progress_callback: func """ all_types = [ 'tiers_setup', 'inquiring', 'pending', 'approved', 'failed', 'draft' ] query = R() query &= R().created.ge(parameters['date']['after']) query &= R().created.le(parameters['date']['before']) if parameters.get('product') and parameters['product']['all'] is False: query &= R().asset.product.id.oneof(parameters['product']['choices']) if parameters.get('rr_type') and parameters['rr_type']['all'] is False: query &= R().type.oneof(parameters['rr_type']['choices']) if parameters.get('rr_status') and parameters['rr_status']['all'] is False: query &= R().status.oneof(parameters['rr_status']['choices']) else: query &= R().status.oneof(all_types) if parameters.get('mkp') and parameters['mkp']['all'] is False: query &= R().asset.marketplace.id.oneof(parameters['mkp']['choices']) if parameters.get('hub') and parameters['hub']['all'] is False: query &= R().asset.connection.hub.id.oneof( parameters['hub']['choices']) requests = client.requests.filter(query) progress = 0 total = requests.count() today = datetime.today().strftime('%Y-%m-%d %H:%M:%S') for request in requests: connection = request['asset']['connection'] for item in request['asset']['items']: yield ( get_basic_value(request, 'id'), get_basic_value(request, 'type'), convert_to_datetime(get_basic_value(request, 'created'), ), convert_to_datetime(get_basic_value(request, 'updated'), ), today, get_basic_value(item, 'global_id'), get_basic_value(item, 'display_name'), get_basic_value(item, 'item_type'), get_basic_value(item, 'type'), get_basic_value(item, 'mpn'), get_basic_value(item, 'period'), get_basic_value(item, 'quantity'), get_value(request['asset']['tiers'], 'customer', 'id'), get_value(request['asset']['tiers'], 'customer', 'name'), get_value(request['asset']['tiers'], 'customer', 'external_id'), get_value(request['asset']['tiers'], 'tier1', 'id'), get_value(request['asset']['tiers'], 'tier1', 'name'), get_value(request['asset']['tiers'], 'tier1', 'external_id'), get_value(request['asset']['tiers'], 'tier2', 'id'), get_value(request['asset']['tiers'], 'tier2', 'name'), get_value(request['asset']['tiers'], 'tier2', 'external_id'), get_value(request['asset']['connection'], 'provider', 'id'), get_value(request['asset']['connection'], 'provider', 'name'), get_value(request['asset']['connection'], 'vendor', 'id'), get_value(request['asset']['connection'], 'vendor', 'name'), get_value(request['asset'], 'product', 'id'), get_value(request['asset'], 'product', 'name'), get_value(request, 'asset', 'id'), get_value(request, 'asset', 'external_id'), get_value(request['asset'], 'connection', 'type'), get_value(connection, 'hub', 'id') if 'hub' in connection else '', get_value(connection, 'hub', 'name') if 'hub' in connection else '', get_value(request, 'asset', 'status'), ) progress += 1 progress_callback(progress, total)