def write_to_file(locations, filename, use_transfer): """ locations = [ ('loc_type1', { 'headers': ['header1', 'header2', ...] 'rows': [ { 'header1': val1 'header2': val2 }, {...}, ] }) ] """ outfile = get_download_file_path(use_transfer, filename) writer = Excel2007ExportWriter() header_table = [(tab_name, [tab['headers']]) for tab_name, tab in locations] writer.open(header_table=header_table, file=outfile) for tab_name, tab in locations: headers = tab['headers'] tab_rows = [[row.get(header, '') for header in headers] for row in tab['rows']] writer.write([(tab_name, tab_rows)]) writer.close() return outfile
def export_ucr_async(export_table, download_id, title, user): use_transfer = settings.SHARED_DRIVE_CONF.transfer_enabled filename = u'{}.xlsx'.format(title.replace(u'/', u'?')) file_path = get_download_file_path(use_transfer, filename) export_from_tables(export_table, file_path, Format.XLS_2007) expose_download(use_transfer, file_path, filename, download_id, 'xlsx') link = reverse("retrieve_download", args=[download_id], params={"get_file": '1'}, absolute=True) send_report_download_email(title, user, link)
def dump_users_and_groups(domain, download_id, user_filters): from corehq.apps.users.views.mobile.custom_data_fields import UserFieldsView def _load_memoizer(domain): group_memoizer = GroupMemoizer(domain=domain) # load groups manually instead of calling group_memoizer.load_all() # so that we can detect blank groups blank_groups = set() for group in Group.by_domain(domain): if group.name: group_memoizer.add_group(group) else: blank_groups.add(group) if blank_groups: raise GroupNameError(blank_groups=blank_groups) return group_memoizer writer = Excel2007ExportWriter() group_memoizer = _load_memoizer(domain) location_cache = LocationIdToSiteCodeCache(domain) user_data_model = CustomDataFieldsDefinition.get_or_create( domain, UserFieldsView.field_type ) user_headers, user_rows = parse_users( group_memoizer, domain, user_data_model, location_cache, user_filters ) group_headers, group_rows = parse_groups(group_memoizer.groups) headers = [ ('users', [user_headers]), ('groups', [group_headers]), ] rows = [ ('users', user_rows), ('groups', group_rows), ] use_transfer = settings.SHARED_DRIVE_CONF.transfer_enabled filename = "user_export_{}_{}.xlsx".format(domain, uuid.uuid4().hex) file_path = get_download_file_path(use_transfer, filename) writer.open( header_table=headers, file=file_path, ) writer.write(rows) writer.close() expose_download(use_transfer, file_path, filename, download_id, 'xlsx')
def export_ucr_async(report_export, download_id, user): use_transfer = settings.SHARED_DRIVE_CONF.transfer_enabled ascii_title = report_export.title.encode('ascii', 'replace').decode('utf-8') filename = '{}.xlsx'.format(ascii_title.replace('/', '?')) file_path = get_download_file_path(use_transfer, filename) report_export.create_export(file_path, Format.XLS_2007) expose_download(use_transfer, file_path, filename, download_id, 'xlsx', owner_ids=[user.get_id]) link = reverse("retrieve_download", args=[download_id], params={"get_file": '1'}, absolute=True) send_report_download_email(report_export.title, user.get_email(), link)
def export_ucr_async(report_export, download_id, user): use_transfer = settings.SHARED_DRIVE_CONF.transfer_enabled ascii_title = report_export.title.encode('ascii', 'replace').decode('utf-8') filename = '{}.xlsx'.format(ascii_title.replace('/', '?')) file_path = get_download_file_path(use_transfer, filename) report_export.create_export(file_path, Format.XLS_2007) expose_download(use_transfer, file_path, filename, download_id, 'xlsx') link = reverse("retrieve_download", args=[download_id], params={"get_file": '1'}, absolute=True) send_report_download_email(report_export.title, user.get_email(), link)
def _dump_xlsx_and_expose_download(filename, headers, rows, download_id, task, total_count, owner_id): writer = Excel2007ExportWriter(format_as_text=True) use_transfer = settings.SHARED_DRIVE_CONF.transfer_enabled file_path = get_download_file_path(use_transfer, filename) writer.open( header_table=headers, file=file_path, ) writer.write(rows) writer.close() expose_download(use_transfer, file_path, filename, download_id, 'xlsx', owner_ids=[owner_id]) DownloadBase.set_progress(task, total_count, total_count)
def dump_users_and_groups(domain, download_id, user_filters, task): from corehq.apps.users.views.mobile.custom_data_fields import UserFieldsView def _load_memoizer(domain): group_memoizer = GroupMemoizer(domain=domain) # load groups manually instead of calling group_memoizer.load_all() # so that we can detect blank groups blank_groups = set() for group in Group.by_domain(domain): if group.name: group_memoizer.add_group(group) else: blank_groups.add(group) if blank_groups: raise GroupNameError(blank_groups=blank_groups) return group_memoizer writer = Excel2007ExportWriter(format_as_text=True) group_memoizer = _load_memoizer(domain) location_cache = LocationIdToSiteCodeCache(domain) users_groups_count = count_users_and_groups(domain, user_filters, group_memoizer) DownloadBase.set_progress(task, 0, users_groups_count) user_data_model = CustomDataFieldsDefinition.get_or_create( domain, UserFieldsView.field_type ) user_headers, user_rows = parse_users( group_memoizer, domain, user_data_model, location_cache, user_filters, task, users_groups_count, ) group_headers, group_rows = parse_groups(group_memoizer.groups) headers = [ ('users', [user_headers]), ('groups', [group_headers]), ] rows = [ ('users', user_rows), ('groups', group_rows), ] use_transfer = settings.SHARED_DRIVE_CONF.transfer_enabled filename = "{}_users_{}.xlsx".format(domain, uuid.uuid4().hex) file_path = get_download_file_path(use_transfer, filename) writer.open( header_table=headers, file=file_path, ) writer.write(rows) writer.close() expose_download(use_transfer, file_path, filename, download_id, 'xlsx') DownloadBase.set_progress(task, users_groups_count, users_groups_count)