In [2]:
from pygchem.utils.data_structures import RecordList, record_cls

In [3]:
Test = record_cls("Test", "A test record",
                  (('id', int, 1, True, 'identifiant'),
                   ('name', str, '', False, 'name of the thing'),
                   ('data', None, None, False, 'the data')),
                  required_fields=('id'),
                  verbose=True)


class Test(Record):
    '''
    A test record (record-like).

    Parameters
    ----------    
    id : int
        identifiant    
    name : str
        name of the thing    
    data : 
        the data

    '''

    __slots__  = ('_id', '_name', '_data')
    _properties = ('id', 'name', 'data')
    _types = (int, str, None)

    def __init__(self, id, name='', data=None):
        super(Test, self).__init__(id, name, data)

        
    @property
    def id(self):
        '''
        identifiant.
        '''
        return self._id
        
    @property
    def name(self):
        '''
        name of the thing.
        '''
        return self._name
        
    @property
    def data(self):
        '''
        the data.
        '''
        return self._data
    
        
    @name.setter
    def name(self, value):
        self._name = str(value)
        
    @data.setter
    def data(self, value):
        self._data = (value)
    

    def __repr__(self):
        return 'Test' + super(Test, self).__repr__()



In [4]:
testd = {'id': 1, 'name': 'Ben', 'data': [0, 1, 2]}
testo = Test(**testd)

In [5]:
testo


Out[5]:
Test(id=1, name=Ben, data=[0, 1, 2])

In [6]:
testo.to_dict()


Out[6]:
{'data': [0, 1, 2], 'id': 1, 'name': 'Ben'}

In [7]:
Test(**testo.to_dict())


Out[7]:
Test(id=1, name=Ben, data=[0, 1, 2])

In [8]:
testo.to_dict(ordered=True)


Out[8]:
OrderedDict([('id', 1), ('name', 'Ben'), ('data', [0, 1, 2])])

In [9]:
testo.to_list()


Out[9]:
[1, 'Ben', [0, 1, 2]]

In [10]:
list(testo.items())


Out[10]:
[('id', 1), ('name', 'Ben'), ('data', [0, 1, 2])]

In [11]:
Test('1')


Out[11]:
Test(id=1, name=, data=None)

In [12]:
try:
    testo.id = 2
except AttributeError:
    print "read-only"


read-only

In [13]:
testo.data


Out[13]:
[0, 1, 2]

In [14]:
Test(id=2, name="Paul").name


Out[14]:
'Paul'

In [15]:
Test(name='Ben')


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-15-c4d8736af088> in <module>()
----> 1 Test(name='Ben')

TypeError: __init__() takes at least 2 arguments (2 given)

In [ ]: