Exemple #1
0
            def clones_resultantes_se_escriben_como_nueva_clase(self):
                class MiConfig(Config):
                    pass

                c = Config()
                c2 = c.clonar(dentro=MiConfig)
                assert type(c2) is MiConfig
Exemple #2
0
 def tiempoej_anula_todo_el_sistema(self):
     c = Config(
         acte_ruta=join(CONFIGS_RUTA, "json", "dued.json"),
         sistema_prefijo=join(CONFIGS_RUTA, "yaml/"),
     )
     c.cargar_acte()
     assert c.exterior.interior.hurra == "json"
Exemple #3
0
 def conserva_miembros_basicos(self):
     c1 = Config(
         defaults={"clave": "default"},
         anulaciones={"clave": "anular"},
         sistema_prefijo="global",
         ususario_prefijo="usuario",
         dir_de_py="proyecto",
         acte_ruta="acte.yaml",
     )
     c2 = c1.clonar()
     # NOTE: esperando valores por defecto idénticos también pruebas
     # implícitamente que clonar() pasa en defaults= en lugar de hacer
     # un init + copy vacío. (Cuando ese no es el caso, terminamos con
     # global_defaults() que se vuelve a ejecutar y se vuelve
     # a agregar a _defaults ...)
     assert c2._defaults == c1._defaults
     assert c2._defaults is not c1._defaults
     assert c2._anula == c1._anula
     assert c2._anula is not c1._anula
     assert c2._sistema_prefijo == c1._sistema_prefijo
     assert c2._ususario_prefijo == c1._ususario_prefijo
     assert c2._proyecto_prefijo == c1._proyecto_prefijo
     assert c2.prefijo == c1.prefijo
     assert c2.archivo_prefijo == c1.archivo_prefijo
     assert c2.entorno_prefijo == c1.entorno_prefijo
     assert c2._ruta_al_acte == c1._ruta_al_acte
Exemple #4
0
 def la_combinacion_se_puede_diferir(self):
     c = Config()
     assert "foo" not in c._coleccion
     assert "foo" not in c
     c.cargar_coleccion({"foo": "bar"}, combinar=False)
     assert "foo" in c._coleccion
     assert "foo" not in c
Exemple #5
0
 def entradas_tipo_booleano_con_valores_pordefecto_no_booleanos(
         self):
     for entrada_ in ("0", "1", "", "bah", "false"):
         os.environ["DUED_FOO"] = entrada_
         c = Config(defaults={"foo": "bar"})
         c.cargar_entorno_shell()
         assert c.foo == entrada_
Exemple #6
0
 def especifico_del_py(self):
     "Local-to-project conf files"
     for tipo_ in TIPOS:
         c = Config(dir_de_py=join(CONFIGS_RUTA, tipo_))
         assert "exterior" not in c
         c.cargar_proyecto()
         assert c.exterior.interior.hurra == tipo_
Exemple #7
0
 def proyecto_anula_al_usuario(self):
     c = Config(
         ususario_prefijo=join(CONFIGS_RUTA, "json/"),
         dir_de_py=join(CONFIGS_RUTA, "yaml"),
     )
     c.cargar_proyecto()
     assert c.exterior.interior.hurra == "yaml"
Exemple #8
0
 def tiempoej_anulan_ususario(self):
     c = Config(
         acte_ruta=join(CONFIGS_RUTA, "json", "dued.json"),
         ususario_prefijo=join(CONFIGS_RUTA, "yaml/"),
     )
     c.cargar_acte()
     assert c.exterior.interior.hurra == "json"
Exemple #9
0
 def proyecto_anula_todo_el_sistema(self):
     c = Config(
         sistema_prefijo=join(CONFIGS_RUTA, "json/"),
         dir_de_py=join(CONFIGS_RUTA, "yaml"),
     )
     c.cargar_proyecto()
     assert c.exterior.interior.hurra == "yaml"
Exemple #10
0
 def popitem(self):
     c = Config(defaults={"foo": "bar"})
     assert c.popitem() == ("foo", "bar")
     assert c == {}
     c.anidado = {"hojaclave": "hojavalor"}
     assert c.anidado.popitem() == ("hojaclave", "hojavalor")
     assert c == {"anidado": {}}
Exemple #11
0
 def limpiar(self):
     c = Config(defaults={"foo": "bar"})
     c.limpiar()
     assert c == {}
     c.anidado = {"hojaclave": "hojavalor"}
     c.anidado.clear()
     assert c == {"anidado": {}}
