本文整理汇总了Python中corehq.form_processor.interfaces.processor.FormProcessorInterface.assign_new_id方法的典型用法代码示例。如果您正苦于以下问题:Python FormProcessorInterface.assign_new_id方法的具体用法?Python FormProcessorInterface.assign_new_id怎么用?Python FormProcessorInterface.assign_new_id使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类corehq.form_processor.interfaces.processor.FormProcessorInterface
的用法示例。
在下文中一共展示了FormProcessorInterface.assign_new_id方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _handle_id_conflict
# 需要导入模块: from corehq.form_processor.interfaces.processor import FormProcessorInterface [as 别名]
# 或者: from corehq.form_processor.interfaces.processor.FormProcessorInterface import assign_new_id [as 别名]
def _handle_id_conflict(instance, xform, domain):
"""
For id conflicts, we check if the files contain exactly the same content,
If they do, we just log this as a dupe. If they don't, we deprecate the
previous form and overwrite it with the new form's contents.
"""
assert domain
conflict_id = xform.form_id
interface = FormProcessorInterface(domain)
if interface.is_duplicate(conflict_id, domain):
# It looks like a duplicate/edit in the same domain so pursue that workflow.
return _handle_duplicate(xform, instance)
else:
# the same form was submitted to two domains, or a form was submitted with
# an ID that belonged to a different doc type. these are likely developers
# manually testing or broken API users. just resubmit with a generated ID.
xform = interface.assign_new_id(xform)
return FormProcessingResult(xform)
示例2: _handle_duplicate
# 需要导入模块: from corehq.form_processor.interfaces.processor import FormProcessorInterface [as 别名]
# 或者: from corehq.form_processor.interfaces.processor.FormProcessorInterface import assign_new_id [as 别名]
def _handle_duplicate(new_doc):
"""
Handle duplicate xforms and xform editing ('deprecation')
existing doc *must* be validated as an XFormInstance in the right domain
and *must* include inline attachments
:returns: A two-tuple: `(<new form>, <duplicate form or None>)`
The new form may have a different `form_id` than `new_doc.form_id`.
"""
interface = FormProcessorInterface(new_doc.domain)
conflict_id = new_doc.form_id
try:
existing_doc = FormAccessors(new_doc.domain).get_with_attachments(conflict_id)
except ResourceNotFound:
# Original form processing failed but left behind a form doc with no
# attachments. It's safe to delete this now since we're going to re-process
# the form anyway.
from couchforms.models import XFormInstance
XFormInstance.get_db().delete_doc(conflict_id)
return new_doc, None
existing_md5 = existing_doc.xml_md5()
new_md5 = new_doc.xml_md5()
if existing_md5 != new_md5:
_soft_assert = soft_assert(to='{}@{}.com'.format('skelly', 'dimagi'), exponential_backoff=False)
if new_doc.xmlns != existing_doc.xmlns:
# if the XMLNS has changed this probably isn't a form edit
# it could be a UUID clash (yes we've had that before)
# Assign a new ID to the form and process as normal + notify_admins
xform = interface.assign_new_id(new_doc)
_soft_assert(
False, "Potential UUID clash", {
'incoming_form_id': conflict_id,
'existing_form_id': existing_doc.form_id,
'new_form_id': xform.form_id,
'incoming_xmlns': new_doc.xmlns,
'existing_xmlns': existing_doc.xmlns,
'domain': new_doc.domain,
}
)
return xform, None
else:
# if the form contents are not the same:
# - "Deprecate" the old form by making a new document with the same contents
# but a different ID and a doc_type of XFormDeprecated
# - Save the new instance to the previous document to preserve the ID
existing_doc, new_doc = apply_deprecation(existing_doc, new_doc, interface)
device_id = new_doc.metadata.deviceID
# we expect edits from formplayer so exclude those
_soft_assert(
device_id == FORMPLAYER_DEVICE_ID, "Form edit", {
'form_id': new_doc.form_id,
'deprecated_form': existing_doc.form_id,
'domain': new_doc.domain,
'device_id': device_id,
'cc_version': new_doc.metadata.appVersion,
}
)
return new_doc, existing_doc
else:
# follow standard dupe handling, which simply saves a copy of the form
# but a new doc_id, and a doc_type of XFormDuplicate
duplicate = interface.deduplicate_xform(new_doc)
return duplicate, existing_doc