Articles of monkeypatching

¿Cómo puedo aplicar un parche a un decorador en los modelos de Django durante las pruebas?

Tengo un decorador @memoize en mis modelos, que almacena algunos detalles en el modelo, para evitar múltiples llamadas a la base de datos cuando se las llama muchas veces (especialmente en plantillas). Sin embargo, ya que almaceno los objetos y los remito en pruebas, esto rompe las cosas. Por ejemplo, si hago mygroup.subscribers , agrego […]

Python: simula un parche de un módulo desde donde se importa

Necesito asegurarme de que las pruebas unitarias en ejecución no activen la llamada función de mundo exterior pesada, por ejemplo, esta: # bigbad.py def request(param): return ‘I searched the whole Internet for “{}”‘.format(param) Múltiples módulos usan esta función (bigbad.request) y la importan de manera diferente (en la vida real también se puede importar desde una […]

Función privada del parche de mono python

Tengo un módulo con una función (llámalo a() ) que llama a otra función definida en el mismo módulo (llámalo __b() ). __b() es una función que habla a un sitio web a través de urllib2 y recupera algunos datos. Ahora estoy tratando de probar a() , pero, por supuesto, preferiría que mis pruebas unitarias […]

¿Cómo monkeypatch un método estático?

Si bien es bastante simple crear métodos de instancia de monkeypatch a clases, por ejemplo class A(object): pass def a(self): print “a” Aa = a haciendo esto con el @staticmethod à la de otra clase class B(object): @staticmethod def b(): print “static b” Ab = Bb resultados en Ab() dando un TypeError : el método […]

Cómo ejecutar código arbitrario después de que Django esté “cargado completamente”

Necesito realizar algunas tareas bastante simples después de que mi entorno Django se haya “cargado completamente”. Más específicamente, necesito hacer cosas como Signal.disconnect() algunas señales de Django que están configuradas por mi biblioteca de terceros de forma predeterminada y connect mis propias señales y debo hacer algunos “parches de mono” para agregar funciones de conveniencia […]

Rastreando conversiones implícitas de Unicode en Python 2

Tengo un gran proyecto donde en varios lugares se utilizaron conversiones (coersiones) implícitas problemáticas y problemáticas, por ejemplo: someDynamicStr = “bar” # could come from various sources # works u”foo” + someDynamicStr u”foo{}”.format(someDynamicStr) someDynamicStr = “\xff” # uh-oh # raises UnicodeDecodeError u”foo” + someDynamicStr u”foo{}”.format(someDynamicStr) (Posiblemente otras formas también.) Ahora me gustaría rastrear esos usos, […]

Ponche de pato en una propiedad en python

Me gustaría poder agregar una propiedad http://docs.python.org/library/functions.html#property a un objeto (una instancia específica de una clase). es posible? Algunas otras preguntas sobre la perforación de patos / parches de monos en python: Adición de un método a una instancia de objeto existente Python: cambio de métodos y atributos en tiempo de ejecución ACTUALIZACIÓN: Respondida por […]

¿Por qué el monkeypatch de Python no funciona al importar una clase en lugar de un módulo?

Estaba teniendo problemas al usar el código de la respuesta aceptada aquí . El código funciona dependiendo de cómo hago la importación de datetime. ¿Porqué es eso? ¿Es posible burlarse de él para que funcione en ambos sentidos? Estoy usando Python 3.4 . El siguiente código ilustra el problema: import pytest from datetime import datetime […]

Python: cómo combinar el método de clase de parche a otro método de clase

Tengo el siguiente código: class A: def __init__(self): self.a = “This is mine, ” def testfunc(self, arg1): print self.a + arg1 class B: def __init__(self): self.b = “I didn’t think so” self.oldtestfunc = A.testfunc A.testfunc = self.testfuncPatch def testfuncPatch(self, arg): newarg = arg + self.b # B instance ‘self’ self.oldtestfunc(self, newarg) # A instance ‘self’ […]

Si se permiten parches de mono tanto en Ruby como en Python, ¿por qué es más controvertido en Ruby?

En muchas de las discusiones que he escuchado sobre Ruby, en las que las personas expresson sus reservas sobre el idioma, el tema del parche de los monos se presenta como una de sus principales preocupaciones. Sin embargo, rara vez escucho los mismos argumentos en el contexto de Python, aunque también está permitido en el […]