Skip to content

Artefact

ArtefactView

Bases: View

View for artefact records.

This view populates the artefacts resource on the Data Portal.

Source code in dataimporter/emu/views/artefact.py
 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
class ArtefactView(View):
    """
    View for artefact records.

    This view populates the artefacts resource on the Data Portal.
    """

    def __init__(
        self, path: Path, store: Store, image_view: ImageView, published_name: str
    ):
        super().__init__(path, store, published_name)
        self.image_link = make_link(self, MEDIA_ID_REF_FIELD, image_view, ID)

    def is_member(self, record: SourceRecord) -> FilterResult:
        """
        Filters the given record, determining whether it should be included in the
        artefact resource or not.

        :param record: the record to filter
        :return: a FilterResult object
        """
        if record.get_first_value('ColRecordType') != 'Artefact':
            return INVALID_TYPE

        if record.get_first_value('ColDepartment') not in DEPARTMENT_COLLECTION_CODES:
            return INVALID_DEPARTMENT

        return SUCCESS_RESULT

    def is_publishable(self, record: SourceRecord) -> FilterResult:
        """
        Filters the given record, determining whether it matches the publishing rules
        for the artefact resource.

        :param record: the record to filter
        :return: a FilterResult object
        """
        if not is_web_published(record):
            return NO_PUBLISH

        if not is_valid_guid(record):
            return INVALID_GUID

        if record.get_first_value('SecRecordStatus') in DISALLOWED_STATUSES:
            return INVALID_STATUS

        return SUCCESS_RESULT

    @strip_empty
    def transform(self, record: SourceRecord) -> dict:
        """
        Converts the record's raw data to a dict which will be the data presented on the
        Data Portal.

        :param record: the record to project
        :return: a dict containing the data for this record that should be displayed on
            the Data Portal
        """
        # cache this for perf
        get_first = record.get_first_value

        # create the core data
        data = {
            '_id': record.id,
            'created': emu_date(
                get_first('AdmDateInserted'), get_first('AdmTimeInserted')
            ),
            'modified': emu_date(
                get_first('AdmDateModified'), get_first('AdmTimeModified')
            ),
            'artefactName': get_first('PalArtObjectName'),
            # seems to not be populated in any of the current artefact records
            'artefactType': get_first('PalArtType'),
            'artefactDescription': combine_text(
                record.iter_all_values('PalArtDescription')
            ),
            'scientificName': get_first('IdeCurrentScientificName'),
        }

        # add multimedia links
        add_associated_media(record, data, self.image_link)

        return data

is_member(record)

Filters the given record, determining whether it should be included in the artefact resource or not.

Parameters:

Name Type Description Default
record SourceRecord

the record to filter

required

Returns:

Type Description
FilterResult

a FilterResult object

Source code in dataimporter/emu/views/artefact.py
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
def is_member(self, record: SourceRecord) -> FilterResult:
    """
    Filters the given record, determining whether it should be included in the
    artefact resource or not.

    :param record: the record to filter
    :return: a FilterResult object
    """
    if record.get_first_value('ColRecordType') != 'Artefact':
        return INVALID_TYPE

    if record.get_first_value('ColDepartment') not in DEPARTMENT_COLLECTION_CODES:
        return INVALID_DEPARTMENT

    return SUCCESS_RESULT

is_publishable(record)

Filters the given record, determining whether it matches the publishing rules for the artefact resource.

Parameters:

Name Type Description Default
record SourceRecord

the record to filter

required

Returns:

Type Description
FilterResult

a FilterResult object

Source code in dataimporter/emu/views/artefact.py
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
def is_publishable(self, record: SourceRecord) -> FilterResult:
    """
    Filters the given record, determining whether it matches the publishing rules
    for the artefact resource.

    :param record: the record to filter
    :return: a FilterResult object
    """
    if not is_web_published(record):
        return NO_PUBLISH

    if not is_valid_guid(record):
        return INVALID_GUID

    if record.get_first_value('SecRecordStatus') in DISALLOWED_STATUSES:
        return INVALID_STATUS

    return SUCCESS_RESULT

transform(record)

Converts the record's raw data to a dict which will be the data presented on the Data Portal.

Parameters:

Name Type Description Default
record SourceRecord

the record to project

required

Returns:

Type Description
dict

a dict containing the data for this record that should be displayed on the Data Portal

Source code in dataimporter/emu/views/artefact.py
 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
@strip_empty
def transform(self, record: SourceRecord) -> dict:
    """
    Converts the record's raw data to a dict which will be the data presented on the
    Data Portal.

    :param record: the record to project
    :return: a dict containing the data for this record that should be displayed on
        the Data Portal
    """
    # cache this for perf
    get_first = record.get_first_value

    # create the core data
    data = {
        '_id': record.id,
        'created': emu_date(
            get_first('AdmDateInserted'), get_first('AdmTimeInserted')
        ),
        'modified': emu_date(
            get_first('AdmDateModified'), get_first('AdmTimeModified')
        ),
        'artefactName': get_first('PalArtObjectName'),
        # seems to not be populated in any of the current artefact records
        'artefactType': get_first('PalArtType'),
        'artefactDescription': combine_text(
            record.iter_all_values('PalArtDescription')
        ),
        'scientificName': get_first('IdeCurrentScientificName'),
    }

    # add multimedia links
    add_associated_media(record, data, self.image_link)

    return data