# Copyright DataStax, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import logging import traceback from warnings import warn from cassandra.util import Version DSE_60 = Version('6.0.0') DSE_51_MIN_SUPPORTED = Version('5.1.13') DSE_60_MIN_SUPPORTED = Version('6.0.5') log = logging.getLogger(__name__) def namespace(cls): """ Best-effort method for getting the namespace in which a class is defined. """ try: # __module__ can be None module = cls.__module__ or '' except Exception: warn("Unable to obtain namespace for {cls} for Insights, returning ''. " "Exception: \n{e}".format(e=traceback.format_exc(), cls=cls)) module = '' module_internal_namespace = _module_internal_namespace_or_emtpy_string(cls) if module_internal_namespace: return '.'.join((module, module_internal_namespace)) return module def _module_internal_namespace_or_emtpy_string(cls): """ Best-effort method for getting the module-internal namespace in which a class is defined -- i.e. the namespace _inside_ the module. """ try: qualname = cls.__qualname__ except AttributeError: return '' return '.'.join( # the last segment is the name of the class -- use everything else qualname.split('.')[:-1] ) def version_supports_insights(dse_version): if dse_version: try: dse_version = Version(dse_version) return (DSE_51_MIN_SUPPORTED <= dse_version < DSE_60 or DSE_60_MIN_SUPPORTED <= dse_version) except Exception: warn("Unable to check version {v} for Insights compatibility, returning False. " "Exception: \n{e}".format(e=traceback.format_exc(), v=dse_version)) return False