Skip to content

Indexlot

IndexLotView

Bases: View

View for index lot records.

This view populates the index lot resource on the Data Portal.

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

    This view populates the index lot resource on the Data Portal.
    """

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

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

        :param record: the record to filter
        :return: a FilterResult object
        """
        if record.get_first_value('ColRecordType') != 'Index Lot':
            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 index lots 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 these for perf
        get_all = record.get_all_values
        get_first = record.get_first_value

        data = {
            '_id': record.id,
            'created': emu_date(
                get_first('AdmDateInserted'), get_first('AdmTimeInserted')
            ),
            'modified': emu_date(
                get_first('AdmDateModified'), get_first('AdmTimeModified')
            ),
            'material': get_first('EntIndMaterial'),
            'type': get_first('EntIndType'),
            'media': get_first('EntIndMedia'),
            'british': get_first('EntIndBritish'),
            'kindOfMaterial': get_first('EntIndKindOfMaterial'),
            'kindOfMedia': get_first('EntIndKindOfMedia'),
            'materialCount': get_all('EntIndCount'),
            'materialSex': get_all('EntIndSex'),
            'materialStage': get_all('EntIndStage'),
            'materialTypes': get_all('EntIndTypes'),
            'materialPrimaryTypeNumber': get_all('EntIndPrimaryTypeNo'),
        }

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

        # add taxonomy data
        merge(record, data, self.taxonomy_link)

        return data

is_member(record)

Filters the given record, determining whether it should be included in the index lot 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/indexlot.py
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
def is_member(self, record: SourceRecord) -> FilterResult:
    """
    Filters the given record, determining whether it should be included in the index
    lot resource or not.

    :param record: the record to filter
    :return: a FilterResult object
    """
    if record.get_first_value('ColRecordType') != 'Index Lot':
        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 index lots 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/indexlot.py
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
def is_publishable(self, record: SourceRecord) -> FilterResult:
    """
    Filters the given record, determining whether it matches the publishing rules
    for the index lots 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/indexlot.py
 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
@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 these for perf
    get_all = record.get_all_values
    get_first = record.get_first_value

    data = {
        '_id': record.id,
        'created': emu_date(
            get_first('AdmDateInserted'), get_first('AdmTimeInserted')
        ),
        'modified': emu_date(
            get_first('AdmDateModified'), get_first('AdmTimeModified')
        ),
        'material': get_first('EntIndMaterial'),
        'type': get_first('EntIndType'),
        'media': get_first('EntIndMedia'),
        'british': get_first('EntIndBritish'),
        'kindOfMaterial': get_first('EntIndKindOfMaterial'),
        'kindOfMedia': get_first('EntIndKindOfMedia'),
        'materialCount': get_all('EntIndCount'),
        'materialSex': get_all('EntIndSex'),
        'materialStage': get_all('EntIndStage'),
        'materialTypes': get_all('EntIndTypes'),
        'materialPrimaryTypeNumber': get_all('EntIndPrimaryTypeNo'),
    }

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

    # add taxonomy data
    merge(record, data, self.taxonomy_link)

    return data