Skip to content

Commit 423bc91

Browse files
committed
Adiciona ajustes necessários
1 parent 16c2222 commit 423bc91

5 files changed

Lines changed: 300 additions & 128 deletions

File tree

xml_manager/tasks.py

Lines changed: 68 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@
99

1010
from config import celery_app
1111
from tracker.choices import (
12-
XML_DOCUMENT_PARSING_ERROR,
13-
XML_DOCUMENT_VALIDATION_ERROR,
1412
XML_DOCUMENT_CONVERSION_TO_DOCX_ERROR,
1513
XML_DOCUMENT_CONVERSION_TO_HTML_ERROR,
1614
XML_DOCUMENT_CONVERSION_TO_PDF_ERROR,
15+
XML_DOCUMENT_PARSING_ERROR,
1716
XML_DOCUMENT_UNKNOWN_ERROR,
17+
XML_DOCUMENT_VALIDATION_ERROR,
1818
)
1919
from tracker.models import XMLDocumentEvent
20+
from xml_manager import exceptions, utils
2021
from xml_manager.forms import SPSPackageValidationForm
2122
from xml_manager.models import (
2223
SPSPackageValidation,
@@ -25,9 +26,6 @@
2526
XMLDocumentHTML,
2627
XMLDocumentPDF,
2728
)
28-
from xml_manager import exceptions
29-
from xml_manager import utils
30-
3129

3230
User = get_user_model()
3331

@@ -47,14 +45,14 @@ def task_process_xml_document(self, xml_id, user_id=None, username=None):
4745
try:
4846
xml_document = XMLDocument.objects.get(id=xml_id)
4947
except XMLDocument.DoesNotExist:
50-
logging.error(f'XML document with ID {xml_id} does not exist.')
48+
logging.error(f"XML document with ID {xml_id} does not exist.")
5149
return False
52-
53-
logging.info(f'Processing XML file {xml_document.xml_file.name}.')
50+
51+
logging.info(f"Processing XML file {xml_document.xml_file.name}.")
5452
task_validate_xml_file.delay(xml_id, user_id=user_id, username=username)
5553
task_generate_pdf_file.delay(xml_id, user_id=user_id, username=username)
5654
task_generate_html_file.delay(xml_id, user_id=user_id, username=username)
57-
55+
5856
return True
5957

6058

@@ -63,25 +61,31 @@ def task_validate_xml_file(self, xml_id, user_id=None, username=None):
6361
try:
6462
xml_document = XMLDocument.objects.get(id=xml_id)
6563
except XMLDocument.DoesNotExist:
66-
logging.error(f'XML file with ID {xml_id} does not exist.')
64+
logging.error(f"XML file with ID {xml_id} does not exist.")
6765
return False
68-
66+
6967
user = _get_user(self.request, username=username, user_id=user_id)
70-
71-
logging.info(f'Starting XML validation for XML file {xml_document.xml_file.name}.')
68+
69+
logging.info(f"Starting XML validation for XML file {xml_document.xml_file.name}.")
7270
params = {}
7371

7472
try:
7573
path_csv, path_exceptions = utils.validate_xml_document(
7674
xml_document.xml_file.path,
77-
output_root_dir=os.path.join(settings.MEDIA_ROOT, 'xml_manager', 'validation'),
75+
output_root_dir=os.path.join(
76+
settings.MEDIA_ROOT, "xml_manager", "validation"
77+
),
7878
params=params,
7979
)
80-
xml_document.validation_file.name = os.path.relpath(path_csv, settings.MEDIA_ROOT)
81-
xml_document.exceptions_file.name = os.path.relpath(path_exceptions, settings.MEDIA_ROOT)
80+
xml_document.validation_file.name = os.path.relpath(
81+
path_csv, settings.MEDIA_ROOT
82+
)
83+
xml_document.exceptions_file.name = os.path.relpath(
84+
path_exceptions, settings.MEDIA_ROOT
85+
)
8286
xml_document.save()
8387
except exceptions.XML_File_Validation_Error as e:
84-
logging.error(f'Error during XML validation: {e}')
88+
logging.error(f"Error during XML validation: {e}")
8589
XMLDocumentEvent.create(
8690
xml_document=xml_document,
8791
error_type=XML_DOCUMENT_VALIDATION_ERROR,
@@ -91,7 +95,7 @@ def task_validate_xml_file(self, xml_id, user_id=None, username=None):
9195
)
9296
return False
9397
except Exception as e:
94-
logging.error(f'Unexpected error during XML validation: {e}')
98+
logging.error(f"Unexpected error during XML validation: {e}")
9599
XMLDocumentEvent.create(
96100
xml_document=xml_document,
97101
error_type=XML_DOCUMENT_UNKNOWN_ERROR,
@@ -101,28 +105,34 @@ def task_validate_xml_file(self, xml_id, user_id=None, username=None):
101105
)
102106
return False
103107

