def _query_costs(self): manager = self.manager is_resource_group = manager.type == 'resourcegroup' client = manager.get_client( 'azure.mgmt.costmanagement.CostManagementClient') aggregation = {'totalCost': QueryAggregation(name='PreTaxCost')} grouping = [ QueryGrouping(type='Dimension', name='ResourceGroupName' if is_resource_group else 'ResourceId') ] query_filter = None if not is_resource_group: query_filter = QueryFilter(dimension=QueryComparisonExpression( name='ResourceType', operator='In', values=[manager.resource_type.resource_type])) if 'dimension' in query_filter._attribute_map: query_filter._attribute_map['dimension']['key'] = 'dimensions' dataset = QueryDataset(grouping=grouping, aggregation=aggregation, filter=query_filter) timeframe = self.data['timeframe'] time_period = None if timeframe not in CostFilter.preset_timeframes: end_time = utcnow().replace(hour=0, minute=0, second=0, microsecond=0) start_time = end_time - timedelta(days=timeframe) timeframe = 'Custom' time_period = QueryTimePeriod(from_property=start_time, to=end_time) definition = QueryDefinition(timeframe=timeframe, time_period=time_period, dataset=dataset) subscription_id = manager.get_session().get_subscription_id() scope = '/subscriptions/' + subscription_id query = client.query.usage_by_scope(scope, definition) if hasattr(query, '_derserializer'): original = query._derserializer._deserialize query._derserializer._deserialize = lambda target, data: \ original(target, self.fix_wrap_rest_response(data)) result_list = list(query)[0] result_list = [{ result_list.columns[i].name: v for i, v in enumerate(row) } for row in result_list.rows] for r in result_list: if 'ResourceGroupName' in r: r['ResourceId'] = scope + '/resourcegroups/' + r.pop( 'ResourceGroupName') r['ResourceId'] = r['ResourceId'].lower() return result_list