Repository URL to install this package:
| 
          
        
        Version: 
           
    
          4.1.94.1.dev2-4.1  ▾
        
   | 
# Copyright 2018 TrilioData Inc.
# All Rights Reserved.
"""Base classes for storage engines
"""
import copy
import six
import dmapi
from dmapi.utils import get_func_valid_keys
def update_nested(original_dict, updates):
    """Updates the leaf nodes in a nest dict.
     Updates occur without replacing entire sub-dicts.
    """
    dict_to_update = copy.deepcopy(original_dict)
    for key, value in six.iteritems(updates):
        if isinstance(value, dict):
            sub_dict = update_nested(dict_to_update.get(key, {}), value)
            dict_to_update[key] = sub_dict
        else:
            dict_to_update[key] = updates[key]
    return dict_to_update
class Model(object):
    """Base class for storage API models."""
    def __init__(self, **kwds):
        self.fields = list(kwds)
        for k, v in six.iteritems(kwds):
            setattr(self, k, v)
    def as_dict(self):
        d = {}
        for f in self.fields:
            v = getattr(self, f)
            if isinstance(v, Model):
                v = v.as_dict()
            elif isinstance(v, list) and v and isinstance(v[0], Model):
                v = [sub.as_dict() for sub in v]
            d[f] = v
        return d
    def __eq__(self, other):
        return self.as_dict() == other.as_dict()
    def __ne__(self, other):
        return not self.__eq__(other)
    @classmethod
    def get_field_names(cls):
        fields = get_func_valid_keys(cls.__init__)
        return set(fields) - set(["self"])
class Connection(object):
    """Base class for alarm storage system connections."""
    STORAGE_CAPABILITIES = {
        'storage': {'production_ready': False},
    }
    def __init__(self, conf, url):
        pass
    @staticmethod
    def upgrade():
        """Migrate the database to `version` or the most recent version."""
        raise dmapi.NotImplementedError('upgrade not implemented')
    @staticmethod
    def clear():
        """Clear database."""
        raise dmapi.NotImplementedError('clear not implemented')
    @classmethod
    def get_storage_capabilities(cls):
        """Return a dictionary representing the performance capabilities.
        This is needed to evaluate the performance of each driver.
        """
        return cls.STORAGE_CAPABILITIES