more db.py
This commit is contained in:
@ -50,7 +50,7 @@ static int pyField_Init(pyField *self, PyObject *args, PyObject *kws)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(self->addr.field_type >= DBF_ENUM) {
|
if(self->addr.field_type >= DBF_ENUM) {
|
||||||
PyErr_SetString(PyExc_ValueError, "Access to this field type is not supported");
|
PyErr_SetString(PyExc_TypeError, "Access to this field type is not supported");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -6,10 +6,10 @@ def verinfo():
|
|||||||
"""
|
"""
|
||||||
return (0,0,0,0.'invalid')
|
return (0,0,0,0.'invalid')
|
||||||
|
|
||||||
class Record(object):
|
class _Record(object):
|
||||||
"""Handle for record operations
|
"""Handle for record operations
|
||||||
|
|
||||||
r = Record("rec:name")
|
r = _Record("rec:name")
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, rec):
|
def __init__(self, rec):
|
||||||
@ -49,7 +49,7 @@ class Record(object):
|
|||||||
def asyncFinish(self, reason=None):
|
def asyncFinish(self, reason=None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def Field(object):
|
def _Field(object):
|
||||||
"""Handle for field operations
|
"""Handle for field operations
|
||||||
|
|
||||||
f = Field("rec:name.HOPR")
|
f = Field("rec:name.HOPR")
|
||||||
|
@ -5,6 +5,7 @@ except ImportError:
|
|||||||
from _dbapi import _Field, _Record
|
from _dbapi import _Field, _Record
|
||||||
|
|
||||||
_rec_cache = {}
|
_rec_cache = {}
|
||||||
|
_no_such_field = object()
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'Record',
|
'Record',
|
||||||
@ -22,18 +23,43 @@ def getRecord(name):
|
|||||||
class Record(_Record):
|
class Record(_Record):
|
||||||
def __init__(self, *args, **kws):
|
def __init__(self, *args, **kws):
|
||||||
super(Record, self).__init__(*args, **kws)
|
super(Record, self).__init__(*args, **kws)
|
||||||
self._fld_cache = {}
|
super(Record, self).__setattr__('_fld_cache', {})
|
||||||
|
|
||||||
def field(self, name):
|
def field(self, name):
|
||||||
"""Lookup field in this record
|
"""Lookup field in this record
|
||||||
|
|
||||||
fld = rec.field('HOPR')
|
fld = rec.field('HOPR')
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
return self._fld_cache[name]
|
F = self._fld_cache[name]
|
||||||
|
if F is _no_such_field:
|
||||||
|
raise ValueError()
|
||||||
|
return F
|
||||||
except KeyError:
|
except KeyError:
|
||||||
fld = Field("%s.%s"%(self.name(), name))
|
try:
|
||||||
self._fld_cache[name] = fld
|
fld = Field("%s.%s"%(self.name(), name))
|
||||||
return fld
|
except ValueError:
|
||||||
|
self._fld_cache[name] = _no_such_field
|
||||||
|
else:
|
||||||
|
self._fld_cache[name] = fld
|
||||||
|
return fld
|
||||||
|
|
||||||
|
def __getattr__(self, name):
|
||||||
|
try:
|
||||||
|
F = self.field(name)
|
||||||
|
except ValueError:
|
||||||
|
raise AttributeError('No such field')
|
||||||
|
else:
|
||||||
|
return F.getval()
|
||||||
|
|
||||||
|
def __setattr__(self, name, val):
|
||||||
|
try:
|
||||||
|
F=self.field(name)
|
||||||
|
except ValueError:
|
||||||
|
super(Record, self).__setattr__(name, val)
|
||||||
|
else:
|
||||||
|
F.putval(val)
|
||||||
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'Record("%s")'%self.name()
|
return 'Record("%s")'%self.name()
|
||||||
@ -50,6 +76,18 @@ class Field(_Field):
|
|||||||
self._record = getRecord(rec)
|
self._record = getRecord(rec)
|
||||||
return self._record
|
return self._record
|
||||||
|
|
||||||
|
def __cmp__(self, B):
|
||||||
|
if isinstance(B, Field):
|
||||||
|
B=B.getval()
|
||||||
|
return cmp(self.getval(), B)
|
||||||
|
|
||||||
|
def __int__(self):
|
||||||
|
return int(self.getval())
|
||||||
|
def __long__(self):
|
||||||
|
return long(self.getval())
|
||||||
|
def __float__(self):
|
||||||
|
return float(self.getval())
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return 'Field("%s.%s")'%self.name()
|
return 'Field("%s.%s")'%self.name()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user