示例#1
0
def _get_new_form_json(xml, xform_id):
    form_json = convert_xform_to_json(xml)
    with force_phone_timezones_should_be_processed():
        adjust_datetimes(form_json)
    # this is actually in-place because of how jsonobject works
    scrub_meta(XFormInstance.wrap({'form': form_json, '_id': xform_id}))
    return form_json
示例#2
0
 def _migrate_form_and_associated_models(self,
                                         couch_form,
                                         form_is_processed=True):
     """
     Copies `couch_form` into a new sql form
     """
     if form_is_processed:
         form_data = couch_form.form
         with force_phone_timezones_should_be_processed():
             adjust_datetimes(form_data)
         xmlns = form_data.get("@xmlns", "")
         user_id = extract_meta_user_id(form_data)
     else:
         xmlns = couch_form.xmlns
         user_id = couch_form.user_id
     sql_form = XFormInstanceSQL(
         form_id=couch_form.form_id,
         domain=self.domain,
         xmlns=xmlns,
         user_id=user_id,
     )
     _copy_form_properties(sql_form, couch_form)
     _migrate_form_attachments(sql_form, couch_form)
     _migrate_form_operations(sql_form, couch_form)
     if couch_form.doc_type != 'SubmissionErrorLog':
         self._save_diffs(couch_form, sql_form)
     case_stock_result = self._get_case_stock_result(
         sql_form, couch_form) if form_is_processed else None
     _save_migrated_models(sql_form, case_stock_result)
示例#3
0
def _get_new_form_json(xml, xform_id):
    form_json = convert_xform_to_json(xml)
    with force_phone_timezones_should_be_processed():
        adjust_datetimes(form_json)
    # this is actually in-place because of how jsonobject works
    scrub_meta(XFormInstance.wrap({'form': form_json, '_id': xform_id}))
    return form_json
 def _migrate_form_and_associated_models(self,
                                         couch_form,
                                         form_is_processed=True):
     """
     Copies `couch_form` into a new sql form
     """
     sql_form = None
     try:
         if form_is_processed:
             form_data = couch_form.form
             with force_phone_timezones_should_be_processed():
                 adjust_datetimes(form_data)
             xmlns = form_data.get("@xmlns", "")
             user_id = extract_meta_user_id(form_data)
         else:
             xmlns = couch_form.xmlns
             user_id = couch_form.user_id
         if xmlns == SYSTEM_ACTION_XMLNS:
             for form_id, case_ids in do_system_action(couch_form):
                 self.case_diff_queue.update(case_ids, form_id)
         sql_form = XFormInstanceSQL(
             form_id=couch_form.form_id,
             domain=self.domain,
             xmlns=xmlns,
             user_id=user_id,
         )
         _copy_form_properties(sql_form, couch_form)
         _migrate_form_attachments(sql_form, couch_form)
         _migrate_form_operations(sql_form, couch_form)
         case_stock_result = (self._get_case_stock_result(
             sql_form, couch_form) if form_is_processed else None)
         _save_migrated_models(sql_form, case_stock_result)
     except IntegrityError as err:
         exc_info = sys.exc_info()
         try:
             sql_form = FormAccessorSQL.get_form(couch_form.form_id)
         except XFormNotFound:
             proc = "" if form_is_processed else " unprocessed"
             log.error("Error migrating%s form %s",
                       proc,
                       couch_form.form_id,
                       exc_info=exc_info)
         if self.stop_on_error:
             raise err from None
     except Exception as err:
         proc = "" if form_is_processed else " unprocessed"
         log.exception("Error migrating%s form %s", proc,
                       couch_form.form_id)
         try:
             sql_form = FormAccessorSQL.get_form(couch_form.form_id)
         except XFormNotFound:
             pass
         if self.stop_on_error:
             raise err from None
     finally:
         if couch_form.doc_type != 'SubmissionErrorLog':
             self._save_diffs(couch_form, sql_form)
示例#5
0
    def form_data(self):
        from couchforms import XMLSyntaxError
        from .utils import convert_xform_to_json, adjust_datetimes
        from corehq.form_processor.utils.metadata import scrub_form_meta
        xml = self.get_xml()
        try:
            form_json = convert_xform_to_json(xml)
        except XMLSyntaxError:
            return {}
        # we can assume all sql domains are new timezone domains
        with force_phone_timezones_should_be_processed():
            adjust_datetimes(form_json)

        scrub_form_meta(self.form_id, form_json)
        return form_json
示例#6
0
    def form_data(self):
        from couchforms import XMLSyntaxError
        from .utils import convert_xform_to_json, adjust_datetimes
        from corehq.form_processor.utils.metadata import scrub_form_meta
        xml = self.get_xml()
        try:
            form_json = convert_xform_to_json(xml)
        except XMLSyntaxError:
            return {}
        # we can assume all sql domains are new timezone domains
        with force_phone_timezones_should_be_processed():
            adjust_datetimes(form_json)

        scrub_form_meta(self.form_id, form_json)
        return form_json
def _migrate_form(domain, couch_form):
    """
    This copies the couch form into a new sql form but does not save it.

    See form_processor.parsers.form._create_new_xform
    and SubmissionPost._set_submission_properties for what this should do.
    """
    interface = FormProcessorInterface(domain)

    form_data = couch_form.form
    with force_phone_timezones_should_be_processed():
        adjust_datetimes(form_data)
    sql_form = interface.new_xform(form_data)
    sql_form.form_id = couch_form.form_id   # some legacy forms don't have ID's so are assigned random ones
    if sql_form.xmlns is None:
        sql_form.xmlns = ''
    return _copy_form_properties(domain, sql_form, couch_form)
示例#8
0
def _migrate_form(domain, couch_form):
    """
    This copies the couch form into a new sql form but does not save it.

    See form_processor.parsers.form._create_new_xform
    and SubmissionPost._set_submission_properties for what this should do.
    """
    interface = FormProcessorInterface(domain)

    form_data = couch_form.form
    with force_phone_timezones_should_be_processed():
        adjust_datetimes(form_data)
    sql_form = interface.new_xform(form_data)
    sql_form.form_id = couch_form.form_id   # some legacy forms don't have ID's so are assigned random ones
    if sql_form.xmlns is None:
        sql_form.xmlns = ''
    return _copy_form_properties(domain, sql_form, couch_form)