Coverage for python/lsst/daf/butler/core/storedFileInfo.py : 69%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# This file is part of daf_butler.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (http://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
22__all__ = ("StoredFileInfo", "StoredDatastoreItemInfo")
24import inspect
25from dataclasses import dataclass
26from typing import Optional
28from .formatter import Formatter
29from .storageClass import StorageClass
32class StoredDatastoreItemInfo:
33 """Internal information associated with a stored dataset in a `Datastore`.
35 This is an empty base class. Datastore implementations are expected to
36 write their own subclasses.
37 """
38 __slots__ = ()
41@dataclass
42class StoredFileInfo(StoredDatastoreItemInfo):
43 """Datastore-private metadata associated with a file stored in a Datastore.
44 """
45 __slots__ = {"formatter", "path", "storageClass", "component",
46 "checksum", "file_size"}
48 formatter: str
49 """Fully-qualified name of Formatter."""
51 path: str
52 """Path to dataset within Datastore."""
54 storageClass: StorageClass
55 """StorageClass associated with Dataset."""
57 component: Optional[str]
58 """Component associated with this file. Can be None if the file does
59 not refer to a component of a composite."""
61 checksum: Optional[str]
62 """Checksum of the serialized dataset."""
64 file_size: int
65 """Size of the serialized dataset in bytes."""
67 def __post_init__(self):
68 # This modification prevents the data class from being frozen.
69 if isinstance(self.formatter, str):
70 # We trust that this string refers to a Formatter
71 pass
72 elif isinstance(self.formatter, Formatter) or \
73 (inspect.isclass(self.formatter) and issubclass(self.formatter, Formatter)):
74 self.formatter = self.formatter.name()
75 else:
76 raise TypeError(f"Supplied formatter '{self.formatter}' is not a Formatter")