[reportlab-users] problem with flowables.Image
Robin Becker
reportlab-users@reportlab.com
Fri, 28 May 2004 15:06:08 +0100
This is a multi-part message in MIME format.
--------------080004010601000002040005
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Jerome Alet wrote:
> Hi there,
>
> please could someone tell me what are the accepted "filename"
> values types for flowables.Image()'s __init__ method ?
>
> we tried with urls (drawImage used to support urls) and it doesn't
> work
>
> we tried with PIL.Image objects and it fails
>
> we tried with StringIO objects and it fails
>
> are the only supported types :
>
> - real filename
>
> and
>
> - real file object
>
> ?
>
> or do we do something completely wrong ?
>
> FYI PIL 1.1.4 and RL 1.19
>
> thanks in advance
>
> Jerome Alet
>
Jerome I bust this a while back and it just hasn't been fixed. We are now
attempting to use a java friendly interface so images have to be opened by an
ImageReader. Unfortunately that means we can no longer obviously accept PIL
objects as inputs to the ImageReader and hence Image (as we might be working in
jython).
However, I have just fixed the reportlab.lib.utils.open_for_read function and it
now appears to accept
1) anything with a read method
2) URL's eg 'file://C:/tmp/myimage.gif'
'http://www.reportlab.com/rsrc/encryption.gif'
3) ordinary filenames
'C:/tmp/myimage.gif'
I will do some testing and put this in CVS later today. Of course fixing the
read function doesn't necessarily imply that Image will immediately work again,
but I'll try and fix that later.
--
Robin Becker
--------------080004010601000002040005
Content-Type: text/plain;
name="test_lib_utils.py"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="test_lib_utils.py"
"""Tests for reportlab.lib.utils
"""
import os
import reportlab
from reportlab.test import unittest
from reportlab.test.utils import makeSuiteForClasses
from reportlab.lib import colors
from reportlab.lib.utils import recursiveImport, recursiveGetAttr, recursiveSetAttr, rl_isfile, \
isCompactDistro
class ImporterTestCase(unittest.TestCase):
"Test import utilities"
def setUp(self):
from time import time
from reportlab.lib.utils import get_rl_tempdir
self._tempdir = get_rl_tempdir('reportlab_test','tmp_%d' % time())
_testmodulename = os.path.join(self._tempdir,'test_module_%d.py' % time())
f = open(_testmodulename,'w')
f.write('__all__=[]\n')
f.close()
self._testmodulename = os.path.splitext(os.path.basename(_testmodulename))[0]
def tearDown(self):
from shutil import rmtree
rmtree(self._tempdir,1)
def test1(self):
"try stuff known to be in the path"
m1 = recursiveImport('reportlab.pdfgen.canvas')
import reportlab.pdfgen.canvas
assert m1 == reportlab.pdfgen.canvas
def test2(self):
"try under a well known directory NOT on the path"
D = os.path.join(os.path.dirname(reportlab.__file__), 'tools','pythonpoint')
fn = os.path.join(D,'stdparser.py')
if rl_isfile(fn) or rl_isfile(fn+'c') or rl_isfile(fn+'o'):
m1 = recursiveImport('stdparser', baseDir=D)
def test3(self):
"ensure CWD is on the path"
try:
cwd = os.getcwd()
os.chdir(self._tempdir)
m1 = recursiveImport(self._testmodulename)
finally:
os.chdir(cwd)
def test4(self):
"ensure noCWD removes current dir from path"
try:
cwd = os.getcwd()
os.chdir(self._tempdir)
import sys
try:
del sys.modules[self._testmodulename]
except KeyError:
pass
self.assertRaises(ImportError,
recursiveImport,
self._testmodulename,
noCWD=1)
finally:
os.chdir(cwd)
def test5(self):
"recursive attribute setting/getting on modules"
import reportlab.lib.units
inch = recursiveGetAttr(reportlab, 'lib.units.inch')
assert inch == 72
recursiveSetAttr(reportlab, 'lib.units.cubit', 18*inch)
cubit = recursiveGetAttr(reportlab, 'lib.units.cubit')
assert cubit == 18*inch
def test6(self):
"recursive attribute setting/getting on drawings"
from reportlab.graphics.charts.barcharts import sampleH1
drawing = sampleH1()
recursiveSetAttr(drawing, 'barchart.valueAxis.valueMax', 72)
theMax = recursiveGetAttr(drawing, 'barchart.valueAxis.valueMax')
assert theMax == 72
def test7(self):
"test open and read of a simple relative file"
from reportlab.lib.utils import open_and_read
b = open_and_read('../docs/images/Edit_Prefs.gif')
def test8(self):
"test open and read of a relative file: URL"
from reportlab.lib.utils import open_and_read
b = open_and_read('file:../docs/images/Edit_Prefs.gif')
def test9(self):
"test open and read of an http: URL"
from reportlab.lib.utils import open_and_read
b = open_and_read('http://www.reportlab.com/rsrc/encryption.gif')
def test10(self):
"test open and read of a simple relative file"
from reportlab.lib.utils import open_and_read, getStringIO
b = getStringIO(open_and_read('../docs/images/Edit_Prefs.gif'))
b = open_and_read(b)
def makeSuite():
return makeSuiteForClasses(ImporterTestCase)
if __name__ == "__main__": #noruntests
unittest.TextTestRunner().run(makeSuite())
--------------080004010601000002040005--