def download_cases(request, domain): include_closed = json.loads(request.GET.get('include_closed', 'false')) format = Format.from_format(request.GET.get('format') or Format.XLS_2007) view_name = 'hqcase/all_cases' if include_closed else 'hqcase/open_cases' key = [domain, {}, {}] cases = CommCareCase.view(view_name, startkey=key, endkey=key + [{}], reduce=False, include_docs=True) # group, users = util.get_group_params(domain, **json_request(request.GET)) group = request.GET.get('group', None) user_filter, _ = FilterUsersField.get_user_filter(request) # todo deal with cached user dict here users = get_all_users_by_domain(domain, group=group, user_filter=user_filter) groups = Group.get_case_sharing_groups(domain) # if not group: # users.extend(CommCareUser.by_domain(domain, is_active=False)) workbook = WorkBook() export_cases_and_referrals(cases, workbook, users=users, groups=groups) export_users(users, workbook) response = HttpResponse(workbook.format(format.slug)) response['Content-Type'] = "%s" % format.mimetype response['Content-Disposition'] = "attachment; filename={domain}_data.{ext}".format(domain=domain, ext=format.extension) return response
def download_cases(request, domain): include_closed = json.loads(request.GET.get('include_closed', 'false')) format = Format.from_format(request.GET.get('format') or Format.XLS_2007) group = request.GET.get('group', None) user_filter, _ = FilterUsersField.get_user_filter(request) async = request.GET.get('async') == 'true' kwargs = { 'domain': domain, 'include_closed': include_closed, 'format': format, 'group': group, 'user_filter': user_filter, } payload_func = SerializableFunction(generate_case_export_payload, **kwargs) content_disposition = "attachment; filename={domain}_data.{ext}".format( domain=domain, ext=format.extension) mimetype = "%s" % format.mimetype def generate_payload(payload_func): if async: download = DownloadBase() a_task = prepare_download.delay(download.download_id, payload_func, content_disposition, mimetype) download.set_task(a_task) return download.get_start_response() else: payload = payload_func() response = HttpResponse(payload) response['Content-Type'] = mimetype response['Content-Disposition'] = content_disposition return response return generate_payload(payload_func)
def download_cases(request, domain): include_closed = json.loads(request.GET.get('include_closed', 'false')) format = Format.from_format(request.GET.get('format') or Format.XLS_2007) group = request.GET.get('group', None) user_filter, _ = FilterUsersField.get_user_filter(request) async = request.GET.get('async') == 'true' kwargs = { 'domain': domain, 'include_closed': include_closed, 'format': format, 'group': group, 'user_filter': user_filter, } payload_func = SerializableFunction(generate_case_export_payload, **kwargs) content_disposition = "attachment; filename={domain}_data.{ext}".format(domain=domain, ext=format.extension) mimetype = "%s" % format.mimetype def generate_payload(payload_func): if async: download = DownloadBase() a_task = prepare_download.delay(download.download_id, payload_func, content_disposition, mimetype) download.set_task(a_task) return download.get_start_response() else: payload = payload_func() response = HttpResponse(payload) response['Content-Type'] = mimetype response['Content-Disposition'] = content_disposition return response return generate_payload(payload_func)
def export_data(req, domain): """ Download all data for a couchdbkit model """ try: export_tag = json.loads(req.GET.get("export_tag", "null") or "null") except ValueError: return HttpResponseBadRequest() group, users = util.get_group_params(domain, **json_request(req.GET)) include_errors = string_to_boolean(req.GET.get("include_errors", False)) kwargs = {"format": req.GET.get("format", Format.XLS_2007), "previous_export_id": req.GET.get("previous_export", None), "filename": export_tag, "use_cache": string_to_boolean(req.GET.get("use_cache", "True")), "max_column_size": int(req.GET.get("max_column_size", 2000)), "separator": req.GET.get("separator", "|")} user_filter, _ = FilterUsersField.get_user_filter(req) if user_filter: users_matching_filter = map(lambda x: x.get('user_id'), get_all_users_by_domain(domain, user_filter=user_filter, simplified=True)) def _ufilter(user): try: return user['form']['meta']['userID'] in users_matching_filter except KeyError: return False filter = _ufilter else: filter = SerializableFunction(util.group_filter, group=group) errors_filter = instances if not include_errors else None kwargs['filter'] = couchexport.util.intersect_functions(filter, errors_filter) if kwargs['format'] == 'raw': resp = export_raw_data([domain, export_tag], filename=export_tag) else: try: resp = export_data_shared([domain,export_tag], **kwargs) except UnsupportedExportFormat as e: return HttpResponseBadRequest(e) if resp: return resp else: messages.error(req, "Sorry, there was no data found for the tag '%s'." % export_tag) next = req.GET.get("next", "") if not next: next = export.ExcelExportReport.get_url(domain) return HttpResponseRedirect(next)
def export_all_form_metadata_async(req, domain): datespan = req.datespan if req.GET.get("startdate") and req.GET.get("enddate") else None group_id = req.GET.get("group") ufilter = FilterUsersField.get_user_filter(req)[0] users = list(util.get_all_users_by_domain(domain=domain, group=group_id, user_filter=ufilter, simplified=True)) user_ids = filter(None, [u["user_id"] for u in users]) format = req.GET.get("format", Format.XLS_2007) filename = "%s_forms" % domain download = DownloadBase() download.set_task(create_metadata_export.delay( download.download_id, domain, format=format, filename=filename, datespan=datespan, user_ids=user_ids, )) return download.get_start_response()
def export_data(req, domain): """ Download all data for a couchdbkit model """ try: export_tag = json.loads(req.GET.get("export_tag", "null") or "null") except ValueError: return HttpResponseBadRequest() group, users = util.get_group_params(domain, **json_request(req.GET)) include_errors = string_to_boolean(req.GET.get("include_errors", False)) kwargs = { "format": req.GET.get("format", Format.XLS_2007), "previous_export_id": req.GET.get("previous_export", None), "filename": export_tag, "use_cache": string_to_boolean(req.GET.get("use_cache", "True")), "max_column_size": int(req.GET.get("max_column_size", 2000)), "separator": req.GET.get("separator", "|") } user_filter, _ = FilterUsersField.get_user_filter(req) if user_filter: users_matching_filter = map( lambda x: x.get('user_id'), get_all_users_by_domain(domain, user_filter=user_filter, simplified=True)) def _ufilter(user): try: return user['form']['meta']['userID'] in users_matching_filter except KeyError: return False filter = _ufilter else: filter = SerializableFunction(util.group_filter, group=group) errors_filter = instances if not include_errors else None kwargs['filter'] = couchexport.util.intersect_functions( filter, errors_filter) if kwargs['format'] == 'raw': resp = export_raw_data([domain, export_tag], filename=export_tag) else: try: resp = export_data_shared([domain, export_tag], **kwargs) except UnsupportedExportFormat as e: return HttpResponseBadRequest(e) if resp: return resp else: messages.error( req, "Sorry, there was no data found for the tag '%s'." % export_tag) next = req.GET.get("next", "") if not next: next = export.ExcelExportReport.get_url(domain=domain) return HttpResponseRedirect(next)