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