configurationengine/source/plugins/symbian/ConeCRMLPlugin/CRMLPlugin/crml_model.py
author terytkon
Thu, 11 Mar 2010 17:04:37 +0200
changeset 0 2e8eeb919028
child 3 e7e0ae78773e
permissions -rw-r--r--
Adding EPL version of configurationengine.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     1
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     2
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     3
# All rights reserved.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     4
# This component and the accompanying materials are made available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     5
# under the terms of "Eclipse Public License v1.0"
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     6
# which accompanies this distribution, and is available
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     8
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
     9
# Initial Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    10
# Nokia Corporation - initial contribution.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    11
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    12
# Contributors:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    13
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    14
# Description:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    15
#
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    16
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    17
class _CrmlObjectBase(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    18
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    19
    Common utility base class for all CRML objects for implementing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    20
    operations like repr(), copy() etc.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    21
    """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    22
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    23
    # Variable names used in simple object equality comparison
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    24
    SIMPLE_EQ_VARNAMES = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    25
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    26
    def __repr__(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    27
        return "%s(**%r)" % (self.__class__.__name__, vars(self))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    28
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    29
    def __get_filtered_dict(self, source_dict, allowed_keys):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    30
        result = {}
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    31
        for key in allowed_keys:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    32
            if key in source_dict:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    33
                result[key] = source_dict[key]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    34
        return result
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    35
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    36
    def __eq__(self, other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    37
        # 1. Compare type
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    38
        if type(self) is not type(other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    39
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    40
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    41
        # 2. Compare all members that can be simply compared using ==
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    42
        varnames = self.__class__.SIMPLE_EQ_VARNAMES
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    43
        dict_self   = self.__get_filtered_dict(vars(self), varnames)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    44
        dict_other  = self.__get_filtered_dict(vars(other), varnames)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    45
        if dict_self != dict_other:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    46
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    47
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    48
        # 3. Do any extra comparing
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    49
        if not self._do_extra_eq_handling(other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    50
            return False
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    51
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    52
        return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    53
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    54
    def __ne__(self, other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    55
        return not (self == other)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    56
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    57
    def _do_extra_eq_handling(self, other):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    58
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    59
        If sub-classes need to do any extra handling in __eq__(), they
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    60
        should implement this method and do it here.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    61
        @return: True if self is equal to other, False if not.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    62
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    63
        return True
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    64
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    65
    def copy(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    66
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    67
        Return a deep copy of this object.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    68
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    69
        new_obj = self.__class__(**vars(self))
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    70
        self._do_extra_copy_handling(new_obj)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    71
        return new_obj
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    72
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    73
    def _do_extra_copy_handling(self, new_object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    74
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    75
        If sub-classes need to do any extra handling in copy(), they
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    76
        should implement this method and do it here.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    77
        @param new_object: The new copied object, a shallow copy at this point.
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    78
        """
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    79
        return
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    80
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    81
class CrmlAccess(_CrmlObjectBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    82
    SIMPLE_EQ_VARNAMES = ['cap_rd', 'cap_wr', 'sid_rd', 'sid_wr']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    83
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    84
    def __init__(self, **kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    85
        self.cap_rd = kwargs.get('cap_rd')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    86
        self.cap_wr = kwargs.get('cap_wr')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    87
        self.sid_rd = kwargs.get('sid_rd')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    88
        self.sid_wr = kwargs.get('sid_wr')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    89
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    90
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    91
class CrmlRepository(_CrmlObjectBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    92
    SIMPLE_EQ_VARNAMES = ['uid_value', 'uid_name', 'owner', 'backup', 'rfs', 'access', 'keys', 'version']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    93
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    94
    def __init__(self, **kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    95
        self.uid_value  = kwargs.get('uid_value')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    96
        self.uid_name   = kwargs.get('uid_name')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    97
        self.owner      = kwargs.get('owner')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    98
        self.backup     = kwargs.get('backup', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
    99
        self.rfs        = kwargs.get('rfs', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   100
        self.access     = kwargs.get('access', CrmlAccess())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   101
        self.keys       = kwargs.get('keys', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   102
        self.version    = kwargs.get('version', '1')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   103
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   104
    def _do_extra_copy_handling(self, new_object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   105
        new_keys = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   106
        for key in new_object.keys:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   107
            new_keys.append(key.copy())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   108
        new_object.keys = new_keys
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   109
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   110
        self.access = new_object.access.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   111
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   112
    def get_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   113
        result = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   114
        for key in self.keys:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   115
            result.extend(key.get_refs())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   116
        return result
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   117
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   118
class CrmlKeyBase(object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   119
    def __init__(self, **kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   120
        self.ref        = kwargs.get('ref')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   121
        self.name       = kwargs.get('name')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   122
        self.backup     = kwargs.get('backup', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   123
        self.read_only  = kwargs.get('read_only', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   124
        self.access     = kwargs.get('access', CrmlAccess())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   125
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   126
class CrmlSimpleKey(CrmlKeyBase, _CrmlObjectBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   127
    SIMPLE_EQ_VARNAMES = ['ref', 'name', 'int', 'type', 'backup', 'read_only', 'access']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   128
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   129
    def __init__(self, **kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   130
        CrmlKeyBase.__init__(self, **kwargs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   131
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   132
            self.ref    = kwargs['ref']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   133
            self.int    = kwargs['int']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   134
            self.type   = kwargs.get('type', 'int')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   135
        except KeyError, e:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   136
            raise ValueError("Mandatory argument '%s' not given!" % e.message)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   137
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   138
    def _do_extra_copy_handling(self, new_object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   139
        self.access = new_object.access.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   140
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   141
    def get_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   142
        return [self.ref]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   143
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   144
class CrmlBitmaskKey(CrmlKeyBase, _CrmlObjectBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   145
    SIMPLE_EQ_VARNAMES = ['int', 'type', 'backup', 'read_only', 'access', 'name', 'bits']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   146
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   147
    def __init__(self, **kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   148
        CrmlKeyBase.__init__(self, **kwargs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   149
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   150
            self.int    = kwargs['int']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   151
            self.type   = kwargs.get('type', 'int')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   152
            self.bits   = kwargs.get('bits', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   153
        except KeyError, e:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   154
            raise ValueError("Mandatory argument '%s' not given!" % e.message)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   155
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   156
    def _do_extra_copy_handling(self, new_object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   157
        new_bits = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   158
        for bit in new_object.bits:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   159
            new_bits.append(bit.copy())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   160
        new_object.bits = new_bits
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   161
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   162
        self.access = new_object.access.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   163
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   164
    def get_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   165
        return [bit.ref for bit in self.bits]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   166
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   167
class CrmlBit(_CrmlObjectBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   168
    SIMPLE_EQ_VARNAMES = ['ref', 'index', 'invert']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   169
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   170
    def __init__(self, **kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   171
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   172
            self.ref    = kwargs['ref']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   173
            self.index  = kwargs['index']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   174
            self.invert = kwargs.get('invert', False)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   175
        except KeyError, e:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   176
            raise ValueError("Mandatory argument '%s' not given!" % e.message)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   177
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   178
class CrmlKeyRange(CrmlKeyBase, _CrmlObjectBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   179
    SIMPLE_EQ_VARNAMES = ['ref', 'name', 'first_int', 'last_int', 'first_index', 'index_bits', 'count_int', 'backup', 'read_only', 'access', 'subkeys']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   180
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   181
    def __init__(self, **kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   182
        CrmlKeyBase.__init__(self, **kwargs)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   183
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   184
            self.first_int      = kwargs['first_int']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   185
            self.last_int       = kwargs['last_int']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   186
            self.first_index    = kwargs.get('first_index', 0)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   187
            self.index_bits     = kwargs.get('index_bits')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   188
            self.count_int      = kwargs.get('count_int')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   189
            self.subkeys        = kwargs.get('subkeys', [])
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   190
        except KeyError, e:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   191
            raise ValueError("Mandatory argument '%s' not given!" % e.message)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   192
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   193
    def _do_extra_copy_handling(self, new_object):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   194
        new_subkeys = []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   195
        for subkey in new_object.subkeys:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   196
            new_subkeys.append(subkey.copy())
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   197
        new_object.subkeys = new_subkeys
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   198
        
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   199
        self.access = new_object.access.copy()
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   200
    
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   201
    def get_refs(self):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   202
        if self.ref is not None:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   203
            refs = [self.ref]
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   204
            for sk in self.subkeys:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   205
                refs.append(self.ref + '.' + sk.ref)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   206
            return refs
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   207
        else:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   208
            return []
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   209
            
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   210
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   211
class CrmlKeyRangeSubKey(_CrmlObjectBase):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   212
    SIMPLE_EQ_VARNAMES = ['ref', 'name', 'type', 'int']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   213
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   214
    def __init__(self, **kwargs):
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   215
        try:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   216
            self.ref    = kwargs['ref']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   217
            self.type   = kwargs['type']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   218
            self.int    = kwargs['int']
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   219
            self.name   = kwargs.get('name')
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   220
        except KeyError, e:
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   221
            raise ValueError("Mandatory argument '%s' not given!" % e.message)
2e8eeb919028 Adding EPL version of configurationengine.
terytkon
parents:
diff changeset
   222