Instruments
REDCap API methods for Project instruments
        
Instruments            (Base)
        
    Responsible for all API methods under 'Instruments' in the API Playground
Source code in redcap/methods/instruments.py
          class Instruments(Base):
    """Responsible for all API methods under 'Instruments' in the API Playground"""
    def export_instruments(
        self,
        format_type: Literal["json", "csv", "xml", "df"] = "json",
    ):
        """
        Export the Instruments of the Project
        Args:
            format_type:
                Response return format
        Returns:
            Union[List[Dict[str, Any]], str, pandas.DataFrame]: List of Instruments
        Examples:
            >>> proj.export_instruments()
            [{'instrument_name': 'form_1', 'instrument_label': 'Form 1'}]
        """
        payload = self._initialize_payload(
            content="instrument", format_type=format_type
        )
        return_type = self._lookup_return_type(format_type, request_type="export")
        response = cast(Union[Json, str], self._call_api(payload, return_type))
        return self._return_data(
            response=response,
            content="instrument",
            format_type=format_type,
        )
    #### pylint: disable=too-many-locals
    def export_pdf(
        self,
        record: Optional[str] = None,
        event: Optional[str] = None,
        instrument: Optional[str] = None,
        repeat_instance: Optional[int] = None,
        all_records: Optional[bool] = None,
        compact_display: Optional[bool] = None,
    ) -> FileMap:
        """
        Export PDF file of instruments, either as blank or with data
        Args:
            record: Record ID
            event: For longitudinal projects, the unique event name
            instrument: Unique instrument name
            repeat_instance:
                (Only for projects with repeating instruments/events)
                The repeat instance number of the repeating event (if longitudinal)
                or the repeating instrument (if classic or longitudinal).
            all_records:
                If True, then all records will be exported as a single PDF file.
                Note: If this is True, then record, event, and instrument parameters
                      are all ignored.
            compact_display:
                If True, then the PDF will be exported in compact display mode.
        Returns:
            Content of the file and dictionary of useful metadata
        Examples:
            >>> proj.export_pdf()
            (b'%PDF-1.3\\n3 0 obj\\n..., {...})
        """
        # load up payload
        payload = self._initialize_payload(content="pdf", return_format_type="json")
        keys_to_add = (
            record,
            event,
            instrument,
            repeat_instance,
            all_records,
            compact_display,
        )
        str_keys = (
            "record",
            "event",
            "instrument",
            "repeat_instance",
            "allRecords",
            "compactDisplay",
        )
        for key, data in zip(str_keys, keys_to_add):
            data = cast(str, data)
            if data:
                payload[key] = data
        payload["action"] = "export"
        content, headers = cast(
            FileMap, self._call_api(payload=payload, return_type="file_map")
        )
        # REDCap adds some useful things in content-type
        content_map = {}
        if "content-type" in headers:
            splat = [
                key_values.strip() for key_values in headers["content-type"].split(";")
            ]
            key_values = [
                (key_values.split("=")[0], key_values.split("=")[1].replace('"', ""))
                for key_values in splat
                if "=" in key_values
            ]
            content_map = dict(key_values)
        return content, content_map
    #### pylint: enable=too-many-locals
    def export_instrument_event_mappings(
        self,
        format_type: Literal["json", "csv", "xml", "df"] = "json",
        arms: Optional[List[str]] = None,
        df_kwargs: Optional[Dict[str, Any]] = None,
    ):
        """
        Export the project's instrument to event mapping
        Args:
            format_type:
                Return the form event mappings in native objects,
                csv or xml, `'df''` will return a `pandas.DataFrame`
            arms: Limit exported form event mappings to these arms
            df_kwargs:
                Passed to pandas.read_csv to control construction of
                returned DataFrame
        Returns:
            Union[str, List[Dict[str, Any]], pd.DataFrame]: Instrument-event mapping for the project
        Examples:
            >>> proj.export_instrument_event_mappings()
            [{'arm_num': 1, 'unique_event_name': 'event_1_arm_1', 'form': 'form_1'}]
        """
        payload = self._initialize_payload(
            content="formEventMapping", format_type=format_type
        )
        if arms:
            for i, value in enumerate(arms):
                payload[f"arms[{ i }]"] = value
        return_type = self._lookup_return_type(format_type, request_type="export")
        response = cast(Union[Json, str], self._call_api(payload, return_type))
        return self._return_data(
            response=response,
            content="formEventMapping",
            format_type=format_type,
            df_kwargs=df_kwargs,
        )
    def import_instrument_event_mappings(
        self,
        to_import: Union[str, List[Dict[str, Any]], "pd.DataFrame"],
        return_format_type: Literal["json", "csv", "xml"] = "json",
        import_format: Literal["json", "csv", "xml", "df"] = "json",
    ):
        # pylint: disable=line-too-long
        """
        Import the project's instrument to event mapping
        Note:
            This only works for longitudinal projects.
        Args:
            to_import: array of dicts, csv/xml string, `pandas.DataFrame`
                Note:
                    If you pass a csv or xml string, you should use the
                    `import format` parameter appropriately.
            return_format_type:
                Response format. By default, response will be json-decoded.
            import_format:
                Format of incoming data. By default, import_format
                will be json-encoded
        Returns:
            Union[int, str]: Number of instrument-event mappings imported
        Examples:
            Import instrument-event mappings
            >>> instrument_event_mappings = [{"arm_num": "1", "unique_event_name": "event_1_arm_1", "form": "form_1"}]
            >>> proj.import_instrument_event_mappings(instrument_event_mappings)
            1
        """
        payload = self._initialize_import_payload(
            to_import=to_import,
            import_format=import_format,
            return_format_type=return_format_type,
            content="formEventMapping",
        )
        payload["action"] = "import"
        return_type = self._lookup_return_type(
            format_type=return_format_type, request_type="import"
        )
        response = cast(Union[Json, str], self._call_api(payload, return_type))
        return response
