Isolation-provider-specific methods in _convert()

All isolation providers will some similar steps when convert() is
called. For this reason, all the common parts are captured in convert()
and then each isolation provider implements its own specific conversion
process in _convert() (which is called from the convert() method).
This commit is contained in:
deeplow 2023-01-02 12:56:23 +00:00
parent a4f27afdc6
commit 7ed1fd6b59
No known key found for this signature in database
GPG key ID: 577982871529A52A
2 changed files with 18 additions and 11 deletions

View file

@ -40,12 +40,27 @@ class AbstractIsolationProvider(ABC):
def install(self) -> bool: def install(self) -> bool:
pass pass
@abstractmethod
def convert( def convert(
self, self,
document: Document, document: Document,
ocr_lang: Optional[str], ocr_lang: Optional[str],
stdout_callback: Optional[Callable] = None, stdout_callback: Optional[Callable] = None,
) -> None:
document.mark_as_converting()
success = self._convert(document, ocr_lang, stdout_callback)
if success:
document.mark_as_safe()
if document.archive_after_conversion:
document.archive()
else:
document.mark_as_failed()
@abstractmethod
def _convert(
self,
document: Document,
ocr_lang: Optional[str],
stdout_callback: Optional[Callable] = None,
) -> bool: ) -> bool:
pass pass
@ -196,10 +211,6 @@ class Container(AbstractIsolationProvider):
if p.stdout is not None: if p.stdout is not None:
for line in p.stdout: for line in p.stdout:
(error, text, percentage) = self.parse_progress(document, line) (error, text, percentage) = self.parse_progress(document, line)
if error:
document.mark_as_failed()
if percentage == 100.0:
document.mark_as_safe()
if stdout_callback: if stdout_callback:
stdout_callback(error, text, percentage) stdout_callback(error, text, percentage)
@ -243,14 +254,13 @@ class Container(AbstractIsolationProvider):
args = [container_runtime] + args args = [container_runtime] + args
return self.exec(document, args, stdout_callback) return self.exec(document, args, stdout_callback)
def convert( def _convert(
self, self,
document: Document, document: Document,
ocr_lang: Optional[str], ocr_lang: Optional[str],
stdout_callback: Optional[Callable] = None, stdout_callback: Optional[Callable] = None,
) -> bool: ) -> bool:
success = False success = False
document.mark_as_converting()
if ocr_lang: if ocr_lang:
ocr = "1" ocr = "1"
@ -313,9 +323,6 @@ class Container(AbstractIsolationProvider):
) )
shutil.move(container_output_filename, document.output_filename) shutil.move(container_output_filename, document.output_filename)
if document.archive_after_conversion:
document.archive()
# We did it # We did it
success = True success = True

View file

@ -61,7 +61,7 @@ class DangerzoneCore(object):
self, ocr_lang: Optional[str], stdout_callback: Optional[Callable] = None self, ocr_lang: Optional[str], stdout_callback: Optional[Callable] = None
) -> None: ) -> None:
def convert_doc(document: Document) -> None: def convert_doc(document: Document) -> None:
success = self.isolation_provider.convert( self.isolation_provider.convert(
document, document,
ocr_lang, ocr_lang,
stdout_callback, stdout_callback,