在CKAN中手动更改数据集metadata_modified

时间:2016-01-18 11:38:23

标签: python-2.7 dataset ckan

我会将数据集的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如何管理数据库会话?如何在不更改核心文件的情况下手动更改该字段?

0 个答案:

没有答案