On Tue, Jan 30, 2018 at 22:22 -0800, Floris Bruynooghe wrote:
> holger krekel <hol...@merlinux.eu> writes:
> 
> > On Mon, Jan 29, 2018 at 19:08 -0800, Floris Bruynooghe wrote:
> >> Bruno Oliveira <nicodde...@gmail.com> writes:
> >> > A PR[1] has been submitted which adds `parameterize` as an alias to
> >> > `parametrize`. Florian Bruhin and I are not very keen to the idea given
> >> > that there is an explicit warning for it already and having different 
> >> > names
> >> > to the same thing reduces consistency across test suites.
> >> 
> >> So I've recently finished a (toy) plugin which I've been intending to
> >> release as pytest-parawtf.  It's currently in the legal machine of my
> >> employer for me to hopefully be able to release unrestricted.  You can
> >> probably guess what it does from the name, but it basically allows a few
> >> misspellings in all locations.  I actually considered allowing anything
> >> matching the ``param*`` wildcard but thought while fun it would probably
> >> stop people from using it.
> >> 
> >> However the serious note in that plugin is that I think it makes sense
> >> to use ``params``.  My reasoning is that it's easy to spell and already
> >> used for fixtures: ``@pytest.fixture(params=[0, 1])``.  So why not
> >> everywhere else:  ``@pytest.mark.params('a', [0, 1])``,
> >> ``metafunc.params(...)``.  So to be honest I think we should migrate to
> >> that and still disallow the other variants.  It would mean I don't get
> >> to release my fun plugin but whatever.
> >
> > i initially meant to write my skepticism wrt to going the
> > "alternative spellings" route but FWIW i do like "params" as it also matches
> > accessing a parameter via "request.param" inside fixture functions. For
> > ``metafunc.X`` i rather expect X to be a verb, however. /me fiddles with
> > the parameters of what he supposes is a time-machine ... 
> >
> > That being said i don't like the idea of making tons of existing code
> > throw warnings, let alone having "pytest.mark.parametrize" erroring out
> > in future pytest versions. I guess i am aware of too many existing code
> > bases (and written and printed tutorials and books) which would
> > suffer. Independently from the question at hand I recommend to be
> > careful with the notion of "people can just rename their code".
> 
> For metafunc having a verb sort of makes sense.  But also the
> consistency argument is strong.  You could try to go the .apply_params()
> or something similar route I guess but not sure I'd prefer this over the
> bare .params().

I like metafunc.apply_params(). 

> Also, I don't think there is any reason to start issuing warnings for
> something like this.  We can and should support parametrize for eternity
> without ever issuing warnings or anything like that.  Only a note in the
> documentation to suggest one may prefer to use the params variant in new
> code if one doesn't feel strongly themselves.  Alternatively we could
> leave it as a plugin and refer to that in the docs.  If it proves
> popular (not sure how you can know that these days, but anyway) then it
> could still be merged into the core at some point.

For past renamings we simply changed the docs to use the preferred version
and maybe added a note about the old spelling.  For example, before 
``metafunc.parametrize`` was introduced ~6y ago pytest docs advertised 
``metafunc.addcall`` which still works today. It was finally deprecated
in pytest-3.3 and its removal will probably still break existing code. 
However, here keeping backward-compat compatibility complicates the
intricate parametrization/fixture interaction implementation. Therefore
I guess it's warranted to remove it eventually because it relaxes refactoring
constraints.  By comparison, renaming parametrize() to apply_params() is
a trivial thing to support in a backward compatible way (``parametrize =
apply_params``).

IMHO the new spelling should be part of core proper and could even come 
with a 3.5 (or 3.6 ...) because it doesn't break anything. 

holger

> On that last thing there is one caveat, hinted at by Brian.  The plugin
> does not play nice.  I don't have the code with me as I'm traveling but
> IIRC it uses at least one underscored method/attribute and even
> everything else it does is outright horrible and can't be reasonably
> considered part of the public pytest API.
> 
> Cheers,
> Floris
_______________________________________________
pytest-dev mailing list
pytest-dev@python.org
https://mail.python.org/mailman/listinfo/pytest-dev

Reply via email to