table_name self._model.__table__
return %s.fdb % os.path.join(config.FDB_HOME, table_name)
def __call__(self, model):
self._model model
self.driver FileDriver(self._path)
# save raw by sort
if hasattr(self._model, meta ):
meta getattr(self._model, meta )
if hasattr(meta, fields ):
self.driver.fields getattr(meta, fields )
def to_obj(self, kwargs):
return self._model(**kwargs)
classmethod
def filter_raw(cls, raw, condition):
for k, v in condition.iteritems():
if raw.get(k) ! v:
return False
return True
def all(self):
result []
contents self.driver.read()
for line in contents:
obj self.to_obj(line)
result.append(obj)
return result
def query(self, **kwargs):
result []
contents self.driver.read()
for line in contents:
if self.filter_raw(line, kwargs):
obj self.to_obj(line)
result.append(obj)
return result
def query_or(self, conditions):
result []
contents self.driver.read()
for line in contents:
ret False
for condition in conditions:
if self.filter_raw(line, condition):
ret True
if ret:
obj self.to_obj(line)
result.append(obj)
return result
def add(self, **kwargs):
self.driver.add(kwargs)
def delete(self, pk):
key self._model.__primary_key__
with self.driver.lock:
result []
for item in self.query():
if getattr(item, key) pk:
continue
result.append(dict(item))
self.driver.update_no_lock(result)
对象实例定义与抽象 可以说是Model映射层 参考如下
from utils.db.f_manager import baseManager