Skip to content

Project

Project

Bases: BaseClass

Attributes:

Name Type Description
id str

id of the project

name str

name of the project

shortid str

shortid of the project

info str

Detailed information about the project

samples List[Sample]

This list contains 'sample' objects belonging to this project. These objects are partially fetched, providing only the name and ID. To retrieve the entire object, invoke the 'get()' method on the 'sample'. Refer to nested objects in Getting Started for further details. For a comprehensive understanding of 'sample' objects, see the provided Sample.

experiments List[Experiment]

This list contains 'experiment' objects belonging to this project. These objects are partially fetched, providing only the name and ID. To retrieve the entire object, invoke the 'get()' method on the 'experiment'. Refer to nested objects in Getting Started for further details. For a comprehensive understanding of 'experiment' objects, see the provided Experiment.

researchitems Dict[str, List[ResearchItem]]

This is a dictionary with category name as keys and lists with the corresponding researchitem objects belonging to this project as values. The researchitem objects are partially fetched, providing only the name and ID. To retrieve the entire object, invoke the 'get()' method on the 'researchitem'. Refer to nested objects in Getting Started for further details. For a comprehensive understanding of 'researchitem' objects, see the provided ResearchItem.

groups List[Group]

This list contains 'group' objects that belong to this project. These objects are partially fetched, providing only the name and ID. To retrieve the entire object, invoke the 'get()' method on the 'group'. Refer to nested objects in Getting Started for further details. For a comprehensive understanding of 'group' objects, see the provided Group.

units List[Unit]

This list contains all unit objects that belong to this project. For more information about the unit object, please refer to Unit.

fields List[Field]

This list contains all fields that belong to this project. Each entry is a Field object.

permissions Dict

This is a dictionary containing various keys. The owner key represents the owner of the project. The users key refers to a list of users granted access to this project, including their respective access levels. Lastly, the usergroups key relates to a list of usergroups with access privileges to this project, also presenting their respective access levels.

_fetched bool

This is a Boolean attribute indicating whether all attributes have been retrieved from the server or only the name and ID are present.

Source code in furthrmind\collection\project.py
  7
  8
  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
class Project(BaseClass):
    """
    Attributes
    ----------
    id : str
        id of the project
    name : str
        name of the project
    shortid : str
        shortid of the project
    info : str
        Detailed information about the project
    samples : List[Sample]
        This list contains 'sample' objects belonging to this project. These objects are partially fetched,
        providing only the name and ID. To retrieve the entire object, invoke the 'get()' method on the 'sample'.
        Refer to nested objects in [Getting Started](index.md) for further details. For a comprehensive understanding of
        'sample' objects, see the provided [Sample](sample.md).
    experiments : List[Experiment]
        This list contains 'experiment' objects belonging to this project. These objects are partially fetched,
        providing only the name and ID. To retrieve the entire object, invoke the 'get()' method on the 'experiment'.
        Refer to nested objects in [Getting Started](index.md) for further details. For a comprehensive understanding of
        'experiment' objects, see the provided [Experiment](experiment.md).
    researchitems : Dict[str, List[ResearchItem]]
        This is a dictionary with category name as keys and lists with the corresponding `researchitem` objects belonging
        to this project as values. The `researchitem` objects are partially fetched,
        providing only the name and ID. To retrieve the entire object, invoke the 'get()' method on the 'researchitem'.
        Refer to nested objects in [Getting Started](index.md) for further details. For a comprehensive understanding of
        'researchitem' objects, see the provided [ResearchItem](researchitem.md).
    groups : List[Group]
        This list contains 'group' objects that belong to this project. These objects are partially fetched,
        providing only the name and ID. To retrieve the entire object, invoke the 'get()' method on the 'group'.
        Refer to nested objects in [Getting Started](index.md) for further details. For a comprehensive understanding of
        'group' objects, see the provided [Group](group.md).
    units : List[Unit]
        This list contains all unit objects that belong to this project. For more information about the unit object, please
        refer to [Unit](unit.md).
    fields : List[Field]
        This list contains all fields that belong to this project. Each entry is a [Field](field.md) object.
    permissions : Dict
        This is a dictionary containing various keys. The `owner` key represents the owner of the project.
        The `users` key refers to a list of users granted access to this project, including their respective access levels.
        Lastly, the `usergroups` key relates to a list of usergroups with access privileges to this project, also presenting
        their respective access levels.
    _fetched : bool
        This is a Boolean attribute indicating whether all attributes have been retrieved from the server or only
        the name and ID are present.
    """

    id = ""
    name = ""
    info = ""
    shortid = ""
    samples: List["Sample"] = []
    experiments: List["Experiment"] = []
    groups: List["Group"] = []
    units: List["Unit"] = []
    researchitems: Dict[str, List["ResearchItem"]] = {}
    permissions: Dict[str, List] = {}
    fields: List["Field"] = []

    _attr_definition = {
        "samples": {"class": "Sample"},
        "experiments": {"class": "Experiment"},
        "groups": {"class": "Group"},
        "units": {"class": "Unit"},
        "researchitems": {"class": "ResearchItem", "nested_dict": True},
        "fields": {"class": "Field"}
    }

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

    def _get_url_instance(self):
        project_url = self.fm.get_project_url(self.id)
        return project_url

    @classmethod
    def _get_url_class(cls, id, project_id=None):
        project_url = cls.fm.get_project_url(id)
        return project_url

    @classmethod
    def _get_all_url(cls, project_id=None):
        return f"{cls.fm.base_url}/projects"

    @classmethod
    def _post_url(cls):
        return f"{cls.fm.base_url}/projects"

    @classmethod
    def get(cls, id: str = "", name: str = "") -> Self:
        """
        This method is used to get one project by its id or name.
        If called on an instance of the class, the id of the class is used.
        Either id or name must be specified.

        Parameters
        ----------
        id : str, optional
            id or short_id of the requested project.
            Default value is an empty string.
        name : str, optional
            name of the requested project.
            Default value is an empty string.

        Returns
        -------
        Self
            Instance of the project class.

        """

        if isclass(cls):
            assert id or name, "Either id or name must be specified"

        return cls._get(id=id, name=name)


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

        Parameters
        ----------
        ids : List[str]
            List of ids.

        names : List[str]
            List of names.

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

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

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

    @classmethod
    def get_all(cls) -> List[Self]:
        """
        Method to get all projects

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

        """

        return super()._get_all()

    @classmethod
    @BaseClass._create_instances_decorator(_fetched=False)
    def create(cls, name: str) -> Self:
        """
        Method to create a new project

        Parameters
        ----------
        name : str
            Name of the new project

        Returns
        -------
        Self
            Instance of the project class

        Raises
        ------
        ValueError
            If name is empty or None

        """

        if not name:
            raise ValueError("Name is required")
        data = {"name": name}
        id = cls._post(data)
        data["id"] = id
        return data

