[mod_python] matplotlib and sys.stdout[.write()] <> req[.write()]

Adrian Immler mod_python-maillist at uebergeek.de
Thu Jun 2 08:47:36 EDT 2005


hello !

i have following

def test(req):
  import matplotlib
  matplotlib.use('Agg')
  from matplotlib.backends.backend_agg import FigureCanvasAgg as
FigureCanvas
  from matplotlib.figure import Figure

  fig = Figure()
  canvas = FigureCanvas(fig)
  ax = fig.add_subplot(111)
  ax.plot([1,2,3])
  ax.set_title('hi mom')
  ax.grid(True)
  ax.set_xlabel('time')
  ax.set_ylabel('volts')
  canvas.print_figure(sys.stdout)
#  canvas.print_figure(req)

when i use this function from the console i get png binary output that i
could redirect to a file. when i call this function within mod_python

Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line
299, in HandlerDispatch
    result = object(req)

  File "/usr/lib/python2.4/site-packages/mod_python/publisher.py", line
136, in handler
    result = util.apply_fs_data(object, req.form, req=req)

  File "/usr/lib/python2.4/site-packages/mod_python/util.py", line 361,
in apply_fs_data
    return object(**args)

  File "/www/uebergeek.de/htdocs/music/test.py", line 44, in test
    canvas.print_figure(sys.stdout)

  File
"/usr/lib/python2.4/site-packages/matplotlib/backends/backend_agg.py",
line 383, in print_figure
    basename, ext = os.path.splitext(filename)

  File "/usr/lib/python2.4/posixpath.py", line 92, in splitext
    i = p.rfind('.')

AttributeError: 'builtin_function_or_method' object has no attribute
'rfind'


so i tried to direct it directly to the browser with the line above where
not (sys.stdout) but (req) is, but that produces this error:

Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line
299, in HandlerDispatch
    result = object(req)

  File "/usr/lib/python2.4/site-packages/mod_python/publisher.py", line
136, in handler
    result = util.apply_fs_data(object, req.form, req=req)

  File "/usr/lib/python2.4/site-packages/mod_python/util.py", line 361,
in apply_fs_data
    return object(**args)

  File "/www/uebergeek.de/htdocs/music/test.py", line 45, in test
    canvas.print_figure(req)

  File
"/usr/lib/python2.4/site-packages/matplotlib/backends/backend_agg.py",
line 383, in print_figure
    basename, ext = os.path.splitext(filename)

  File "/usr/lib/python2.4/posixpath.py", line 92, in splitext
    i = p.rfind('.')

AttributeError: 'mp_request' object has no attribute 'rfind'

so it is nearly the same error. now my question is:

how can i create a png file with matplotlib and send it to the client
without saving the file to harddisk and send that one.

thanks in advance !



p.s. yes i know that the content_type('image/png') is missing in the
above example ...



More information about the Mod_python mailing list