def devuelve_objs_Coleccion_unicos_para_el_mismo_modulo_de_entrada( self): # Ignorando self.c por ahora, en caso de que cambie más tarde. # Primero, un módulo sin raíz Hangar mod = load("integracion") c1 = Coleccion.del_modulo(mod) c2 = Coleccion.del_modulo(mod) assert c1 is not c2 # Ahora uno *con* una raíz Hangar (que anteriormente tenía errores) mod2 = load("raiz_explicita") c3 = Coleccion.del_modulo(mod2) c4 = Coleccion.del_modulo(mod2) assert c3 is not c4
def nombre_docstring_default_y_artefactos(self): esperado = dict( nombre="desplegar", help="Cómo desplegar código y configs.", artefactos=[ dict( nombre="db", help="Implementar en nuestros DB servers.", alias=["db-servers"], ), dict( nombre="omnipresente", help="Implementar en todos los objetivos.", alias=[], ), dict( nombre="web", help="Actualiza y rebota los servidores web.", alias=[], ), ], default="omnipresente", colecciones=[], ) with ruta_de_soporte(): from arbol import desplegar colecc = Coleccion.del_modulo(desplegar) assert esperado == colecc.serializado()
def los_nombres_de_los_submodulos_eliminan_al_ultimo_fragmento(self): with ruta_de_soporte(): from paquete import modulo c = Coleccion.del_modulo(modulo) assert modulo.__name__ == "paquete.modulo" assert c.nombre == "modulo" assert "miartefacto" in c # Sanity
def respeta_los_artefactos_pordefecto_de_la_subcoleccion_en_el_nombre_de_la_subcoleccion( self): sub = Coleccion.del_modulo(load("decoradores")) self.c.ad_coleccion(sub) # Sanity assert self.c["decoradores.biz"] is sub["biz"] # Real prueba assert self.c["decoradores"] is self.c["decoradores.biz"]
def Ruta_no_valida(self): # Esto realmente es solo probar el comportamiento de Lexicon/dict, # pero bueno, bueno ser explícito, especialmente si alguna vez # queremos que esto se convierta en Salida u otra excepción # personalizada. (Por ahora, la mayoría / todas las personas que # llaman capturan manualmente KeyError y generan Salida solo para # mantener la mayoría del uso de Salida en lo alto del stack ...) with raises(KeyError): coleccion = Coleccion.del_modulo(load("arbol")) coleccion.subcoleccion_desde_ruta("jeje.cualquier.pieza")
def setup(self): mod = load("raiz_explicita") mod.hng.configurar({ "clave": "incorporado", "otraclave": "yup", "subconfig": { "miclave": "mivalor" }, }) mod.hng.nombre = "builtin_name" self.nocambiado = Coleccion.del_modulo(mod) self.cambiado = Coleccion.del_modulo( mod, nombre="anular_nombre", config={ "clave": "anular", "subconfig": { "miotraclave": "miotrovalor" }, }, )
def las_transformaciones_se_aplican_a_en_de_modulos_explícitos( self): # Síntoma cuando hay un error: Coleccion.a_contextos() muere # porque itera sobre .nombres_de_artefactos (transformado) y # luego intenta usar resultado para acceder a __getitem__ # (sin transformación automática ... porque en todas las demás # situaciones, las claves de estructura de artefacto ya están # transformadas; ¡pero este no fue el caso de del_modulo() con # objetos explícitos 'hng'!) hangar = self._guiones_bajos_anidados() class FakeModule(object): __name__ = "mi_modulo" hng = hangar colecc = Coleccion.del_modulo(FakeModule(), nombre_auto_guion=False) # NOTE: underscores, not dashes esperado = { "mi_artefacto", "interior_colecc.artefacto_interno" } assert {x.nombre for x in colecc.a_contextos()} == esperado
def nombrar_artefactos_y_colecciones_pordefecto_del_docstring(self): docs = dict( nombre="docs", help="Artefactos para gestion de doc Sphinx.", artefactos=[ dict(nombre="all", help="Fabrica todo formatos de docs.", alias=[]), dict(nombre="html", help="Genera solo salida HTML.", alias=[]), dict(nombre="pdf", help="Genere solo salida PDF.", alias=[]), ], default="all", colecciones=[], ) python = dict( nombre="python", help="Artefactos de distribución de PyPI /etc.", artefactos=[ dict( nombre="all", help="Fabrica todos los paquetes de Python.", alias=[], ), dict( nombre="sdist", help="Construye tar.gz de estilo clásico.", alias=[], ), dict(nombre="wheel", help="Construye una distb. wheel (rueda).", alias=[]), ], default="all", colecciones=[], ) esperado = dict( nombre="fabric", help="Artefactos p.compilar cód estático.", artefactos=[ dict( nombre="all", help="Fabrica los artefactos necesarios.", alias=["todo"], ), dict( nombre="c-ext", help="Construye nuestra extensión C interna.", alias=["ext"], ), dict(nombre="zap", help="Una forma majadera de limpiar.", alias=[]), ], default="all", colecciones=[docs, python], ) with ruta_de_soporte(): from arbol import fabric colecc = Coleccion.del_modulo(fabric) assert esperado == colecc.serializado()
def ruta_anidada(self): coleccion = Coleccion.del_modulo(load("arbol")) docs = coleccion.colecciones["fabric"].colecciones["docs"] assert coleccion.subcoleccion_desde_ruta("fabric.docs") is docs
def ruta_de_nivel_superior(self): coleccion = Coleccion.del_modulo(load("arbol")) fabric = coleccion.colecciones["fabric"] assert coleccion.subcoleccion_desde_ruta("fabric") is fabric
def setup(self): self.c = Coleccion.del_modulo(load("raiz_explicita"))
def permite_que_las_tareas_con_nombres_explícitos_anulen_el_nombre_enlazado( self): colecc = Coleccion.del_modulo(load("nombre_de_subcol_afact")) assert "nombre-explicito" in colecc.artefactos # no 'nombre_implicito'
def honra_colecciones_explicitas(self): colecc = Coleccion.del_modulo(load("raiz_explicita")) assert "alto-nivel" in colecc.artefactos assert "sub-nivel" in colecc.colecciones # La verdadera prueba clave assert "sub-artefacto" not in colecc.artefactos
def setup(self): self.c = Coleccion.del_modulo(load("integracion"))