本文整理汇总了Python中casexml.apps.case.models.CommCareCaseAction.from_parsed_action方法的典型用法代码示例。如果您正苦于以下问题:Python CommCareCaseAction.from_parsed_action方法的具体用法?Python CommCareCaseAction.from_parsed_action怎么用?Python CommCareCaseAction.from_parsed_action使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类casexml.apps.case.models.CommCareCaseAction
的用法示例。
在下文中一共展示了CommCareCaseAction.from_parsed_action方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: get_stock_actions
# 需要导入模块: from casexml.apps.case.models import CommCareCaseAction [as 别名]
# 或者: from casexml.apps.case.models.CommCareCaseAction import from_parsed_action [as 别名]
def get_stock_actions(xform):
if is_device_report(xform):
return [], []
stock_report_helpers = list(unpack_commtrack(xform))
transaction_helpers = [
transaction_helper
for stock_report_helper in stock_report_helpers
for transaction_helper in stock_report_helper.transactions
]
if not transaction_helpers:
return [], []
# list of cases that had stock reports in the form
case_ids = list(set(transaction_helper.case_id
for transaction_helper in transaction_helpers))
user_id = xform.form['meta']['userID']
submit_time = xform['received_on']
case_actions = []
for case_id in case_ids:
case_action = CommCareCaseAction.from_parsed_action(
submit_time, user_id, xform, AbstractAction(CASE_ACTION_COMMTRACK)
)
case_actions.append((case_id, case_action))
return stock_report_helpers, case_actions
示例2: get_stock_actions
# 需要导入模块: from casexml.apps.case.models import CommCareCaseAction [as 别名]
# 或者: from casexml.apps.case.models.CommCareCaseAction import from_parsed_action [as 别名]
def get_stock_actions(xform):
if is_device_report(xform):
return _empty_actions()
stock_report_helpers = list(unpack_commtrack(xform))
transaction_helpers = [
transaction_helper
for stock_report_helper in stock_report_helpers
for transaction_helper in stock_report_helper.transactions
]
if not transaction_helpers:
return _empty_actions()
# list of cases that had stock reports in the form
case_ids = list(set(transaction_helper.case_id
for transaction_helper in transaction_helpers))
user_id = xform.form['meta']['userID']
submit_time = xform['received_on']
case_action_intents = []
for case_id in case_ids:
if is_deprecation(xform):
case_action_intents.append(CaseActionIntent(
case_id=case_id, form_id=xform.orig_id, is_deprecation=True, action=None
))
else:
case_action = CommCareCaseAction.from_parsed_action(
submit_time, user_id, xform, AbstractAction(CASE_ACTION_COMMTRACK)
)
case_action_intents.append(CaseActionIntent(
case_id=case_id, form_id=xform._id, is_deprecation=False, action=case_action
))
return StockFormActions(stock_report_helpers, case_action_intents)
示例3: process_stock
# 需要导入模块: from casexml.apps.case.models import CommCareCaseAction [as 别名]
# 或者: from casexml.apps.case.models.CommCareCaseAction import from_parsed_action [as 别名]
def process_stock(xform, case_db=None):
"""
process the commtrack xml constructs in an incoming submission
"""
case_db = case_db or CaseDbCache()
assert isinstance(case_db, CaseDbCache)
if is_device_report(xform):
return []
domain = xform.domain
config = CommtrackConfig.for_domain(domain)
# these are the raw stock report objects from the xml
stock_reports = list(unpack_commtrack(xform, config))
# flattened transaction list spanning all stock reports in the form
transactions = [t for r in stock_reports for t in r.transactions]
# omitted: normalize_transactions (used for bulk requisitions?)
if not transactions:
return []
# transactions grouped by case/product id
grouped_tx = map_reduce(lambda tx: [((tx.case_id, tx.product_id),)],
lambda v: sorted(v, key=lambda tx: tx.timestamp),
data=transactions,
include_docs=True)
case_ids = list(set(k[0] for k in grouped_tx))
# list of cases that had stock reports in the form
# there is no need to wrap them by case type
relevant_cases = [case_db.get(case_id) for case_id in case_ids]
user_id = xform.form['meta']['userID']
submit_time = xform['received_on']
# touch every case for proper ota restore logic syncing to be preserved
for case in relevant_cases:
case_action = CommCareCaseAction.from_parsed_action(
submit_time, user_id, xform, AbstractAction(CASE_ACTION_COMMTRACK)
)
# hack: clear the sync log id so this modification always counts
# since consumption data could change server-side
case_action.sync_log_id = ''
case.actions.append(case_action)
case_db.mark_changed(case)
# also purge the sync token cache for the same reason
if relevant_cases and xform.get_sync_token():
xform.get_sync_token().invalidate_cached_payloads()
# create the django models
for report in stock_reports:
report.create_models(domain)
# TODO make this a signal
from corehq.apps.commtrack.signals import send_notifications, raise_events
send_notifications(xform, relevant_cases)
raise_events(xform, relevant_cases)
return relevant_cases
示例4: get_couch_action
# 需要导入模块: from casexml.apps.case.models import CommCareCaseAction [as 别名]
# 或者: from casexml.apps.case.models.CommCareCaseAction import from_parsed_action [as 别名]
def get_couch_action(self):
assert self.action_type == CASE_ACTION_COMMTRACK
return CommCareCaseAction.from_parsed_action(
date=self.form.received_on,
user_id=self.form.metadata.userID,
xformdoc=self.form,
action=AbstractAction(self.action_type),
)
示例5: process_stock
# 需要导入模块: from casexml.apps.case.models import CommCareCaseAction [as 别名]
# 或者: from casexml.apps.case.models.CommCareCaseAction import from_parsed_action [as 别名]
def process_stock(xform):
"""
process the commtrack xml constructs in an incoming submission
"""
if is_device_report(xform):
return
domain = xform.domain
config = CommtrackConfig.for_domain(domain)
# these are the raw stock report objects from the xml
stock_reports = list(unpack_commtrack(xform, config))
# flattened transaction list spanning all stock reports in the form
transactions = [t for r in stock_reports for t in r.transactions]
# omitted: normalize_transactions (used for bulk requisitions?)
if not transactions:
return
# transactions grouped by case/product id
grouped_tx = map_reduce(lambda tx: [((tx.case_id, tx.product_id),)],
lambda v: sorted(v, key=lambda tx: tx.timestamp),
data=transactions,
include_docs=True)
# list of cases that had stock reports in the form, properly wrapped by case type
try:
relevant_cases = [wrap_commtrack_case(result['doc']) for result in
CommCareCase.get_db().view('_all_docs',
keys=list(set(k[0] for k in grouped_tx)),
include_docs=True)]
except KeyError:
raise Exception("Cannot find case matching supplied entity id")
user_id = xform.form['meta']['userID']
submit_time = xform['received_on']
# touch every case for proper ota restore logic syncing to be preserved
for case in relevant_cases:
case_action = CommCareCaseAction.from_parsed_action(
submit_time, user_id, xform, AbstractAction(CASE_ACTION_COMMTRACK)
)
# hack: clear the sync log id so this modification always counts
# since consumption data could change server-side
case_action.sync_log_id = ''
case.actions.append(case_action)
case.save()
# create the django models
for report in stock_reports:
report.create_models()
# TODO make this a signal
from corehq.apps.commtrack.signals import send_notifications, raise_events
send_notifications(xform, relevant_cases)
raise_events(xform, relevant_cases)
示例6: process_stock
# 需要导入模块: from casexml.apps.case.models import CommCareCaseAction [as 别名]
# 或者: from casexml.apps.case.models.CommCareCaseAction import from_parsed_action [as 别名]
def process_stock(xform, case_db=None):
"""
process the commtrack xml constructs in an incoming submission
"""
case_db = case_db or CaseDbCache()
assert isinstance(case_db, CaseDbCache)
if is_device_report(xform):
return StockProcessingResult(xform)
stock_report_helpers = list(unpack_commtrack(xform))
transaction_helpers = [
transaction_helper
for stock_report_helper in stock_report_helpers
for transaction_helper in stock_report_helper.transactions
]
# omitted: normalize_transactions (used for bulk requisitions?)
if not transaction_helpers:
return StockProcessingResult(xform)
# validate product ids
if any(transaction_helper.product_id in ('', None)
for transaction_helper in transaction_helpers):
raise MissingProductId(
_('Product IDs must be set for all ledger updates!'))
# list of cases that had stock reports in the form
# there is no need to wrap them by case type
case_ids = list(set(transaction_helper.case_id
for transaction_helper in transaction_helpers))
relevant_cases = [case_db.get(case_id) for case_id in case_ids]
user_id = xform.form['meta']['userID']
submit_time = xform['received_on']
# touch every case for proper ota restore logic syncing to be preserved
for case_id, case in zip(case_ids, relevant_cases):
if case is None:
raise IllegalCaseId(
_('Ledger transaction references invalid Case ID "{}"')
.format(case_id))
case_action = CommCareCaseAction.from_parsed_action(
submit_time, user_id, xform, AbstractAction(CASE_ACTION_COMMTRACK)
)
# hack: clear the sync log id so this modification always counts
# since consumption data could change server-side
case_action.sync_log_id = ''
case.actions.append(case_action)
case_db.mark_changed(case)
return StockProcessingResult(
xform=xform,
relevant_cases=relevant_cases,
stock_report_helpers=stock_report_helpers,
)
示例7: get_case_actions
# 需要导入模块: from casexml.apps.case.models import CommCareCaseAction [as 别名]
# 或者: from casexml.apps.case.models.CommCareCaseAction import from_parsed_action [as 别名]
def get_case_actions(self, xformdoc):
"""
Gets case actions from this object. These are the actual objects that get stored
in the CommCareCase model (as opposed to the parser's representation of those)
"""
return [
CommCareCaseAction.from_parsed_action(
self.guess_modified_on(), self.user_id, xformdoc, action
)
for action in self.actions
]
示例8: process_stock
# 需要导入模块: from casexml.apps.case.models import CommCareCaseAction [as 别名]
# 或者: from casexml.apps.case.models.CommCareCaseAction import from_parsed_action [as 别名]
def process_stock(xform, case_db=None):
"""
process the commtrack xml constructs in an incoming submission
"""
case_db = case_db or CaseDbCache()
assert isinstance(case_db, CaseDbCache)
if is_device_report(xform):
return StockProcessingResult(xform)
# these are the raw stock report objects from the xml
stock_reports = list(unpack_commtrack(xform))
# flattened transaction list spanning all stock reports in the form
transactions = [t for r in stock_reports for t in r.transactions]
# omitted: normalize_transactions (used for bulk requisitions?)
if not transactions:
return StockProcessingResult(xform)
# validate product ids
is_empty = lambda product_id: product_id is None or product_id == ''
if any([is_empty(tx.product_id) for tx in transactions]):
raise MissingProductId(
_('Product IDs must be set for all ledger updates!'))
# transactions grouped by case/product id
grouped_tx = map_reduce(lambda tx: [((tx.case_id, tx.product_id),)],
lambda v: sorted(v, key=lambda tx: tx.timestamp),
data=transactions,
include_docs=True)
case_ids = list(set(k[0] for k in grouped_tx))
# list of cases that had stock reports in the form
# there is no need to wrap them by case type
relevant_cases = [case_db.get(case_id) for case_id in case_ids]
user_id = xform.form['meta']['userID']
submit_time = xform['received_on']
# touch every case for proper ota restore logic syncing to be preserved
for case in relevant_cases:
case_action = CommCareCaseAction.from_parsed_action(
submit_time, user_id, xform, AbstractAction(CASE_ACTION_COMMTRACK)
)
# hack: clear the sync log id so this modification always counts
# since consumption data could change server-side
case_action.sync_log_id = ''
case.actions.append(case_action)
case_db.mark_changed(case)
return StockProcessingResult(
xform=xform,
relevant_cases=relevant_cases,
stock_report_helpers=stock_reports,
)