コード例 #1
0
def generate_case_export_payload(domain, include_closed, format, group, user_filter):
    """
    Returns a FileWrapper object, which only the file backend in django-soil supports

    """
    view_name = 'hqcase/all_cases' if include_closed else 'hqcase/open_cases'
    key = [domain, {}, {}]
    case_ids = CommCareCase.view(view_name,
        startkey=key,
        endkey=key + [{}],
        reduce=False,
        include_docs=False,
        wrapper=lambda r: r['id']
    )
    def stream_cases(all_case_ids):
        for case_ids in chunked(all_case_ids, 500):
            for case in CommCareCase.view('_all_docs', keys=case_ids, include_docs=True):
                yield case

    # 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)

    fd, path = tempfile.mkstemp()
    with os.fdopen(fd, 'wb') as file:
        workbook = WorkBook(file, format)
        export_cases_and_referrals(domain, stream_cases(case_ids), workbook, users=users, groups=groups)
        export_users(users, workbook)
        workbook.close()
    return FileWrapper(open(path))
コード例 #2
0
ファイル: views.py プロジェクト: hashimoto-hb/commcare-hq
def generate_case_export_payload(domain, include_closed, format, group, user_filter, process=None):
    """
    Returns a FileWrapper object, which only the file backend in django-soil supports

    """
    status = "all" if include_closed else "open"
    case_ids = CommCareCase.get_all_cases(domain, status=status, wrapper=lambda r: r["id"])

    class stream_cases(object):
        def __init__(self, all_case_ids):
            self.all_case_ids = all_case_ids

        def __iter__(self):
            for case_ids in chunked(self.all_case_ids, 500):
                for case in wrapped_docs(CommCareCase, case_ids):
                    yield case

        def __len__(self):
            return len(self.all_case_ids)

    # 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)

    fd, path = tempfile.mkstemp()
    with os.fdopen(fd, "wb") as file:
        workbook = WorkBook(file, format)
        export_cases_and_referrals(
            domain, stream_cases(case_ids), workbook, users=users, groups=groups, process=process
        )
        export_users(users, workbook)
        workbook.close()
    return FileWrapper(open(path))
コード例 #3
0
def generate_case_export_payload(domain,
                                 include_closed,
                                 format,
                                 group,
                                 user_filter,
                                 process=None):
    """
    Returns a FileWrapper object, which only the file backend in django-soil supports

    """
    view_name = 'hqcase/all_cases' if include_closed else 'hqcase/open_cases'
    key = [domain, {}, {}]
    case_ids = CommCareCase.view(view_name,
                                 startkey=key,
                                 endkey=key + [{}],
                                 reduce=False,
                                 include_docs=False,
                                 wrapper=lambda r: r['id'])

    class stream_cases(object):
        def __init__(self, all_case_ids):
            self.all_case_ids = all_case_ids

        def __iter__(self):
            for case_ids in chunked(self.all_case_ids, 500):
                for case in wrapped_docs(CommCareCase, case_ids):
                    yield case

        def __len__(self):
            return len(self.all_case_ids)

    # 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)

    fd, path = tempfile.mkstemp()
    with os.fdopen(fd, 'wb') as file:
        workbook = WorkBook(file, format)
        export_cases_and_referrals(domain,
                                   stream_cases(case_ids),
                                   workbook,
                                   users=users,
                                   groups=groups,
                                   process=process)
        export_users(users, workbook)
        workbook.close()
    return FileWrapper(open(path))