LSST Applications g0603fd7c41+501e3db9f9,g0aad566f14+23d8574c86,g0dd44d6229+a1a4c8b791,g2079a07aa2+86d27d4dc4,g2305ad1205+a62672bbc1,g2bbee38e9b+047b288a59,g337abbeb29+047b288a59,g33d1c0ed96+047b288a59,g3a166c0a6a+047b288a59,g3d1719c13e+23d8574c86,g487adcacf7+cb7fd919b2,g4be5004598+23d8574c86,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+4a9e435310,g63cd9335cc+585e252eca,g858d7b2824+23d8574c86,g88963caddf+0cb8e002cc,g99cad8db69+43388bcaec,g9ddcbc5298+9a081db1e4,ga1e77700b3+a912195c07,gae0086650b+585e252eca,gb0e22166c9+60f28cb32d,gb2522980b2+793639e996,gb3a676b8dc+b4feba26a1,gb4b16eec92+63f8520565,gba4ed39666+c2a2e4ac27,gbb8dafda3b+a5d255a82e,gc120e1dc64+d820f8acdb,gc28159a63d+047b288a59,gc3e9b769f7+f4f1cc6b50,gcf0d15dbbd+a1a4c8b791,gdaeeff99f8+f9a426f77a,gdb0af172c8+b6d5496702,ge79ae78c31+047b288a59,w.2024.19
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
lsst.dax.apdb.cassandra.apdbMetadataCassandra.ApdbMetadataCassandra Class Reference
Inheritance diagram for lsst.dax.apdb.cassandra.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.cassandra.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.cassandra.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.cassandra.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.cassandra.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.cassandra.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.cassandra.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.cassandra.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.cassandra.apdbMetadataCassandra.ApdbMetadataCassandra._part
protected

Definition at line 48 of file apdbMetadataCassandra.py.

◆ _preparer

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

Definition at line 49 of file apdbMetadataCassandra.py.

◆ _read_profile

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

Definition at line 46 of file apdbMetadataCassandra.py.

◆ _session

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

Definition at line 45 of file apdbMetadataCassandra.py.

◆ _table_clause

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

Definition at line 57 of file apdbMetadataCassandra.py.

◆ _write_profile

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

Definition at line 47 of file apdbMetadataCassandra.py.


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