Skip to content

Commit c6efac5

Browse files
committed
make functions pure
1 parent 816c2f0 commit c6efac5

File tree

5 files changed

+27
-15
lines changed

5 files changed

+27
-15
lines changed

python3/raygun4py/raygunmsgs.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,15 @@ def __init__(self):
132132
self.occurredOn = datetime.utcnow()
133133
self.details = {}
134134

135+
def __copy__(self):
136+
new_instance = RaygunMessage()
137+
new_instance.details = self.details.copy()
138+
new_instance.occurredOn = self.occurredOn
139+
return new_instance
140+
141+
def copy(self):
142+
return self.__copy__()
143+
135144
def get_error(self):
136145
return self.details.get("error")
137146

python3/raygun4py/raygunprovider.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ def _create_message(
295295
)
296296

297297
def _transform_message(self, message):
298+
message = message.copy()
298299
message = utilities.ignore_exceptions(self.ignored_exceptions, message)
299300

300301
if message is not None:
@@ -314,6 +315,7 @@ def _transform_message(self, message):
314315
return message
315316

316317
def _post(self, raygunMessage):
318+
raygunMessage = raygunMessage.copy()
317319
options = {
318320
"enforce_payload_size_limit": self.enforce_payload_size_limit,
319321
"log_payload_size_limit_breaches": self.log_payload_size_limit_breaches,

python3/raygun4py/utilities.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ def ignore_exceptions(ignored_exceptions, message):
1212

1313

1414
def filter_keys(filtered_keys, object):
15-
iteration_target = object
16-
1715
if isinstance(object, raygunmsgs.RaygunMessage):
1816
iteration_target = dict(object.__dict__)
17+
else:
18+
iteration_target = dict(object)
1919

2020
for key in iter(iteration_target.keys()):
2121
if isinstance(iteration_target[key], dict):
@@ -31,8 +31,9 @@ def filter_keys(filtered_keys, object):
3131
iteration_target[key] = "<filtered>"
3232

3333
if isinstance(object, raygunmsgs.RaygunMessage):
34-
object.__dict__.update(iteration_target)
35-
return object
34+
updated_object = object.copy()
35+
updated_object.__dict__.update(iteration_target)
36+
return updated_object
3637

3738
return iteration_target
3839

python3/tests/test_raygunprovider.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -140,46 +140,46 @@ def create_dummy_message(self):
140140
def test_message_with_error(self):
141141
msg = self.create_dummy_message()
142142
self.sender.on_grouping_key(self.the_callback_with_error)
143-
self.sender._transform_message(msg)
143+
msg =self.sender._transform_message(msg)
144144
self.assertEqual(msg.get_details()["groupingKey"], "Exception: None")
145145

146146
def test_groupingkey_is_not_none_with_callback(self):
147147
msg = self.create_dummy_message()
148148
self.sender.on_grouping_key(self.the_callback)
149149
self.key = "foo"
150-
self.sender._transform_message(msg)
150+
msg =self.sender._transform_message(msg)
151151

152152
self.assertIsNotNone(msg.get_details()["groupingKey"])
153153

154154
def test_groupingkey_is_set_with_callback(self):
155155
msg = self.create_dummy_message()
156156
self.sender.on_grouping_key(self.the_callback)
157157
self.key = "foo"
158-
self.sender._transform_message(msg)
158+
msg = self.sender._transform_message(msg)
159159

160160
self.assertEqual(msg.get_details()["groupingKey"], "foo")
161161

162162
def test_groupingkey_is_string_with_callback(self):
163163
msg = self.create_dummy_message()
164164
self.sender.on_grouping_key(self.the_callback)
165165
self.key = "foo"
166-
self.sender._transform_message(msg)
166+
msg =self.sender._transform_message(msg)
167167

168168
self.assertIsInstance(msg.get_details()["groupingKey"], str)
169169

170170
def test_groupingkey_is_none_when_not_string_returned_from_callback(self):
171171
msg = self.create_dummy_message()
172172
self.sender.on_grouping_key(self.the_callback)
173173
self.key = object
174-
self.sender._transform_message(msg)
174+
msg = self.sender._transform_message(msg)
175175

176176
self.assertIsNone(msg.get_details()["groupingKey"])
177177

178178
def test_groupingkey_is_none_when_empty_string_returned_from_callback(self):
179179
msg = self.create_dummy_message()
180180
self.sender.on_grouping_key(self.the_callback)
181181
self.key = ""
182-
self.sender._transform_message(msg)
182+
msg = self.sender._transform_message(msg)
183183

184184
self.assertIsNone(msg.get_details()["groupingKey"])
185185

@@ -191,7 +191,7 @@ def test_groupingkey_is_set_when_ok_length_string_returned_from_callback(self):
191191
for i in range(0, 99):
192192
self.key += "a"
193193

194-
self.sender._transform_message(msg)
194+
msg =self.sender._transform_message(msg)
195195
self.assertEqual(msg.get_details()["groupingKey"], self.key)
196196

197197
def test_groupingkey_is_none_when_too_long_string_returned_from_callback(self):
@@ -202,7 +202,7 @@ def test_groupingkey_is_none_when_too_long_string_returned_from_callback(self):
202202
for i in range(0, 100):
203203
self.key += "a"
204204

205-
self.sender._transform_message(msg)
205+
msg = self.sender._transform_message(msg)
206206
self.assertIsNone(msg.get_details()["groupingKey"])
207207

208208

python3/tests/test_utilities.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,22 @@ class TestRaygunUtilities(unittest.TestCase):
77
def test_filter_keys(self):
88
test_obj = {"foo": "bar", "baz": "qux"}
99

10-
utilities.filter_keys(["foo"], test_obj)
10+
test_obj = utilities.filter_keys(["foo"], test_obj)
1111

1212
self.assertEqual(test_obj["foo"], "<filtered>")
1313

1414
def test_filter_keys_recursive(self):
1515
test_obj = {"foo": "bar", "baz": "qux", "boo": {"foo": "qux"}}
1616

17-
utilities.filter_keys(["foo"], test_obj)
17+
test_obj = utilities.filter_keys(["foo"], test_obj)
1818

1919
self.assertEqual(test_obj["foo"], "<filtered>")
2020
self.assertEqual(test_obj["boo"]["foo"], "<filtered>")
2121

2222
def test_filter_keys_with_wildcard(self):
2323
test_obj = {"foobr": "bar", "foobz": "baz", "fooqx": "foo", "baz": "qux"}
2424

25-
utilities.filter_keys(["foo*"], test_obj)
25+
test_obj = utilities.filter_keys(["foo*"], test_obj)
2626

2727
self.assertEqual(test_obj["foobr"], "<filtered>")
2828
self.assertEqual(test_obj["foobz"], "<filtered>")

0 commit comments

Comments
 (0)