Skip to content

Field

Field

Bases: BaseClass

Attributes:

Name Type Description
id str

id of the field

name str

name of the field

type str

Corresponding field type. One out of:

- Numeric for numeric fields
- NumericRange for numeric range fields
- Date for date fields
- SingleLine for text fields
- ComboBox for list fields
- MultiLine for notebook fields
- Checkbox for checkbox fields
- Calculation for calculation fields
script str

In case of a calculation field, this attribute holds the script applied for the calculations

comboboxentries List[ComboBoxEntry]

In case of a list field, this attribute holds all attached list options as ComboBoxEntry objects. Otherwise it is an empty list.

Source code in furthrmind\collection\field.py
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
class Field(BaseClass):
    """
    Attributes
    ----------
    id : str
        id of the field
    name : str
        name of the field
    type : str
        Corresponding field type. One out of:

            - Numeric for numeric fields
            - NumericRange for numeric range fields
            - Date for date fields
            - SingleLine for text fields
            - ComboBox for list fields
            - MultiLine for notebook fields
            - Checkbox for checkbox fields
            - Calculation for calculation fields

    script : str
        In case of a calculation field, this attribute holds the script applied for the calculations
    comboboxentries : List[ComboBoxEntry]
        In case of a list field, this attribute holds all attached list options as [ComboBoxEntry](comboboxentry.md)
        objects. Otherwise it is an empty list.
    """

    id = ""
    name = ""
    type = ""
    script = ""
    comboboxentries: List["ComboBoxEntry"] = []

    _attr_definition = {
        "comboboxentries": {"class": "ComboBoxEntry"}
    }

    def __init__(self, id=None, data=None):
        super().__init__(id, data)

    def _get_url_instance(self, project_id=None):
        project_url = Field.fm.get_project_url(project_id)
        url = f"{project_url}/fields/{self.id}"
        return url

    @classmethod
    def _get_url_class(cls, id, project_id=None):
        project_url = cls.fm.get_project_url(project_id)
        url = f"{project_url}/fields/{id}"
        return url

    @classmethod
    def _get_all_url(cls, project_id=None):
        project_url = cls.fm.get_project_url(project_id)
        url = f"{project_url}/fields"
        return url

    @classmethod
    def _post_url(cls, project_id=None):
        project_url = cls.fm.get_project_url(project_id)
        url = f"{project_url}/fields"
        return url

    @classmethod
    def get(cls, id: str = "", name: str = "", project_id: str = "") -> Self:
        """
        Method to get all one field by its id or name
        If called on the instance of a class, the id of the instance is used

        Parameters
        ----------
        id : str
            id of the requested field
        name : str
            name of the requested field
        project_id : str, optional
            Optionally to get a field from another project as the furthrmind sdk was initiated with

        Returns
        -------
        Self
            Instance of the field class

        Raises
        ------
        AssertionError
            If called as class method and neither id nor name is specified
        """

        if isclass(cls):
            assert id or name, "Either id or name must be specified"
        return cls._get(id, name=name, project_id=project_id)

    @classmethod
    def get_many(cls, ids: List[str] = (), names: List[str] = (), project_id: str = "") -> List[Self]:
        """
        Method to get many fields belonging to one project

        Parameters
        ----------
        ids : list of str, optional
            List of ids to get fields for.

        names : list of str, optional
            List of names to get fields for.

        project_id : str, optional
            Optionally to get fields from another project as the furthrmind sdk was initiated with

        Returns
        -------
        list[Self]
            List of instances of the experiment class.

        Raises
        ------
        AssertionError
            If neither ids nor names are specified.

        """

        assert ids or names, "Either ids or names must be specified"
        return cls._get_many(ids, names=names, project_id=project_id)

    @classmethod
    def get_all(cls, project_id: str = "") -> List[Self]:
        """
        Method to get all fields belonging to one project

        Parameters
        ----------
        project_id : str, optional
            Optionally to get fields from another project as the furthrmind sdk was initiated with

        Returns
        -------
        List[Self]
            A list of instances of the field class, representing all the fields belonging to the specified project.
        """

        return cls._get_all(project_id=project_id)

    @classmethod
    @BaseClass._create_instances_decorator(_fetched=False)
    def create(cls, name: str, type: str, project_id: str = "") -> Self:

        """
        Method to create a new field

        Parameters
        ----------
        name : str
            The name of the field to be created.
        type : str
            The field type of the field. Must be one of the following. Lower or uppercase is not considered,
                i.e. Numeric or numeric is both valid:
                - Numeric fields: numeric, numeric-field, numeric_field
                - Numeric range fields: numericrange, numeric_range, numericrangefield, numeric-range-field, numeric_range_field
                - Date fields: date, date_field, date-field, datefield
                - Text fields: singleline, singlelinefield, text, text-field, text_field, textfield
                - List fields: combobox, comboboxfield, list, list-field, list_field, listfield
                - Notebook fields: multiline, notebook, notebookfield, notebook-field, notebook_field
                - Checkbox fields: checkbox, checkbox-field, checkbox_field, checkboxfield
                - Calculation fields: calculation, calculation-field, calculation_field, calculationfield
        project_id : str, optional
            Optionally, the ID of the project to create an item in. If not provided, the item will be created in the project associated with the furthrmind SDK.

        Returns
        -------
        instance of the sample class
            The created sample instance.

        Raises
        ------
        ValueError
            If name is empty or if type is not one of the allowed types.

        """

        if not name:
            raise ValueError("Name cannot be empty")

        type = cls._check_field_type(type)
        data = {"name": name, "type": type}
        id = cls._post(data, project_id)
        data["id"] = id
        return data

    @classmethod
    def _check_field_type(cls, field_type: str):
        field_type_mapping = {
            "Numeric": ["numeric", "numeric-field", "numeric_field", "numericfield"],
            "NumericRange": ["numericrange", "numeric_range", "numericrangefield", "numeric-range-field","numeric_range_field"],
            "Date": ["date", "date_field", "date-field", "datefield"],
            "SingleLine": ["singleline", "single-line", "single_line", "singlelinefield", "single-line-field",
                           "single_line_field", "text", "text-field", "text_field", "textfield"],
            "ComboBox": ["combobox", "comboboxfield", "combobox-field", "combobox_field", "comboboxentry",
                         "list", "listfield", "list-field", "list_field"],
            "MultiLine": ["multiline", "multi_line", "mulit-line", "multilinefield", "multi-line-field",
                          "multi_line_field", "notebook-field", "notebook_field", "notebookfield"],
            "CheckBox": ["checkbox", "checkbox-field", "checkbox_field", "checkboxfield"],
            "Calculation": ["calculation", "calculation-field", "calculation_field", "calculationfield"],
        }
        for field_type_server in field_type_mapping:
            if field_type.lower() in field_type_mapping[field_type_server]:
                return field_type_server

        raise ValueError("Wrong field type")

    @classmethod
    @BaseClass._create_instances_decorator(_fetched=False)
    def create_many(cls, data_list: List[Dict], project_id=None) -> List[Self]:
        """
        Method to create multiple fields

        Parameters
        ----------
        data_list : List[Dict]
            A list of dictionaries containing the data for creating multiple samples. Each dictionary should
            have the following keys:
            - name : str
                The name of the field to be created.
            - type : str
                The field type of the field. Must be one of the following. Lower or uppercase is not considered,
                i.e. Numeric or numeric is both valid:
                - Numeric fields: numeric, numeric-field, numeric_field
                - Numeric range fields: numericrange, numeric_range, numericrangefield, numeric-range-field, numeric_range_field
                - Date fields: date, date_field, date-field, datefield
                - Text fields: singleline, singlelinefield, text, text-field, text_field, textfield
                - List fields: combobox, comboboxfield, list, list-field, list_field, listfield
                - Notebook fields: multiline, notebook, notebookfield, notebook-field, notebook_field
                - Checkbox fields: checkbox, checkbox-field, checkbox_field, checkboxfield
                - Calculation fields: calculation, calculation-field, calculation_field, calculationfield
        project_id : int, optional
            Optionally to create fields in another project as the furthrmind sdk was initiated with

        Returns
        -------
        List[Self]
            A list of instance of the field class that have been created.

        Raises
        ------
        ValueError
            When the "name" key is missing or empty in any of the dictionaries in data_list.
        ValueError
            When the "type" value is not one of: Numeric, Date, SingleLine, ComboBox, MultiLine, CheckBox, Calculation.


        Examples
        --------
        data_list = [
            {"name": "Field 1", "type": "Numeric"},
            {"name": "Field 2", "type": "SingleLine"},
            {"name": "Field 3", "type": "Date"},
            {"name": "Field 4", "type": "ComboBox"},
        ]

        fields = ClassName.create_many(data_list)

        """

        for data in data_list:
            if not "name" in data:
                raise ValueError("Name cannot be empty")

            field_type = cls._check_field_type(data.get("type"))
            data["type"] = field_type

        id_list = cls._post(data_list, project_id, force_list=True)
        for data, id in zip(data_list, id_list):
            data["id"] = id
        return data_list

