1
1
from .utils import logger
2
2
3
3
4
+ def _attr_setter (fn ):
5
+ return property (fset = fn , doc = fn .__doc__ )
6
+
7
+
4
8
class Scope (object ):
5
9
"""The scope holds extra information that should be sent with all
6
10
events that belong to it.
7
11
"""
8
12
9
- __slots__ = ["_data" , "_breadcrumbs" , "_event_processors" , "_error_processors" ]
13
+ __slots__ = (
14
+ "_fingerprint" ,
15
+ "_transaction" ,
16
+ "_user" ,
17
+ "_tags" ,
18
+ "_contexts" ,
19
+ "_extras" ,
20
+ "_breadcrumbs" ,
21
+ "_event_processors" ,
22
+ "_error_processors" ,
23
+ )
10
24
11
25
def __init__ (self ):
12
- self ._data = {}
13
- self ._breadcrumbs = []
14
26
self ._event_processors = []
15
27
self ._error_processors = []
16
28
17
- def _set_fingerprint (self , value ):
18
- """When set this overrides the default fingerprint."""
19
- self ._data ["fingerprint" ] = value
29
+ self .clear ()
20
30
21
- fingerprint = property (fset = _set_fingerprint , doc = _set_fingerprint .__doc__ )
22
- del _set_fingerprint
31
+ @_attr_setter
32
+ def fingerprint (self , value ):
33
+ """When set this overrides the default fingerprint."""
34
+ self ._fingerprint = value
23
35
24
- def _set_transaction (self , value ):
36
+ @_attr_setter
37
+ def transaction (self , value ):
25
38
"""When set this forces a specific transaction name to be set."""
26
- self ._data ["transaction" ] = value
27
-
28
- transaction = property (fset = _set_transaction , doc = _set_transaction .__doc__ )
29
- del _set_transaction
39
+ self ._transaction = value
30
40
31
- def _set_user (self , value ):
41
+ @_attr_setter
42
+ def user (self , value ):
32
43
"""When set a specific user is bound to the scope."""
33
- self ._data ["user" ] = value
34
-
35
- user = property (fset = _set_user , doc = _set_user .__doc__ )
36
- del _set_user
44
+ self ._user = value
37
45
38
46
def set_tag (self , key , value ):
39
47
"""Sets a tag for a key to a specific value."""
40
- self ._data . setdefault ( "tags" , {}) [key ] = value
48
+ self ._tags [key ] = value
41
49
42
50
def remove_tag (self , key ):
43
51
"""Removes a specific tag."""
44
- self ._data . setdefault ( "tags" , {}) .pop (key , None )
52
+ self ._tags .pop (key , None )
45
53
46
54
def set_context (self , key , value ):
47
55
"""Binds a context at a certain key to a specific value."""
48
- self ._data . setdefault ( "contexts" , {}) [key ] = value
56
+ self ._contexts [key ] = value
49
57
50
58
def remove_context (self , key ):
51
59
"""Removes a context."""
52
- self ._data . setdefault ( "contexts" , {}) .pop (key , None )
60
+ self ._contexts .pop (key , None )
53
61
54
62
def set_extra (self , key , value ):
55
63
"""Sets an extra key to a specific value."""
56
- self ._data . setdefault ( "extras" , {}) [key ] = value
64
+ self ._extras [key ] = value
57
65
58
66
def remove_extra (self , key ):
59
67
"""Removes a specific extra key."""
60
- self ._data . setdefault ( "extras" , {}) .pop (key , None )
68
+ self ._extras .pop (key , None )
61
69
62
70
def clear (self ):
63
71
"""Clears the entire scope."""
64
- self ._data .clear ()
65
- del self ._breadcrumbs [:]
66
- del self ._event_processors [:]
72
+ self ._fingerprint = None
73
+ self ._transaction = None
74
+ self ._user = None
75
+
76
+ self ._tags = {}
77
+ self ._contexts = {}
78
+ self ._extras = {}
79
+
80
+ self ._breadcrumbs = []
67
81
68
82
def add_event_processor (self , func ):
69
83
""""Register a scope local event processor on the scope.
@@ -99,23 +113,20 @@ def _drop(event, cause, ty):
99
113
logger .info ("%s (%s) dropped event (%s)" , ty , cause , event )
100
114
101
115
event .setdefault ("breadcrumbs" , []).extend (self ._breadcrumbs )
102
- if event .get ("user" ) is None and "user" in self ._data :
103
- event ["user" ] = self ._data [ "user" ]
116
+ if event .get ("user" ) is None and self ._user is not None :
117
+ event ["user" ] = self ._user
104
118
105
- if event .get ("transaction" ) is None and "transaction" in self ._data :
106
- event ["transaction" ] = self ._data [ "transaction" ]
119
+ if event .get ("transaction" ) is None and self ._transaction is not None :
120
+ event ["transaction" ] = self ._transaction
107
121
108
- extra = self ._data .get ("extra" )
109
- if extra :
110
- event .setdefault ("extra" , {}).update (extra )
122
+ if self ._extras :
123
+ event .setdefault ("extra" , {}).update (self ._extras )
111
124
112
- tags = self ._data .get ("tags" )
113
- if tags :
114
- event .setdefault ("tags" , {}).update (tags )
125
+ if self ._tags :
126
+ event .setdefault ("tags" , {}).update (self ._tags )
115
127
116
- contexts = self ._data .get ("contexts" )
117
- if contexts :
118
- event .setdefault ("contexts" , {}).update (contexts )
128
+ if self ._contexts :
129
+ event .setdefault ("contexts" , {}).update (self ._contexts )
119
130
120
131
if hint is not None and hint .exc_info is not None :
121
132
exc_info = hint .exc_info
@@ -135,8 +146,17 @@ def _drop(event, cause, ty):
135
146
136
147
def __copy__ (self ):
137
148
rv = object .__new__ (self .__class__ )
138
- rv ._data = dict (self ._data )
149
+
150
+ rv ._fingerprint = self ._fingerprint
151
+ rv ._transaction = self ._transaction
152
+ rv ._user = self ._user
153
+
154
+ rv ._tags = dict (self ._tags )
155
+ rv ._contexts = dict (self ._contexts )
156
+ rv ._extras = dict (self ._extras )
157
+
139
158
rv ._breadcrumbs = list (self ._breadcrumbs )
140
159
rv ._event_processors = list (self ._event_processors )
141
160
rv ._error_processors = list (self ._error_processors )
161
+
142
162
return rv
0 commit comments