Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions redcap/methods/records.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ def export_records(
self,
format_type: Literal["json", "csv", "xml", "df"] = "json",
records: Optional[List[str]] = None,
fields: Optional[List[str]] = None,
forms: Optional[List[str]] = None,
fields: Optional[Union[List[str], str]] = None,
forms: Optional[Union[List[str], str]] = None,
events: Optional[List[str]] = None,
raw_or_label: Literal["raw", "label", "both"] = "raw",
raw_or_label_headers: Literal["raw", "label"] = "raw",
Expand Down Expand Up @@ -84,11 +84,13 @@ def export_records(
Array of record names specifying specific records to export.
By default, all records are exported
fields:
Array of field names specifying specific fields to pull
by default, all fields are exported
Single field name or array of field names specifying specific
fields to pull.
By default, all fields are exported
forms:
Array of form names to export. If in the web UI, the form
name has a space in it, replace the space with an underscore
Single form name or array of form names to export. If in the
web UI, the form name has a space in it, replace the space
with an underscore.
By default, all forms are exported
events:
An array of unique event names from which to export records
Expand Down Expand Up @@ -178,6 +180,12 @@ def export_records(
content="record", format_type=format_type, record_type=record_type
)

if isinstance(fields, str):
fields = [fields]

if isinstance(forms, str):
forms = [forms]

fields = self._backfill_fields(fields, forms)

keys_to_add = (
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/test_simple_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -482,15 +482,15 @@ def test_export_always_include_def_field(simple_project):
integration test that will test it for real
"""
# If we just ask for a form, must also get def_field in there
records = simple_project.export_records(forms=["imaging"])
records = simple_project.export_records(forms="imaging")
for record in records:
assert simple_project.def_field in record
# still need it def_field even if not asked for in form and fields
records = simple_project.export_records(forms=["imaging"], fields=["foo_score"])
for record in records:
assert simple_project.def_field in record
# If we just ask for some fields, still need def_field
records = simple_project.export_records(fields=["foo_score"])
records = simple_project.export_records(fields="foo_score")
for record in records:
assert simple_project.def_field in record
records = simple_project.export_records(fields=["record_id", "foo_score"])
Expand Down