diff --git a/tests/test_web.py b/tests/test_web.py index b75a5e5..3374a5a 100644 --- a/tests/test_web.py +++ b/tests/test_web.py @@ -495,6 +495,17 @@ class WebTest(TestCase): self.assert_entities_equal(user, Web.get_by_id('foo.bar')) self.assertIsNone(Web.get_by_id('..foo.bar.')) + def test_get_or_create_existing(self, *_): + user = Web.get_or_create('user.com') + self.assertEqual('user.com', user.key.id()) + self.assert_entities_equal(user, self.user) + + def test_get_or_create_existing_opted_out(self, *_): + self.user.obj.mf2['properties']['summary'] = '#nobridge' + self.user.obj.put() + self.user.put() + self.assertIsNone(Web.get_or_create('user.com')) + def test_bad_source_url(self, *mocks): orig_count = Object.query().count() diff --git a/web.py b/web.py index 7cc2f53..9350b12 100644 --- a/web.py +++ b/web.py @@ -94,7 +94,11 @@ class Web(User, Protocol): Normalizing currently consists of lower casing and removing leading and trailing dots. """ - domain = cls.key_for(id).id().lower().strip('.') + key = cls.key_for(id) + if not key: + return None # opted out + + domain = key.id().lower().strip('.') return super().get_or_create(domain, **kwargs) @ndb.ComputedProperty