283 self.htmltag, |
284 self.htmltag, |
284 self.head.getvalue(), |
285 self.head.getvalue(), |
285 self.body.getvalue()) |
286 self.body.getvalue()) |
286 |
287 |
287 |
288 |
288 def can_do_pdf_conversion(__answer=[None]): |
289 def _pdf_conversion_availability(): |
289 """pdf conversion depends on |
|
290 * pysixt (python package) |
|
291 * fop 0.9x |
|
292 """ |
|
293 if __answer[0] is not None: |
|
294 return __answer[0] |
|
295 try: |
290 try: |
296 import pysixt |
291 import pysixt |
297 except ImportError: |
292 except ImportError: |
298 __answer[0] = False |
|
299 return False |
293 return False |
300 from subprocess import Popen, STDOUT |
294 from subprocess import Popen, STDOUT |
301 import os |
295 if not os.path.isfile('/usr/bin/fop'): |
|
296 return False |
302 try: |
297 try: |
303 Popen(['/usr/bin/fop', '-q'], |
298 Popen(['/usr/bin/fop', '-q'], |
304 stdout=open(os.devnull, 'w'), |
299 stdout=open(os.devnull, 'w'), |
305 stderr=STDOUT) |
300 stderr=STDOUT) |
306 except OSError, e: |
301 except OSError, e: |
307 print e |
302 getLogger('cubicweb').info('fop not usable (%s)', e) |
308 __answer[0] = False |
|
309 return False |
303 return False |
310 __answer[0] = True |
|
311 return True |
304 return True |
|
305 |
|
306 def can_do_pdf_conversion(__answer_cache=[]): |
|
307 """pdf conversion depends on |
|
308 * pysixt (python package) |
|
309 * fop 0.9x |
|
310 |
|
311 NOTE: actual check is done by _pdf_conversion_availability and |
|
312 result is cached |
|
313 """ |
|
314 if not __answer_cache: # first time, not in cache |
|
315 __answer_cache.append(_pdf_conversion_availability()) |
|
316 return __answer_cache[0] |
312 |
317 |
313 try: |
318 try: |
314 # may not be there if cubicweb-web not installed |
319 # may not be there if cubicweb-web not installed |
315 from simplejson import dumps, JSONEncoder |
320 from simplejson import dumps, JSONEncoder |
316 except ImportError: |
321 except ImportError: |