thrift ttypes 与 sqlalchemy metadata 进行 完全/部分 成员拷贝
发布时间:2020-05-29 00:06:09 所属栏目:Python 来源:互联网
导读:thrift ttypes 与 sqlalchemy metadata 进行 完全/部分 成员拷贝
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 #encoding:utf8
from datetime import datetime
from sqlalchemy.engine import RowProxy
def Print(object):
print object
for key,value in object.__dict__.items():
print '%-20r:%-r'%(key,value)
def Replicate(dir=True,debug=False,
tcls=None,tobj=None,mcls=None,mobj=None,
tencoding='utf-8',mencoding='unicode',
include=None,exclude=None,dt=None,union=True,
callback_list=None):
src_obj = tobj if dir else mobj
dst_obj = mobj if dir else tobj
src_cls = tcls if dir else mcls
dst_cls = mcls if dir else tcls
def get_source_fields(debug,src_obj,include,exclude):
if isinstance(src_obj,RowProxy):
src_obj_items = src_obj.items()
else:
src_obj_items = src_obj.__dict__.items()
inc_keys = set(include) if include else
set([item[0] for item in src_obj_items])
exc_keys = set(exclude) if exclude else set()
com_keys = inc_keys & exc_keys
dif_keys = inc_keys - com_keys
fields = dict()
for key in dif_keys:
value = getattr(src_obj,key)
if value is None:
continue
fields[key] = value
return fields
def handle_ignore(union,key,dst_obj):
rv = False
try:
getattr(dst_obj,key)
except Exception,e:
if not union:
rv = True
return rv
def handle_coding(dir,value):
if dir and
isinstance(value,basestring) and
not isinstance(value,unicode):
value = value.decode(tencoding)
if not dir and
isinstance(value,unicode):
value = value.encode(tencoding)
return value
def handle_datetime(key,value,dt):
str_to_dt = lambda x: datetime.strptime(x,"%Y-%m-%d %H:%M:%S")
dt_to_str = lambda x: x.strftime('%Y-%m-%d %H:%M:%S')
if key in dt:
value = str_to_dt(value) if dir else dt_to_str(value)
return value
if src_obj is None:
raise Exception('source obj should not be None!')
dst_obj = dst_obj if dst_obj else dst_cls()
fields = get_source_fields(debug,exclude)
for key,value in fields.items():
if handle_ignore(union,dst_obj):
continue
value = handle_coding(dir,value)
value = handle_datetime(key,dt)
setattr(dst_obj,value)
if callback_list:
for callback in callback_list:
callback(dst_obj)
if debug:
Print(dst_obj)
return dst_obj
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