Exemple #12
0
 def realizado_explicita_y_directamente(self):
     # TODO: ¿queremos actualizar los otros niveles para permitir
     # una carga 'directa' como esta, ahora que todos tienen métodos
     #  explícitos?
     c = Config()
     assert "foo" not in c
     c.cargar_coleccion({"foo": "bar"})
     assert c.foo == "bar"
Exemple #13
0
 def delitem(self):
     "__delitem__"
     c = Config(defaults={"foo": "bar"})
     del c["foo"]
     assert c == {}
     c.anidado = {"hojaclave": "hojavalor"}
     del c.anidado["hojaclave"]
     assert c == {"anidado": {}}
Exemple #14
0
 def delattr(self):
     "__delattr__"
     c = Config(defaults={"foo": "bar"})
     del c.foo
     assert c == {}
     c.anidado = {"hojaclave": "hojavalor"}
     del c.anidado.hojaclave
     assert c == {"anidado": {}}
Exemple #15
0
 def comparacion_mira_la_config_combinada(self):
     c1 = Config(defaults={"foo": {"bar": "biz"}})
     # Valores predeterminados vacíos para suprimir
     # global_defaults
     c2 = Config(defaults={}, anulaciones={"foo": {"bar": "biz"}})
     assert c1 is not c2
     assert c1._defaults != c2._defaults
     assert c1 == c2
Exemple #16
0
 def conserva_config_combinada(self):
     c = Config(defaults={"clave": "default"},
                anulaciones={"clave": "anular"})
     assert c.clave == "anular"
     assert c._defaults["clave"] == "default"
     c2 = c.clonar()
     assert c2.clave == "anular"
     assert c2._defaults["clave"] == "default"
     assert c2._anula["clave"] == "anular"
Exemple #17
0
 def py_puede_omitir_la_combinacion(self):
     config = Config(dir_de_py=join(CONFIGS_RUTA, "yml"), lento=True)
     assert "exterior" not in config._py
     assert "exterior" not in config
     config.cargar_proyecto(combinar=False)
     # Prueba que cargamos en el dicc por nivel, pero no en la
     # configuración central/fusionada.
     assert "exterior" in config._py
     assert "exterior" not in config
Exemple #18
0
 def pueden_establecer_atrib_inexistentes_para_crear_nuevas_config_de_nivel_sup(
         self):
     # Es decir algun_configfoo = 'bar' es como algun_config['foo'] = 'bar'.
     # Cuando esta prueba se rompe, generalmente significa que
     # algun_config.foo = 'bar' establece un atributo regular,
     # ¡y la configuración en sí nunca se toca!
     c = Config()
     c.algun_ajuste = "algun_valor"
     assert c["algun_ajuste"] == "algun_valor"
Exemple #19
0
 def usuario_anula_la_colección(self):
     c = Config(ususario_prefijo=join(CONFIGS_RUTA, "json/"))
     c.cargar_coleccion(
         {"exterior": {
             "interior": {
                 "hurra": "defaults"
             }
         }})
     assert c.exterior.interior.hurra == "json"
Exemple #20
0
 def coleccion_de_anulaciones_en_todo_el_sistema(self):
     c = Config(sistema_prefijo=join(CONFIGS_RUTA, "yaml/"))
     c.cargar_coleccion(
         {"exterior": {
             "interior": {
                 "hurra": "defaults"
             }
         }})
     assert c.exterior.interior.hurra == "yaml"
Exemple #21
0
 def tiempoej_puede_omitir_la_combinacion(self):
     ruta = join(CONFIGS_RUTA, "yaml", "dued.yaml")
     config = Config(acte_ruta=ruta, lento=True)
     assert "exterior" not in config._acte
     assert "exterior" not in config
     config.cargar_acte(combinar=False)
     # Prueba que cargamos en el dicc por nivel, pero no en la
     # configuración central/fusionada.
     assert "exterior" in config._acte
     assert "exterior" not in config
Exemple #22
0
 def unicode_reemplazado_por_el_valor_entorno(self):
     # Python 3 no le permite poner objetos 'bytes' en
     # os.environ, por lo que la prueba no tiene sentido allí.
     if six.PY3:
         return
     os.environ["DUED_FOO"] = "miunicode"
     c = Config(defaults={"foo": u"miviejovalor"})
     c.cargar_entorno_shell()
     assert c.foo == "miunicode"
     assert isinstance(c.foo, str)
