blob: c166283de35927b786234714392553f0d236f997 [file] [log] [blame]
from abc import ABCMeta, abstractproperty
from six import with_metaclass
class UpdatingMetadataWrapperBase(with_metaclass(ABCMeta, object)):
@abstractproperty
def _wrapped(self):
pass
def __getattr__(self, name):
return getattr(self._wrapped, name)
def __getitem__(self, idx):
return self._wrapped[idx]
class UpdatingTableMetadataWrapper(UpdatingMetadataWrapperBase):
"""
A class that provides an interface to a table's metadata that is refreshed
on access.
"""
def __init__(self, cluster, ks_name, table_name, max_schema_agreement_wait=None):
self._cluster = cluster
self._ks_name = ks_name
self._table_name = table_name
self.max_schema_agreement_wait = max_schema_agreement_wait
@property
def _wrapped(self):
self._cluster.refresh_table_metadata(
self._ks_name,
self._table_name,
max_schema_agreement_wait=self.max_schema_agreement_wait
)
return self._cluster.metadata.keyspaces[self._ks_name].tables[self._table_name]
def __repr__(self):
return '{cls_name}(cluster={cluster}, ks_name={ks_name}, table_name={table_name}, max_schema_agreement_wait={max_wait})'.format(
cls_name=self.__class__.__name__,
cluster=repr(self._cluster),
ks_name=self._ks_name,
table_name=self._table_name,
max_wait=self.max_schema_agreement_wait)
class UpdatingKeyspaceMetadataWrapper(UpdatingMetadataWrapperBase):
"""
A class that provides an interface to a keyspace's metadata that is
refreshed on access.
"""
def __init__(self, cluster, ks_name, max_schema_agreement_wait=None):
self._cluster = cluster
self._ks_name = ks_name
self.max_schema_agreement_wait = max_schema_agreement_wait
@property
def _wrapped(self):
self._cluster.refresh_keyspace_metadata(
self._ks_name,
max_schema_agreement_wait=self.max_schema_agreement_wait
)
return self._cluster.metadata.keyspaces[self._ks_name]
def __repr__(self):
return '{cls_name}(cluster={cluster}, ks_name={ks_name}, max_schema_agreement_wait={max_wait})'.format(
cls_name=self.__class__.__name__,
cluster=repr(self._cluster),
ks_name=self._ks_name,
max_wait=self.max_schema_agreement_wait)
class UpdatingClusterMetadataWrapper(UpdatingMetadataWrapperBase):
"""
A class that provides an interface to a cluster's metadata that is
refreshed on access.
"""
def __init__(self, cluster, max_schema_agreement_wait=None):
"""
@param cluster The cassandra.cluster.Cluster object to wrap.
"""
self._cluster = cluster
self.max_schema_agreement_wait = max_schema_agreement_wait
@property
def _wrapped(self):
self._cluster.refresh_schema_metadata(max_schema_agreement_wait=self.max_schema_agreement_wait)
return self._cluster.metadata
def __repr__(self):
return '{cls_name}(cluster={cluster}, max_schema_agreement_wait={max_wait})'.format(
cls_name=self.__class__.__name__,
cluster=repr(self._cluster),
max_wait=self.max_schema_agreement_wait)