Skip to content

file_instance

File representation models.

CheckSum

Bases: BaseModel

The 'checksum' object nested inside a DataFile.

Source code in src/dv_schema_models/file_instance.py
41
42
43
44
45
46
47
48
49
50
51
class CheckSum(BaseModel):
    """The 'checksum' object nested inside a DataFile."""

    model_config = ConfigDict(extra="allow")

    type: str
    value: str

    def get_raw(self, key: str) -> object | None:
        """Get a raw top-level field not covered by the schema (requires extra='allow')."""
        return self.model_extra.get(key) if self.model_extra else None

get_raw(key)

Get a raw top-level field not covered by the schema (requires extra='allow').

Source code in src/dv_schema_models/file_instance.py
49
50
51
def get_raw(self, key: str) -> object | None:
    """Get a raw top-level field not covered by the schema (requires extra='allow')."""
    return self.model_extra.get(key) if self.model_extra else None

DataFile

Bases: BaseModel

The 'dataFile' object nested inside a FileInstance.

Source code in src/dv_schema_models/file_instance.py
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class DataFile(BaseModel):
    """The 'dataFile' object nested inside a FileInstance."""

    model_config = ConfigDict(extra="allow")

    id: int | None = None
    persistentId: str | None = None
    filename: str | None = None
    contentType: str | None = None
    friendlyType: str | None = None
    filesize: int | None = None
    description: str | None = None
    storageIdentifier: str | None = None
    rootDataFileId: int | None = None
    md5: str | None = None
    checksum: CheckSum | None = None
    tabularData: bool | None = None
    creationDate: str | None = None
    directoryLabel: str | None = None
    lastUpdateTime: str | None = None
    fileAccessRequest: bool | None = None

    def get_raw(self, key: str) -> object | None:
        """Get a raw top-level field not covered by the schema (requires extra='allow')."""
        return self.model_extra.get(key) if self.model_extra else None

get_raw(key)

Get a raw top-level field not covered by the schema (requires extra='allow').

Source code in src/dv_schema_models/file_instance.py
36
37
38
def get_raw(self, key: str) -> object | None:
    """Get a raw top-level field not covered by the schema (requires extra='allow')."""
    return self.model_extra.get(key) if self.model_extra else None

FileInstance

Bases: BaseModel

One file, as it appears inside a dataset version.

Source code in src/dv_schema_models/file_instance.py
 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
class FileInstance(BaseModel):
    """One file, as it appears inside a dataset version."""

    model_config = ConfigDict(extra="allow")

    label: str | None = None
    restricted: bool | None = None
    directoryLabel: str | None = None
    version: int | None = None
    datasetVersionId: int | None = None
    dataFile: DataFile | None = None

    def get_raw(self, key: str) -> object | None:
        """Get a raw top-level field not covered by the schema (requires extra='allow')."""
        return self.model_extra.get(key) if self.model_extra else None

    @staticmethod
    def sum_field(instances: list[FileInstance], field: str) -> float | None:
        """Sum a DataFile field across FileInstances, skipping entries with no dataFile or None values.

        Returns None (and logs a warning) if any present value isn't int/float.

        Parameters
        ----------
        instances
            A list of FileInstance objects to sum over.
        field
            The name of the field to sum, e.g. "dataFile.filesize".

        Returns
        -------
        float | None
            The sum of the field values, or None if any value is non-numeric.

        """  # noqa: W505
        values = [getattr(i.dataFile, field) for i in instances if i.dataFile is not None]
        for v in values:
            if v is not None and not isinstance(v, (int, float)):
                logger.warning("sum_field: field %r has non-numeric value %r", field, v)
                return None
        return sum(v for v in values if v is not None)

    @staticmethod
    def list_field(instances: list[FileInstance], field: str) -> list[Any]:
        """Get the values of a field across instances, e.g. field="dataFile.checksum.type".

        Skips instances where the path is missing or resolves to None.

        Parameters
        ----------
        instances
            A list of FileInstance objects to extract values from.

        field
            The name of the field to extract, e.g. "dataFile.checksum.type".

        Returns
        -------
        list[Any]
            A list of values for the specified field across the instances.
        """
        result = []
        for i in instances:
            value: Any = i
            for part in field.split("."):
                value = getattr(value, part, None)
                if value is None:
                    break
            if value is not None:
                result.append(value)
        return result

get_raw(key)

Get a raw top-level field not covered by the schema (requires extra='allow').

Source code in src/dv_schema_models/file_instance.py
66
67
68
def get_raw(self, key: str) -> object | None:
    """Get a raw top-level field not covered by the schema (requires extra='allow')."""
    return self.model_extra.get(key) if self.model_extra else None

list_field(instances, field) staticmethod

Get the values of a field across instances, e.g. field="dataFile.checksum.type".

Skips instances where the path is missing or resolves to None.

Parameters:

Name Type Description Default
instances list[FileInstance]

A list of FileInstance objects to extract values from.

required
field str

The name of the field to extract, e.g. "dataFile.checksum.type".

required

Returns:

Type Description
list[Any]

A list of values for the specified field across the instances.

Source code in src/dv_schema_models/file_instance.py
 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
@staticmethod
def list_field(instances: list[FileInstance], field: str) -> list[Any]:
    """Get the values of a field across instances, e.g. field="dataFile.checksum.type".

    Skips instances where the path is missing or resolves to None.

    Parameters
    ----------
    instances
        A list of FileInstance objects to extract values from.

    field
        The name of the field to extract, e.g. "dataFile.checksum.type".

    Returns
    -------
    list[Any]
        A list of values for the specified field across the instances.
    """
    result = []
    for i in instances:
        value: Any = i
        for part in field.split("."):
            value = getattr(value, part, None)
            if value is None:
                break
        if value is not None:
            result.append(value)
    return result

sum_field(instances, field) staticmethod

Sum a DataFile field across FileInstances, skipping entries with no dataFile or None values.

Returns None (and logs a warning) if any present value isn't int/float.

Parameters:

Name Type Description Default
instances list[FileInstance]

A list of FileInstance objects to sum over.

required
field str

The name of the field to sum, e.g. "dataFile.filesize".

required

Returns:

Type Description
float | None

The sum of the field values, or None if any value is non-numeric.

Source code in src/dv_schema_models/file_instance.py
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
@staticmethod
def sum_field(instances: list[FileInstance], field: str) -> float | None:
    """Sum a DataFile field across FileInstances, skipping entries with no dataFile or None values.

    Returns None (and logs a warning) if any present value isn't int/float.

    Parameters
    ----------
    instances
        A list of FileInstance objects to sum over.
    field
        The name of the field to sum, e.g. "dataFile.filesize".

    Returns
    -------
    float | None
        The sum of the field values, or None if any value is non-numeric.

    """  # noqa: W505
    values = [getattr(i.dataFile, field) for i in instances if i.dataFile is not None]
    for v in values:
        if v is not None and not isinstance(v, (int, float)):
            logger.warning("sum_field: field %r has non-numeric value %r", field, v)
            return None
    return sum(v for v in values if v is not None)