1212 XML_DOCUMENT_CONVERSION_TO_DOCX_ERROR ,
1313 XML_DOCUMENT_CONVERSION_TO_HTML_ERROR ,
1414 XML_DOCUMENT_CONVERSION_TO_PDF_ERROR ,
15+ XML_DOCUMENT_CONVERSION_TO_PMC_ERROR ,
16+ XML_DOCUMENT_CONVERSION_TO_PUBMED_ERROR ,
1517 XML_DOCUMENT_PARSING_ERROR ,
1618 XML_DOCUMENT_UNKNOWN_ERROR ,
1719 XML_DOCUMENT_VALIDATION_ERROR ,
2527 XMLDocument ,
2628 XMLDocumentHTML ,
2729 XMLDocumentPDF ,
30+ XMLDocumentPMC ,
31+ XMLDocumentPubMed ,
2832)
2933
3034User = get_user_model ()
3337def _get_user (request , username = None , user_id = None ):
3438 try :
3539 return User .objects .get (pk = request .user_id )
36- except AttributeError :
40+ except ( AttributeError , User . DoesNotExist ) :
3741 if user_id :
3842 return User .objects .get (pk = user_id )
3943 if username :
@@ -52,6 +56,8 @@ def task_process_xml_document(self, xml_id, user_id=None, username=None):
5256 task_validate_xml_file .delay (xml_id , user_id = user_id , username = username )
5357 task_generate_pdf_file .delay (xml_id , user_id = user_id , username = username )
5458 task_generate_html_file .delay (xml_id , user_id = user_id , username = username )
59+ task_generate_pubmed_file .delay (xml_id , user_id = user_id , username = username )
60+ task_generate_pmc_file .delay (xml_id , user_id = user_id , username = username )
5561
5662 return True
5763
@@ -235,6 +241,128 @@ def task_generate_html_file(self, xml_id, user_id=None, username=None):
235241 return False
236242
237243
244+ @celery_app .task (bind = True , timelimit = - 1 )
245+ def task_generate_pubmed_file (self , xml_id , user_id = None , username = None ):
246+ try :
247+ xml_document = XMLDocument .objects .get (id = xml_id )
248+ except XMLDocument .DoesNotExist :
249+ logging .error (f"XML file with ID { xml_id } does not exist." )
250+ return False
251+
252+ user = _get_user (self .request , username = username , user_id = user_id )
253+
254+ logging .info (
255+ f"Starting PubMed XML generation for XML file { xml_document .xml_file .name } ."
256+ )
257+ try :
258+ path_pubmed = utils .generate_pubmed_for_xml_document (
259+ xml_document .xml_file .path ,
260+ output_root_dir = os .path .join (settings .MEDIA_ROOT , "xml_manager" , "pubmed" ),
261+ params = {},
262+ )
263+
264+ pubmed_instance = XMLDocumentPubMed (xml_document = xml_document )
265+ pubmed_instance .pubmed_file .name = os .path .relpath (
266+ path_pubmed , settings .MEDIA_ROOT
267+ )
268+ pubmed_instance .save ()
269+
270+ except exceptions .XML_File_Parsing_Error as e :
271+ logging .error (f"Error during XML parsing: { e } " )
272+ XMLDocumentEvent .create (
273+ xml_document = xml_document ,
274+ error_type = XML_DOCUMENT_PARSING_ERROR ,
275+ data = {},
276+ message = str (e ),
277+ save = True ,
278+ )
279+ return False
280+
281+ except exceptions .XML_File_PubMed_Generation_Error as e :
282+ logging .error (f"Error during PubMed XML generation: { e } " )
283+ XMLDocumentEvent .create (
284+ xml_document = xml_document ,
285+ error_type = XML_DOCUMENT_CONVERSION_TO_PUBMED_ERROR ,
286+ data = {},
287+ message = str (e ),
288+ save = True ,
289+ )
290+ return False
291+
292+ except Exception as e :
293+ logging .error (f"Unexpected error during PubMed XML generation: { e } " )
294+ XMLDocumentEvent .create (
295+ xml_document = xml_document ,
296+ error_type = XML_DOCUMENT_UNKNOWN_ERROR ,
297+ data = {},
298+ message = str (e ),
299+ save = True ,
300+ )
301+ return False
302+
303+ return True
304+
305+
306+ @celery_app .task (bind = True , timelimit = - 1 )
307+ def task_generate_pmc_file (self , xml_id , user_id = None , username = None ):
308+ try :
309+ xml_document = XMLDocument .objects .get (id = xml_id )
310+ except XMLDocument .DoesNotExist :
311+ logging .error (f"XML file with ID { xml_id } does not exist." )
312+ return False
313+
314+ user = _get_user (self .request , username = username , user_id = user_id )
315+
316+ logging .info (
317+ f"Starting PMC XML generation for XML file { xml_document .xml_file .name } ."
318+ )
319+ try :
320+ path_pmc = utils .generate_pmc_for_xml_document (
321+ xml_document .xml_file .path ,
322+ output_root_dir = os .path .join (settings .MEDIA_ROOT , "xml_manager" , "pmc" ),
323+ params = {},
324+ )
325+
326+ pmc_instance = XMLDocumentPMC (xml_document = xml_document )
327+ pmc_instance .pmc_file .name = os .path .relpath (path_pmc , settings .MEDIA_ROOT )
328+ pmc_instance .save ()
329+
330+ except exceptions .XML_File_Parsing_Error as e :
331+ logging .error (f"Error during XML parsing: { e } " )
332+ XMLDocumentEvent .create (
333+ xml_document = xml_document ,
334+ error_type = XML_DOCUMENT_PARSING_ERROR ,
335+ data = {},
336+ message = str (e ),
337+ save = True ,
338+ )
339+ return False
340+
341+ except exceptions .XML_File_PMC_Generation_Error as e :
342+ logging .error (f"Error during PMC XML generation: { e } " )
343+ XMLDocumentEvent .create (
344+ xml_document = xml_document ,
345+ error_type = XML_DOCUMENT_CONVERSION_TO_PMC_ERROR ,
346+ data = {},
347+ message = str (e ),
348+ save = True ,
349+ )
350+ return False
351+
352+ except Exception as e :
353+ logging .error (f"Unexpected error during PMC XML generation: { e } " )
354+ XMLDocumentEvent .create (
355+ xml_document = xml_document ,
356+ error_type = XML_DOCUMENT_UNKNOWN_ERROR ,
357+ data = {},
358+ message = str (e ),
359+ save = True ,
360+ )
361+ return False
362+
363+ return True
364+
365+
238366@celery_app .task (bind = True )
239367def task_validate_sps_package (self , validation_pk ):
240368 try :
0 commit comments