68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text, ForeignKey, Index, TIMESTAMP
|
|
from src import clogger
|
|
from datetime import datetime
|
|
class MyBase(object):
|
|
id = Column(Integer, primary_key=True)
|
|
created_at = Column(TIMESTAMP, default=datetime.utcnow, nullable=False)
|
|
updated_at = Column(TIMESTAMP, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
|
|
def __json__(self):
|
|
if self.__jsonattrs__ is None:
|
|
return self.__schema__().dump(self)[0]
|
|
else:
|
|
return self.__schema__(only=self.__jsonattrs__).dump(self)[0]
|
|
# def __init__(self, data={}):
|
|
# self.update(data,False)
|
|
|
|
def update(self,data, partial=True):
|
|
data, errors=self.__schema__( only=self.__whiteattrs__).load(data, partial=partial)
|
|
if len(errors)>0:
|
|
clogger.error(errors)
|
|
return (False,errors)
|
|
else:
|
|
for a in self.__whiteattrs__:
|
|
if data.has_key(a):
|
|
setattr(self,a,data[a])
|
|
return (True, [])
|
|
|
|
@classmethod
|
|
def deserialize(cls,data):
|
|
data, errors=cls.__schema__().load(data,partial=True)
|
|
a=cls()
|
|
for c in cls.__table__.columns:
|
|
if data.has_key(c.key):
|
|
setattr(a, c.key,data[c.key])
|
|
return a
|
|
|
|
class MyBase2(object):
|
|
id = Column(Integer, primary_key=True)
|
|
# created_at = Column(TIMESTAMP, default=datetime.utcnow, nullable=False)
|
|
# updated_at = Column(TIMESTAMP, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
|
|
def __json__(self):
|
|
if self.__jsonattrs__ is None:
|
|
return self.__schema__().dump(self)[0]
|
|
else:
|
|
return self.__schema__(only=self.__jsonattrs__).dump(self)[0]
|
|
# def __init__(self, data={}):
|
|
# self.update(data,False)
|
|
|
|
def update(self,data, partial=True):
|
|
data, errors=self.__schema__( only=self.__whiteattrs__).load(data, partial=partial)
|
|
if len(errors)>0:
|
|
clogger.error(errors)
|
|
return (False,errors)
|
|
else:
|
|
for a in self.__whiteattrs__:
|
|
if data.has_key(a):
|
|
setattr(self,a,data[a])
|
|
return (True, [])
|
|
|
|
@classmethod
|
|
def deserialize(cls,data):
|
|
data, errors=cls.__schema__().load(data,partial=True)
|
|
a=cls()
|
|
for c in cls.__table__.columns:
|
|
if data.has_key(c.key):
|
|
setattr(a, c.key,data[c.key])
|
|
return a
|
|
|