99
1010from config import celery_app
1111from 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)
1919from tracker .models import XMLDocumentEvent
20+ from xml_manager import exceptions , utils
2021from xml_manager .forms import SPSPackageValidationForm
2122from xml_manager .models import (
2223 SPSPackageValidation ,
2526 XMLDocumentHTML ,
2627 XMLDocumentPDF ,
2728)
28- from xml_manager import exceptions
29- from xml_manager import utils
30-
3129
3230User = 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
0 commit comments