[sqlalchemy] Re: overzealous check breaks doctesting

2008-06-25 Thread Martijn Faassen

jason kirtland wrote:
[snip]
 Could the check somehow be modified to still find true builtins but not 
 those defined in a doctest?
 
 Sure.  Any suggestions for an alternate check?

Heh, no. It's quite difficult to come up with any alternative..

I wonder why doctest.DocFileSuite makes these classes appear as __builtin__.

I just went digging in doctest, but unfortunately this seems to be an 
unavoidable side effect of the behavior of the 'exec' statement, which 
doctest uses.

I've just did some experiments, but whatever I do, any class definition 
I exec ends up with a __module__ set to __builtin__.

Regards,

Martijn




--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: overzealous check breaks doctesting

2008-06-25 Thread Michael Bayer


On Jun 25, 2008, at 2:35 PM, Martijn Faassen wrote:


 jason kirtland wrote:
 [snip]
 Could the check somehow be modified to still find true builtins  
 but not
 those defined in a doctest?

 Sure.  Any suggestions for an alternate check?

 Heh, no. It's quite difficult to come up with any alternative..

 I wonder why doctest.DocFileSuite makes these classes appear as  
 __builtin__.

 I just went digging in doctest, but unfortunately this seems to be an
 unavoidable side effect of the behavior of the 'exec' statement, which
 doctest uses.

 I've just did some experiments, but whatever I do, any class  
 definition
 I exec ends up with a __module__ set to __builtin__.


this is probably naive but something like cls in  
__builtin__.__dict__.values()  ?

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: overzealous check breaks doctesting

2008-06-25 Thread jason kirtland

Martijn Faassen wrote:
 jason kirtland wrote:
 [snip]
 Could the check somehow be modified to still find true builtins but not 
 those defined in a doctest?
 Sure.  Any suggestions for an alternate check?
 
 Heh, no. It's quite difficult to come up with any alternative..
 
 I wonder why doctest.DocFileSuite makes these classes appear as __builtin__.
 
 I just went digging in doctest, but unfortunately this seems to be an 
 unavoidable side effect of the behavior of the 'exec' statement, which 
 doctest uses.
 
 I've just did some experiments, but whatever I do, any class definition 
 I exec ends up with a __module__ set to __builtin__.

I think that comes from __name__ in the exec globals context:

 d = {'__name__': 'foo'}
 exec 'class Quux(object): pass' in d
 d['Quux'].__module__
'foo'

or

 __name__ = 'bar'
 class O(object): pass
...
 O.__module__
'bar'

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: overzealous check breaks doctesting

2008-06-25 Thread Martijn Faassen

jason kirtland wrote:
 Martijn Faassen wrote:
 jason kirtland wrote:
 [snip]
 Could the check somehow be modified to still find true builtins but not 
 those defined in a doctest?
 Sure.  Any suggestions for an alternate check?
 Heh, no. It's quite difficult to come up with any alternative..

 I wonder why doctest.DocFileSuite makes these classes appear as __builtin__.

 I just went digging in doctest, but unfortunately this seems to be an 
 unavoidable side effect of the behavior of the 'exec' statement, which 
 doctest uses.

 I've just did some experiments, but whatever I do, any class definition 
 I exec ends up with a __module__ set to __builtin__.
 
 I think that comes from __name__ in the exec globals context:

Yes, I just found out myself, Fred Drake told me. zope.testing actually 
has some code that does a workaround based on this trick too.

Regards,

Martijn


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: overzealous check breaks doctesting

2008-06-24 Thread jason kirtland

Martijn Faassen wrote:
 Hi there,
 
 I'm writing a doctest in which I include a MappedCollection subclass. In 
 my doctest, I create such a subclass::
 
 class Foo(MappedCollection):
...pass
 
 Unfortunately later on, sqlalchemy.orm.collections.py has a check to 
 determine whether Foo is really a builtin, and if so, it fails to 
 instrument, here::
 
 def _instrument_class(cls):
  ...
  # In the normal call flow, a request for any of the 3 basic collection
  # types is transformed into one of our trivial subclasses
  # (e.g. InstrumentedList).  Catch anything else that sneaks in here...
  if cls.__module__ == '__builtin__':
  raise sa_exc.ArgumentError(
  Can not instrument a built-in type. Use a 
  subclass, even a trivial one.)
 
 Unfortunately, when Foo is 'cls', it will have __module__ set to 
 '__builtin__' even while Foo is not a builtin.
 
 I can work around this issue in the doctest by something something evil 
 like::
 
 Foo.__module__ = 'foo'
 
 Things then seem to work.
 
 Could the check somehow be modified to still find true builtins but not 
 those defined in a doctest?

Sure.  Any suggestions for an alternate check?

 I can also see this as being a doctest 
 problem; perhaps the __module__ should really be set to '__main__' in 
 them, but it might be easier to get it fixed here...

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---