Bonjour,

Dans le cadre de mon framework python, j'aimerais pouvoir faire la chose suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
@trigger.group(ga="1/1/1").changed()
def rule(event):
    pass
mais visiblement, ce n'est pas possible :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
$ python decorators.py 
  File "decorators.py", line 117
    @trigger.group(ga="1/1/1").changed()
                              ^
SyntaxError: invalid syntax
Est-ce que c'est parce que je n'utilise pas la syntaxe kivabien, ou est-ce vraiment impossible de faire ce genre de chose ?

Dans ce dernier cas, que me proposeriez-vous ? Je peux bien sûr faire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
@trigger.group.changed(ga="1/1/1")
def rule(event):
    pass
mais c'est moins sioux, car changed() prendra d'autres argument, et ga n'est pas vraiment en relation direct avec cette partie du décorateur... J'aurais aimé bien séparer les choses, tout en conservant une syntaxe sympa.

Merci d'avance pour vos suggestions.

PS : pour info, voici comment je comptais procéder pour l'implémentation des décorateurs :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Group():
    def __call__(self, ga=None, id=None):
        # TODO: save ga and id, to be able to use them in the decorating methods
        return self
 
    def changed(self, from_=None, to=None):
        def decorated(func):
            # TODO: register func in the triggering system
            return func
 
        return decorated
 
 
class Trigger():
    def __init__(self):
        self.group = Group()
 
 
trigger = Trigger()
Le truc était de transformer Group an callable, se retournant lui-même, afin de pouvoir accéder à ses méthodes décoratrices...

Chuis déçu que ça ne puisse pas fonctionner Bouuh !