create(name, type, project_id='') classmethod

Method to create a new field

Parameters:

Name Type Description Default
name str

The name of the field to be created.

required
type str

The field type of the field. Must be one of the following. Lower or uppercase is not considered, i.e. Numeric or numeric is both valid: - Numeric fields: numeric, numeric-field, numeric_field - Numeric range fields: numericrange, numeric_range, numericrangefield, numeric-range-field, numeric_range_field - Date fields: date, date_field, date-field, datefield - Text fields: singleline, singlelinefield, text, text-field, text_field, textfield - List fields: combobox, comboboxfield, list, list-field, list_field, listfield - Notebook fields: multiline, notebook, notebookfield, notebook-field, notebook_field - Checkbox fields: checkbox, checkbox-field, checkbox_field, checkboxfield - Calculation fields: calculation, calculation-field, calculation_field, calculationfield

required
project_id str

Optionally, the ID of the project to create an item in. If not provided, the item will be created in the project associated with the furthrmind SDK.

''

Returns:

Type Description
instance of the sample class

The created sample instance.

Raises:

Type Description
ValueError

If name is empty or if type is not one of the allowed types.

Source code in furthrmind\collection\field.py
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
@classmethod
@BaseClass._create_instances_decorator(_fetched=False)
def create(cls, name: str, type: str, project_id: str = "") -> Self:

    """
    Method to create a new field

    Parameters
    ----------
    name : str
        The name of the field to be created.
    type : str
        The field type of the field. Must be one of the following. Lower or uppercase is not considered,
            i.e. Numeric or numeric is both valid:
            - Numeric fields: numeric, numeric-field, numeric_field
            - Numeric range fields: numericrange, numeric_range, numericrangefield, numeric-range-field, numeric_range_field
            - Date fields: date, date_field, date-field, datefield
            - Text fields: singleline, singlelinefield, text, text-field, text_field, textfield
            - List fields: combobox, comboboxfield, list, list-field, list_field, listfield
            - Notebook fields: multiline, notebook, notebookfield, notebook-field, notebook_field
            - Checkbox fields: checkbox, checkbox-field, checkbox_field, checkboxfield
            - Calculation fields: calculation, calculation-field, calculation_field, calculationfield
    project_id : str, optional
        Optionally, the ID of the project to create an item in. If not provided, the item will be created in the project associated with the furthrmind SDK.

    Returns
    -------
    instance of the sample class
        The created sample instance.

    Raises
    ------
    ValueError
        If name is empty or if type is not one of the allowed types.

    """

    if not name:
        raise ValueError("Name cannot be empty")

    type = cls._check_field_type(type)
    data = {"name": name, "type": type}
    id = cls._post(data, project_id)
    data["id"] = id
    return data

