Hi Floris,

On Sun, Aug 05, 2012 at 17:14 +0200, Floris Bruynooghe wrote:
> Hello Holger,
> 
> On 4 August 2012 14:13, holger krekel <hol...@merlinux.eu> wrote:
> > On Sat, Jun 30, 2012 at 12:26 +0100, Floris Bruynooghe wrote:
> >> As an aside however, one of my usecases for merged request/item
> >> objects was so I could put setup in a session-wide scoped funcarg but
> >> also automatically request this funcarg based on a mark::
> >>
> >>    def pytest_runtest_setup(item):
> >>        if 'needsdb' in item.keywords:  # or a more explicit API
> >>           item.getresource('db')
> >>
> >> I understand that this will still be possible via::
> >>
> >>    def pytest_runtest_setup(item):
> >>        if 'needsdb' in item.keywords:
> >>            item.session.getresource('db')
> >>
> >> Or something similar to that.
> >
> > With the current @setup API this is not possible but it should be.  I'd like
> > to understand the exact use case a bit.  What do you do with the "db"
> > object here?  I guess you cause side effects because you would otherwise
> > just request a funcarg in the tests, right?
> 
> Actually there is no side effect here.  This was born out of Andreas
> Pelme's desire to be able to mark tests with a marker while trying to
> re-use the session-wide caching that funcargs gave us.  But the new
> @setup already covers this case completely since it can handle the
> caching just fine.  But I still think this is a nice use-case, since
> it would allow being able to use the same setup and request it with
> either a funcargs or a mark.

But if you request it with a mark, we are talking about side effects, aren't we?
(I'd define "side-effects" as something that doesn't inject a test 
dependency directly to a test).

> > If so, then i can imagine the following solution:
> >
> >     @pytest.setup(enabled=myhelper)
> >     def perform_side_effect_with(db):
> >         ...
> >
> > The "enabled" helper would be called during collection so that
> > pytest gets to know which tests will actually execute the setup
> > function and its (potentially parametrized) required resources.
> > It could look like this::
> >
> >     def myhelper(collectioncontext):
> >         return "needsdb" in collectioncontext.markers:
> >
> > and collectioncontext also carries module/class/function (depending on
> > the scope specified with the setup).  If the helper returns True then
> > the setup is considered and thus receives the DB object.  Do you
> > think this would solve your use case? (Collectioncontext would not
> > have a addfinalizer() and might in the future offer more collection-specific
> > things).
> 
> This does sound like a very neat solution indeed, I think this would
> be a good addition.

OK, i'll see to implement it but i guess it wouldn't be too bad to do
it after a pytest-2.3 release, unless there is a concrete need already.

Btw,  if you can find some time sometime to look at a) test
pytest-django with pytest-trunk  b) port pytest-django to pytest-trunk
features, that would be super-helpful.  My personal target for a release 
is end august but not before some more real-world beta usages have happened.

best,
holger


> 
> Regards,
> Floris
> 
_______________________________________________
py-dev mailing list
py-dev@codespeak.net
http://codespeak.net/mailman/listinfo/py-dev

Reply via email to