Merge lp:~fwierzbicki/txaws/dont-log-stacktraces-for-4xx-errors into lp:txaws

Proposed by Frank Wierzbicki
Status: Merged
Merged at revision: 101
Proposed branch: lp:~fwierzbicki/txaws/dont-log-stacktraces-for-4xx-errors
Merge into: lp:txaws
Diff against target: 129 lines (+28/-11)
2 files modified
txaws/server/resource.py (+8/-1)
txaws/server/tests/test_resource.py (+20/-10)
To merge this branch: bzr merge lp:~fwierzbicki/txaws/dont-log-stacktraces-for-4xx-errors
Reviewer Review Type Date Requested Status
Duncan McGreggor Approve
Review via email: mp+78314@code.launchpad.net

Description of the change

This branch logs only a message and not an error/stacktrace for 4xx errors. This fixes a bug in the downstream project clouddeck. See linked bug.

To post a comment you must log in.
Revision history for this message
Duncan McGreggor (oubiwann) wrote :

+1 from me; even without the downstream impact, this is a good change.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'txaws/server/resource.py'
2--- txaws/server/resource.py 2011-09-23 08:20:46 +0000
3+++ txaws/server/resource.py 2011-10-05 21:18:23 +0000
4@@ -98,13 +98,20 @@
5 return response
6
7 def write_error(failure):
8- log.err(failure)
9 if failure.check(APIError):
10 status = failure.value.status
11+
12+ # Don't log the stack traces for 4xx responses.
13+ if status < 400 or status >= 500:
14+ log.err(failure)
15+ else:
16+ log.msg("status: %s message: %s" % (status, failure.value))
17+
18 bytes = failure.value.response
19 if bytes is None:
20 bytes = self.dump_error(failure.value, request)
21 else:
22+ log.err(failure)
23 bytes = str(failure.value)
24 status = 500
25 request.setResponseCode(status)
26
27=== modified file 'txaws/server/tests/test_resource.py'
28--- txaws/server/tests/test_resource.py 2011-09-23 08:20:46 +0000
29+++ txaws/server/tests/test_resource.py 2011-10-05 21:18:23 +0000
30@@ -240,7 +240,8 @@
31 request = FakeRequest(query.params, endpoint)
32
33 def check(ignored):
34- self.flushLoggedErrors()
35+ errors = self.flushLoggedErrors()
36+ self.assertEquals(0, len(errors))
37 self.assertEqual("InvalidSignature - SignatureVersion '2' "
38 "not supported", request.response)
39 self.assertEqual(403, request.code)
40@@ -262,7 +263,8 @@
41 self.api.execute = lambda call: 1 / 0
42
43 def check(ignored):
44- self.flushLoggedErrors()
45+ errors = self.flushLoggedErrors()
46+ self.assertEquals(1, len(errors))
47 self.assertTrue(request.finished)
48 self.assertEqual("integer division or modulo by zero",
49 request.response)
50@@ -284,7 +286,8 @@
51 request = FakeRequest(query.params, endpoint)
52
53 def check(ignored):
54- self.flushLoggedErrors()
55+ errors = self.flushLoggedErrors()
56+ self.assertEquals(0, len(errors))
57 self.assertEqual("MissingParameter - The request must contain "
58 "the parameter Action", request.response)
59 self.assertEqual(400, request.code)
60@@ -300,7 +303,8 @@
61 request = FakeRequest(query.params, endpoint)
62
63 def check(ignored):
64- self.flushLoggedErrors()
65+ errors = self.flushLoggedErrors()
66+ self.assertEquals(0, len(errors))
67 self.assertEqual("InvalidAction - The action FooBar is not valid"
68 " for this web service.", request.response)
69 self.assertEqual(400, request.code)
70@@ -323,7 +327,8 @@
71 request = FakeRequest(query.params, endpoint)
72
73 def check(ignored):
74- self.flushLoggedErrors()
75+ errors = self.flushLoggedErrors()
76+ self.assertEquals(0, len(errors))
77 self.assertEqual("InvalidAction - The action CantDoIt is not "
78 "valid for this web service.", request.response)
79 self.assertEqual(400, request.code)
80@@ -344,7 +349,8 @@
81 request = FakeRequest(query.params, endpoint)
82
83 def check(ignored):
84- self.flushLoggedErrors()
85+ errors = self.flushLoggedErrors()
86+ self.assertEquals(0, len(errors))
87 self.assertEqual("InvalidAction - The action FooBar is not valid"
88 " for this web service.", request.response)
89 self.assertEqual(400, request.code)
90@@ -363,7 +369,8 @@
91 request = FakeRequest(query.params, endpoint)
92
93 def check(ignored):
94- self.flushLoggedErrors()
95+ errors = self.flushLoggedErrors()
96+ self.assertEquals(0, len(errors))
97 self.assertEqual("AuthFailure - No user with access key 'access'",
98 request.response)
99 self.assertEqual(401, request.code)
100@@ -383,7 +390,8 @@
101 request = FakeRequest(query.params, endpoint)
102
103 def check(ignored):
104- self.flushLoggedErrors()
105+ errors = self.flushLoggedErrors()
106+ self.assertEquals(0, len(errors))
107 self.assertEqual("SignatureDoesNotMatch - The request signature "
108 "we calculated does not match the signature you "
109 "provided. Check your key and signing method.",
110@@ -407,7 +415,8 @@
111 request = FakeRequest(query.params, endpoint)
112
113 def check(ignored):
114- self.flushLoggedErrors()
115+ errors = self.flushLoggedErrors()
116+ self.assertEquals(0, len(errors))
117 self.assertEqual(
118 "InvalidParameterCombination - The parameter Timestamp"
119 " cannot be used with the parameter Expires",
120@@ -450,7 +459,8 @@
121 request = FakeRequest(query.params, endpoint)
122
123 def check(ignored):
124- self.flushLoggedErrors()
125+ errors = self.flushLoggedErrors()
126+ self.assertEquals(0, len(errors))
127 self.assertEqual(
128 "RequestExpired - Request has expired. Expires date is"
129 " 2010-01-01T12:00:00Z", request.response)

Subscribers

People subscribed via source and target branches