create_many(data_list, project_id=None) classmethod

Method to create multiple fields

Parameters:

Name Type Description Default
data_list List[Dict]

A list of dictionaries containing the data for creating multiple samples. Each dictionary should have the following keys: - name : str The name of the field to be created. - type : str The field type of the field. Must be one of the following. Lower or uppercase is not considered, i.e. Numeric or numeric is both valid: - Numeric fields: numeric, numeric-field, numeric_field - Numeric range fields: numericrange, numeric_range, numericrangefield, numeric-range-field, numeric_range_field - Date fields: date, date_field, date-field, datefield - Text fields: singleline, singlelinefield, text, text-field, text_field, textfield - List fields: combobox, comboboxfield, list, list-field, list_field, listfield - Notebook fields: multiline, notebook, notebookfield, notebook-field, notebook_field - Checkbox fields: checkbox, checkbox-field, checkbox_field, checkboxfield - Calculation fields: calculation, calculation-field, calculation_field, calculationfield

required
project_id int

Optionally to create fields in another project as the furthrmind sdk was initiated with

None

Returns:

Type Description
List[Self]

A list of instance of the field class that have been created.

Raises:

Type Description
ValueError

When the "name" key is missing or empty in any of the dictionaries in data_list.

ValueError

When the "type" value is not one of: Numeric, Date, SingleLine, ComboBox, MultiLine, CheckBox, Calculation.

