GovernorDimensionRecordStorage¶
-
class
lsst.daf.butler.registry.interfaces.GovernorDimensionRecordStorage¶ Bases:
lsst.daf.butler.registry.interfaces.DimensionRecordStorageIntermediate interface for
DimensionRecordStorageobjects that provide storage forGovernorDimensioninstances.Attributes Summary
elementThe element whose records this instance holds ( DimensionElement).tableThe SQLAlchemy table that backs this dimension ( sqlalchemy.schema.Table).valuesAll primary key values for this dimension ( set[str]).Methods Summary
clearCaches()Clear any in-memory caches held by the storage instance. digestTables()Return tables used for schema digest. fetch(dataIds)Retrieve records from storage. initialize(db, dimension, *, context, …)Construct an instance of this class using a standardized interface. insert(*records)Insert one or more records into storage. join(builder, *, regions, …)Add the dimension element’s logical table to a query under construction. refresh()Ensure all other operations on this manager are aware of any changes made by other clients since it was initialized or last refreshed. registerInsertionListener(callback, None])Add a function or method to be called after new records for this dimension are inserted by insertorsync.sync(record)Synchronize a record with the database, inserting it only if it does not exist and comparing values if it does. Attributes Documentation
-
element¶ The element whose records this instance holds (
DimensionElement).
-
table¶ The SQLAlchemy table that backs this dimension (
sqlalchemy.schema.Table).
-
values¶ All primary key values for this dimension (
set[str]).This may rely on an in-memory cache and hence not reflect changes to the set of values made by other
Butler/Registryclients. Callrefreshto ensure up-to-date results.
Methods Documentation
-
clearCaches() → None¶ Clear any in-memory caches held by the storage instance.
This is called by
Registrywhen transactions are rolled back, to avoid in-memory caches from ever containing records that are not present in persistent storage.
-
digestTables() → Iterable[sqlalchemy.sql.schema.Table]¶ Return tables used for schema digest.
Returns: - tables :
Iterable[sqlalchemy.schema.Table] Possibly empty set of tables for schema digest calculations.
- tables :
-
fetch(dataIds: DataCoordinateIterable) → Iterable[DimensionRecord]¶ Retrieve records from storage.
Parameters: - dataIds :
DataCoordinateIterable Data IDs that identify the records to be retrieved.
Returns: - records :
Iterable[DimensionRecord] Record retrieved from storage. Not all data IDs may have corresponding records (if there are no records that match a data ID), and even if they are, the order of inputs is not preserved.
- dataIds :
-
classmethod
initialize(db: Database, dimension: GovernorDimension, *, context: Optional[StaticTablesContext] = None, config: Mapping[str, Any]) → GovernorDimensionRecordStorage¶ Construct an instance of this class using a standardized interface.
Parameters: - db :
Database Interface to the underlying database engine and namespace.
- dimension :
GovernorDimension Dimension the new instance will manage records for.
- context :
StaticTablesContext, optional If provided, an object to use to create any new tables. If not provided,
db.ensureTableExistsshould be used instead.- config :
Mapping Extra configuration options specific to the implementation.
Returns: - storage :
GovernorDimensionRecordStorage A new
GovernorDimensionRecordStoragesubclass instance.
- db :
-
insert(*records) → None¶ Insert one or more records into storage.
Parameters: - records
One or more instances of the
DimensionRecordsubclass for the element this storage is associated with.
Raises: - TypeError
Raised if the element does not support record insertion.
- sqlalchemy.exc.IntegrityError
Raised if one or more records violate database integrity constraints.
Notes
As
insertis expected to be called only by aRegistry, we rely onRegistryto provide transactionality, both by using a SQLALchemy connection shared with theRegistryand by relying on it to callclearCacheswhen rolling back transactions.
-
join(builder: QueryBuilder, *, regions: Optional[NamedKeyDict[DimensionElement, sqlalchemy.sql.ColumnElement]] = None, timespans: Optional[NamedKeyDict[DimensionElement, TimespanDatabaseRepresentation]] = None) → sqlalchemy.sql.FromClause¶ Add the dimension element’s logical table to a query under construction.
This is a visitor pattern interface that is expected to be called only by
QueryBuilder.joinDimensionElement.Parameters: - builder :
QueryBuilder Builder for the query that should contain this element.
- regions :
NamedKeyDict, optional A mapping from
DimensionElementto a SQLAlchemy column containing the region for that element, which should be updated to include a region column for this element if one exists. IfNone,self.elementis not being included in the query via a spatial join.- timespan :
NamedKeyDict, optional A mapping from
DimensionElementto aTimespanof SQLALchemy columns containing the timespan for that element, which should be updated to include timespan columns for this element if they exist. IfNone,self.elementis not being included in the query via a temporal join.
Returns: - fromClause :
sqlalchemy.sql.FromClause Table or clause for the element which is joined.
Notes
Elements are only included in queries via spatial and/or temporal joins when necessary to connect them to other elements in the query, so
regionsandtimespanscannot be assumed to be notNonejust because an element has a region or timespan.- builder :
-
refresh() → None¶ Ensure all other operations on this manager are aware of any changes made by other clients since it was initialized or last refreshed.
-
registerInsertionListener(callback: Callable[[DimensionRecord], None]) → None¶ Add a function or method to be called after new records for this dimension are inserted by
insertorsync.Parameters: - callback
Callable that takes a single
DimensionRecordargument. This will be called immediately after any successful insertion, in the same transaction.
-
sync(record: DimensionRecord) → bool¶ Synchronize a record with the database, inserting it only if it does not exist and comparing values if it does.
Parameters: - record :
DimensionRecord. An instance of the
DimensionRecordsubclass for the element this storage is associated with.
Returns: Raises: - DatabaseConflictError
Raised if the record exists in the database (according to primary key lookup) but is inconsistent with the given one.
- TypeError
Raised if the element does not support record synchronization.
- sqlalchemy.exc.IntegrityError
Raised if one or more records violate database integrity constraints.
- record :
-