papo-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Papo-hackers] Dudas insertando un nuevo objeto


From: John Lenton
Subject: Re: [Papo-hackers] Dudas insertando un nuevo objeto
Date: Wed, 23 Jun 2004 17:48:35 -0300
User-agent: Mutt/1.3.28i

Sender: John Lenton <address@hidden>

On Wed, Jun 23, 2004 at 04:16:37PM -0400, Visualnex wrote:
> Hola:
> Tengo las siguientes dudas... 
> 
> **** En general
> Cual es el uso de __obligs
> Cual es el uso de _processArgs

Eso es parte de Cimarrón, así que lo puedo explicar yo! :)

todas las clases tenían constructores que hacían esencilmente lo
mismo, algo parecido a

    def __init__(self, arg1=None, arg2=None, **kw):
        if arg1 is not None:
            self.setArg1(arg1)
        if arg2 is not None:
            self.setArg2(arg2)

        super(Foo, self).__init__(**kw)

        if not hasattr(self, 'attr1'):
            self.attr1 = constructor1()

entonces las clases que heredan de MagicArgs (esencialmente, todas las
clases concrtas y algunas de las abastractas) tienen atributos de
clase __kwargs (una lista de argumentos a quitar del inicializador y a
usar para la inicialización) y __obligs (un diccionario de nombre de
atributo, constructor a ser llamado si ese atributo no existe después
de que la inicialización ha terminado).

Esto está documentado, de alguna manera, en la documentación de
MagicArgs; el tema es que son todos metodos protegidos o privados, con
lo cual no aparecen en la salida de 'pydoc'...


> Por ejemplo en el modulo Country.py y otros:
> 
> __obligs= {'model': lambda: Country ()}

en realidad eso tendría que ser {'model': Country} a secas, pero
funcionalmente es lo mismo.

> def __init__ (self, *args, **kwargs):
>     kwargs.update ({'windowTitle': u'ABM de pais','model': Country (),
>                  'modelClass': Country,})
>         self._processArgs(Main, kwargs)
>         self.buildUI ()

hmm ... no era mi intención que se usara así, pero funciona.

> **** Para agregar un objeto nuevo a la base:
> La funcion lambda: Country()  devuelve un objeto instanciado de la clase 
> Country, segun la definio Modeling en Model/PAPOv2/country.py ? 
> 
> Suponiendo que es asi, cuando pulso el boton "Nuevo", solamente genera un 
> objeto Country() vacio. 
> Lo modifico en la pantalla "datos" y pulso "Guardar"
> Se llama al metodo "save" de la class "ConsistentController" y esta al "save" 
> de la class "DIAEditingContext". Pero, no es necesario insertar 
> ANTES el nuevo objeto Country() en el EditingContext ? donde se haria (o se 
> hace, si no lo vi...) ,en que metodo.

ahí ya entramos en las cosas que hizo Marcos; si efectivamente al
hacer 'save' no se hace el insert y el saveChanges contra el ec, no va
a pasar nada en la base de datos; esto explicaría lo que observabas de
que los inserts no llegaban a ningún lado.

-- 
John Lenton (address@hidden) -- Random fortune:
Ver un buey volar, a muchos necios oí afirmar.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]