

Show HN: Forbidden Fruit – Patch built-in Python objects - clarete
http://clarete.github.com/forbiddenfruit/

======
herge
Man, having this as a context manager (maybe with the help of contextlib)
would be great, because context managers are great.

~~~
clarete
That's the idea. Everything to make testing easier! :)

------
jacobolus
What are the license implications of using GPLv3 code as part of a test suite?

~~~
clarete
I 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
Wow! Great news. It would be nice have this project under MIT license.

------
pekk
If you are doing this for testing, it's already a feature of pytest:
<http://pytest.org/latest/monkeypatch.html>

~~~
clarete
I 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.

------
oellegaard
While 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
Particularly 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/forbid...](https://github.com/clarete/forbiddenfruit/blob/master/forbiddenfruit/__init__.py)

------
daGrevis
Look good! I would like to see more examples of how to use it in tests tho!

------
hcarvalhoalves
What's the use case?

~~~
clarete
I 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> \-- where forbiddenfruit started)
[1] <http://github.com/spulec/freezegun>

------
shabble
c.f. <http://perldoc.perl.org/functions/bless.html>

