LSST Applications g0265f82a02+d6b5cd48b5,g02d81e74bb+80768bd682,g04242d3e92+8eaa23c173,g06b2ea86fd+734f9505a2,g2079a07aa2+14824f138e,g212a7c68fe+5f4fc2ea00,g2305ad1205+293ab1327e,g2bbee38e9b+d6b5cd48b5,g337abbeb29+d6b5cd48b5,g3ddfee87b4+8eaa23c173,g487adcacf7+abec5a19c5,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+97ef3b4495,g5a732f18d5+66d966b544,g5d7b63bc56+636c3c3fd8,g64a986408d+80768bd682,g858d7b2824+80768bd682,g8a8a8dda67+a6fc98d2e7,g99cad8db69+6282a5f541,g9ddcbc5298+d4bad12328,ga1e77700b3+246acaaf9c,ga8c6da7877+9e3c062e8e,gb0e22166c9+3863383f4c,gb6a65358fc+d6b5cd48b5,gba4ed39666+9664299f35,gbb8dafda3b+60f904e7bc,gc120e1dc64+1bf26d0180,gc28159a63d+d6b5cd48b5,gcf0d15dbbd+8eaa23c173,gd2a12a3803+f8351bc914,gdaeeff99f8+a38ce5ea23,ge79ae78c31+d6b5cd48b5,gee10cc3b42+a6fc98d2e7,gf1cff7945b+80768bd682,v24.1.5.rc1
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra Class Reference
Inheritance diagram for lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra:
lsst.dax.apdb.apdbMetadata.ApdbMetadata

Public Member Functions

 __init__ (self, Any session, str table_name, str keyspace, str read_profile, str write_profile)
 
str|None get (self, str key, str|None default=None)
 
None set (self, str key, str value, *bool force=False)
 
bool delete (self, str key)
 
Generator[tuple[str, str], None, None] items (self)
 
bool empty (self)
 
bool table_exists (self)
 

Protected Attributes

 _session
 
 _read_profile
 
 _write_profile
 
 _part
 
 _preparer
 
 _table_clause
 

Detailed Description

Implementation of `ApdbMetadata` for Cassandra backend.

Parameters
----------
session : `cassandra.cluster.Session`
    Cassandra session instance.
schema : `ApdbSqlSchema`
    Object providing access to schema details.

Definition at line 33 of file apdbMetadataCassandra.py.

Constructor & Destructor Documentation

◆ __init__()

lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra.__init__ ( self,
Any session,
str table_name,
str keyspace,
str read_profile,
str write_profile )

Definition at line 44 of file apdbMetadataCassandra.py.

44 def __init__(self, session: Any, table_name: str, keyspace: str, read_profile: str, write_profile: str):
45 self._session = session
46 self._read_profile = read_profile
47 self._write_profile = write_profile
48 self._part = 0 # Partition for all rows
49 self._preparer = PreparedStatementCache(session)
50 # _table_clause will be None when metadata table is not configured
51 self._table_clause: str | None = None
52
53 query = "SELECT count(*) FROM system_schema.tables WHERE keyspace_name = %s and table_name = %s"
54 result = self._session.execute(query, (keyspace, table_name), execution_profile=read_profile)
55 exists = bool(result.one()[0])
56 if exists:
57 self._table_clause = f"{quote_id(keyspace)}.{quote_id(table_name)}"
58

Member Function Documentation

◆ delete()

bool lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra.delete ( self,
str key )
Delete metadata record.

Parameters
----------
key : `str`
    Metadata key, arbitrary non-empty string.

Returns
-------
existed : `bool`
    `True` is returned if attribute existed before it was deleted.

Reimplemented from lsst.dax.apdb.apdbMetadata.ApdbMetadata.

Definition at line 86 of file apdbMetadataCassandra.py.

86 def delete(self, key: str) -> bool:
87 # Docstring is inherited.
88 if self._table_clause is None:
89 # Missing table means nothing to delete.
90 return False
91 if not key:
92 raise ValueError("name cannot be empty")
93 query = f"DELETE FROM {self._table_clause} WHERE meta_part = ? AND name = ?"
94 # Cassandra cannot tell how many rows are deleted, just check if row
95 # exists now.
96 exists = self.get(key) is not None
97 # Race is still possible between check and remove.
98 self._session.execute(
99 self._preparer.prepare(query), (self._part, key), execution_profile=self._write_profile
100 )
101 return exists
102

◆ empty()

bool lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra.empty ( self)
Check whether attributes set is empty.

Returns
-------
empty : `bool`
    `True` if there are no any attributes defined. `True` is also
    returned if metadata table is missing.

Reimplemented from lsst.dax.apdb.apdbMetadata.ApdbMetadata.

Definition at line 115 of file apdbMetadataCassandra.py.