def_field: str
  
      inherited
      property
      readonly
  
    The 'record_id' field equivalent for a project
field_names: List[str]
  
      inherited
      property
      readonly
  
    Project field names
!!! note These are survey field names, not export field names
forms: List[str]
  
      inherited
      property
      readonly
  
    Project form names
is_longitudinal: bool
  
      inherited
      property
      readonly
  
    Whether or not this project is longitudinal
metadata: Json
  
      inherited
      property
      readonly
  
    Project metadata in JSON format
token: str
  
      inherited
      property
      readonly
  
    API token to a project
url: str
  
      inherited
      property
      readonly
  
    API URL to a REDCap server
export_instrument_event_mappings(self, format_type='json', arms=None, df_kwargs=None)
    Export the project's instrument to event mapping
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
format_type | 
        Literal['json', 'csv', 'xml', 'df'] | 
        Return the form event mappings in native objects,
csv or xml,   | 
        'json' | 
      
arms | 
        Optional[List[str]] | 
        Limit exported form event mappings to these arms  | 
        None | 
      
df_kwargs | 
        Optional[Dict[str, Any]] | 
        Passed to pandas.read_csv to control construction of returned DataFrame  | 
        None | 
      
Returns:
| Type | Description | 
|---|---|
Union[str, List[Dict[str, Any]], pd.DataFrame] | 
      Instrument-event mapping for the project  | 
    
