Source code for panoptes_client.subject_set

from __future__ import absolute_import, division, print_function
from builtins import str

from panoptes_client.panoptes import PanoptesObject, LinkResolver
from panoptes_client.set_member_subject import SetMemberSubject
from panoptes_client.subject import Subject
from panoptes_client.utils import batchable


[docs]class SubjectSet(PanoptesObject): _api_slug = 'subject_sets' _link_slug = 'subject_sets' _edit_attributes = ( 'display_name', { 'links': ( 'project', ), 'metadata': ( 'category', ) }, ) @property def subjects(self): """ A generator which yields :py:class:`.Subject` objects which are in this subject set. Examples:: for subject in subject_set.subjects: print(subject.id) """ for sms in SetMemberSubject.where(subject_set_id=self.id): yield sms.links.subject @batchable
[docs] def add(self, subjects): """ Links the given subjects to this set. - **subjects** can be a list of :py:class:`.Subject` instances, a list of subject IDs, a single :py:class:`.Subject` instance, or a single subject ID. Examples:: subject_set.add(1234) subject_set.add([1,2,3,4]) subject_set.add(Subject(1234)) subject_set.add([Subject(12), Subject(34)]) """ _subjects = self._build_subject_list(subjects) self.http_post( '{}/links/subjects'.format(self.id), json={'subjects': _subjects} )
@batchable
[docs] def remove(self, subjects): """ Unlinks the given subjects from this set. - **subjects** can be a list of :py:class:`.Subject` instances, a list of subject IDs, a single :py:class:`.Subject` instance, or a single subject ID. Examples:: subject_set.remove(1234) subject_set.remove([1,2,3,4]) subject_set.remove(Subject(1234)) subject_set.remove([Subject(12), Subject(34)]) """ _subjects = self._build_subject_list(subjects) _subjects_ids = ",".join(_subjects) self.http_delete( '{}/links/subjects/{}'.format(self.id, _subjects_ids) )
def _build_subject_list(self, subjects): _subjects = [] for subject in subjects: if not ( isinstance(subject, Subject) or isinstance(subject, (int, str,)) ): raise TypeError if isinstance(subject, Subject): _subject_id = subject.id else: _subject_id = str(subject) _subjects.append(_subject_id) return _subjects
LinkResolver.register(SubjectSet) LinkResolver.register(SubjectSet, 'subject_set')