def __init__(self): self.export_name = "costreport" self.container = "test_container" self.directory = "cost" self.test_date = datetime(2019, 8, 15) self.month_range = utils.month_date_range(self.test_date) self.report_path = '{}/{}/{}'.format(self.directory, self.export_name, self.month_range) self.export_uuid = '9c308505-61d3-487c-a1bb-017956c9170a' self.export_file = '{}_{}.csv'.format(self.export_name, self.export_uuid) self.export_etag = 'absdfwef' self.export_key = '{}/{}'.format(self.report_path, self.export_file) self.bad_test_date = datetime(2019, 7, 15) self.bad_month_range = utils.month_date_range(self.bad_test_date) self.bad_report_path = '{}/{}/{}'.format(self.directory, self.export_name, self.bad_month_range)
def _get_report_path(self, date_time): """ Return path of report files. Args: date_time (DateTime): The starting datetime object Returns: (String): "/blob_dir/export_name/YYYYMMDD-YYYYMMDD", example: "/cost/costreport/20190801-20190831" """ report_date_range = utils.month_date_range(date_time) return '{}/{}/{}'.format(self.directory, self.export_name, report_date_range)
def _create_cost_entry_bill(self, row, report_db_accessor): """Create a cost entry bill object. Args: row (dict): A dictionary representation of a CSV file row Returns: (str): A cost entry bill object id """ table_name = AzureCostEntryBill row_date = row.get('UsageDateTime') report_date_range = utils.month_date_range(parser.parse(row_date)) start_date, end_date = report_date_range.split('-') start_date_utc = parser.parse(start_date).replace(hour=0, minute=0, tzinfo=pytz.UTC) end_date_utc = parser.parse(end_date).replace(hour=0, minute=0, tzinfo=pytz.UTC) key = (start_date_utc, self._provider_id) if key in self.processed_report.bills: return self.processed_report.bills[key] if key in self.existing_bill_map: return self.existing_bill_map[key] data = self._get_data_for_table(row, table_name._meta.db_table) data['provider_id'] = self._provider_id data['billing_period_start'] = datetime.strftime( start_date_utc, '%Y-%m-%d %H:%M%z') data['billing_period_end'] = datetime.strftime(end_date_utc, '%Y-%m-%d %H:%M%z') bill_id = report_db_accessor.insert_on_conflict_do_nothing( table_name, data, conflict_columns=['billing_period_start', 'provider_id']) self.processed_report.bills[key] = bill_id return bill_id
def create_azure_cost_entry_bill(self, provider_id, bill_date=None): """Create an Azure cost entry bill database object for test.""" table_name = AZURE_REPORT_TABLE_MAP['bill'] data = self.create_columns_for_table(table_name) data['provider_id'] = provider_id fake_bill_date = self.make_datetime_aware(self.fake.past_datetime()) data['billing_period_start'] = fake_bill_date data['billing_period_end'] = fake_bill_date if bill_date: report_date_range = azure_utils.month_date_range(bill_date) bill_start, bill_end = report_date_range.split('-') data['billing_period_start'] = self.make_datetime_aware( parser.parse(bill_start)) data['billing_period_end'] = self.make_datetime_aware( parser.parse(bill_end)) with AzureReportDBAccessor(self.schema, self.column_map) as accessor: return accessor.create_db_object(table_name, data)