本文整理汇总了Python中casexml.apps.case.models.CommCareCaseAction类的典型用法代码示例。如果您正苦于以下问题:Python CommCareCaseAction类的具体用法?Python CommCareCaseAction怎么用?Python CommCareCaseAction使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CommCareCaseAction类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: testActionEquality
def testActionEquality(self):
case_id = _post_util(create=True)
_post_util(case_id=case_id, p1='p1', p2='p2')
case = CommCareCase.get(case_id)
self.assertEqual(2, len(case.actions)) # create + update
self.assertTrue(case.actions[0] != case.actions[1])
self.assertTrue(case.actions[1] == case.actions[1])
orig = case.actions[1]
copy = CommCareCaseAction.wrap(orig._doc.copy())
self.assertTrue(copy != case.actions[0])
self.assertTrue(copy == orig)
copy.server_date = copy.server_date + timedelta(seconds=1)
self.assertTrue(copy != orig)
copy.server_date = orig.server_date
self.assertTrue(copy == orig)
copy.updated_unknown_properties['p1'] = 'not-p1'
self.assertTrue(copy != orig)
copy.updated_unknown_properties['p1'] = 'p1'
self.assertTrue(copy == orig)
copy.updated_unknown_properties['pnew'] = ''
self.assertTrue(copy != orig)
示例2: allocated_to
def allocated_to(self):
if self.status == "Closed":
close_action = [CommCareCaseAction.wrap(a) for a in self.case['actions'] if a['action_type'] ==
const.CASE_ACTION_CLOSE][0]
CATI_FOLLOW_UP_FORMS = (
"http://openrosa.org/formdesigner/A5B08D8F-139D-46C6-9FDF-B1AD176EAE1F",
)
if close_action.xform.xmlns in CATI_FOLLOW_UP_FORMS:
return 'CATI'
else:
return 'Field'
else:
follow_up_type = self.case.get('follow_up_type', '')
house_number = self.case.get('phone_house_number', '')
husband_number = self.case.get('phone_husband_number', '')
mother_number = self.case.get('phone_mother_number', '')
asha_number = self.case.get('phone_asha_number', '')
if follow_up_type != 'field_follow_up' and (house_number or
husband_number or mother_number or asha_number):
return 'CATI'
else:
return 'Field'
示例3: get_stock_actions
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
示例4: test_couch_action_equality
def test_couch_action_equality(self):
case_id = _post_util(create=True)
_post_util(case_id=case_id, p1='p1', p2='p2')
case = CommCareCase.get(case_id)
self.assertEqual(3, len(case.actions)) # (1) create & (2) update date opened (3) update properties
self.assertTrue(case.actions[0] != case.actions[1])
self.assertTrue(case.actions[1] == case.actions[1])
orig = case.actions[2]
copy = CommCareCaseAction.wrap(deepcopy(orig._doc))
self.assertTrue(copy != case.actions[0])
self.assertTrue(copy == orig)
copy.server_date = copy.server_date + timedelta(seconds=1)
self.assertTrue(copy != orig)
copy.server_date = orig.server_date
self.assertTrue(copy == orig)
copy.updated_unknown_properties['p1'] = 'not-p1'
self.assertTrue(copy != orig)
copy.updated_unknown_properties['p1'] = 'p1'
self.assertTrue(copy == orig)
copy.updated_unknown_properties['pnew'] = ''
self.assertTrue(copy != orig)
示例5: get_stock_actions
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)
示例6: process_stock
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
示例7: get_couch_action
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),
)
示例8: process_stock
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)
示例9: process_stock
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,
)
示例10: creating_user
def creating_user(self):
creator_id = None
for action in self.case['actions']:
if action['action_type'] == 'create':
action_doc = CommCareCaseAction.wrap(action)
creator_id = action_doc.get_user_id()
break
if not creator_id:
return None
return self._user_meta(creator_id)
示例11: get_case_actions
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
]
示例12: process_stock
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,
)
示例13: creating_user
def creating_user(self):
try:
creator_id = self.case['opened_by']
except KeyError:
creator_id = None
if 'actions' in self.case:
for action in self.case['actions']:
if action['action_type'] == 'create':
action_doc = CommCareCaseAction.wrap(action)
creator_id = action_doc.get_user_id()
break
if not creator_id:
return None
return self._user_meta(creator_id)
示例14: prepare_case_json
def prepare_case_json(planning_db):
case_ids = planning_db.get_all_case_ids(valid_only=False)
for case_json in iter_docs(CommCareCase.get_db(), case_ids):
case = CommCareCase.wrap(case_json)
if case.doc_type != "CommCareCase":
assert case.doc_type == "CommCareCase-Deleted"
continue
# to normalize for any new fields added
case_json = deepcopy(case.to_json())
actions = [CommCareCaseAction.wrap(action) for action in planning_db.get_actions_by_case(case.case_id)]
rebuild_case_from_actions(case, actions)
planning_db.update_case_json(case.case_id, case.to_json())
planning_db.add_diffs("case", case.case_id, json_diff(case_json, case.to_json()))
return planning_db
示例15: test_couch_action_not_equals
def test_couch_action_not_equals(self):
orig = CommCareCaseAction()
copy = CommCareCaseAction.wrap(deepcopy(orig._doc))
self.assertTrue(orig == copy)
self.assertFalse(orig != copy)