Exemple #23
0
 def no_carga_archivo_especifico_del_py_si_no_proporciona_la_ubic_del_py(
         self):
     c = Config()
     assert c._proyecto_ruta is None
     c.cargar_proyecto()
     assert list(c._py.keys()) == []
     defaults = [
         "artefactos", "correr", "corredores", "sudo",
         "tiempo_de_descanso"
     ]
     assert set(c.keys()) == set(defaults)
Exemple #24
0
 def pop(self):
     # Raiz
     c = Config(defaults={"foo": "bar"})
     assert c.pop("foo") == "bar"
     assert c == {}
     # Con el arg predeterminado
     assert c.pop("hum", "bien entonces") == "bien entonces"
     # Hoja (clave diferente para evitar ErrorDeFusionAmbiguo)
     c.anidado = {"hojaclave": "hojavalor"}
     assert c.anidado.pop("hojaclave") == "hojavalor"
     assert c == {"anidado": {}}
Exemple #25
0
 def booleanos(self):
     for entrada_, resultado in (
         ("0", False),
         ("1", True),
         ("", False),
         ("bah", True),
         ("false", True),
     ):
         os.environ["DUED_FOO"] = entrada_
         c = Config(defaults={"foo": bool()})
         c.cargar_entorno_shell()
         assert c.foo == resultado
Exemple #26
0
            def tipos_arbitrarios_tambien_trabajan(self):
                os.environ["DUED_FOO"] = "cualquier"

                class Meh(object):
                    def __init__(self, thing=None):
                        pass

                obj_viejo = Meh()
                c = Config(defaults={"foo": obj_viejo})
                c.cargar_entorno_shell()
                assert isinstance(c.foo, Meh)
                assert c.foo is not obj_viejo
Exemple #27
0
 def setdefault(self):
     c = Config({
         "foo": "bar",
         "anidado": {
             "hojaclave": "hojavalor"
         }
     })
     assert c.setdefault("foo") == "bar"
     assert c.anidado.setdefault("hojaclave") == "hojavalor"
     assert c.setdefault("notfoo", "nobar") == "nobar"
     assert c.notfoo == "nobar"
     anidado = c.anidado.setdefault("otrahoja", "otroval")
     assert anidado == "otroval"
     assert c.anidado.otrahoja == "otroval"
Exemple #28
0
 def actualizar(self):
     c = Config(defaults={
         "foo": "bar",
         "anidado": {
             "hojaclave": "hojavalor"
         }
     })
     # Regular : actualizar(dic)
     c.actualizar({"foo": "nobar"})
     assert c.foo == "nobar"
     c.anidado.actualizar({"hojaclave": "otroval"})
     assert c.anidado.hojaclave == "otroval"
     # Aparentemente permitido pero completamente inútil.
     c.actualizar()
     esperado = {
         "foo": "nobar",
         "anidado": {
             "hojaclave": "otroval"
         }
     }
     assert c == esperado
     # Kwarg edition
     c.actualizar(foo="otrobar")
     assert c.foo == "otrobar"
     # Iterator of 2-tuples edition
     c.anidado.actualizar([("hojaclave", "otrovalormas"),
                           ("newhoja", "giro")])
     assert c.anidado.hojaclave == "otrovalormas"
     assert c.anidado.newhoja == "giro"
Exemple #29
0
 def restablecimiento_de_los_valores_eliminados_funciona_ok(self):
     # Suena como una estupidez para probar, pero cuando tenemos que
     # rastrear eliminaciones y mutaciones manualmente ... es algo
     # fácil de pasar por alto
     c = Config(defaults={"foo": "bar"})
     assert c.foo == "bar"
     del c["foo"]
     # Controles de cordura
     assert "foo" not in c
     assert len(c) == 0
     # Vuelvi a ponerlo ... como un valor diferente, por diversión
     c.foo = "antiguamente bar"
     # Y asegúrate de que se atasque
     assert c.foo == "antiguamente bar"
Exemple #30
0
 def la_combinacion_no_borra_las_modificaciones_o_eliminaciones_del_usuario(
         self):
     c = Config({"foo": {"bar": "biz"}, "error": True})
     c.foo.bar = "nobiz"
     del c["error"]
     assert c["foo"]["bar"] == "nobiz"
     assert "error" not in c
     c.combinar()
     # Volverá a 'biz' si los cambios del usuario no se guardan por sí
     # mismos (anteriormente eran solo mutaciones en la configuración
     # central almacenada en caché)
     assert c["foo"]["bar"] == "nobiz"
     # Y esto todavía estaría aquí también
     assert "error" not in c