def test_write_blob_bucket(self): form = create_form_for_test(DOMAIN) attachments = FormAccessorSQL.get_attachments(form.form_id) self.assertEqual(1, len(attachments)) self.assertEqual(None, attachments[0].blob_bucket) FormAccessorSQL.write_blob_bucket(attachments[0], 'new-bucket') attachments = FormAccessorSQL.get_attachments(form.form_id) self.assertEqual(1, len(attachments)) self.assertEqual('new-bucket', attachments[0].blob_bucket)
def test_save_new_form(self): unsaved_form = create_form_for_test(DOMAIN, save=False) FormAccessorSQL.save_new_form(unsaved_form) self.assertTrue(unsaved_form.is_saved()) attachments = FormAccessorSQL.get_attachments(unsaved_form.form_id) self.assertEqual(1, len(attachments))
def test_save_form_db_error(self): form = create_form_for_test(DOMAIN) dup_form = create_form_for_test(DOMAIN, save=False) dup_form.form_id = form.form_id try: FormAccessorSQL.save_new_form(dup_form) except Exception: dup_form.form_id = uuid.uuid4().hex FormAccessorSQL.save_new_form(dup_form) else: self.fail("saving dup form didn't raise an exception") attachments = FormAccessorSQL.get_attachments(dup_form.form_id) self.assertEqual(1, len(attachments))
def test_save_form_db_error(self): form = create_form_for_test(DOMAIN) dup_form = create_form_for_test(DOMAIN, save=False) dup_form.form_id = form.form_id try: with transaction.atomic(dup_form.db): # prevent rolled back transaction from rolling back the test's transaction FormAccessorSQL.save_new_form(dup_form) except Exception: dup_form.form_id = uuid.uuid4().hex FormAccessorSQL.save_new_form(dup_form) else: self.fail("saving dup form didn't raise an exception") attachments = FormAccessorSQL.get_attachments(dup_form.form_id) self.assertEqual(1, len(attachments))
def process_doc(self, doc): from corehq.form_processor.backends.sql.dbaccessors import FormAccessorSQL from corehq.blobs import BlobInfo from_db = get_blob_db() for attachment in FormAccessorSQL.get_attachments(doc['_id']): bucket = attachment.blobdb_bucket() blob_id = attachment.blob_id info = BlobInfo(identifier=blob_id, length=attachment.content_length, digest="md5=" + attachment.md5) self.total_blobs += 1 try: content = from_db.get(blob_id, bucket) except NotFound: self.not_found += 1 else: with content: self.db.copy_blob(content, info, bucket) return True
def _get_attachments_from_db(self): from corehq.form_processor.backends.sql.dbaccessors import FormAccessorSQL return FormAccessorSQL.get_attachments(self.form_id)