From 01daa73b30bedb56f46353f27a945adf837a2829 Mon Sep 17 00:00:00 2001 From: Michael Olund Date: Thu, 22 Oct 2020 12:56:31 -0700 Subject: [PATCH] Added MD5 hash to the package --- edivorce/apps/core/efilinghub.py | 12 ++--- .../apps/core/templatetags/format_utils.py | 6 +-- edivorce/apps/core/tests/test_efiling_hub.py | 52 +++++++++++++------ edivorce/apps/core/views/main.py | 31 +++++++---- 4 files changed, 63 insertions(+), 38 deletions(-) diff --git a/edivorce/apps/core/efilinghub.py b/edivorce/apps/core/efilinghub.py index e0cc552a..931f372d 100644 --- a/edivorce/apps/core/efilinghub.py +++ b/edivorce/apps/core/efilinghub.py @@ -166,13 +166,7 @@ class EFilingHub: return str(uuid.UUID(guid)) return guid - def _format_package(self, request, files, doc_types, parties, location): - documents = [] - for index, file in enumerate(files): - document = PACKAGE_DOCUMENT_FORMAT.copy() - document['type'] = doc_types[index] - document['name'] = file[1][0] - documents.append(document) + def _format_package(self, request, files, documents, parties, location): package = PACKAGE_FORMAT.copy() package['filingPackage']['court']['location'] = location package['filingPackage']['documents'] = documents @@ -190,7 +184,7 @@ class EFilingHub: # -- EFILING HUB INTERFACE -- - def upload(self, request, files, doc_types=None, parties=None, location=None): + def upload(self, request, files, documents=None, parties=None, location=None): """ Does an initial upload of documents and gets the generated eFiling Hub url. :param parties: @@ -218,7 +212,7 @@ class EFilingHub: headers = { 'Content-Type': 'application/json' } - package_data = self._format_package(request, files, doc_types, parties, location) + package_data = self._format_package(request, files, documents, parties, location) url = f"{self.api_base_url}/submission/{response['submissionId']}/generateUrl" response = self._get_api(request, url, transaction_id, bce_id, headers=headers, data=json.dumps(package_data)) diff --git a/edivorce/apps/core/templatetags/format_utils.py b/edivorce/apps/core/templatetags/format_utils.py index 98790dba..9959c17c 100644 --- a/edivorce/apps/core/templatetags/format_utils.py +++ b/edivorce/apps/core/templatetags/format_utils.py @@ -83,13 +83,13 @@ def checkbox(context, *args, **kwargs): args_pass = all(args) kwargs_list = [] for question, value in kwargs.items(): + dict_with_question = None if question in context['responses']: dict_with_question = context['responses'] elif question in context['derived']: dict_with_question = context['derived'] - else: - raise KeyError(f'{question} not found in responses or derived') - kwargs_list.append(str(value) in str(dict_with_question[question])) + if dict_with_question: + kwargs_list.append(str(value) in str(dict_with_question[question])) kwargs_pass = all(kwargs_list) return mark_safe('' % diff --git a/edivorce/apps/core/tests/test_efiling_hub.py b/edivorce/apps/core/tests/test_efiling_hub.py index e13bb4c9..79e3380b 100644 --- a/edivorce/apps/core/tests/test_efiling_hub.py +++ b/edivorce/apps/core/tests/test_efiling_hub.py @@ -7,7 +7,7 @@ from django.test import TransactionTestCase from django.test.client import RequestFactory from django.core.files.uploadedfile import SimpleUploadedFile -from edivorce.apps.core.efilinghub import EFilingHub, PACKAGE_PARTY_FORMAT +from edivorce.apps.core.efilinghub import EFilingHub, PACKAGE_PARTY_FORMAT, PACKAGE_DOCUMENT_FORMAT SAMPLE_TOKEN_RESPONSE = { "access_token": "klkadlfjadsfkj", @@ -64,48 +64,58 @@ class EFilingHubTests(TransactionTestCase): @mock.patch('requests.post') def test_get_token(self, mock_request_post): - mock_request_post.return_value = self._mock_response(text=json.dumps(SAMPLE_TOKEN_RESPONSE)) + mock_request_post.return_value = self._mock_response( + text=json.dumps(SAMPLE_TOKEN_RESPONSE)) self.assertTrue(self.hub._get_token(self.request)) - self.assertEqual(self.request.session['access_token'], SAMPLE_TOKEN_RESPONSE['access_token']) + self.assertEqual(self.request.session['access_token'], + SAMPLE_TOKEN_RESPONSE['access_token']) @mock.patch('requests.post') def test_get_token_error(self, mock_request_post): - mock_request_post.return_value = self._mock_response(text=json.dumps(SAMPLE_TOKEN_RESPONSE), status=401) + mock_request_post.return_value = self._mock_response( + text=json.dumps(SAMPLE_TOKEN_RESPONSE), status=401) self.assertFalse(self.hub._get_token(self.request)) self.assertFalse("access_token" in self.request.session) @mock.patch('requests.post') def test_renew_token(self, mock_request_post): - mock_request_post.return_value = self._mock_response(text=json.dumps(SAMPLE_TOKEN_RESPONSE)) + mock_request_post.return_value = self._mock_response( + text=json.dumps(SAMPLE_TOKEN_RESPONSE)) self.request.session['refresh_token'] = 'alskdfjadlfads' self.assertTrue(self.hub._refresh_token(self.request)) - self.assertEqual(self.request.session['access_token'], SAMPLE_TOKEN_RESPONSE['access_token']) + self.assertEqual(self.request.session['access_token'], + SAMPLE_TOKEN_RESPONSE['access_token']) @mock.patch('requests.post') def test_renew_token_anon(self, mock_request_post): # if we don't have a refresh token in session, this should fail - mock_request_post.return_value = self._mock_response(text=json.dumps(SAMPLE_TOKEN_RESPONSE)) + mock_request_post.return_value = self._mock_response( + text=json.dumps(SAMPLE_TOKEN_RESPONSE)) self.assertFalse(self.hub._refresh_token(self.request)) self.assertFalse("access_token" in self.request.session) @mock.patch('requests.post') def test_renew_token_error(self, mock_request_post): - mock_request_post.return_value = self._mock_response(text=json.dumps(SAMPLE_TOKEN_RESPONSE), status=401) + mock_request_post.return_value = self._mock_response( + text=json.dumps(SAMPLE_TOKEN_RESPONSE), status=401) self.request.session['refresh_token'] = 'alskdfjadlfads' self.assertTrue(self.hub._refresh_token(self.request)) - self.assertEqual(self.request.session['access_token'], SAMPLE_TOKEN_RESPONSE['access_token']) + self.assertEqual(self.request.session['access_token'], + SAMPLE_TOKEN_RESPONSE['access_token']) @mock.patch('requests.post') def test_get_api_success(self, mock_request_post): - mock_request_post.return_value = self._mock_response(text=json.dumps(INITIAL_DOC_UPLOAD_RESPONSE)) + mock_request_post.return_value = self._mock_response( + text=json.dumps(INITIAL_DOC_UPLOAD_RESPONSE)) self.request.session['access_token'] = 'aslkfjadskfjd' - response = self.hub._get_api(self.request, 'https://somewhere.com', 'alksdjfa', 'kasdkfd', {}) + response = self.hub._get_api( + self.request, 'https://somewhere.com', 'alksdjfa', 'kasdkfd', {}) self.assertTrue(response) self.assertEqual(response.status_code, 200) @@ -124,7 +134,8 @@ class EFilingHubTests(TransactionTestCase): self._mock_response(text=json.dumps(INITIAL_DOC_UPLOAD_RESPONSE)) ] - response = self.hub._get_api(self.request, 'https://somewhere.com', 'alksdjfa', 'kasdkfd', {}) + response = self.hub._get_api( + self.request, 'https://somewhere.com', 'alksdjfa', 'kasdkfd', {}) self.assertTrue(response) self.assertEqual(response.status_code, 200) @@ -133,10 +144,12 @@ class EFilingHubTests(TransactionTestCase): @mock.patch('requests.post') def test_get_api_no_token(self, mock_request_post): - mock_request_post.return_value = self._mock_response(text=json.dumps(INITIAL_DOC_UPLOAD_RESPONSE)) + mock_request_post.return_value = self._mock_response( + text=json.dumps(INITIAL_DOC_UPLOAD_RESPONSE)) with self.assertRaises(Exception): - response = self.hub._get_api(self.request, 'https://somewhere.com', 'alksdjfa', 'kasdkfd', {}) + response = self.hub._get_api( + self.request, 'https://somewhere.com', 'alksdjfa', 'kasdkfd', {}) def test_transaction_id_current(self): self.request.session['transaction_id'] = 'alksdjflaskdjf' @@ -163,18 +176,23 @@ class EFilingHubTests(TransactionTestCase): def test_format_package(self): files = [] + documents = [] for i in range(0, 2): - file = SimpleUploadedFile('form_{}.pdf'.format(i), b'test content') + document = PACKAGE_DOCUMENT_FORMAT.copy() + filename = 'form_{}.pdf'.format(i) + document['name'] = filename + file = SimpleUploadedFile(filename, b'test content') files.append(('files', (file.name, file.read()))) + documents.append(document) parties = [] for i in range(0, 2): party = PACKAGE_PARTY_FORMAT.copy() party['firstName'] = 'Party {}'.format(i) party['lastName'] = 'Test' parties.append(party) - doc_types = ['MC', 'RDP'] + location = '6011' - package = self.hub._format_package(self.request, files, doc_types, parties, location) + package = self.hub._format_package(self.request, files, documents, parties, location) self.assertTrue(package) self.assertEqual(package['filingPackage']['documents'][0]['name'], 'form_0.pdf') diff --git a/edivorce/apps/core/views/main.py b/edivorce/apps/core/views/main.py index f8c100f4..9399751f 100644 --- a/edivorce/apps/core/views/main.py +++ b/edivorce/apps/core/views/main.py @@ -1,4 +1,5 @@ import datetime +import hashlib from django.conf import settings from django.contrib import messages @@ -235,35 +236,47 @@ def _submit_files(request, initial=False): # todo: refactor this!!!! post_files = [] - doc_types = [] + documents = [] (uploaded, generated) = forms_to_file(responses_dict, initial) for form in generated: pdf_response = pdf_form(request, str(form['form_number'])) + document = PACKAGE_DOCUMENT_FORMAT.copy() filename = get_filename(form['doc_type'], 0) + document['name'] = filename + document['type'] = form['doc_type'] + document['md5'] = hashlib.md5(pdf_response.content).hexdigest() post_files.append(('files', (filename, pdf_response.content))) - doc_types.append(form['doc_type']) + documents.append(document) - for document in uploaded: - pdf_response = images_to_pdf(request, document['doc_type'], document['party_code']) + for form in uploaded: + pdf_response = images_to_pdf(request, form['doc_type'], form['party_code']) if pdf_response.status_code == 200: - filename = get_filename(document['doc_type'], document['party_code']) + document = PACKAGE_DOCUMENT_FORMAT.copy() + filename = get_filename(form['doc_type'], 0) + document['name'] = filename + document['type'] = form['doc_type'] + document['md5'] = hashlib.md5(pdf_response.content).hexdigest() post_files.append(('files', (filename, pdf_response.content))) - doc_types.append(document['doc_type']) + documents.append(document) # generate the list of parties to send to eFiling Hub parties = [] party1 = PACKAGE_PARTY_FORMAT.copy() party1['firstName'] = responses_dict.get('given_name_1_you', '').strip() - party1['middleName'] = (responses_dict.get('given_name_2_you', '') + ' ' + responses_dict.get('given_name_3_you', '')).strip() + party1['middleName'] = (responses_dict.get('given_name_2_you', '') + + ' ' + + responses_dict.get('given_name_3_you', '')).strip() party1['lastName'] = responses_dict.get('last_name_you', '').strip() parties.append(party1) party2 = PACKAGE_PARTY_FORMAT.copy() party2['firstName'] = responses_dict.get('given_name_1_spouse', '').strip() - party2['middleName'] = (responses_dict.get('given_name_2_spouse', '') + ' ' + responses_dict.get('given_name_3_spouse', '')).strip() + party2['middleName'] = (responses_dict.get('given_name_2_spouse', '') + + ' ' + + responses_dict.get('given_name_3_spouse', '')).strip() party2['lastName'] = responses_dict.get('last_name_spouse', '').strip() parties.append(party2) @@ -271,7 +284,7 @@ def _submit_files(request, initial=False): location = list_of_registries.get(location_name, '0000') hub = EFilingHub() - redirect_url, msg = hub.upload(request, post_files, doc_types, parties, location) + redirect_url, msg = hub.upload(request, post_files, documents, parties, location) if redirect_url: return redirect(redirect_url)