Hola!<div><br></div><div>Tengo un problema y no sabía muy bien dónde preguntar... No sé si esta lista se utiliza sólo para las reuniones o las preguntas también tienen cabida. De todas maneras, creo que la concentración de programadores python por "mail cuadrado" es alta y seguro que alguien me puede echar una mano.</div>
<div><br></div><div>Es un problema tontísimo.</div><div><br></div><div>Aunque no es importante, pero por dar contexto, estoy usando ConfigParser para leer un archivo, pero no me gusta acceder a las propiedades de la manera:</div>
<div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>config.get('section', 'option')</div></blockquote>Sino que quiero acceder de la forma:</div><div><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div>config.section.option</div></blockquote></div><div><br></div><div>Para ello me crearé una función que convierta los ConfigParser a una estructura que usa la clase:</div><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><div>class EasyDict:</div></div><div><div> def __init__(self):</div></div><div><div> self._values = {}</div></div><div><div><br></div></div><div><div> def add(self, k, v):</div></div><div><div> self._values[k] = v</div>
</div><div><div> </div></div><div><div> def __getattr__(self, k):</div></div><div><div> return self._values.get(k, None)</div></div><div><div><br></div></div><div><div> def __str__(self):</div></div><div><div>
return str(self._values)</div></div></blockquote><div><br></div><div>Me he puesto a probar la clase y me encuentro con un problema absurdo. Publico sólo dos tests:</div><div><blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div>class TestEasyDict(unittest.TestCase):</div><div> def setUp(self):</div><div> self.sut = EasyDict()</div><div><br></div><div> def test_add_object(self):</div><div> self.sut.add('a', [])</div>
<div> self.assertEquals([], self.sut.a)</div><div><br></div><div><br></div><div> def test_add_dict(self):</div><div> item = EasyDict()</div><div> self.sut.add('c', item)</div><div><br></div>
<div> self.assertTrue(self.sut)</div><div> self.assertEquals(item, self.sut.c)</div></blockquote></div><div><br></div><div>Podéis observar que son dos tests idénticos, salvo que el primero guarda un array y el segundo, otro objeto de tipo EasyDict. Bueno, pues el resultado es que no existe "self.sut" en el assertTrue (que añadí porque el assertEquals también cascaba, claro):</div>
<div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div>$ nosetests tests</div><div>E.</div><div>======================================================================</div><div>ERROR: test_add_dict (main_tests.TestEasyDict)</div>
<div>----------------------------------------------------------------------</div><div>Traceback (most recent call last):</div><div> File "main_tests.py", line 30, in test_add_dict</div><div> self.assertTrue(self.sut)</div>
<div> File "/usr/lib/python2.7/unittest/case.py", line 418, in assertTrue</div><div> if not expr:</div><div>TypeError: 'NoneType' object is not callable</div><div><br></div><div>----------------------------------------------------------------------</div>
<div>Ran 2 tests in 0.006s</div><div><br></div><div>FAILED (errors=1)</div></div><div>$</div></blockquote><div>¿Alguien le encuentra algún sentido a esto? ¿sabríais decirme cómo arreglarlo?</div><div><br></div><div>Un saludo y gracias!</div>
<div><br></div>-- <br>Miguel Ángel García Martínez<div><a href="http://www.magmax.org" target="_blank">http://www.magmax.org</a><br><div style="text-align:left"><a href="mailto:miguelangel.garcia@gmail.com" target="_blank">Mail</a> | <a href="http://twitter.com/#magmax9" target="_blank">Twitter</a> | <a href="http://www.linkedin.com/in/miguelangelgarciamartinez" target="_blank">LinkedIn</a> | <a href="http://about.me/miguelangelgarcia" target="_blank">about.me</a> <br>
</div></div><br>
</div>
<p></p>
-- <br />
Grupo de usuarios de python ubicados en Madrid<br />
<a href="http://groups.google.es/group/python-madrid">http://groups.google.es/group/python-madrid</a><br />
<a href="http://python-madrid.es">http://python-madrid.es</a><br />
<a href="http://twitter.com/#!/python_madrid">http://twitter.com/#!/python_madrid</a><br />
Para darte de baja del grupo envía un mensaje a python-madrid+unsubscribe@googlegroups.com<br />