This project aims to help you reach heaven while writing tests, but it may lead you to hell if used on production code.
It basically allows you to patch built-in objects, declared in C through python. Just like this:
>>> from forbiddenfruit import curse >>> def words_of_wisdom(self): ... return self * "blah " >>> curse(int, "words_of_wisdom", words_of_wisdom) >>> assert (2).words_of_wisdom() == "blah blah "
Boom! That's it, your
int class now has the
words_of_wisdom method. Do
you want to add a
classmethod to a built-in class? No problem, just do this:
>>> from forbiddenfruit import curse >>> def hello(self): ... return "blah" >>> curse(str, "hello", classmethod(hello)) >>> assert str.hello() == "blah"
Reversing a curse
If you want to free your object from a curse, you can use the
function. Just like this:
>>> from forbiddenfruit import curse, reverse >>> curse(str, "test", "blah") >>> assert 'test' in dir(str) >>> # Time to reverse the curse >>> reverse(str, "test") >>> assert 'test' not in dir(str)
Forbidden Fruit runs on all cpython versions I tested so far, which includes the versions 2.5, 2.6, 2.7, 3.2 and 3.3. Since Forbidden Fruit is fundamentally dependent on the C API, this library won't work on other python implementations, such as Jython, PyPy, etc.
I might add support for PyPy in the future, but It's unlikely that I'll do it for Jython. But I could happily accept patches for them.
Copyright (C) 2013 Lincoln Clarete firstname.lastname@example.org
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Kimberly Chandler, from The Noun Project