104-
logging.info(f'XML validation completed successfully for {xml_document.xml_file.name}.')
108+
logging.info(
109+
f"XML validation completed successfully for {xml_document.xml_file.name}."
110+
)
105111

106112
return True
107113

108114

109115
@celery_app.task(bind=True, timelimit=-1)
110-
def task_generate_pdf_file(self, xml_id, libreoffice_binary='libreoffice', user_id=None, username=None):
116+
def task_generate_pdf_file(
117+
self, xml_id, libreoffice_binary="libreoffice", user_id=None, username=None
118+
):
111119
try:
112120
xml_document = XMLDocument.objects.get(id=xml_id)
113121
except XMLDocument.DoesNotExist:
114-
logging.error(f'XML file with ID {xml_id} does not exist.')
122+
logging.error(f"XML file with ID {xml_id} does not exist.")
115123
return False
116-
124+
117125
user = _get_user(self.request, username=username, user_id=user_id)
118126

119-
params = {'libreoffice_binary': libreoffice_binary,}
127+
params = {
128+
"libreoffice_binary": libreoffice_binary,
129+
}
120130

121-
logging.info(f'Starting PDF generation for XML file {xml_document.xml_file.name}.')
131+
logging.info(f"Starting PDF generation for XML file {xml_document.xml_file.name}.")
122132
try:
123133
path_pdf, path_docx, lang = utils.generate_pdf_for_xml_document(
124134
xml_document.xml_file.path,
125-
output_root_dir=os.path.join(settings.MEDIA_ROOT, 'xml_manager', 'pdf'),
135+
output_root_dir=os.path.join(settings.MEDIA_ROOT, "xml_manager", "pdf"),
126136
params=params,
127137
)
128138

