From 0a22643cef2b14b626bf9997795e0aac33b77f21 Mon Sep 17 00:00:00 2001 From: Ryan Barrett Date: Mon, 15 Jul 2024 20:09:20 -0700 Subject: [PATCH] User.get_or_create: merge enabled_protocols for #1034 --- models.py | 8 +++++--- tests/test_models.py | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/models.py b/models.py index 60eec6eb..e515d6f8 100644 --- a/models.py +++ b/models.py @@ -263,7 +263,7 @@ class User(StringIdModel, metaclass=ProtocolUserMeta): user.existing = True # TODO: propagate more fields? - for field in ['direct', 'enabled_protocols', 'obj', 'obj_key']: + for field in ['direct', 'obj', 'obj_key']: old_val = getattr(user, field, None) new_val = kwargs.get(field) if ((old_val is None and new_val is not None) @@ -271,6 +271,10 @@ class User(StringIdModel, metaclass=ProtocolUserMeta): setattr(user, field, new_val) user.put() + if enabled_protocols := kwargs.get('enabled_protocols'): + user.enabled_protocols = (set(user.enabled_protocols) + | set(enabled_protocols)) + if not propagate: return user else: @@ -496,8 +500,6 @@ class User(StringIdModel, metaclass=ProtocolUserMeta): def disable(): user = self.key.get() remove(user.enabled_protocols, to_proto.LABEL) - # TODO: delete copy user - # https://github.com/snarfed/bridgy-fed/issues/783 user.put() disable() diff --git a/tests/test_models.py b/tests/test_models.py index 2dddd184..8862714c 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -69,6 +69,13 @@ class UserTest(TestCase): user.direct = True self.assert_entities_equal(same, user, ignore=['updated']) + def test_get_or_create_existing_merge_enabled_protocols(self): + self.user.enabled_protocols = ['fake'] + self.user.put() + + user = Web.get_or_create('y.za', enabled_protocols=['other']) + self.assertCountEqual(['fake', 'other'], user.enabled_protocols) + @patch.object(Fake, 'DEFAULT_ENABLED_PROTOCOLS', ['other']) def test_get_or_create_propagate_fake_other(self): user = Fake.get_or_create('fake:user', propagate=True)