diff options
author | Rafael H. Schloming <rhs@apache.org> | 2008-05-06 18:31:11 +0000 |
---|---|---|
committer | Rafael H. Schloming <rhs@apache.org> | 2008-05-06 18:31:11 +0000 |
commit | f5813621fff3ca6720e7851bf9f914258f16b60c (patch) | |
tree | d56abae1444d4bf860f06cc6dff545e73f52afee | |
parent | 8d8a9162f7ba5a99a7c8b8b57aae860ab3028078 (diff) | |
download | qpid-python-f5813621fff3ca6720e7851bf9f914258f16b60c.tar.gz |
QPID-1033: made loading of the spec file not fail if the results cannot be cached, e.g. due to an unwritable directory
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@653875 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | python/qpid/spec010.py | 14 | ||||
-rw-r--r-- | python/tests/spec010.py | 12 |
2 files changed, 23 insertions, 3 deletions
diff --git a/python/qpid/spec010.py b/python/qpid/spec010.py index 03f60edc4e..1668729876 100644 --- a/python/qpid/spec010.py +++ b/python/qpid/spec010.py @@ -621,6 +621,7 @@ class Loader: def load(xml): fname = xml + ".pcl" + if os.path.exists(fname) and mtime(fname) > mtime(__file__): file = open(fname, "r") s = cPickle.load(file) @@ -630,7 +631,14 @@ def load(xml): s = doc["amqp"].dispatch(Loader()) s.register() s.resolve() - file = open(fname, "w") - cPickle.dump(s, file) - file.close() + + try: + file = open(fname, "w") + except IOError: + file = None + + if file: + cPickle.dump(s, file) + file.close() + return s diff --git a/python/tests/spec010.py b/python/tests/spec010.py index ff29bd8cea..b08ad5e925 100644 --- a/python/tests/spec010.py +++ b/python/tests/spec010.py @@ -17,6 +17,7 @@ # under the License. # +import os, tempfile, shutil, stat from unittest import TestCase from qpid.spec010 import load from qpid.codec010 import Codec, StringCodec @@ -70,3 +71,14 @@ class SpecTest(TestCase): xid.encode(sc, st) assert sc.encoded == '\x00\x00\x00\x10\x06\x04\x07\x00\x00\x00\x00\x00\x03gid\x03bid' assert xid.decode(sc).__dict__ == st.__dict__ + + def testLoadReadOnly(self): + spec = "amqp.0-10-qpid-errata.xml" + f = testrunner.get_spec_file(spec) + dest = tempfile.mkdtemp() + shutil.copy(f, dest) + shutil.copy(os.path.join(os.path.dirname(f), "amqp.0-10.dtd"), dest) + os.chmod(dest, stat.S_IRUSR | stat.S_IXUSR) + fname = os.path.join(dest, spec) + load(fname) + assert not os.path.exists("%s.pcl" % fname) |