Examples:
>>> proj.export_instrument_event_mappings()
[{'arm_num': 1, 'unique_event_name': 'event_1_arm_1', 'form': 'form_1'}]
Source code in redcap/methods/instruments.py
          def export_instrument_event_mappings(
    self,
    format_type: Literal["json", "csv", "xml", "df"] = "json",
    arms: Optional[List[str]] = None,
    df_kwargs: Optional[Dict[str, Any]] = None,
):
    """
    Export the project's instrument to event mapping
    Args:
        format_type:
            Return the form event mappings in native objects,
            csv or xml, `'df''` will return a `pandas.DataFrame`
        arms: Limit exported form event mappings to these arms
        df_kwargs:
            Passed to pandas.read_csv to control construction of
            returned DataFrame
    Returns:
        Union[str, List[Dict[str, Any]], pd.DataFrame]: Instrument-event mapping for the project
    Examples:
        >>> proj.export_instrument_event_mappings()
        [{'arm_num': 1, 'unique_event_name': 'event_1_arm_1', 'form': 'form_1'}]
    """
    payload = self._initialize_payload(
        content="formEventMapping", format_type=format_type
    )
    if arms:
        for i, value in enumerate(arms):
            payload[f"arms[{ i }]"] = value
    return_type = self._lookup_return_type(format_type, request_type="export")
    response = cast(Union[Json, str], self._call_api(payload, return_type))
    return self._return_data(
        response=response,
        content="formEventMapping",
        format_type=format_type,
        df_kwargs=df_kwargs,
    )
export_instruments(self, format_type='json')
    Export the Instruments of the Project
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
format_type | 
        Literal['json', 'csv', 'xml', 'df'] | 
        Response return format  | 
        'json' | 
      
Returns:
| Type | Description | 
|---|---|
Union[List[Dict[str, Any]], str, pandas.DataFrame] | 
      List of Instruments  | 
    
Examples:
Source code in redcap/methods/instruments.py
          def export_instruments(
    self,
    format_type: Literal["json", "csv", "xml", "df"] = "json",
):
    """
    Export the Instruments of the Project
    Args:
        format_type:
            Response return format
    Returns:
        Union[List[Dict[str, Any]], str, pandas.DataFrame]: List of Instruments
    Examples:
        >>> proj.export_instruments()
        [{'instrument_name': 'form_1', 'instrument_label': 'Form 1'}]
    """
    payload = self._initialize_payload(
        content="instrument", format_type=format_type
    )
    return_type = self._lookup_return_type(format_type, request_type="export")
    response = cast(Union[Json, str], self._call_api(payload, return_type))
    return self._return_data(
        response=response,
        content="instrument",
        format_type=format_type,
    )
export_pdf(self, record=None, event=None, instrument=None, repeat_instance=None, all_records=None, compact_display=None)
    Export PDF file of instruments, either as blank or with data
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
record | 
        Optional[str] | 
        Record ID  | 
        None | 
      
event | 
        Optional[str] | 
        For longitudinal projects, the unique event name  | 
        None | 
      
instrument | 
        Optional[str] | 
        Unique instrument name  | 
        None | 
      
repeat_instance | 
        Optional[int] | 
        (Only for projects with repeating instruments/events) The repeat instance number of the repeating event (if longitudinal) or the repeating instrument (if classic or longitudinal).  | 
        None | 
      
all_records | 
        Optional[bool] | 
        If True, then all records will be exported as a single PDF file. Note: If this is True, then record, event, and instrument parameters are all ignored.  | 
        None | 
      
compact_display | 
        Optional[bool] | 
        If True, then the PDF will be exported in compact display mode.  | 
        None | 
      
Returns:
| Type | Description | 
|---|---|
Tuple[bytes, dict] | 
      Content of the file and dictionary of useful metadata  | 
    
