B t `` ã@sdZddgZddlZddlZddlmZyddlmZdZWn.e k rTdZYne k rjdZYnXGd d„de ƒZ Gd d„deƒZ dS) z·This module defines a nose plugin to terminate a test after a specified number of seconds. Use the following command-line option with nosetests :: nosetests --test-timeout=### ÚTimeoutÚ TestTimeoutéN)ÚPlugin)ÚProcessTFc@s eZdZdS)rN)Ú__name__Ú __module__Ú __qualname__©r r ú| ¡}d}x,|t|ƒkr8| | ||¡¡|d7}qW|S)Nré)Z get_childrenÚlenÚextendÚ _all_children)rÚpZansÚir r r r(;s  zTestTimeout._all_childrencCsìx4| tt ¡ƒ¡D]}y | ¡WqYqXqWt|jdƒ}t|jdƒ|d}|jd}d}|r„d||dkr|dp~df}|r°|r”|d7}|d||dkr¦dp¨df7}|rÜ|rÀ|d7}|d ||dkrÒdpÔdf7}td |ƒ‚dS) Nié<Úz %d hour%sr%Úsz, z %d minute%sz %d second%szTest exceeded timeout (%s))r(rÚosÚgetpidÚkillrr r)rÚsignumÚframer)ÚhourÚminÚsecÚtxtr r r r Cs(   zTestTimeout._killTestN) rrrÚ__doc__ÚnameZscorerrr#r$r(r r r r r rs )r7Ú__all__r.rZnose.plugins.baserZpsutilrrrÚNotImplementedErrorÚ Exceptionrrr r r r Ús