我会将数据集的metadata_modified字段设置为某个日期,我写了一个替换package_update的函数
def my_custom_function(pk_id):
date_format = "%Y-%m-%dT%H:%M:%S.%f"
pkg = package_show({'model': ckan.model}, {'id': pk_id})
last_date = None
for rr in pkg.get('resources'):
curr_date = rr.get('metadata_last_modified') or rr.get('last_modified') or rr.get('created')
curr_date = datetime.datetime.strptime(curr_date, date_format)
if last_date is None or last_date < curr_date:
last_date = curr_date
for kk in ['last_modified', 'metadata_last_modified', 'metadata_modified']:
pkg[kk] = last_date
print package_update({'model': ckan.model, 'user': c.user}, pkg)
此函数已正确触发,但它不会更改字段,因为在ckan / logic / action / update.py中
model.Session.query(model.Package).filter_by(id=pkg.id).update(
{"metadata_modified": datetime.datetime.utcnow()})
字段硬编码为utcnow,因此我添加了几行来手动更改字段。
ckan.model.Session.query(ckan.model.Package).filter_by(id=pk_id).update(
{"metadata_modified": my_custom_date}
)
ckan.model.Session.flush()
这种方法也不起作用,日期总是设置为utcnow。
ckan如何管理数据库会话?如何在不更改核心文件的情况下手动更改该字段?