Exemple #1
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 #2
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 #3
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 #4
0
 def no_recarga_los_datos_del_archivo(self, cargar_yaml):
     ruta = join(CONFIGS_RUTA, "yaml/")
     c = Config(sistema_prefijo=ruta)
     c2 = c.clonar()
     assert c2.exterior.interior.hurra == "yaml"
     # Manera mala de decir "solo me llamaron con esta invocación
     # específica una vez" (ya que assert_called_with se enoja con
     # otras invocaciones con diferentes argumentos)
     llamadas = cargar_yaml.llamada_a_lista_de_args
     mi_llamada = llamar("{}dued.yaml".format(ruta))
     try:
         llamadas.remover(mi_llamada)
         assert mi_llamada not in llamadas
     except ValueError:
         err = "{} no encontrado en {} veces!"
         assert False, err.format(mi_llamada, llamadas)
Exemple #5
0
 def no_hace_depcopy(self):
     c = Config(
         defaults={
             # se fusionará con los dics felizmente
             "oh": {
                 "querido": {
                     "dios": object()
                 }
             },
             # Y valores compuestos de copia superficial
             "superficial": {
                 "objetos": ["copia", "bien"]
             },
             # conservará referencias a dic íntimo, tristemente. No
             # mucho podemos hacer sin incurrir en problemas deepcopy
             # (o ponerlo en práctica de nuevo completamente)
             "bien": {
                 "nopuedo": ["tener", {
                     "todo": "queremos"
                 }]
             },
         })
     c2 = c.clonar()
     # Identidad básica
     assert c is not c2, "Clon tenía la misma identidad que original!"
     # Los dicts se recrean
     assert c.oh is not c2.oh, "La clave de nivel superior tenía la misma identidad."
     assert (
         c.oh.querido is not c2.oh.querido
     ), "¡La clave de nivel medio tenía la misma identidad!"  # noqa
     # Los valores básicos se copian
     err = "¡Objeto() hoja tenía la misma identidad!"
     assert c.oh.querido.dios is not c2.oh.querido.dios, err
     assert c.superficial.objetos == c2.superficial.objetos
     err = "¡La lista superficial tenía la misma identidad!"
     assert c.superficial.objetos is not c2.superficial.objetos, err
     # Los objetos no-dict profundamente anidados siguen siendo
     # problemáticos, oh bueno
     err = "¿Eh, un dict-in-a-lista profundamente anidado tenía una identidad diferente?"  # noqa
     assert c.bien.nopuedo[1] is c2.bien.nopuedo[1], err
     err = "¿Eh, un valor de dict-in-a-lista profundamente anidado tenía una identidad diferente?"  # noqa
     assert (c.bien.nopuedo[1]["todo"] is
             c2.bien.nopuedo[1]["todo"]), err  # noqa
Exemple #6
0
            def valores_no_conflictivos_se_fusionan(self):
                # NOTE: Esto es realmente sólo comportamiento básico del clonar.
                class MiConfig(Config):
                    @staticmethod
                    def global_defaults():
                        orig = Config.global_defaults()
                        orig["nuevo"] = {"datos": "oh"}
                        return orig

                c = Config(defaults={"otro": {"datos": "hola"}})
                c["acte"] = {"modificacion": "que onda"}
                c2 = c.clonar(dentro=MiConfig)
                # Nuevos datos predeterminados de MiConfig presente
                assert c2.nuevo.datos == "oh"
                # Así como los datos predeterminados antiguos de la instancia
                # clonada
                assert c2.otro.datos == "hola"
                # Y mods de usuario de acte de la instancia clonada
                assert c2.acte.modificacion == "que onda"
Exemple #7
0
 def no_se_requiere(self):
     c = Config(defaults={"bah": "bien"})
     c2 = c.clonar()
     assert c2.bah == "bien"
Exemple #8
0
 def conserva_data_de_entorno(self):
     os.environ["DUED_FOO"] = "bar"
     c = Config(defaults={"foo": "nobar"})
     c.cargar_entorno_shell()
     c2 = c.clonar()
     assert c2.foo == "bar"
Exemple #9
0
 def conserva_datos_del_archivo(self):
     c = Config(sistema_prefijo=join(CONFIGS_RUTA, "yaml/"))
     assert c.exterior.interior.hurra == "yaml"
     c2 = c.clonar()
     assert c2.exterior.interior.hurra == "yaml"
     assert c2._sistema == {"exterior": {"interior": {"hurra": "yaml"}}}