create(name) classmethod

Method to create a new project

Parameters:

Name Type Description Default
name str

Name of the new project

required

Returns:

Type Description
Self

Instance of the project class

Raises:

Type Description
ValueError

If name is empty or None

Source code in furthrmind\collection\project.py
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) -> Self:
    """
    Method to create a new project

    Parameters
    ----------
    name : str
        Name of the new project

    Returns
    -------
    Self
        Instance of the project class

    Raises
    ------
    ValueError
        If name is empty or None

    """

    if not name:
        raise ValueError("Name is required")
    data = {"name": name}
    id = cls._post(data)
    data["id"] = id
    return data

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='') classmethod

This method is used to get one project by its id or name. If called on an instance of the class, the id of the class is used. Either id or name must be specified.

Parameters:

Name Type Description Default
id str

id or short_id of the requested project. Default value is an empty string.

''
name str

name of the requested project. Default value is an empty string.

''

Returns:

Type Description
Self

Instance of the project class.

Source code in furthrmind\collection\project.py
 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
@classmethod
def get(cls, id: str = "", name: str = "") -> Self:
    """
    This method is used to get one project by its id or name.
    If called on an instance of the class, the id of the class is used.
    Either id or name must be specified.

    Parameters
    ----------
    id : str, optional
        id or short_id of the requested project.
        Default value is an empty string.
    name : str, optional
        name of the requested project.
        Default value is an empty string.

    Returns
    -------
    Self
        Instance of the project class.

    """

    if isclass(cls):
        assert id or name, "Either id or name must be specified"

    return cls._get(id=id, name=name)

get_all() classmethod

Method to get all projects

Returns:

Type Description
List[Self]

List of instances of the class.

Source code in furthrmind\collection\project.py
153
154
155
156
157
158
159
160
161
162
163
164
165
@classmethod
def get_all(cls) -> List[Self]:
    """
    Method to get all projects

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

    """

    return super()._get_all()

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

Method to get many projects

Parameters:

Name Type Description Default
ids List[str]

List of ids.

()
names List[str]

List of names.

()

Returns:

Type Description
List[Self]

List of instances of the class.

Raises:

Type Description
AssertionError

If neither ids nor names are specified.

Source code in furthrmind\collection\project.py
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
@classmethod
def get_many(cls, ids: List[str] = (), names: List[str] = ()) -> List[Self]:
    """
    Method to get many projects

    Parameters
    ----------
    ids : List[str]
        List of ids.

    names : List[str]
        List of names.

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

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

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

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