Examples:

data_list = [ {"name": "Field 1", "type": "Numeric"}, {"name": "Field 2", "type": "SingleLine"}, {"name": "Field 3", "type": "Date"}, {"name": "Field 4", "type": "ComboBox"}, ]

fields = ClassName.create_many(data_list)

Source code in furthrmind\collection\field.py
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
@classmethod
@BaseClass._create_instances_decorator(_fetched=False)
def create_many(cls, data_list: List[Dict], project_id=None) -> List[Self]:
    """
    Method to create multiple fields

    Parameters
    ----------
    data_list : List[Dict]
        A list of dictionaries containing the data for creating multiple samples. Each dictionary should
        have the following keys:
        - name : str
            The name of the field to be created.
        - type : str
            The field type of the field. Must be one of the following. Lower or uppercase is not considered,
            i.e. Numeric or numeric is both valid:
            - Numeric fields: numeric, numeric-field, numeric_field
            - Numeric range fields: numericrange, numeric_range, numericrangefield, numeric-range-field, numeric_range_field
            - Date fields: date, date_field, date-field, datefield
            - Text fields: singleline, singlelinefield, text, text-field, text_field, textfield
            - List fields: combobox, comboboxfield, list, list-field, list_field, listfield
            - Notebook fields: multiline, notebook, notebookfield, notebook-field, notebook_field
            - Checkbox fields: checkbox, checkbox-field, checkbox_field, checkboxfield
            - Calculation fields: calculation, calculation-field, calculation_field, calculationfield
    project_id : int, optional
        Optionally to create fields in another project as the furthrmind sdk was initiated with

    Returns
    -------
    List[Self]
        A list of instance of the field class that have been created.

    Raises
    ------
    ValueError
        When the "name" key is missing or empty in any of the dictionaries in data_list.
    ValueError
        When the "type" value is not one of: Numeric, Date, SingleLine, ComboBox, MultiLine, CheckBox, Calculation.


    Examples
    --------
    data_list = [
        {"name": "Field 1", "type": "Numeric"},
        {"name": "Field 2", "type": "SingleLine"},
        {"name": "Field 3", "type": "Date"},
        {"name": "Field 4", "type": "ComboBox"},
    ]

    fields = ClassName.create_many(data_list)

    """

    for data in data_list:
        if not "name" in data:
            raise ValueError("Name cannot be empty")

        field_type = cls._check_field_type(data.get("type"))
        data["type"] = field_type

    id_list = cls._post(data_list, project_id, force_list=True)
    for data, id in zip(data_list, id_list):
        data["id"] = id
    return data_list

delete(id='', project_id='') classmethod

Method to delete an item. Can be called as a classmethod with providing the id to be deleted or on the instance of a class

Parameters:

Name Type Description Default
id str

The id of the resource to delete

''
project_id str

Optionally to delete an item in another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
str

The id of the item