@@ -132,7 +142,7 @@ def task_generate_pdf_file(self, xml_id, libreoffice_binary='libreoffice', user_
132142
pdf_instance.save()
133143

134144
except exceptions.XML_File_Parsing_Error as e:
135-
logging.error(f'Error during XML parsing: {e}')
145+
logging.error(f"Error during XML parsing: {e}")
136146
XMLDocumentEvent.create(
137147
xml_document=xml_document,
138148
error_type=XML_DOCUMENT_PARSING_ERROR,
@@ -142,7 +152,7 @@ def task_generate_pdf_file(self, xml_id, libreoffice_binary='libreoffice', user_
142152
)
143153

144154
except exceptions.XML_File_DOCX_Generation_Error as e:
145-
logging.error(f'Error during XML to DOCX conversion: {e}')
155+
logging.error(f"Error during XML to DOCX conversion: {e}")
146156
XMLDocumentEvent.create(
147157
xml_document=xml_document,
148158
error_type=XML_DOCUMENT_CONVERSION_TO_DOCX_ERROR,
@@ -152,7 +162,7 @@ def task_generate_pdf_file(self, xml_id, libreoffice_binary='libreoffice', user_
152162
)
153163

154164
except exceptions.XML_File_PDF_Generation_Error as e:
155-
logging.error(f'Error during PDF generation: {e}')
165+
logging.error(f"Error during PDF generation: {e}")
156166
XMLDocumentEvent.create(
157167
xml_document=xml_document,
158168
error_type=XML_DOCUMENT_CONVERSION_TO_PDF_ERROR,
@@ -162,7 +172,7 @@ def task_generate_pdf_file(self, xml_id, libreoffice_binary='libreoffice', user_
162172
)
163173

164174
except Exception as e:
165-
logging.error(f'Unexpected error during PDF generation: {e}')
175+
logging.error(f"Unexpected error during PDF generation: {e}")
166176
XMLDocumentEvent.create(
167177
xml_document=xml_document,
168178
error_type=XML_DOCUMENT_UNKNOWN_ERROR,
@@ -176,27 +186,27 @@ def task_generate_pdf_file(self, xml_id, libreoffice_binary='libreoffice', user_
176186

177187

178188
@celery_app.task(bind=True, timelimit=-1)
179-
def task_generate_html_file(self, xml_id, user_id=None, username=None):
189+
def task_generate_html_file(self, xml_id, user_id=None, username=None):
180190
try:
181191
xml_document = XMLDocument.objects.get(id=xml_id)
182192
except XMLDocument.DoesNotExist:
183-
logging.error(f'XML file with ID {xml_id} does not exist.')
193+
logging.error(f"XML file with ID {xml_id} does not exist.")
184194
return False
185-
195+
186196
user = _get_user(self.request, username=username, user_id=user_id)
187-
188-
logging.info(f'Starting HTML generation for XML file {xml_document.xml_file.name}.')
197+
198+
logging.info(f"Starting HTML generation for XML file {xml_document.xml_file.name}.")
189199
try:
190200
path_html, lang = utils.generate_html_for_xml_document(
191201
xml_document.xml_file.path,
192-
output_root_dir=os.path.join(settings.MEDIA_ROOT, 'xml_manager', 'html'),
202+
output_root_dir=os.path.join(settings.MEDIA_ROOT, "xml_manager", "html"),
193203
config=settings.HTML_GENERATION_CONFIG,
194204
)
195205
html_instance = XMLDocumentHTML(xml_document=xml_document, language=lang)
196206
html_instance.html_file.name = os.path.relpath(path_html, settings.MEDIA_ROOT)
197207
html_instance.save()
198208
except exceptions.XML_File_Parsing_Error as e:
199-
logging.error(f'Error during XML parsing: {e}')
209+
logging.error(f"Error during XML parsing: {e}")
200210
XMLDocumentEvent.create(
201211
xml_document=xml_document,
202212
error_type=XML_DOCUMENT_PARSING_ERROR,
@@ -205,7 +215,7 @@ def task_generate_html_file(self, xml_id, user_id=None, username=None):
205215
save=True,
206216
)
207217
except exceptions.XML_File_HTML_Generation_Error as e:
208-
logging.error(f'Error during HTML generation: {e}')
218+
logging.error(f"Error during HTML generation: {e}")
209219
XMLDocumentEvent.create(
210220
xml_document=xml_document,
211221
error_type=XML_DOCUMENT_CONVERSION_TO_HTML_ERROR,
@@ -214,7 +224,7 @@ def task_generate_html_file(self, xml_id, user_id=None, username=None):
214224
save=True,
215225
)
216226
except Exception as e:
217-
logging.error(f'Unexpected error during HTML generation: {e}')
227+
logging.error(f"Unexpected error during HTML generation: {e}")
218228
XMLDocumentEvent.create(
219229
xml_document=xml_document,
220230
error_type=XML_DOCUMENT_UNKNOWN_ERROR,
@@ -238,7 +248,7 @@ def task_validate_sps_package(self, validation_pk):
238248

239249
try:
240250
zip_path = validation.package_document.file.path
241-
rows = utils.validate_zip(zip_path)
251+
rows, exceptions = utils.validate_zip(zip_path)
242252

243253
with tempfile.TemporaryDirectory() as tmpdir:
244254
base_name = os.path.splitext(validation.package_document.title)[0]
@@ -249,9 +259,25 @@ def task_validate_sps_package(self, validation_pk):
249259
validation.validation_document.delete()
250260
validation.validation_document = None
251261

252-
validation.validation_document = SPSPackageValidationForm.save_wagtail_document_from_path(
253-
csv_path,
254-
title=f"{base_name}.validation.csv",
262+
validation.validation_document = (
263+
SPSPackageValidationForm.save_wagtail_document_from_path(
264+
csv_path,
265+
title=f"{base_name}.validation.csv",
266+
)
267+
)
268+
269+
exceptions_path = os.path.join(tmpdir, f"{base_name}.exceptions.json")
270+
utils.write_exceptions_json(exceptions, exceptions_path)
271+
272+
if validation.exceptions_document:
273+
validation.exceptions_document.delete()
274+
validation.exceptions_document = None
275+
276+
validation.exceptions_document = (
277+
SPSPackageValidationForm.save_wagtail_document_from_path(
278+
exceptions_path,
279+
title=f"{base_name}.exceptions.json",
280+
)
255281
)
256282

257283
validation.status = SPSPackageValidationStatus.DONE
Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)