def eval_dots_block(xform_json, callback=None): """ Evaluate the dots block in the xform submission and put it in the computed_ block for the xform. """ case_id = get_case_id(xform_json) do_continue = False #first, set the pact_data to json if the dots update stuff is there. try: if xform_json.get(PACT_DOTS_DATA_PROPERTY, {}).has_key('processed'): #already processed, skipping return xform_json[PACT_DOTS_DATA_PROPERTY] = {} if not isinstance(xform_json['form']['case'].get('update', None), dict): #no case update property, skipping pass else: #update is a dict if xform_json['form']['case']['update'].has_key('dots'): dots_json = xform_json['form']['case']['update']['dots'] if isinstance(dots_json, str) or isinstance(dots_json, unicode): json_data = simplejson.loads(dots_json) xform_json[PACT_DOTS_DATA_PROPERTY]['dots'] = json_data do_continue=True else: #no dots data in doc pass xform_json[PACT_DOTS_DATA_PROPERTY]['processed']=datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ') XFormInstance.get_db().save_doc(xform_json) except Exception, ex: #if this gets triggered, that's ok because web entry don't got them tb = traceback.format_exc() notify_exception(None, message="PACT error evaluating DOTS block docid %s, %s\n\tTraceback: %s" % (xform_json['_id'], ex, tb))
def process_dots_submission(sender, xform, **kwargs): from pact.tasks import recalculate_dots_data, eval_dots_block try: if xform.xmlns != "http://dev.commcarehq.org/pact/dots_form": return #grrr, if we were on celery 3.0, we could do this! # chain = eval_dots_block.s(xform.to_json()) | recalculate_dots_data.s(case_id) # chain() eval_dots_block(xform.to_json()) case_id = get_case_id(xform) # get user from xform user_id = xform.metadata.userID cc_user = CouchUser.get_by_user_id(user_id) last_sync_token = getattr(xform, 'last_sync_token', None) recalculate_dots_data(case_id, cc_user, sync_token=last_sync_token) except Exception as ex: tb = traceback.format_exc() notify_exception( None, message= "Error processing PACT DOT submission due to an unknown error: %s\n\tTraceback: %s" % (ex, tb))
def eval_dots_block(xform_json, callback=None): """ Evaluate the dots block in the xform submission and put it in the computed_ block for the xform. """ case_id = get_case_id(xform_json) do_continue = False #first, set the pact_data to json if the dots update stuff is there. try: if xform_json.get(PACT_DOTS_DATA_PROPERTY, {}).has_key('processed'): #already processed, skipping return xform_json[PACT_DOTS_DATA_PROPERTY] = {} if not isinstance(xform_json['form']['case'].get('update', None), dict): #no case update property, skipping pass else: #update is a dict if xform_json['form']['case']['update'].has_key('dots'): dots_json = xform_json['form']['case']['update']['dots'] if isinstance(dots_json, str) or isinstance(dots_json, unicode): json_data = json.loads(dots_json) xform_json[PACT_DOTS_DATA_PROPERTY]['dots'] = json_data do_continue=True else: #no dots data in doc pass xform_json[PACT_DOTS_DATA_PROPERTY]['processed']=datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ') XFormInstance.get_db().save_doc(xform_json) except Exception, ex: #if this gets triggered, that's ok because web entry don't got them tb = traceback.format_exc() notify_exception(None, message="PACT error evaluating DOTS block docid %s, %s\n\tTraceback: %s" % (xform_json['_id'], ex, tb))
def process_dots_submission(sender, xform, **kwargs): from pact.tasks import recalculate_dots_data, eval_dots_block try: if xform.xmlns != "http://dev.commcarehq.org/pact/dots_form": return #grrr, if we were on celery 3.0, we could do this! # chain = eval_dots_block.s(xform.to_json()) | recalculate_dots_data.s(case_id) # chain() eval_dots_block(xform.to_json()) case_id = get_case_id(xform) # get user from xform user_id = xform.metadata.userID cc_user = CouchUser.get_by_user_id(user_id) last_sync_token = getattr(xform, 'last_sync_token', None) recalculate_dots_data(case_id, cc_user, sync_token=last_sync_token) except Exception as ex: tb = traceback.format_exc() notify_exception(None, message="Error processing PACT DOT submission due to an unknown error: %s\n\tTraceback: %s" % (ex, tb))