By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,383 Members | 2,070 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,383 IT Pros & Developers. It's quick & easy.

doctest + sqlobject (TDD)

P: n/a
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).addCl ass(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.
Dec 22 '07 #1
Share this Question
Share on Google+
4 Replies


P: n/a
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).addCl ass(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
Dec 22 '07 #2

P: n/a
On Dec 22, 7:05 pm, Peter Otten <__pete...@web.dewrote:
petr.jakes.tpc wrote:
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
Peter,

thanks for your reply. I will try to live with the
>>import __main__ as displeje_pokus
in the text file.

Anyway, using this, it looks like I have to assign all functions/
methods to a local name like:

myFunction=displeje_pokus.myFunction

to avoid to write modul name (displeje_pokus) in front of the each
function/method calling.

Do you think there is a way how to protect the text file contents
against such a "assigning hell"?

Petr
Dec 22 '07 #3

P: n/a
petr.jakes.tpc wrote:
thanks for your reply. I will try to live with the
>>>import __main__ as displeje_pokus

in the text file.
Why?
Anyway, using this, it looks like I have to assign all functions/
methods to a local name like:

myFunction=displeje_pokus.myFunction

to avoid to write modul name (displeje_pokus) in front of the each
function/method calling.

Do you think there is a way how to protect the text file contents
against such a "assigning hell"?
This has nothing to do with your previous problem. Use

from __main__ import myFunction, myOtherFunction, ...

or

from __main__ import *

if you prefer "namespace pollution paradise"*.

Again, it would be better to move the doctest.testfile() call into a
separate script.

Peter

(*) which I'm tempted to write "namespace 'pollution' paradise" or
"namespace pollution 'paradise'", but don't, for fear of "quoting hell".
Dec 22 '07 #4

P: n/a
Thanks, it works.
And thanks for your comments which are worth to think about :)
Petr
This has nothing to do with your previous problem. Use

from __main__ import myFunction, myOtherFunction, ...

or

from __main__ import *

if you prefer "namespace pollution paradise"*.

Again, it would be better to move the doctest.testfile() call into a
separate script.

Peter

(*) which I'm tempted to write "namespace 'pollution' paradise" or
"namespace pollution 'paradise'", but don't, for fear of "quoting hell".
Dec 22 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.