Source code in furthrmind\collection\baseclass.py
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
@classmethod
def delete(cls, id: str = "", project_id: str = "") -> str:
    """
    Method to delete an item. Can be called as a classmethod with providing the id to be deleted or on the instance
    of a class

    Parameters
    ----------
    id : str
        The id of the resource to delete
    project_id : str, optional
        Optionally to delete an item in another project as the furthrmind sdk was initiated with

    Returns
    -------
    str
        The id of the item
    """

    if isclass(cls):
        return cls._delete_class_method(id, project_id)
    else:
        self = cls
        return self._delete_instance_method(project_id)

get(id='', name='', project_id='') classmethod

Method to get all one field by its id or name If called on the instance of a class, the id of the instance is used

Parameters:

Name Type Description Default
id str

id of the requested field

''
name str

name of the requested field

''
project_id str

Optionally to get a field from another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
Self

Instance of the field class

Raises:

Type Description
AssertionError

If called as class method and neither id nor name is specified

Source code in furthrmind\collection\field.py
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
@classmethod
def get(cls, id: str = "", name: str = "", project_id: str = "") -> Self:
    """
    Method to get all one field by its id or name
    If called on the instance of a class, the id of the instance is used

    Parameters
    ----------
    id : str
        id of the requested field
    name : str
        name of the requested field
    project_id : str, optional
        Optionally to get a field from another project as the furthrmind sdk was initiated with

    Returns
    -------
    Self
        Instance of the field class

    Raises
    ------
    AssertionError
        If called as class method and neither id nor name is specified
    """

    if isclass(cls):
        assert id or name, "Either id or name must be specified"
    return cls._get(id, name=name, project_id=project_id)

get_all(project_id='') classmethod

Method to get all fields belonging to one project

Parameters:

Name Type Description Default
project_id str

Optionally to get fields from another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
List[Self]

A list of instances of the field class, representing all the fields belonging to the specified project.

Source code in furthrmind\collection\field.py
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
@classmethod
def get_all(cls, project_id: str = "") -> List[Self]:
    """
    Method to get all fields belonging to one project

    Parameters
    ----------
    project_id : str, optional
        Optionally to get fields from another project as the furthrmind sdk was initiated with

    Returns
    -------
    List[Self]
        A list of instances of the field class, representing all the fields belonging to the specified project.
    """

    return cls._get_all(project_id=project_id)

get_many(ids=(), names=(), project_id='') classmethod

Method to get many fields belonging to one project

Parameters:

Name Type Description Default
ids list of str

List of ids to get fields for.

()
names list of str

List of names to get fields for.

()
project_id str

Optionally to get fields from another project as the furthrmind sdk was initiated with

''

Returns:

Type Description
list[Self]

List of instances of the experiment class.

Raises:

Type Description
AssertionError

If neither ids nor names are specified.

Source code in furthrmind\collection\field.py
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
@classmethod
def get_many(cls, ids: List[str] = (), names: List[str] = (), project_id: str = "") -> List[Self]:
    """
    Method to get many fields belonging to one project

    Parameters
    ----------
    ids : list of str, optional
        List of ids to get fields for.

    names : list of str, optional
        List of names to get fields for.

    project_id : str, optional
        Optionally to get fields from another project as the furthrmind sdk was initiated with

    Returns
    -------
    list[Self]
        List of instances of the experiment class.

    Raises
    ------
    AssertionError
        If neither ids nor names are specified.

    """

    assert ids or names, "Either ids or names must be specified"
    return cls._get_many(ids, names=names, project_id=project_id)

to_dict()

Converts the object's attributes to a dictionary representation.

Returns:

Type Description
dict

Dictionary containing the object's attributes (excluding private attributes, callable attributes, and attributes of type Furthrmind).

Source code in furthrmind\collection\baseclass.py
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
def to_dict(self):
    """
    Converts the object's attributes to a dictionary representation.

    Returns
    -------
    dict
        Dictionary containing the object's attributes (excluding private attributes, callable attributes, and attributes of type Furthrmind).
    """

    from furthrmind import Furthrmind

    data = {}
    for attr in dir(self):
        if attr.startswith("_"):
            continue
        value = getattr(self, attr)
        if callable(value):
            continue
        if isinstance(value, Furthrmind):
            continue
        data[attr] = self._convert(value)
    return data