Skip to content

Threed

ThreeDView

Bases: View

View for 3D records.

This view doesn't have a Data Portal resource that it populates, instead the records that go through this view are embedded within other record types.

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

    This view doesn't have a Data Portal resource that it populates, instead the records
    that go through this view are embedded within other record types.
    """

    def is_member(self, record: SourceRecord) -> FilterResult:
        """
        Filters the given record, determining whether it is a 3D or not.

        :param record: the record to filter
        :return: a FilterResult object
        """
        if record.get_first_value('MulDocumentType') != 'U':
            return MULTIMEDIA_NOT_URL

        if record.get_first_value('DetPublisher', lower=True) not in VALID_PUBLISHERS:
            return INVALID_PUBLISHER

        # TODO: do we really need this?
        if record.get_first_value('DetResourceType') != 'Specimen':
            return NOT_SPECIMEN

        return SUCCESS_RESULT

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

        :param record: the record to filter
        :return: a FilterResult object
        """
        if not is_valid_guid(record):
            return INVALID_GUID

        if not is_web_published(record):
            return NO_PUBLISH

        return SUCCESS_RESULT

    @strip_empty
    def transform(self, record: SourceRecord) -> dict:
        """
        Converts the record's raw data to a dict which will then be embedded in other
        records and 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 for perf
        get_first = record.get_first_value

        asset_id = get_first('AdmGUIDPreferredValue')
        return {
            '_id': record.id,
            'created': emu_date(
                get_first('AdmDateInserted'), get_first('AdmTimeInserted')
            ),
            'modified': emu_date(
                get_first('AdmDateModified'), get_first('AdmTimeModified')
            ),
            'assetID': asset_id,
            'identifier': get_first('MulIdentifier'),
            'title': get_first('MulTitle'),
            'creator': get_first('MulCreator'),
            'category': get_first('DetResourceType'),
            # TODO: what should this be? InteractiveResource?
            'type': '3D',
            'license': 'http://creativecommons.org/licenses/by/4.0/',
            # TODO: RightsSummaryDataLocal?
            'rightsHolder': 'The Trustees of the Natural History Museum, London',
        }

is_member(record)

Filters the given record, determining whether it is a 3D 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/threed.py
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def is_member(self, record: SourceRecord) -> FilterResult:
    """
    Filters the given record, determining whether it is a 3D or not.

    :param record: the record to filter
    :return: a FilterResult object
    """
    if record.get_first_value('MulDocumentType') != 'U':
        return MULTIMEDIA_NOT_URL

    if record.get_first_value('DetPublisher', lower=True) not in VALID_PUBLISHERS:
        return INVALID_PUBLISHER

    # TODO: do we really need this?
    if record.get_first_value('DetResourceType') != 'Specimen':
        return NOT_SPECIMEN

    return SUCCESS_RESULT

is_publishable(record)

Filters the given record, determining whether it matches the publishing rules for 3D resource records.

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/threed.py
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
def is_publishable(self, record: SourceRecord) -> FilterResult:
    """
    Filters the given record, determining whether it matches the publishing rules
    for 3D resource records.

    :param record: the record to filter
    :return: a FilterResult object
    """
    if not is_valid_guid(record):
        return INVALID_GUID

    if not is_web_published(record):
        return NO_PUBLISH

    return SUCCESS_RESULT

transform(record)

Converts the record's raw data to a dict which will then be embedded in other records and 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/threed.py
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
@strip_empty
def transform(self, record: SourceRecord) -> dict:
    """
    Converts the record's raw data to a dict which will then be embedded in other
    records and 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 for perf
    get_first = record.get_first_value

    asset_id = get_first('AdmGUIDPreferredValue')
    return {
        '_id': record.id,
        'created': emu_date(
            get_first('AdmDateInserted'), get_first('AdmTimeInserted')
        ),
        'modified': emu_date(
            get_first('AdmDateModified'), get_first('AdmTimeModified')
        ),
        'assetID': asset_id,
        'identifier': get_first('MulIdentifier'),
        'title': get_first('MulTitle'),
        'creator': get_first('MulCreator'),
        'category': get_first('DetResourceType'),
        # TODO: what should this be? InteractiveResource?
        'type': '3D',
        'license': 'http://creativecommons.org/licenses/by/4.0/',
        # TODO: RightsSummaryDataLocal?
        'rightsHolder': 'The Trustees of the Natural History Museum, London',
    }