|
@@ -11,6 +11,7 @@ import json
|
|
|
import traceback
|
|
|
import re
|
|
|
import math
|
|
|
+import datetime
|
|
|
from demeter.core import *
|
|
|
class Model(object):
|
|
|
__table__ = ''
|
|
@@ -23,6 +24,10 @@ class Model(object):
|
|
|
self._bind = {}
|
|
|
self._attr = {}
|
|
|
self._key = {}
|
|
|
+ self.call = False
|
|
|
+ self.log = []
|
|
|
+ self.sql = False
|
|
|
+ self.bind = False
|
|
|
self.setTable(self.__table__)
|
|
|
self.create()
|
|
|
|
|
@@ -32,6 +37,16 @@ class Model(object):
|
|
|
else:
|
|
|
self._table = name
|
|
|
|
|
|
+ def setCall(self, call):
|
|
|
+ self.call = call
|
|
|
+ return self
|
|
|
+
|
|
|
+ def addLog(self, value):
|
|
|
+ self.log.append(value)
|
|
|
+
|
|
|
+ def getLog(self):
|
|
|
+ return self.log
|
|
|
+
|
|
|
def cur(self):
|
|
|
return self.db.cursor()
|
|
|
|
|
@@ -45,7 +60,9 @@ class Model(object):
|
|
|
id = cur.fetchone()[0]
|
|
|
return id
|
|
|
|
|
|
- def query(self, sql, bind=[], fetch='fetchone', method='', cur=False):
|
|
|
+ def query(self, sql, bind=[], fetch='fetchone', method='', cur=False, call=False):
|
|
|
+ if call:
|
|
|
+ self.setCall(call)
|
|
|
if not cur:
|
|
|
cur = self.cur()
|
|
|
if not method:
|
|
@@ -53,7 +70,8 @@ class Model(object):
|
|
|
method = 'select'
|
|
|
if 'insert' in sql:
|
|
|
method = 'insert'
|
|
|
-
|
|
|
+ self.sql = sql
|
|
|
+ self.bind = bind
|
|
|
cur.execute(sql, bind)
|
|
|
if method == 'select':
|
|
|
return self.fetch(cur, fetch)
|
|
@@ -128,7 +146,7 @@ class Model(object):
|
|
|
row = {}
|
|
|
i = 0
|
|
|
for v in key:
|
|
|
- row[desc[i][0]] = v
|
|
|
+ row[desc[i][0]] = self.data(desc[i][0], v)
|
|
|
i = i + 1
|
|
|
result.append(row)
|
|
|
elif method == 'count':
|
|
@@ -137,13 +155,20 @@ class Model(object):
|
|
|
result = {}
|
|
|
i = 0
|
|
|
if rows:
|
|
|
- for key in rows:
|
|
|
- if not key:
|
|
|
- key = ''
|
|
|
- result[desc[i][0]] = key
|
|
|
+ for v in rows:
|
|
|
+ if not v:
|
|
|
+ v = ''
|
|
|
+ result[desc[i][0]] = self.data(desc[i][0], v)
|
|
|
i = i + 1
|
|
|
return result
|
|
|
|
|
|
+ def data(self, key, value):
|
|
|
+ if type(value) == datetime.datetime:
|
|
|
+ value = str(value)
|
|
|
+ if self.call:
|
|
|
+ value = self.call(key, value)
|
|
|
+ return value
|
|
|
+
|
|
|
def attr(self, method):
|
|
|
fields = vars(self.__class__)
|
|
|
self._attr = {}
|
|
@@ -276,7 +301,9 @@ class Model(object):
|
|
|
def delete(self):
|
|
|
return self.handle('delete')
|
|
|
|
|
|
- def select(self, type='fetchall',col = '*', order = 'cdate desc', group = '', limit = '0,100', page=False):
|
|
|
+ def select(self, type='fetchall',col = '*', order = 'cdate desc', group = '', limit = '0,100', page=False, call=False):
|
|
|
+ if call:
|
|
|
+ self.setCall(call)
|
|
|
pageConfig = {}
|
|
|
if page and 'page' in Demeter.config:
|
|
|
pageConfig['current'] = Demeter.config['page']['current']
|