¿Cómo genero un informe xml de cobertura para un solo paquete?

Estoy usando nariz y cobertura para generar informes de cobertura. Solo tengo un paquete en este momento, ae , así que especifico cubrir solo eso:

nosetests -w tests/unit --with-xunit --with-coverage --cover-package=ae 

Y aquí están los resultados, que se ven bien:

 Name Stmts Exec Cover Missing ---------------------------------------------- ae 1 1 100% ae.util 253 224 88% 39, 63-65, 284, 287, 362, 406 ---------------------------------------------- TOTAL 263 234 88% ---------------------------------------------------------------------- Ran 68 tests in 5.292s 

Sin embargo, cuando ejecuto coverage xml , la cobertura incluye más paquetes de los necesarios, incluido el correo electrónico de Python y los paquetes de registro que no tienen nada que ver con mi código.

Si ejecuto la coverage xml ae , recibo este error:

 No source for code: '/home/wraith/dev/projects/trimurti/src/ae': [Errno 21] Is a directory: '/home/wraith/dev/projects/trimurti/src/ae' 

¿Hay una manera de generar el XML solo para el paquete ae ?

Tuve un problema similar y lo resolví con la opción --omit . Esto lo hizo funcionar mucho más rápido y redujo el tamaño de cobertura.xml de 2MB a 70kB.

 --omit=PRE1,PRE2,... Omit files when their filename path starts with one of these prefixes. 

Estoy en Mac OS X, así que omití las carpetas / Library / y / Applications /:

 $ coverage xml --omit=/Library/,/Applications/ 

En otros sistemas, puede encontrar --omit=/usr/ más útil.

No pude encontrar la respuesta a esto, por lo que estoy eliminando los elementos del paquete no deseado después del procesamiento. Esta función toma el archivo XML original, el nombre del elemento para verificar, su atributo para verificar, el patrón (o lista de palabras) que desea GUARDAR y una ruta de archivo de destino para el nuevo archivo.

 from lxml import etree def keep(self, xmlfile, elem_name, attr_name, pattern, dst): try: rep = re.compile(pattern) except TypeError: # Create regex pattern if a list is given. # TypeError: unhashable type: 'list' rep = re.compile("|".join(pattern)) dom = etree.parse(xmlfile) for node in dom.findall('//%s' % elem_name): if not rep.search(node.get(attr_name)): node.getparent().remove(node) dom.write(dst) 

Para resolver mi problema, lo llamo así:

 keep('coverage.xml', 'package', 'name', 'ae|tests', 'wanted-coverage.xml') 

Has probado:

 coverage xml ae