gh-106664: selectors: add get() method to _SelectorMapping (#106665)

It can be used to avoid raising and catching KeyError twice via __getitem__.

Co-authored-by: Inada Naoki <songofacandy@gmail.com>
This commit is contained in:
J. Nick Koston 2023-07-13 09:18:53 -10:00 committed by GitHub
parent e6e0ea0113
commit 8d2f3c36ca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 5 deletions

View file

@ -223,6 +223,8 @@ class BaseSelectorTestCase:
self.assertRaises(RuntimeError, s.get_key, wr)
self.assertRaises(KeyError, mapping.__getitem__, rd)
self.assertRaises(KeyError, mapping.__getitem__, wr)
self.assertEqual(mapping.get(rd), None)
self.assertEqual(mapping.get(wr), None)
def test_get_key(self):
s = self.SELECTOR()
@ -241,13 +243,17 @@ class BaseSelectorTestCase:
self.addCleanup(s.close)
rd, wr = self.make_socketpair()
sentinel = object()
keys = s.get_map()
self.assertFalse(keys)
self.assertEqual(len(keys), 0)
self.assertEqual(list(keys), [])
self.assertEqual(keys.get(rd), None)
self.assertEqual(keys.get(rd, sentinel), sentinel)
key = s.register(rd, selectors.EVENT_READ, "data")
self.assertIn(rd, keys)
self.assertEqual(key, keys.get(rd))
self.assertEqual(key, keys[rd])
self.assertEqual(len(keys), 1)
self.assertEqual(list(keys), [rd.fileno()])