Examples:
Source code in redcap/methods/instruments.py
          def export_pdf(
    self,
    record: Optional[str] = None,
    event: Optional[str] = None,
    instrument: Optional[str] = None,
    repeat_instance: Optional[int] = None,
    all_records: Optional[bool] = None,
    compact_display: Optional[bool] = None,
) -> FileMap:
    """
    Export PDF file of instruments, either as blank or with data
    Args:
        record: Record ID
        event: For longitudinal projects, the unique event name
        instrument: Unique instrument name
        repeat_instance:
            (Only for projects with repeating instruments/events)
            The repeat instance number of the repeating event (if longitudinal)
            or the repeating instrument (if classic or longitudinal).
        all_records:
            If True, then all records will be exported as a single PDF file.
            Note: If this is True, then record, event, and instrument parameters
                  are all ignored.
        compact_display:
            If True, then the PDF will be exported in compact display mode.
    Returns:
        Content of the file and dictionary of useful metadata
    Examples:
        >>> proj.export_pdf()
        (b'%PDF-1.3\\n3 0 obj\\n..., {...})
    """
    # load up payload
    payload = self._initialize_payload(content="pdf", return_format_type="json")
    keys_to_add = (
        record,
        event,
        instrument,
        repeat_instance,
        all_records,
        compact_display,
    )
    str_keys = (
        "record",
        "event",
        "instrument",
        "repeat_instance",
        "allRecords",
        "compactDisplay",
    )
    for key, data in zip(str_keys, keys_to_add):
        data = cast(str, data)
        if data:
            payload[key] = data
    payload["action"] = "export"
    content, headers = cast(
        FileMap, self._call_api(payload=payload, return_type="file_map")
    )
    # REDCap adds some useful things in content-type
    content_map = {}
    if "content-type" in headers:
        splat = [
            key_values.strip() for key_values in headers["content-type"].split(";")
        ]
        key_values = [
            (key_values.split("=")[0], key_values.split("=")[1].replace('"', ""))
            for key_values in splat
            if "=" in key_values
        ]
        content_map = dict(key_values)
    return content, content_map
import_instrument_event_mappings(self, to_import, return_format_type='json', import_format='json')
    Import the project's instrument to event mapping
!!! note This only works for longitudinal projects.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
to_import | 
        Union[str, List[Dict[str, Any]], pd.DataFrame] | 
        array of dicts, csv/xml string,   | 
        required | 
return_format_type | 
        Literal['json', 'csv', 'xml'] | 
        Response format. By default, response will be json-decoded.  | 
        'json' | 
      
import_format | 
        Literal['json', 'csv', 'xml', 'df'] | 
        Format of incoming data. By default, import_format will be json-encoded  | 
        'json' | 
      
Returns:
| Type | Description | 
|---|---|
Union[int, str] | 
      Number of instrument-event mappings imported  | 
    
Examples:
Import instrument-event mappings
>>> instrument_event_mappings = [{"arm_num": "1", "unique_event_name": "event_1_arm_1", "form": "form_1"}]
>>> proj.import_instrument_event_mappings(instrument_event_mappings)
1
Source code in redcap/methods/instruments.py
          def import_instrument_event_mappings(
    self,
    to_import: Union[str, List[Dict[str, Any]], "pd.DataFrame"],
    return_format_type: Literal["json", "csv", "xml"] = "json",
    import_format: Literal["json", "csv", "xml", "df"] = "json",
):
    # pylint: disable=line-too-long
    """
    Import the project's instrument to event mapping
    Note:
        This only works for longitudinal projects.
    Args:
        to_import: array of dicts, csv/xml string, `pandas.DataFrame`
            Note:
                If you pass a csv or xml string, you should use the
                `import format` parameter appropriately.
        return_format_type:
            Response format. By default, response will be json-decoded.
        import_format:
            Format of incoming data. By default, import_format
            will be json-encoded
    Returns:
        Union[int, str]: Number of instrument-event mappings imported
    Examples:
        Import instrument-event mappings
        >>> instrument_event_mappings = [{"arm_num": "1", "unique_event_name": "event_1_arm_1", "form": "form_1"}]
        >>> proj.import_instrument_event_mappings(instrument_event_mappings)
        1
    """
    payload = self._initialize_import_payload(
        to_import=to_import,
        import_format=import_format,
        return_format_type=return_format_type,
        content="formEventMapping",
    )
    payload["action"] = "import"
    return_type = self._lookup_return_type(
        format_type=return_format_type, request_type="import"
    )
    response = cast(Union[Json, str], self._call_api(payload, return_type))
    return response