]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commit
- reorganizing the test modules and fixtures, but keeping the essential method of
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 27 Mar 2011 21:52:30 +0000 (17:52 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 27 Mar 2011 21:52:30 +0000 (17:52 -0400)
commit54563de4bb7be9ce8f3f284808751424a5d7a4b1
treec1c8eb82e32f453345fd2705b547352e8a4268db
parent89952f6b91be8b7ed5c4695fa8e06aef71496bde
- reorganizing the test modules and fixtures, but keeping the essential method of
creating fixture classes the same, i.e. run a method, then inspect __subclasses__() of
a marked base class, seems to have broken that approach permanently.   While the tests run
locally just fine, on the buildbot most of the environments continue to fail in entirely
random places.   One of the key changes of the reorganization is that the big bunch of
classes from _fixtures.py is now created ad-hoc instead of reusing a set of module-bound
classes.  This means there's a lot more class creation/teardown traffic occuring in the
cPython interpreter.   Taking a look at the docs for __subclasses__() confirms that the
list of subclasses is of course a weak-referenced collection.   So in the absense of the
tests working just fine for a couple of years, it would seem obvious that the bug
here is setup_classes()/mappers() is called, we come back, the new classes are now
not referenced at all, we then call __subclasses__() and maybe we get them, maybe we don't.
But it's totally not clear how this behavior just hasn't occurred at all for a couple
of years (except, possibly, for very rare occasions that I cannot reproduce).   So in this changeset we switch
to a method of class tracking that I use in a lot of other places, that of using a metaclass
to positively stick classes in the registry the moment they are created.   Test classes
are already built against a base that is created per-fixture run so we already have the advantage
of a local system.   I send this changeset to the buildbot and beg of it to please allow our
tests to pass once again !
test/lib/fixtures.py