5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
6 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses |
7 """ |
7 """ |
8 __docformat__ = "restructuredtext en" |
8 __docformat__ = "restructuredtext en" |
9 |
9 |
|
10 import os |
10 import sys |
11 import sys |
11 import decimal |
12 import decimal |
12 import datetime |
13 import datetime |
13 import random |
14 import random |
14 from uuid import uuid4 |
15 from uuid import uuid4 |
269 self.htmltag, |
270 self.htmltag, |
270 self.head.getvalue(), |
271 self.head.getvalue(), |
271 self.body.getvalue()) |
272 self.body.getvalue()) |
272 |
273 |
273 |
274 |
274 def can_do_pdf_conversion(__answer=[None]): |
275 def _pdf_conversion_availability(): |
275 """pdf conversion depends on |
|
276 * pysixt (python package) |
|
277 * fop 0.9x |
|
278 """ |
|
279 if __answer[0] is not None: |
|
280 return __answer[0] |
|
281 try: |
276 try: |
282 import pysixt |
277 import pysixt |
283 except ImportError: |
278 except ImportError: |
284 __answer[0] = False |
|
285 return False |
279 return False |
286 from subprocess import Popen, STDOUT |
280 from subprocess import Popen, STDOUT |
287 import os |
281 if not os.path.isfile('/usr/bin/fop'): |
|
282 return False |
288 try: |
283 try: |
289 Popen(['/usr/bin/fop', '-q'], |
284 Popen(['/usr/bin/fop', '-q'], |
290 stdout=open(os.devnull, 'w'), |
285 stdout=open(os.devnull, 'w'), |
291 stderr=STDOUT) |
286 stderr=STDOUT) |
292 except OSError, e: |
287 except OSError, e: |
293 print e |
288 getLogger('cubicweb').info('fop not usable (%s)', e) |
294 __answer[0] = False |
|
295 return False |
289 return False |
296 __answer[0] = True |
|
297 return True |
290 return True |
298 |
291 |
|
292 def can_do_pdf_conversion(__answer_cache=[]): |
|
293 """pdf conversion depends on |
|
294 * pysixt (python package) |
|
295 * fop 0.9x |
|
296 |
|
297 NOTE: actual check is done by _pdf_conversion_availability and |
|
298 result is cached |
|
299 """ |
|
300 if not __answer_cache: # first time, not in cache |
|
301 __answer_cache.append(_pdf_conversion_availability()) |
|
302 return __answer_cache[0] |
299 |
303 |
300 try: |
304 try: |
301 # may not be there if cubicweb-web not installed |
305 # may not be there if cubicweb-web not installed |
302 from simplejson import dumps, JSONEncoder |
306 from simplejson import dumps, JSONEncoder |
303 except ImportError: |
307 except ImportError: |