From dcc3c7eda869a2dc0d1393f29a7985772748dab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Tue, 26 May 2015 18:08:57 +0200 Subject: [PATCH 1/2] WIP: Start unoconv as a listener. --- bin/generic.py | 11 +++++++---- kittengroomer/helpers.py | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/bin/generic.py b/bin/generic.py index ce0933a..da6fe42 100644 --- a/bin/generic.py +++ b/bin/generic.py @@ -118,9 +118,8 @@ class KittenGroomer(KittenGroomerBase): 'inode': self.inode, } - # Dirty trick to run libreoffice at least once and avoid unoconv to crash... - lo = LIBREOFFICE + ' --headless' - self._run_process(lo, 5) + unoconv_listener = UNOCONV + ' --listener' + self._run_process(unoconv_listener, background=True) # ##### Helpers ##### def _init_subtypes_application(self, subtypes_application): @@ -145,7 +144,7 @@ class KittenGroomer(KittenGroomerBase): else: tmp_log.debug(self.cur_file.log_string) - def _run_process(self, command_line, timeout=0): + def _run_process(self, command_line, timeout=0, background=False): '''Run subprocess, wait until it finishes''' if timeout != 0: deadline = time.time() + timeout @@ -153,6 +152,10 @@ class KittenGroomer(KittenGroomerBase): deadline = None args = shlex.split(command_line) p = subprocess.Popen(args) + if background: + # FIXME: This timer is here to make sure the unoconv listener is properly started. + time.sleep(10) + return True while True: code = p.poll() if code is not None: diff --git a/kittengroomer/helpers.py b/kittengroomer/helpers.py index d87794f..893be37 100644 --- a/kittengroomer/helpers.py +++ b/kittengroomer/helpers.py @@ -89,10 +89,10 @@ class KittenGroomerBase(object): self.src_root_dir = root_src self.dst_root_dir = root_dst self.log_root_dir = os.path.join(self.dst_root_dir, 'logs') + self._safe_mkdir(self.log_root_dir) self.log_processing = os.path.join(self.log_root_dir, 'processing.log') - # quickSetup(file=self.log_processing) - quickSetup() + quickSetup(file=self.log_processing) self.log_name = log.name('files') self.cur_file = None From 420e87cbba87f4a6eaa0d6abdff9ff731859461a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Tue, 26 May 2015 18:43:48 +0200 Subject: [PATCH 2/2] Do not process a file that has been marked as dangerous. --- bin/generic.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bin/generic.py b/bin/generic.py index da6fe42..4aaea57 100644 --- a/bin/generic.py +++ b/bin/generic.py @@ -334,7 +334,10 @@ class KittenGroomer(KittenGroomerBase): self.log_name.info('Processing {} ({}/{})', srcpath.replace(src_dir + '/', ''), self.cur_file.main_type, self.cur_file.sub_type) - self.mime_processing_options.get(self.cur_file.main_type, self.unknown)() + if self.cur_file.log_details.get('dangerous') is None: + self.mime_processing_options.get(self.cur_file.main_type, self.unknown)() + else: + self._safe_copy() if not self.cur_file.is_recursive: self._print_log()