From c5d7551e6a6e98bb6da7c7d11360224edfda2f14 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 13 Nov 2008 13:10:13 -0500 Subject: [PATCH] * use python2.4/2.5 compatible import of ElementTree * catch Popen() calls to missing VCS binaries * test.py should only test installed backends --- .../b2a333f7-eda6-42b9-8940-177f61ca7f48/body | 51 +++++++++++++++++++ .../values | 21 ++++++++ .../values | 35 +++++++++++++ .../e1ff6c81-37d8-43ee-9dcf-17a89e07556a/body | 3 ++ .../values | 21 ++++++++ .../values | 35 +++++++++++++ .../2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/body | 7 +++ .../values | 21 ++++++++ .../b3fabbe0-f05d-42a1-9037-e59e628a83e2/body | 3 ++ .../values | 21 ++++++++ .../values | 35 +++++++++++++ Bugs-Everywhere-Web/beweb/formatting.py | 5 +- libbe/arch.py | 6 ++- libbe/rcs.py | 16 +++--- libbe/restconvert.py | 5 +- test.py | 10 ++++ 16 files changed, 286 insertions(+), 9 deletions(-) create mode 100644 .be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/body create mode 100644 .be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/values create mode 100644 .be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/values create mode 100644 .be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/body create mode 100644 .be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/values create mode 100644 .be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/values create mode 100644 .be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/body create mode 100644 .be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/values create mode 100644 .be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2/body create mode 100644 .be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2/values create mode 100644 .be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/values diff --git a/.be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/body b/.be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/body new file mode 100644 index 0000000..396c06a --- /dev/null +++ b/.be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/body @@ -0,0 +1,51 @@ +$ python test.py +********************************************************************** +File "/home/wking/src/fun/be/libbe/plugin.py", line 31, in libbe.plugin.iter_plugins +Failed example: + "plugin" in [n for n,m in iter_plugins("libbe")] +Exception raised: + Traceback (most recent call last): + File "/usr/lib/python2.5/doctest.py", line 1228, in __run + compileflags, 1) in test.globs + File "", line 1, in + "plugin" in [n for n,m in iter_plugins("libbe")] + File "/home/wking/src/fun/be/libbe/plugin.py", line 38, in iter_plugins + yield modfile[:-3], my_import(prefix+"."+modfile[:-3]) + File "/home/wking/src/fun/be/libbe/plugin.py", line 21, in my_import + module = __import__(mod_name) + File "/home/wking/src/fun/be/libbe/restconvert.py", line 27, in + from elementtree import ElementTree + ImportError: No module named elementtree +********************************************************************** +1 items had failures: + 1 of 2 in libbe.plugin.iter_plugins +***Test Failed*** 1 failures. +Traceback (most recent call last): + File "test.py", line 32, in + for module in plugin.iter_plugins("libbe"): + File "/home/wking/src/fun/be/libbe/plugin.py", line 38, in iter_plugins + yield modfile[:-3], my_import(prefix+"."+modfile[:-3]) + File "/home/wking/src/fun/be/libbe/plugin.py", line 21, in my_import + module = __import__(mod_name) + File "/home/wking/src/fun/be/libbe/restconvert.py", line 27, in + from elementtree import ElementTree +ImportError: No module named elementtree + + +Looking into ElementTree, I found their webpage: +http://effbot.org/zone/element-index.htm + + It’s common practice to import ElementTree under an alias, both to + minimize typing, and to make it easier to switch between different + implementations: + + $ python + >>> import elementtree.ElementTree as ET + >>> import cElementTree as ET + >>> import lxml.etree as ET + >>> import xml.etree.ElementTree as ET # Python 2.5 + +Using new import style, fall back to old if that fails. +Affected files: + libbe/restconvert.py + Bugs-Everywhere-Web/beweb/formatting.py diff --git a/.be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/values b/.be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/values new file mode 100644 index 0000000..c499bfe --- /dev/null +++ b/.be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/values @@ -0,0 +1,21 @@ + + + +Content-type=text/plain + + + + + + +Date=Thu, 13 Nov 2008 17:27:17 +0000 + + + + + + +From=wking + + + diff --git a/.be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/values b/.be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/values new file mode 100644 index 0000000..b528771 --- /dev/null +++ b/.be/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/values @@ -0,0 +1,35 @@ + + + +creator=wking + + + + + + +severity=minor + + + + + + +status=closed + + + + + + +summary=elementtree module moved in Python 2.5 + + + + + + +time=Thu, 13 Nov 2008 16:45:24 +0000 + + + diff --git a/.be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/body b/.be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/body new file mode 100644 index 0000000..20b3da3 --- /dev/null +++ b/.be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/body @@ -0,0 +1,3 @@ +Calls to Popen() while running `test.py` raised OSError because of +missing binaries (tla was not installed). Added catches to produce +more useful error messages in the backtrace. diff --git a/.be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/values b/.be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/values new file mode 100644 index 0000000..b5100d0 --- /dev/null +++ b/.be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/values @@ -0,0 +1,21 @@ + + + +Content-type=text/plain + + + + + + +Date=Thu, 13 Nov 2008 15:58:18 +0000 + + + + + + +From=wking + + + diff --git a/.be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/values b/.be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/values new file mode 100644 index 0000000..5a7b54e --- /dev/null +++ b/.be/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/values @@ -0,0 +1,35 @@ + + + +creator=wking + + + + + + +severity=minor + + + + + + +status=closed + + + + + + +summary=Popen OSErrors not caught + + + + + + +time=Thu, 13 Nov 2008 15:54:45 +0000 + + + diff --git a/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/body b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/body new file mode 100644 index 0000000..d589f18 --- /dev/null +++ b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/body @@ -0,0 +1,7 @@ +When running `python test.py` I recieved lots of errors due to 'tla' +(the GNU Arch revision control system binary) not being installed. +I had expected test.py to only test the backends for installed VCSs. + +I've added a note saying that `python test.py` tests *all* the +backends, but someone who understands the usage better can probably +write a nicer version. diff --git a/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/values b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/values new file mode 100644 index 0000000..9f2b558 --- /dev/null +++ b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/2ca25dd6-e9d1-4581-bd29-50f2eaa32fe4/values @@ -0,0 +1,21 @@ + + + +Content-type=text/plain + + + + + + +Date=Thu, 13 Nov 2008 16:35:24 +0000 + + + + + + +From=wking + + + diff --git a/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2/body b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2/body new file mode 100644 index 0000000..77d75fb --- /dev/null +++ b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2/body @@ -0,0 +1,3 @@ +Ideally the tests would fail gracefully with some simple message like +"tla version control system not found", and we could skip the message +in the test.py docstring. diff --git a/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2/values b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2/values new file mode 100644 index 0000000..c404aa9 --- /dev/null +++ b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/comments/b3fabbe0-f05d-42a1-9037-e59e628a83e2/values @@ -0,0 +1,21 @@ + + + +Content-type=text/plain + + + + + + +Date=Thu, 13 Nov 2008 16:38:36 +0000 + + + + + + +From=wking + + + diff --git a/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/values b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/values new file mode 100644 index 0000000..5ecca35 --- /dev/null +++ b/.be/bugs/c4ea43d5-4964-49ea-a1eb-2bab2bde8e2e/values @@ -0,0 +1,35 @@ + + + +creator=wking + + + + + + +severity=minor + + + + + + +status=open + + + + + + +summary=Usage of be/test.py is unclear + + + + + + +time=Thu, 13 Nov 2008 16:31:41 +0000 + + + diff --git a/Bugs-Everywhere-Web/beweb/formatting.py b/Bugs-Everywhere-Web/beweb/formatting.py index b68d328..1278414 100644 --- a/Bugs-Everywhere-Web/beweb/formatting.py +++ b/Bugs-Everywhere-Web/beweb/formatting.py @@ -1,6 +1,9 @@ from StringIO import StringIO -from elementtree.ElementTree import XML +try : + from xml.etree.ElementTree import XML # Python 2.5 (and greater?) +except ImportError : + from elementtree.ElementTree import XML from libbe.restconvert import rest_xml def to_unix(text): diff --git a/libbe/arch.py b/libbe/arch.py index 624aea3..038325a 100644 --- a/libbe/arch.py +++ b/libbe/arch.py @@ -24,7 +24,11 @@ if client is None: config.set_val("arch_client", client) def invoke(args): - q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) + try : + q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) + except OSError, e : + strerror = "%s\nwhile executing %s" % (e.args[1], args) + raise Exception("Command failed: %s" % strerror) output = q.stdout.read() error = q.stderr.read() status = q.wait() diff --git a/libbe/rcs.py b/libbe/rcs.py index 77d6c9a..4487fba 100644 --- a/libbe/rcs.py +++ b/libbe/rcs.py @@ -59,12 +59,16 @@ class CommandError(Exception): self.status = status def invoke(args, expect=(0,), cwd=None): - if sys.platform != "win32": - q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=cwd) - else: - # win32 don't have os.execvp() so have to run command in a shell - q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True, - cwd=cwd) + try : + if sys.platform != "win32": + q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=cwd) + else: + # win32 don't have os.execvp() so have to run command in a shell + q = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True, + cwd=cwd) + except OSError, e : + strerror = "%s\nwhile executing %s" % (e.args[1], args) + raise CommandError(strerror, e.args[0]) output, error = q.communicate() status = q.wait() if status not in expect: diff --git a/libbe/restconvert.py b/libbe/restconvert.py index 8ebb6b4..cc7f866 100644 --- a/libbe/restconvert.py +++ b/libbe/restconvert.py @@ -23,7 +23,10 @@ from docutils.core import publish_file from docutils.parsers import rst from docutils.parsers.rst import directives from docutils.parsers.rst.states import Inliner, MarkupMismatch, unescape -from elementtree import ElementTree +try : + from xml.etree import ElementTree # Python 2.5 (and greater?) +except ImportError : + from elementtree import ElementTree def rest_xml(rest): diff --git a/test.py b/test.py index 3d7161b..f998541 100644 --- a/test.py +++ b/test.py @@ -1,3 +1,13 @@ +"""Usage: python test.py [module] + +When called without an optional module name, run the doctests from +*all* modules. This may raise lots of errors if you haven't installed +one of the versioning control systems. + +When called with an optional module name, only run the doctests from +that module. +""" + from libbe import plugin import doctest import sys -- 2.26.2