doctest + sqlobject (TDD)
Peter Otten
__peter__ at web.de
Sat Dec 22 13:05:54 EST 2007
petr.jakes.tpc wrote:
> Hi,
>
> inspired by the article written by Tarek Ziade in the February 07
> issue of the "Linux +" magazine I am experimenting with the doctest
> module.
>
> I have two files, "displeje_pokus.py" and "displeje_pokus.txt" (you
> can see the simplified contents of the files bellow).
>
> When I run "python displeje_pokus.py" I am getting an error (see
> below) which I am not able to eliminate.
>
> thanks for your reply
>
> Petr Jakes
>
> ======================
> displeje_pokus.py
> ======================
> from sqlobject import *
> class TextyDispleje(SQLObject):
> pass
>
> if __name__ == "__main__":
> import doctest
> doctest.testfile("displeje_pokus.txt", verbose=True)
>
> ======================
> displeje_pokus.txt
> ======================
>>>> import displeje_pokus
>
>
>
> Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
> (Intel)] on VIT, Standard
>>>> Trying:
> import displeje_pokus
> Expecting nothing
> **********************************************************************
> File "Z:\automat\displeje_pokus.txt", line 13, in displeje_pokus.txt
> Failed example:
> import displeje_pokus
> Exception raised:
> Traceback (most recent call last):
> File "C:\Python25\lib\doctest.py", line 1212, in __run
> compileflags, 1) in test.globs
> File "<doctest displeje_pokus.txt[0]>", line 1, in <module>
> import displeje_pokus
> File "Z:\automat\displeje_pokus.py", line 41, in <module>
> class TextyDispleje(sqlobject.SQLObject):
> File "c:\python25\lib\site-packages\SQLObject-0.9.2-py2.5.egg
> \sqlobject\declarative.py", line 121, in __new__
> cls.__classinit__(cls, new_attrs)
> File "c:\python25\lib\site-packages\SQLObject-0.9.2-py2.5.egg
> \sqlobject\main.py", line 803, in __classinit__
> classregistry.registry(cls.sqlmeta.registry).addClass(cls)
> File "c:\python25\lib\site-packages\SQLObject-0.9.2-py2.5.egg
> \sqlobject\classregistry.py", line 91, in addClass
> '__file__', '(unknown)')))
> ValueError: class TextyDispleje is already in the registry (other
> class is <class '__main__.TextyDispleje'>, from the module __main__ in
> Z:\automat\displeje_pokus.py; attempted new class is <class
> 'displeje_pokus.TextyDispleje'>, from the module displeje_pokus in Z:
> \automat\displeje_pokus.py)
> **********************************************************************
> 1 items had failures:
> 1 of 1 in displeje_pokus.txt
> 1 tests in 1 items.
> 0 passed and 1 failed.
> ***Test Failed*** 1 failures.
It seems that sqlobject does not allow for two SQLObject subclasses with
the same name:
>>> from sqlobject import SQLObject
>>> class A(SQLObject): pass
...
>>> try:
... class A(SQLObject): pass
... except:
... print "Oops!"
...
Oops!
In your scenario these are __main__.TextyDispleje and
displeje_pokus.TextyDispleye. While you could either alter the textfile to
>>> import __main__ as displeje_pokus
or the module along the lines of
# not recommended!
from displeje_pokus import TextyDispleje
if __name__ == "__main__":
# doctest
else:
class TextyDispleje(SQLObject):
pass
the clean way to fix the problem is to use a separate script to invoke the
doctest.
Peter
More information about the Python-list
mailing list