5 ms·
Show HN: Forbidden Fruit – Patch built-in Python objects
- herge 14y agoMan, having this as a context manager (maybe with the help of contextlib) would be great, because context managers are great.
- clarete 14y agoThat's the idea. Everything to make testing easier! :)
- hcarvalhoalves 14y agoWhat's the use case?
- clarete 14y agoI have two main use cases in my mind right now. 1) Making it easier to write tools for testing python code, like sure[0] and freezegun[1] 2) Prototyping new features for python without touching the C code. [0] http://github.com/gabrielfalcao/sure http://github.com/gabrielfalcao/sure -- where forbiddenfruit started) [1] http://github.com/spulec/freezegun http://github.com/spulec/freezegun
- philipbjorge 14y agoIt's a dirty hack - therefore, fun.
- prezjordan 14y agoProbably for the same reason why reopening Ruby classes is used so much. "hello, world".capitalize looks nicer than capitalize("hello, world"), and it's more convenient for method chaining.
- pekk 14y agoIf you are doing this for testing, it's already a feature of pytest: http://pytest.org/latest/monkeypatch.html http://pytest.org/latest/monkeypatch.html
- clarete 14y agoI might be wrong, but I don't think that it's actually possible to mock built-in objects (written in C, not in python) using pytest. A very quick test would be trying to do something like this: >>> monkeypatch(str, "blah", "bleh") >>> assert str.blah == "bleh" I tried it here with no success though.
- jacobolus 14y agoWhat are the license implications of using GPLv3 code as part of a test suite?
- clarete 14y agoI don't think that there's any implications for that, but I'll probably relicense this library as MIT or at least LGPL pretty soon. I just used my default licence template, which defaults to GPL.
- marcosmlopes 14y agoWow! Great news. It would be nice have this project under MIT license.
- oellegaard 14y agoWhile it is a cool project, I hope I never have to work on a project that use this. I hate when people overwrite built-ins, but that might just be me.
- tekacs 14y agoParticularly striking is how little (pure Python) code was required to do this (courtesy ctypes)! A wonderful hack! :) Edit: see https://github.com/clarete/forbiddenfruit/blob/master/forbiddenfruit/__init__.py https://github.com/clarete/forbiddenfruit/blob/master/forbid...
- shabble 14y agoc.f. http://perldoc.perl.org/functions/bless.html http://perldoc.perl.org/functions/bless.html
- daGrevis 14y agoLook good! I would like to see more examples of how to use it in tests tho!