Merge ~cjwatson/lazr.restful:fix-more-flake8 into lazr.restful:main

Proposed by Colin Watson
Status: Merged
Merged at revision: 23ec6265b2c4965c47d7ebc1f02be989ee5e3ed7
Proposed branch: ~cjwatson/lazr.restful:fix-more-flake8
Merge into: lazr.restful:main
Diff against target: 322 lines (+64/-49)
5 files modified
src/lazr/restful/metazcml.py (+8/-2)
src/lazr/restful/tales.py (+0/-8)
src/lazr/restful/tests/test_error.py (+23/-5)
src/lazr/restful/tests/test_webservice.py (+16/-28)
tox.ini (+17/-6)
Reviewer Review Type Date Requested Status
Ioana Lasc (community) Approve
Review via email: mp+412229@code.launchpad.net

Commit message

Fix several more problems noticed by flake8

To post a comment you must log in.
Revision history for this message
Ioana Lasc (ilasc) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/lazr/restful/metazcml.py b/src/lazr/restful/metazcml.py
index 4e7ec93..1fe9422 100644
--- a/src/lazr/restful/metazcml.py
+++ b/src/lazr/restful/metazcml.py
@@ -263,9 +263,15 @@ def find_exported_interfaces(module):
263 """263 """
264 try:264 try:
265 module_all = set(module.__all__)265 module_all = set(module.__all__)
266 is_exported_name = lambda name: name in module_all266
267 def is_exported_name(name):
268 return name in module_all
269
267 except AttributeError:270 except AttributeError:
268 is_exported_name = lambda name: not name.startswith("_")271
272 def is_exported_name(name):
273 return not name.startswith("_")
274
269 return (275 return (
270 interface276 interface
271 for name, interface in inspect.getmembers(277 for name, interface in inspect.getmembers(
diff --git a/src/lazr/restful/tales.py b/src/lazr/restful/tales.py
index 24d7e45..2968667 100644
--- a/src/lazr/restful/tales.py
+++ b/src/lazr/restful/tales.py
@@ -378,14 +378,6 @@ class WadlEntryResourceAPI(WadlResourceAPI):
378 def type_link(self):378 def type_link(self):
379 return self.resource.type_url379 return self.resource.type_url
380380
381 @property
382 def fields_with_values(self):
383 """Return all of this entry's Field objects."""
384 fields = []
385 for name, field in getFieldsInOrder(self.schema):
386 fields.append({"field": field, "value": "foo"})
387 return fields
388
389381
390class WadlCollectionResourceAPI(WadlResourceAPI):382class WadlCollectionResourceAPI(WadlResourceAPI):
391 "Namespace for WADL functions that operate on collection resources."383 "Namespace for WADL functions that operate on collection resources."
diff --git a/src/lazr/restful/tests/test_error.py b/src/lazr/restful/tests/test_error.py
index b667dbc..d407ccb 100644
--- a/src/lazr/restful/tests/test_error.py
+++ b/src/lazr/restful/tests/test_error.py
@@ -17,9 +17,13 @@ from zope.component import getGlobalSiteManager
17from zope.interface import Interface17from zope.interface import Interface
1818
19from lazr.restful.declarations import error_status19from lazr.restful.declarations import error_status
20from lazr.restful._resource import ReadWriteResource, UnknownEntryAdapter20from lazr.restful._resource import (
21 EntryAdapterUtility,
22 ReadWriteResource,
23 UnknownEntryAdapter,
24)
21from lazr.restful.error import expose25from lazr.restful.error import expose
22from lazr.restful.interfaces import IWebServiceLayer26from lazr.restful.interfaces import IWebServiceLayer, IWebServiceVersion
23from lazr.restful.testing.webservice import FakeRequest27from lazr.restful.testing.webservice import FakeRequest
2428
2529
@@ -187,21 +191,35 @@ class ErrorsTestCase(unittest.TestCase):
187 def test_missing_adapter(self):191 def test_missing_adapter(self):
188 # If there is no multi-adapter from the entry interface (IMyEntry) and192 # If there is no multi-adapter from the entry interface (IMyEntry) and
189 # a request to IEntry an exception is raised.193 # a request to IEntry an exception is raised.
194 class IWebServiceTestRequestBeta(IWebServiceVersion):
195 pass
196
190 class IMyEntry(Interface):197 class IMyEntry(Interface):
191 pass198 pass
192199
200 sm = getGlobalSiteManager()
201 sm.registerUtility(
202 IWebServiceTestRequestBeta, IWebServiceVersion, name="beta"
203 )
204 self.addCleanup(
205 sm.unregisterUtility,
206 IWebServiceTestRequestBeta,
207 IWebServiceVersion,
208 name="beta",
209 )
210 beta_request = FakeRequest(version="beta")
193 # Since the test wants to inspect the exception message (below) we're211 # Since the test wants to inspect the exception message (below) we're
194 # not using self.assertRaises).212 # not using self.assertRaises).
195 try:213 try:
196 EntryAdapterUtility.forSchemaInterface(IMyEntry, self.beta_request)214 EntryAdapterUtility.forSchemaInterface(IMyEntry, beta_request)
197 except Exception as e:215 except Exception as e:
198 self.assertTrue(isinstance(e, Exception))216 self.assertTrue(isinstance(e, Exception))
199217
200 # The exception's message explains what went wrong.218 # The exception's message explains what went wrong.
201 self.assertTrue(219 self.assertEqual(
202 str(e),
203 "No IEntry adapter found for IMyEntry "220 "No IEntry adapter found for IMyEntry "
204 "(web service version: beta).",221 "(web service version: beta).",
222 str(e),
205 )223 )
206 else:224 else:
207 self.fail(225 self.fail(
diff --git a/src/lazr/restful/tests/test_webservice.py b/src/lazr/restful/tests/test_webservice.py
index 399866a..4864150 100644
--- a/src/lazr/restful/tests/test_webservice.py
+++ b/src/lazr/restful/tests/test_webservice.py
@@ -179,15 +179,11 @@ class EntryTestCase(WebServiceTestCase):
179 return request.publication.application.toWADL()179 return request.publication.application.toWADL()
180180
181 @contextmanager181 @contextmanager
182 def entry_resource(182 def entry_resource(self, entry_implementation, *implementation_args):
183 self, entry_interface, entry_implementation, *implementation_args
184 ):
185 """Create a request to an entry resource, and yield the resource."""183 """Create a request to an entry resource, and yield the resource."""
186 entry_class = get_resource_factory(entry_interface, IEntry)
187 data_object = entry_implementation(*implementation_args)184 data_object = entry_implementation(*implementation_args)
188185
189 with self.request() as request:186 with self.request() as request:
190 entry = entry_class(data_object, request)
191 resource = EntryResource(data_object, request)187 resource = EntryResource(data_object, request)
192 yield resource188 yield resource
193189
@@ -305,7 +301,7 @@ class TestEntryWebLink(EntryTestCase):
305301
306 # Now a representation of IHasOneField includes a302 # Now a representation of IHasOneField includes a
307 # 'web_link'.303 # 'web_link'.
308 with self.entry_resource(IHasOneField, HasOneField, "") as resource:304 with self.entry_resource(HasOneField, "") as resource:
309 representation = resource.toDataForJSON()305 representation = resource.toDataForJSON()
310 self.assertEqual(representation["self_link"], StubAbsoluteURL.URL)306 self.assertEqual(representation["self_link"], StubAbsoluteURL.URL)
311 self.assertEqual(307 self.assertEqual(
@@ -340,7 +336,7 @@ class TestEntryWebLink(EntryTestCase):
340 # entry representations.336 # entry representations.
341 self._register_url_adapter(IHasOneField)337 self._register_url_adapter(IHasOneField)
342338
343 with self.entry_resource(IHasOneField, HasOneField, "") as resource:339 with self.entry_resource(HasOneField, "") as resource:
344 representation = resource.toDataForJSON()340 representation = resource.toDataForJSON()
345 self.assertEqual(representation["self_link"], StubAbsoluteURL.URL)341 self.assertEqual(representation["self_link"], StubAbsoluteURL.URL)
346 self.assertFalse("web_link" in representation)342 self.assertFalse("web_link" in representation)
@@ -376,9 +372,7 @@ class TestSuppressWebLink(EntryTestCase):
376 def test_entry_omits_web_link_when_suppressed(self):372 def test_entry_omits_web_link_when_suppressed(self):
377 self._register_website_url_space(IHasNoWebLink)373 self._register_website_url_space(IHasNoWebLink)
378374
379 with self.entry_resource(IHasNoWebLink, HasNoWebLink, "") as (375 with self.entry_resource(HasNoWebLink, "") as resource:
380 resource
381 ):
382 representation = resource.toDataForJSON()376 representation = resource.toDataForJSON()
383 self.assertEqual(representation["self_link"], StubAbsoluteURL.URL)377 self.assertEqual(representation["self_link"], StubAbsoluteURL.URL)
384 self.assertFalse("web_link" in representation)378 self.assertFalse("web_link" in representation)
@@ -442,7 +436,7 @@ class TestEntryWrite(EntryTestCase):
442 def test_applyChanges_rejects_nonexistent_web_link(self):436 def test_applyChanges_rejects_nonexistent_web_link(self):
443 # If web_link is not published, applyChanges rejects a request437 # If web_link is not published, applyChanges rejects a request
444 # that references it.438 # that references it.
445 with self.entry_resource(IHasOneField, HasOneField, "") as resource:439 with self.entry_resource(HasOneField, "") as resource:
446 errors = resource.applyChanges({"web_link": u"some_value"})440 errors = resource.applyChanges({"web_link": u"some_value"})
447 self.assertEqual(441 self.assertEqual(
448 errors,442 errors,
@@ -453,7 +447,7 @@ class TestEntryWrite(EntryTestCase):
453 """applyChanges rejects an attempt to change web_link ."""447 """applyChanges rejects an attempt to change web_link ."""
454 self._register_website_url_space(IHasOneField)448 self._register_website_url_space(IHasOneField)
455449
456 with self.entry_resource(IHasOneField, HasOneField, "") as resource:450 with self.entry_resource(HasOneField, "") as resource:
457 errors = resource.applyChanges({"web_link": u"some_value"})451 errors = resource.applyChanges({"web_link": u"some_value"})
458 self.assertEqual(452 self.assertEqual(
459 errors, "web_link: You tried to modify a read-only attribute."453 errors, "web_link: You tried to modify a read-only attribute."
@@ -464,7 +458,7 @@ class TestEntryWrite(EntryTestCase):
464 # value isn't actually being changed.458 # value isn't actually being changed.
465 self._register_website_url_space(IHasOneField)459 self._register_website_url_space(IHasOneField)
466460
467 with self.entry_resource(IHasOneField, HasOneField, "") as resource:461 with self.entry_resource(HasOneField, "") as resource:
468 existing_web_link = resource.toDataForJSON()["web_link"]462 existing_web_link = resource.toDataForJSON()["web_link"]
469 representation = simplejson.loads(463 representation = simplejson.loads(
470 resource.applyChanges({"web_link": existing_web_link})464 resource.applyChanges({"web_link": existing_web_link})
@@ -476,7 +470,7 @@ class TestEntryWrite(EntryTestCase):
476 # representation of the (unchanged) resource.470 # representation of the (unchanged) resource.
477 self._register_website_url_space(IHasOneField)471 self._register_website_url_space(IHasOneField)
478472
479 with self.entry_resource(IHasOneField, HasOneField, "") as resource:473 with self.entry_resource(HasOneField, "") as resource:
480 existing_representation = resource.toDataForJSON()474 existing_representation = resource.toDataForJSON()
481 representation = simplejson.loads(resource.applyChanges({}))475 representation = simplejson.loads(resource.applyChanges({}))
482 self.assertEqual(representation, existing_representation)476 self.assertEqual(representation, existing_representation)
@@ -489,7 +483,6 @@ class TestEntryWrite(EntryTestCase):
489 self._register_website_url_space(IHasFieldExportedAsDifferentName)483 self._register_website_url_space(IHasFieldExportedAsDifferentName)
490484
491 with self.entry_resource(485 with self.entry_resource(
492 IHasFieldExportedAsDifferentName,
493 HasFieldExportedAsDifferentName,486 HasFieldExportedAsDifferentName,
494 u"initial value",487 u"initial value",
495 ) as resource:488 ) as resource:
@@ -521,9 +514,7 @@ class TestEntryWriteForRestrictedField(EntryTestCase):
521 expose the right interface, it will raise an exception.514 expose the right interface, it will raise an exception.
522 """515 """
523 self._register_url_adapter(IHasRestrictedField)516 self._register_url_adapter(IHasRestrictedField)
524 with self.entry_resource(517 with self.entry_resource(HasRestrictedField, "") as resource:
525 IHasRestrictedField, HasRestrictedField, ""
526 ) as resource:
527 entry = resource.entry518 entry = resource.entry
528 entry.schema["a_field"].restrict_to_interface = IHasRestrictedField519 entry.schema["a_field"].restrict_to_interface = IHasRestrictedField
529 self.assertEqual(entry.a_field, "")520 self.assertEqual(entry.a_field, "")
@@ -558,7 +549,7 @@ class HTMLRepresentationTest(EntryTestCase):
558549
559 def test_entry_html_representation_is_utf8(self):550 def test_entry_html_representation_is_utf8(self):
560 with self.entry_resource(551 with self.entry_resource(
561 IHasOneField, HasOneField, self.unicode_message552 HasOneField, self.unicode_message
562 ) as resource:553 ) as resource:
563 html = resource.do_GET()554 html = resource.do_GET()
564 self.assertTrue(self.utf8_message in html)555 self.assertTrue(self.utf8_message in html)
@@ -592,7 +583,6 @@ class JSONPlusHTMLRepresentationTest(EntryTestCase):
592 def resource(self, value_1="value 1", value_2="value 2"):583 def resource(self, value_1="value 1", value_2="value 2"):
593 """Simplify the entry_resource call."""584 """Simplify the entry_resource call."""
594 with self.entry_resource(585 with self.entry_resource(
595 IHasTwoFields,
596 HasTwoFields,586 HasTwoFields,
597 six.text_type(value_1),587 six.text_type(value_1),
598 six.text_type(value_2),588 six.text_type(value_2),
@@ -721,9 +711,7 @@ class UnicodeErrorTestCase(EntryTestCase):
721 self._register_url_adapter(ICanBeSetToUnicodeValue)711 self._register_url_adapter(ICanBeSetToUnicodeValue)
722712
723 def test_unicode_error(self):713 def test_unicode_error(self):
724 with self.entry_resource(714 with self.entry_resource(CanBeSetToUnicodeValue, "") as resource:
725 ICanBeSetToUnicodeValue, CanBeSetToUnicodeValue, ""
726 ) as resource:
727715
728 # This will raise an exception, which will cause the request716 # This will raise an exception, which will cause the request
729 # to fail with a 400 error code.717 # to fail with a 400 error code.
@@ -1135,7 +1123,7 @@ class NotificationsProviderTest(EntryTestCase):
1135 @contextmanager1123 @contextmanager
1136 def resource(self):1124 def resource(self):
1137 """Simplify the entry_resource call."""1125 """Simplify the entry_resource call."""
1138 with self.entry_resource(IHasOneField, HasOneField, "") as resource:1126 with self.entry_resource(HasOneField, "") as resource:
1139 yield resource1127 yield resource
11401128
1141 def test_response_notifications(self):1129 def test_response_notifications(self):
@@ -1165,7 +1153,7 @@ class EventTestCase(EntryTestCase):
1165 def test_event_fired_when_changeset_is_not_empty(self):1153 def test_event_fired_when_changeset_is_not_empty(self):
1166 # Passing in a non-empty changeset spawns an1154 # Passing in a non-empty changeset spawns an
1167 # IObjectModifiedEvent.1155 # IObjectModifiedEvent.
1168 with self.entry_resource(IHasOneField, HasOneField, "") as resource:1156 with self.entry_resource(HasOneField, "") as resource:
1169 resource.applyChanges({"a_field": u"Some value"})1157 resource.applyChanges({"a_field": u"Some value"})
1170 events = eventtesting.getEvents()1158 events = eventtesting.getEvents()
1171 self.assertEqual(len(events), 1)1159 self.assertEqual(len(events), 1)
@@ -1176,7 +1164,7 @@ class EventTestCase(EntryTestCase):
1176 def test_event_not_fired_when_changeset_is_empty(self):1164 def test_event_not_fired_when_changeset_is_empty(self):
1177 # Passing in an empty changeset does not spawn an1165 # Passing in an empty changeset does not spawn an
1178 # IObjectModifiedEvent.1166 # IObjectModifiedEvent.
1179 with self.entry_resource(IHasOneField, HasOneField, "") as resource:1167 with self.entry_resource(HasOneField, "") as resource:
1180 resource.applyChanges({})1168 resource.applyChanges({})
1181 self.assertEqual(len(eventtesting.getEvents()), 0)1169 self.assertEqual(len(eventtesting.getEvents()), 0)
11821170
@@ -1193,7 +1181,7 @@ class MalformedRequest(EntryTestCase):
11931181
1194 def test_multiple_named_operations_generate_error_on_GET(self):1182 def test_multiple_named_operations_generate_error_on_GET(self):
1195 with self.entry_resource(1183 with self.entry_resource(
1196 IHasOneField, HasOneField, self.unicode_message1184 HasOneField, self.unicode_message
1197 ) as resource:1185 ) as resource:
1198 resource.request.form["ws.op"] = ["foo", "bar"]1186 resource.request.form["ws.op"] = ["foo", "bar"]
1199 result = resource.do_GET()1187 result = resource.do_GET()
@@ -1202,7 +1190,7 @@ class MalformedRequest(EntryTestCase):
12021190
1203 def test_multiple_named_operations_generate_error_on_POST(self):1191 def test_multiple_named_operations_generate_error_on_POST(self):
1204 with self.entry_resource(1192 with self.entry_resource(
1205 IHasOneField, HasOneField, self.unicode_message1193 HasOneField, self.unicode_message
1206 ) as resource:1194 ) as resource:
1207 resource.request.form["ws.op"] = ["foo", "bar"]1195 resource.request.form["ws.op"] = ["foo", "bar"]
1208 result = resource.do_POST()1196 result = resource.do_POST()
diff --git a/tox.ini b/tox.ini
index 8ea8d6d..4030fe5 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,14 @@
1[tox]1[tox]
2envlist =2envlist =
3 py27,py35,py36,py37,py38,py39,py310,docs3 lint
4 py27
5 py35
6 py36
7 py37
8 py38
9 py39
10 py310
11 docs
412
5[testenv]13[testenv]
6deps =14deps =
@@ -9,6 +17,14 @@ deps =
9commands =17commands =
10 zope-testrunner --test-path src --tests-pattern ^tests {posargs}18 zope-testrunner --test-path src --tests-pattern ^tests {posargs}
1119
20[testenv:lint]
21basepython = python3.8
22deps =
23 pre-commit
24skip_install = true
25commands =
26 pre-commit run -a
27
12[testenv:docs]28[testenv:docs]
13basepython = python329basepython = python3
14deps =30deps =
@@ -23,8 +39,3 @@ ignore =
23 # W503 and W504 are mutually exclusive39 # W503 and W504 are mutually exclusive
24 W50340 W503
25 W50441 W504
26 # todo
27 E731
28 F821
29 F841
30 W605

Subscribers

People subscribed via source and target branches