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

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", "checksum", "file_size"}
47 formatter: str
48 """Fully-qualified name of Formatter."""
50 path: str
51 """Path to dataset within Datastore."""
53 storageClass: StorageClass
54 """StorageClass associated with Dataset."""
56 checksum: Optional[str]
57 """Checksum of the serialized dataset."""
59 file_size: int
60 """Size of the serialized dataset in bytes."""
62 def __post_init__(self):
63 # This modification prevents the data class from being frozen.
64 if isinstance(self.formatter, str):
65 # We trust that this string refers to a Formatter
66 pass
67 elif isinstance(self.formatter, Formatter) or \
68 (inspect.isclass(self.formatter) and issubclass(self.formatter, Formatter)):
69 self.formatter = self.formatter.name()
70 else:
71 raise TypeError(f"Supplied formatter '{self.formatter}' is not a Formatter")