def _make_submission_w_attachment(self, path, attachment_path): with open(path, encoding='utf-8') as f: data = {'xml_submission_file': f} if attachment_path is not None: if isinstance(attachment_path, list): for c in range(len(attachment_path)): data['media_file_{}'.format(c)] = open( attachment_path[c], 'rb') else: data['media_file'] = open( attachment_path, 'rb') url = '/%s/submission' % self.user.username auth = DigestAuth('bob', 'bob') self.factory = APIRequestFactory() request = self.factory.post(url, data) request.user = authenticate(username='******', password='******') self.response = submission(request, username=self.user.username) if auth and self.response.status_code == 401: request.META.update(auth(request.META, self.response)) self.response = submission(request, username=self.user.username)
def _make_submission(self, path, username=None, add_uuid=False, forced_submission_time=None, auth=None, client=None): # store temporary file with dynamic uuid self.factory = APIRequestFactory() if auth is None: auth = DigestAuth('bob', 'bob') tmp_file = None if add_uuid: tmp_file = NamedTemporaryFile(delete=False) split_xml = None with open(path) as _file: split_xml = re.split(r'(<transport>)', _file.read()) split_xml[1:1] = [ '<formhub><uuid>%s</uuid></formhub>' % self.xform.uuid ] tmp_file.write(''.join(split_xml)) path = tmp_file.name tmp_file.close() with open(path) as f: post_data = {'xml_submission_file': f} if username is None: username = self.user.username url_prefix = '%s/' % username if username else '' url = '/%ssubmission' % url_prefix request = self.factory.post(url, post_data) request.user = authenticate(username=auth.username, password=auth.password) self.response = submission(request, username=username) if auth and self.response.status_code == 401: request.META.update(auth(request.META, self.response)) self.response = submission(request, username=username) if forced_submission_time: instance = Instance.objects.order_by('-pk').all()[0] instance.date_created = forced_submission_time instance.json = instance.get_full_dict() instance.save() instance.parsed_instance.save() # remove temporary file if stored if add_uuid: os.unlink(tmp_file.name)
def _make_submission(self, path, username=None, add_uuid=False, forced_submission_time=None, auth=None, client=None): # store temporary file with dynamic uuid self.factory = APIRequestFactory() if auth is None: auth = DigestAuth('bob', 'bob') tmp_file = None if add_uuid: tmp_file = NamedTemporaryFile(delete=False, mode='w') split_xml = None with open(path, encoding='utf-8') as _file: split_xml = re.split(r'(<transport>)', _file.read()) split_xml[1:1] = [ '<formhub><uuid>%s</uuid></formhub>' % self.xform.uuid ] tmp_file.write(''.join(split_xml)) path = tmp_file.name tmp_file.close() with open(path, encoding='utf-8') as f: post_data = {'xml_submission_file': f} if username is None: username = self.user.username url_prefix = '%s/' % username if username else '' url = '/%ssubmission' % url_prefix request = self.factory.post(url, post_data) request.user = authenticate(username=auth.username, password=auth.password) self.response = submission(request, username=username) if auth and self.response.status_code == 401: request.META.update(auth(request.META, self.response)) self.response = submission(request, username=username) if forced_submission_time: instance = Instance.objects.order_by('-pk').all()[0] instance.date_created = forced_submission_time instance.json = instance.get_full_dict() instance.save() instance.parsed_instance.save() # remove temporary file if stored if add_uuid: os.unlink(tmp_file.name)
def _make_submission(self, path, username=None, add_uuid=False, forced_submission_time=None, client=None, media_file=None, auth=None): # store temporary file with dynamic uuid self.factory = APIRequestFactory() if auth is None: auth = DigestAuth(self.profile_data['username'], self.profile_data['password1']) tmp_file = None if add_uuid: path = self._add_uuid_to_submission_xml(path, self.xform) with open(path) as f: post_data = {'xml_submission_file': f} if media_file is not None: if isinstance(media_file, list): for c in range(len(media_file)): post_data['media_file_{}'.format(c)] = media_file[c] else: post_data['media_file'] = media_file if username is None: username = self.user.username url_prefix = '%s/' % username if username else '' url = '/%ssubmission' % url_prefix request = self.factory.post(url, post_data) request.user = authenticate(username=auth.username, password=auth.password) self.response = submission(request, username=username) if auth and self.response.status_code == 401: request.META.update(auth(request.META, self.response)) self.response = submission(request, username=username) if forced_submission_time: instance = Instance.objects.order_by('-pk').all()[0] instance.date_created = forced_submission_time instance.save() instance.parsed_instance.save() # remove temporary file if stored if add_uuid: os.unlink(tmp_file.name)
def _make_submission_w_attachment(self, path, attachment_path): with open(path) as f: a = open(attachment_path) post_data = {'xml_submission_file': f, 'media_file': a} url = '/%s/submission' % self.user.username auth = DigestAuth('bob', 'bob') self.factory = APIRequestFactory() request = self.factory.post(url, post_data) request.user = authenticate(username='******', password='******') self.response = submission(request, username=self.user.username) if auth and self.response.status_code == 401: request.META.update(auth(request.META, self.response)) self.response = submission(request, username=self.user.username)
def test_encrypted_submissions(self): self._publish_xls_file(os.path.join( self.this_directory, 'fixtures', 'transportation', 'transportation_encrypted.xls' )) xform = XForm.objects.get(id_string='transportation_encrypted') self.assertTrue(xform.encrypted) uuid = "c15252fe-b6f3-4853-8f04-bf89dc73985a" with self.assertRaises(Instance.DoesNotExist): Instance.objects.get(uuid=uuid) message = u"Successful submission." files = {} for filename in ['submission.xml', 'submission.xml.enc']: files[filename] = os.path.join( self.this_directory, 'fixtures', 'transportation', 'instances_encrypted', filename) count = Instance.objects.count() acount = Attachment.objects.count() with open(files['submission.xml.enc']) as ef: with codecs.open(files['submission.xml']) as f: post_data = { 'xml_submission_file': f, 'submission.xml.enc': ef} self.factory = APIRequestFactory() request = self.factory.post(self._submission_url, post_data) request.user = authenticate(username='******', password='******') response = submission(request, username=self.user.username) self.assertContains(response, message, status_code=201) self.assertEqual(Instance.objects.count(), count + 1) self.assertEqual(Attachment.objects.count(), acount + 1) self.assertTrue(Instance.objects.get(uuid=uuid))
def test_submission_with_instance_id_on_root_node(self): self._publish_xml_form() message = "Successful submission." instanceId = '5b2cc313-fc09-437e-8149-fcd32f695d41' self.assertRaises(Instance.DoesNotExist, Instance.objects.get, uuid=instanceId) submission_path = os.path.join(self.this_directory, 'fixtures', 'transportation', 'view', 'submission.xml') count = Instance.objects.count() with codecs.open(submission_path, encoding='utf-8') as f: post_data = {'xml_submission_file': f} self.factory = APIRequestFactory() request = self.factory.post(self._submission_url, post_data) request.user = authenticate(username='******', password='******') response = submission(request, username=self.user.username) self.assertContains(response, message, status_code=201) self.assertContains(response, instanceId, status_code=201) self.assertEqual(Instance.objects.count(), count + 1)
def test_submission_with_instance_id_on_root_node(self): self._publish_xml_form() message = u"Successful submission." instanceId = u'5b2cc313-fc09-437e-8149-fcd32f695d41' self.assertRaises( Instance.DoesNotExist, Instance.objects.get, uuid=instanceId) submission_path = os.path.join( self.this_directory, 'fixtures', 'transportation', 'view', 'submission.xml') count = Instance.objects.count() with codecs.open(submission_path, encoding='utf-8') as f: post_data = {'xml_submission_file': f} self.factory = APIRequestFactory() request = self.factory.post(self._submission_url, post_data) request.user = authenticate(username='******', password='******') response = submission(request, username=self.user.username) self.assertContains(response, message, status_code=201) self.assertContains(response, instanceId, status_code=201) self.assertEqual(Instance.objects.count(), count + 1)