115 def empty(self) -> bool:
116 # Docstring is inherited.
117 if self._table_clause is None:
118 # Missing table means empty.
119 return True
120 query = f"SELECT count(*) FROM {self._table_clause} WHERE meta_part = ?"
121 result = self._session.execute(
122 self._preparer.prepare(query), (self._part,), execution_profile=self._read_profile
123 )
124 row = result.one()
125 return row[0] == 0
126

◆ get()

str | None lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra.get ( self,
str key,
str | None default = None )
Retrieve value of a given metadata record.

Parameters
----------
key : `str`
    Metadata key, arbitrary non-empty string.
default : `str`, optional
    Default value returned when key does not exist, can be string
    or `None`.

Returns
-------
value : `str` or `None`
    Metadata value, if key does not exist then ``default`` is returned.

Reimplemented from lsst.dax.apdb.apdbMetadata.ApdbMetadata.

Definition at line 59 of file apdbMetadataCassandra.py.

59 def get(self, key: str, default: str | None = None) -> str | None:
60 # Docstring is inherited.
61 if self._table_clause is None:
62 return default
63 query = f"SELECT value FROM {self._table_clause} WHERE meta_part = ? AND name = ?"
64 result = self._session.execute(
65 self._preparer.prepare(query), (self._part, key), execution_profile=self._read_profile
66 )
67 if (row := result.one()) is not None:
68 return row[0]
69 else:
70 return default
71

◆ items()

Generator[tuple[str, str], None, None] lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra.items ( self)
Iterate over records and yield their keys and values.

Yields
------
key : `str`
    Metadata key.
value : `str`
    Corresponding metadata value.

Reimplemented from lsst.dax.apdb.apdbMetadata.ApdbMetadata.

Definition at line 103 of file apdbMetadataCassandra.py.

103 def items(self) -> Generator[tuple[str, str], None, None]:
104 # Docstring is inherited.
105 if self._table_clause is None:
106 # Missing table means nothing to return.
107 return
108 query = f"SELECT name, value FROM {self._table_clause} WHERE meta_part = ?"
109 result = self._session.execute(
110 self._preparer.prepare(query), (self._part,), execution_profile=self._read_profile
111 )
112 for row in result:
113 yield tuple(row)
114
std::vector< SchemaItem< Flag > > * items

◆ set()

None lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra.set ( self,
str key,
str value,
*bool force = False )
Set value for a given metadata record.

Parameters
----------
key : `str`
    Metadata key, arbitrary non-empty string.
value : `str`
    New metadata value, an arbitrary string. Due to deficiencies of
    some database engines we are not allowing empty strings to be
    stored in the database, and ``value`` cannot be an empty string.
force : `bool`, optional
    Controls handling of existing metadata. With default `False`
    value an exception is raised if ``key`` already exists, if `True`
    is passed then value of the existing key will be updated.

Raises
------
KeyError
    Raised if key already exists but ``force`` option is false.
ValueError
    Raised if key or value parameters are empty.

Reimplemented from lsst.dax.apdb.apdbMetadata.ApdbMetadata.

Definition at line 72 of file apdbMetadataCassandra.py.

72 def set(self, key: str, value: str, *, force: bool = False) -> None:
73 # Docstring is inherited.
74 if self._table_clause is None:
75 raise RuntimeError("Metadata table does not exist")
76 if not key or not value:
77 raise ValueError("name and value cannot be empty")
78 query = f"INSERT INTO {self._table_clause} (meta_part, name, value) VALUES (?, ?, ?)"
79 if not force and self.get(key) is not None:
80 raise KeyError(f"Metadata key {key!r} already exists")
81 # Race is still possible between check and insert.
82 self._session.execute(
83 self._preparer.prepare(query), (self._part, key, value), execution_profile=self._write_profile
84 )
85
daf::base::PropertySet * set
Definition fits.cc:931

◆ table_exists()

bool lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra.table_exists ( self)
Return `True` if metadata table exists.

Definition at line 127 of file apdbMetadataCassandra.py.

127 def table_exists(self) -> bool:
128 """Return `True` if metadata table exists."""
129 return self._table_clause is not None

Member Data Documentation

◆ _part

lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra._part
protected

Definition at line 48 of file apdbMetadataCassandra.py.

◆ _preparer

lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra._preparer
protected

Definition at line 49 of file apdbMetadataCassandra.py.

◆ _read_profile

lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra._read_profile
protected

Definition at line 46 of file apdbMetadataCassandra.py.

◆ _session

lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra._session
protected

Definition at line 45 of file apdbMetadataCassandra.py.

◆ _table_clause

lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra._table_clause
protected

Definition at line 57 of file apdbMetadataCassandra.py.

◆ _write_profile

lsst.dax.apdb.apdbMetadataCassandra.ApdbMetadataCassandra._write_profile
protected

Definition at line 47 of file apdbMetadataCassandra.py.


The documentation for this class was generated from the following file: