예제 #1
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)
예제 #2
0
 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)
예제 #3
0
    def new_xform(cls, form_data):
        form_id = extract_meta_instance_id(form_data) or unicode(uuid.uuid4())

        return XFormInstanceSQL(
            # other properties can be set post-wrap
            form_id=form_id,
            xmlns=form_data.get('@xmlns'),
            received_on=datetime.datetime.utcnow(),
            user_id=extract_meta_user_id(form_data),
        )
예제 #4
0
    def new_xform(cls, form_data):
        form_id = extract_meta_instance_id(form_data) or unicode(uuid.uuid4())

        return XFormInstanceSQL(
            # other properties can be set post-wrap
            form_id=form_id,
            xmlns=form_data.get('@xmlns'),
            received_on=datetime.datetime.utcnow(),
            user_id=extract_meta_user_id(form_data),
        )