65 def lltrace(selector): |
65 def lltrace(selector): |
66 # don't wrap selectors if not in development mode |
66 # don't wrap selectors if not in development mode |
67 if CubicWebConfiguration.mode == 'installed': |
67 if CubicWebConfiguration.mode == 'installed': |
68 return selector |
68 return selector |
69 def traced(cls, *args, **kwargs): |
69 def traced(cls, *args, **kwargs): |
70 selname = cls.__class__.__name__ |
70 # /!\ lltrace decorates pure function or __call__ method, this |
71 oid = args[0].id |
71 # means argument order may be different |
|
72 if isinstance(cls, Selector): |
|
73 selname = cls.__class__.__name__ |
|
74 vobj = args[0] |
|
75 else: |
|
76 selname = selector.__name__ |
|
77 vobj = cls |
|
78 oid = vobj.id |
72 ret = selector(cls, *args, **kwargs) |
79 ret = selector(cls, *args, **kwargs) |
73 if TRACED_OIDS == 'all' or oid in TRACED_OIDS: |
80 if TRACED_OIDS == 'all' or oid in TRACED_OIDS: |
74 #SELECTOR_LOGGER.warning('selector %s returned %s for %s', selname, ret, cls) |
81 #SELECTOR_LOGGER.warning('selector %s returned %s for %s', selname, ret, cls) |
75 print 'selector %s returned %s for %s' % (selname, ret, args[0]) |
82 print 'selector %s returned %s for %s' % (selname, ret, vobj) |
76 return ret |
83 return ret |
77 traced.__name__ = selector.__name__ |
84 traced.__name__ = selector.__name__ |
78 return traced |
85 return traced |
79 |
86 |
80 class traced_selection(object): |
87 class traced_selection(object): |