J'ai pas tout compris mais j'essaye

Albert DURANTON a écrit :
> ci-dessous un script python qui fonctionne. Comment le faire passer dans mon 
> application zope3 ?
> Que ce soit avec une requète pour visualiser son fonctionnement ou commme un 
> event aprés la création d'un objet de la classe.
> J'ai essayé mille choses, j'ai lu des centaines de pages mais rien me donne 
> la réponse même si cela semble évident théoriquement.
> Je compte sur vous.
> Avec mes remerciements anticipés.
> Albert
> ci dessous mon script
> import zope
> from zope.interface import Interface, implements, Attribute
> from zope.interface.adapter import AdapterRegistry
> 
> registry=AdapterRegistry()

Cette ligne est à supprimer, normalement, puisque tu peux utiliser deux types 
de 
registres :
- le registre global (le Global Site Manager), qui est alimenté par les 
inscriptions faites en ZCML. Donc tu peux inscrire tes adapters là-dedans.
- ou bien un registre local, soit celui de la racine (le Local Site Manager),
soit celui d'un folder que tu auras transformé en « site ». Pour inscrire 
l'adapter tu fais sm=getSiteManager(), puis sm.registerAdapter(...)

> 
> class ICompte (Interface):
>       pass
> 
> class IEcriture(Interface):
>       pass
> class IEcritAj(Interface):
>       compte=Attribute("Compte")
>       ecriture=Attribute("Ecriture")
>       """ """
>       def update(EcritAj):
>               """update"""

IEcritAj est censé représenter quoi ?

> 
> class Compte(object):
>       implements(ICompte)
>       
> class Ecriture(object):
>       implements(IEcriture)

Si tu veux que tes comptes et écritures soient enregistrées, tu peux les rendre 
persistants dans la ZODB en dérivant tes objets de peristent.Persistent au lieu 
d'object.

>       
> caisse=Compte()
> caisse.solde=10
> 
> loyer=Compte()
> loyer.solde=25
> 
> Ec1=Ecriture()
> Ec1.cptdeb='caisse'
> Ec1.montant=22
>       
> class EcritAj(object):
>       implements(IEcritAj)
>       def __init__(self,compte,ecriture):
>               self.compte, self.ecriture=compte,ecriture
>       def update(self):
>               mt=self.ecriture.montant
>               self.compte.solde=self.compte.solde+mt
>               return self.compte
>               
> registry.register([ICompte,IEcriture],IEcritAj,'Bob',EcritAj)
> 
> m=registry.queryMultiAdapter((caisse,Ec1), IEcritAj,'Bob')
> 
> Ec2=Ecriture()
> Ec2.cptdeb='caisse'
> Ec2.montant=22
>               
> registry.register([ICompte,IEcriture],IEcritAj,'Bob',EcritAj)
> 
> m2=registry.queryMultiAdapter((caisse,Ec2), IEcritAj,'Bob')
> 
> adapters=list(registry.lookupAll([ICompte,IEcriture], IEcritAj))
> adapters.sort()
> adapter2=list(registry.lookupAll([ICompte,IEcriture], IEcritAj))
> adapter2.sort
> 
> Ec3=Ecriture()
> Ec3.cptdeb='loyer'
> Ec3.montant=22        
> registry.register([ICompte,IEcriture],IEcritAj,'Bob',EcritAj)
> 
> m3=registry.queryMultiAdapter((loyer,Ec3), IEcritAj,'Bob')
> 
> if __name__ == '__main__':
>       print m.__class__.__name__
>       print m.compte is caisse and m.ecriture is Ec1
>       print "m",m.compte.solde, m.ecriture.cptdeb
>       print "a",adapters
>       print "m_upd",m.update()
>       print "m2",m2.compte.solde, m2.ecriture.cptdeb
>       print "a2",adapter2
>       m2.update()
>       print "m2_upd",m2.update()
>       m3.update()
>       print "m3",m3.compte.solde,m3.ecriture.cptdeb,m3.ecriture.montant
>       m3.update()
>       print "m3",m3.compte.solde,m3.ecriture.cptdeb,m3.ecriture.montant

Ensuite il faut créer des vues sur tes objets pour pouvoir les afficher d'une 
manière ou d'une autre.

Christophe

>       
> 
> _______________________________________________
> zope3-french-user mailing list
> zope3-french-user@lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/zope3-french-user
> 
> 

_______________________________________________
zope3-french-user mailing list
zope3-french-user@lists.afpy.org
http://lists.afpy.org/mailman/listinfo/zope3-french-user

Répondre à