Skip to content

Commit 72ef8ed

Browse files
author
ldx
committed
Refactor IPTCModule._save().
1 parent 5b7d122 commit 72ef8ed

1 file changed

Lines changed: 18 additions & 21 deletions

File tree

iptc/ip4tc.py

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,7 @@ def final_check(self):
293293
def _final_check(self):
294294
raise NotImplementedError()
295295

296-
def save(self, name):
297-
return self._save(name, self.rule.get_ip())
298-
299-
def _save(self, name, ip):
296+
def _get_saved_buf(self, ip):
300297
if not self._module or not self._module.save:
301298
return None
302299
# redirect C stdout to a pipe and read back the output of m->save
@@ -311,15 +308,26 @@ def _save(self, name, ip):
311308
buf = os.read(pipes[0], 1024)
312309
os.close(pipes[0])
313310
os.close(pipes[1])
314-
if name:
315-
return self._get_value(buf, name)
316-
else:
317-
return self._get_all_values(buf)
311+
return buf
318312
finally:
319313
sys.stdout.close()
320314
os.dup2(old_stdout.fileno(), fd)
321315
sys.stdout = os.fdopen(fd, 'w')
322316

317+
def save(self, name):
318+
return self._save(name, self.rule.get_ip())
319+
320+
def _save(self, name, ip):
321+
buf = self._get_saved_buf(ip)
322+
if buf is None:
323+
return None
324+
if not self._module or not self._module.save:
325+
return None
326+
if name:
327+
return self._get_value(buf, name)
328+
else:
329+
return self._get_all_values(buf)
330+
323331
def _get_all_values(self, buf):
324332
table = {} # variable -> (value, inverted)
325333
res = re.findall(IPTCModule.pattern, buf)
@@ -343,22 +351,11 @@ def _get_value(self, buf, name):
343351
def get_all_parameters(self):
344352
params = {}
345353
ip = self.rule.get_ip()
346-
if self._module and self._module.save:
347-
# redirect C stdout to a pipe and read back the output of m->save
348-
pipes = os.pipe()
349-
saved_out = os.dup(1)
350-
os.dup2(pipes[1], 1)
351-
self._xt.save(self._module, ip, self._ptr)
352-
buf = os.read(pipes[0], 1024)
353-
os.dup2(saved_out, 1)
354-
os.close(pipes[0])
355-
os.close(pipes[1])
356-
os.close(saved_out)
357-
354+
buf = self._get_saved_buf(ip)
355+
if buf is not None:
358356
res = re.findall(IPTCModule.pattern, buf)
359357
for x in res:
360358
params[x[1]] = "%s%s" % ((x[0] or x[2]) and "!" or "", x[3])
361-
362359
return params
363360

364361
def _update_parameters(self):

0 commit comments

Comments
 (0)