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('tier_type') and parameters['tier_type']['all'] is False: query &= R().scopes.oneof(parameters['tier_type']['choices']) marketplaces_list = client.marketplaces.all() hubs = {} for marketplace in marketplaces_list: if 'hubs' in marketplace: for hub in marketplace['hubs']: if 'hub' in hub and hub['hub']['id'] not in hubs: hubs[hub['hub']['id']] = marketplace['owner'] customers = client.ns('tier').accounts.filter(query).order_by( '-events.created.at').limit(1000) total = customers.count() def get_provider(hub, prop): if not hub or hub == '-' or hub not in hubs: # pragma: no branch return '-' # pragma: no cover return hubs[hub][prop] def create_phone(pn): return f'{pn["country_code"]}{pn["area_code"]}{pn["phone_number"]}{pn["extension"]}' progress = 0 for customer in customers: contact = customer['contact_info'] yield ( get_basic_value(customer, 'id'), get_basic_value(customer, 'external_id'), 'Yes' if 'customer' in customer['scopes'] else '-', 'Yes' if 'tier1' in customer['scopes'] else '-', 'Yes' if 'tier2' in customer['scopes'] else '-', get_provider(get_value(customer, 'hub', 'id'), 'id'), get_provider(get_value(customer, 'hub', 'id'), 'name'), get_basic_value(customer, 'name'), get_basic_value(customer, 'tax_id'), get_basic_value(contact, 'address_line1'), get_basic_value(contact, 'address_line2'), get_basic_value(contact, 'city'), get_basic_value(contact, 'state'), get_basic_value(contact, 'postal_code'), get_basic_value(contact, 'country'), get_value(contact, 'contact', 'first_name'), get_value(contact, 'contact', 'last_name'), get_value(contact, 'contact', 'email'), create_phone(contact['contact']['phone_number']), 'Available', ) progress += 1 progress_callback(progress, total)
def generate( client=None, parameters=None, progress_callback=None, renderer_type=None, extra_context_callback=None, ): usage_files = _get_uf(client, parameters) total = usage_files.count() progress = 0 now = datetime.now() if renderer_type == 'csv': yield HEADERS total += 1 progress += 1 progress_callback(progress, total) for uf in usage_files: hours, rest = divmod( (now - datetime.strptime(get_value(uf['events'], 'created', 'at'), '%Y-%m-%dT%H:%M:%S+00:00')).total_seconds(), 3600) if int(hours) <= 24: continue if renderer_type == 'json': yield { HEADERS[idx].replace(' ', '_').lower(): value for idx, value in enumerate(_process_line(uf)) } else: yield _process_line(uf) progress += 1 progress_callback(progress, total)
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 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 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 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'] 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_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() 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): 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_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 _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): """ 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)
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 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 generate(client, parameters, progress_callback): 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('mkp') and parameters['mkp']['all'] is False: query &= R().asset.marketplace.id.oneof(parameters['mkp']['choices']) if parameters.get('tier_type') and parameters['tier_type']['all'] is False: query &= R().scopes.oneof(parameters['tier_type']['choices']) marketplaces_list = client.marketplaces.all() marketplaces = {} for marketplace in marketplaces_list: marketplaces[marketplace['id']] = { 'name': marketplace['owner']['name'], 'id': marketplace['owner']['id'], } customers = client.ns('tier').accounts.filter(query).order_by( '-created').limit(1000) progress = 0 total = customers.count() output = [] def get_provider(mkp, prop): if not mkp or mkp == '-' or mkp not in marketplaces: # pragma: no branch return '-' # pragma: no cover return marketplaces[mkp][prop] def create_phone(pn): return f'{pn["country_code"]}{pn["area_code"]}{pn["phone_number"]}{pn["extension"]}' for customer in customers: try: customer_row = [ get_basic_value(customer, 'id'), get_basic_value(customer, 'external_id'), get_basic_value(customer, 'environment'), 'Yes' if 'customer' in customer['scopes'] else '-', 'Yes' if 'tier1' in customer['scopes'] else '-', 'Yes' if 'tier2' in customer['scopes'] else '-', get_provider(get_value(customer, 'marketplace', 'id'), 'id'), get_provider(get_value(customer, 'marketplace', 'id'), 'name'), get_value(customer, 'marketplace', 'id'), get_value(customer, 'marketplace', 'name'), get_basic_value(customer, 'name'), get_basic_value(customer, 'tax_id'), ] if parameters['full_contact_info'] == 'yes': customer_extended_info = client.ns('tier').accounts[ get_basic_value(customer, 'id')].get() contact = customer_extended_info['contact_info'] customer_row_extended = [ get_basic_value(contact, 'address_line1'), get_basic_value(contact, 'address_line2'), get_basic_value(contact, 'city'), get_basic_value(contact, 'state'), get_basic_value(contact, 'postal_code'), get_basic_value(contact, 'country'), get_value(contact, 'contact', 'first_name'), get_value(contact, 'contact', 'last_name'), get_value(contact, 'contact', 'email'), create_phone(contact['contact']['phone_number']) ] else: customer_row_extended = ['-'] * 10 output.append(customer_row + customer_row_extended) except Exception: progress += 1 progress_callback(progress, total) pass progress += 1 progress_callback(progress, total) return output
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 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 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), ]