Bases: DatasetMemberSerializer
Serializer for dataset person.
Same person can be multiple times in the same dataset.
Source code in src/apps/core/serializers/dataset_actor_serializers/person_serializer.py
| class DatasetPersonSerializer(DatasetMemberSerializer):
"""Serializer for dataset person.
Same person can be multiple times in the same dataset."""
id = UUIDOrTagField(required=False)
homepage = HomePageSerializer(required=False, allow_null=True)
save_validator = AllOf(["name"])
def get_dataset_persons(self, dataset) -> Dict[str, DatasetMemberContext]:
"""Get DatasetMemberContext for all persons in dataset."""
persons = {}
def add_person(person):
if person:
persons[str(person.id)] = DatasetMemberContext(
object=person, is_existing=True, existing_data=self.get_existing_data(person)
)
for actor in dataset.actors.all():
add_person(actor.person)
for provenance in dataset.provenance.all():
for actor in provenance.is_associated_with.all():
add_person(actor.person)
return persons
def get_dataset_members(self) -> Dict[str, DatasetMemberContext]:
if "dataset_persons" not in self.context:
dataset: Dataset = self.context.get("dataset")
if dataset:
self.context["dataset_persons"] = self.get_dataset_persons(dataset)
else:
self.context["dataset_persons"] = {}
return self.context["dataset_persons"]
class Meta:
model = Person
fields = ("id", "name", "email", "external_identifier", "homepage")
extra_kwargs = {"name": {"required": False}} # checked by save_validator
list_serializer_class = CommonListSerializer
|
get_dataset_persons(dataset)
Get DatasetMemberContext for all persons in dataset.
Source code in src/apps/core/serializers/dataset_actor_serializers/person_serializer.py
| def get_dataset_persons(self, dataset) -> Dict[str, DatasetMemberContext]:
"""Get DatasetMemberContext for all persons in dataset."""
persons = {}
def add_person(person):
if person:
persons[str(person.id)] = DatasetMemberContext(
object=person, is_existing=True, existing_data=self.get_existing_data(person)
)
for actor in dataset.actors.all():
add_person(actor.person)
for provenance in dataset.provenance.all():
for actor in provenance.is_associated_with.all():
add_person(actor.person)
return persons
|