def update_item(storage, context):
target_version = context.type_info.schema_version
current_version = context.properties.get('schema_version', '')
update = False
errors = []
properties = context.properties
if target_version is None or current_version == target_version:
unique_keys = context.unique_keys(properties)
links = context.links(properties)
keys_add, keys_remove = storage._update_keys(context.model, unique_keys)
if keys_add or keys_remove:
update = True
rels_add, rels_remove = storage._update_rels(context.model, links)
if rels_add or rels_remove:
update = True
else:
properties = deepcopy(properties)
upgrader = context.registry[UPGRADER]
properties = upgrader.upgrade(
context.type_info.name, properties, current_version, target_version,
context=context, registry=context.registry)
if 'schema_version' in properties:
del properties['schema_version']
schema = context.type_info.schema
properties['uuid'] = str(context.uuid)
validated, errors = validate(schema, properties, properties)
# Do not send modification events to skip indexing
context.update(validated)
update = True
return update, errors
评论列表
文章目录