diff --git a/README.rst b/README.rst index 9800edf..7917c46 100644 --- a/README.rst +++ b/README.rst @@ -134,12 +134,12 @@ Fedora-messaging has a replay and reconsume commands since version 3.7 http get https://apps.fedoraproject.org./datagrepper/v2/search \ topic== delta== -Example command for search of messages in topic org.fedoraproject.prod.fas.group.member.removed sent in the last day: +Example command for search of messages in topic org.fedoraproject.prod.ipa.group_remove_member.v1 sent in the last day: :: http get https://apps.fedoraproject.org/datagrepper/v2/search \ - topic==org.fedoraproject.prod.fas.groups.member.removed delta==86400 + topic==org.fedoraproject.prod.ipa.group_remove_member.v1 delta==86400 - Get the message ID and supply it to the fedora-messaging reconsume command, with local config: diff --git a/docs/pagure_fas_groups_sync.md b/docs/pagure_fas_groups_sync.md index 6cd3497..e9c100f 100644 --- a/docs/pagure_fas_groups_sync.md +++ b/docs/pagure_fas_groups_sync.md @@ -14,5 +14,5 @@ and remove/add users to pagure group based on the changes in FAS. The sync toddler accepts following topics. -* org.fedoraproject.*.fas.group.member.sponsor - New member added to group -* org.fedoraproject.*.toddlers.trigger.pagure_fas_groups_sync - Message triggered by toddlers cron +* `org.fedoraproject.*.ipa.group_add_member.v1` - New member added to group +* `org.fedoraproject.*.toddlers.trigger.pagure_fas_groups_sync` - Message triggered by toddlers cron diff --git a/poetry.lock b/poetry.lock index 88c1cac..6d74d72 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "arrow" @@ -1019,6 +1019,20 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "journal-to-fedora-messaging-messages" +version = "1.0.1" +description = "A schema package for messages sent by Journal to Fedora Messaging" +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "journal_to_fedora_messaging_messages-1.0.1-py3-none-any.whl", hash = "sha256:6eb7b01054b89bd304d16105066e47a15f6627ef022c56f4c3d05e48519a7ecf"}, + {file = "journal_to_fedora_messaging_messages-1.0.1.tar.gz", hash = "sha256:e9cc8295095fadf19285bb0b9439dca2db06dda2bf64fc96f521fa52f85c9d57"}, +] + +[package.dependencies] +fedora-messaging = ">=3.3.0,<4.0.0" + [[package]] name = "jsonpointer" version = "3.0.0" @@ -1409,20 +1423,6 @@ files = [ [package.extras] nicer-shell = ["ipython"] -[[package]] -name = "noggin-messages" -version = "1.1.0" -description = "Fedora Messaging message schemas for Noggin." -optional = false -python-versions = "<4.0.0,>=3.8.0" -files = [ - {file = "noggin_messages-1.1.0-py3-none-any.whl", hash = "sha256:c6d049ade672eac0aa81a1dba3f425235af03730a1a603dc728878b35833fdc3"}, - {file = "noggin_messages-1.1.0.tar.gz", hash = "sha256:78ce070a0c7b89824eef97ee79773681832bfc1b2eb7737845d7eb0d97dec730"}, -] - -[package.dependencies] -fedora-messaging = ">=2.0.1" - [[package]] name = "openidc-client" version = "0.6.0" @@ -2802,4 +2802,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "8048917cc41a98dbe75498694aff79dc8163adc6c309cad211ffc8840b6990e9" +content-hash = "f119d99c27f1863ecd18c636eea8a13305fd5ebfae74d6e883a69560cbf4c8d5" diff --git a/pyproject.toml b/pyproject.toml index 89db0d0..07b5f38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,6 @@ fedora-messaging-git-hook-messages = "^1.0.1" gitpython = "^3.1.43" koji = "^1.34.2" requests = "^2.32.3" -noggin-messages = "^1.1.0" pagure-messages = "^1.2.0" pygobject = "^3.48.2" python-fedora = "^1.1.1" @@ -30,6 +29,7 @@ pylibmc = "^1.6.3" ipalib = "^4.12.2" cryptography = "<44.0.0" ipaclient = "^4.12.2" +journal-to-fedora-messaging-messages = "^1.0.1" [tool.poetry.group.dev.dependencies] pytest = "*" diff --git a/tests/plugins/test_cleaning_packager_group.py b/tests/plugins/test_cleaning_packager_group.py index 747fbec..9cb67ea 100644 --- a/tests/plugins/test_cleaning_packager_group.py +++ b/tests/plugins/test_cleaning_packager_group.py @@ -5,12 +5,37 @@ Unit tests for `toddler.plugins.cleaning_packager_groups` import logging from unittest.mock import MagicMock, patch +from journal_to_fedora_messaging_messages.ipa import IpaGroupRemoveMemberV1 import pytest from toddlers.exceptions import PagureError import toddlers.plugins.cleaning_packager_groups as cleaning_packager_groups +@pytest.fixture +def group_remove_member_message(): + return IpaGroupRemoveMemberV1( + { + "IPA_API_PARAMS": ( + '{"cn": "packager", "all": false, "raw": false, "version": "2.254", ' + '"no_members": false, "user": ["lenkaseg"]}' + ), + "__REALTIME_TIMESTAMP": "1742838354523018", + "IPA_API_ACTOR": "agent@EXAMPLE.COM", + "IPA_API_COMMAND": "group_remove_member", + "IPA_API_RESULT": "SUCCESS", + "MESSAGE": ( + "[IPA.API] agent@EXAMPLE.COM: group_remove_member: SUCCESS [ldap2_139734790206096] " + '{"cn": "packager", "all": false, "raw": false, "version": "2.254", ' + '"no_members": false, "user": ["lenkaseg"]}' + ), + "_HOSTNAME": "ipa.example.com", + "_COMM": "httpd", + "PRIORITY": "5", + } + ) + + class TestAcceptTopic: """ Test class for `toddler.plugins.cleaning_packager_groups.CleanPackagerGroups.accepts_topic` @@ -28,9 +53,9 @@ class TestAcceptTopic: @pytest.mark.parametrize( "topic", [ - "org.fedoraproject.*.fas.group.member.removed", - "org.fedoraproject.prod.fas.group.member.removed", - "org.fedoraproject.stg.fas.group.member.removed", + "org.fedoraproject.*.ipa.group_remove_member.v1", + "org.fedoraproject.prod.ipa.group_remove_member.v1", + "org.fedoraproject.stg.ipa.group_remove_member.v1", ], ) def test_accepts_topic_valid(self, topic, toddler): @@ -50,35 +75,10 @@ class TestProcess: self.toddler_cls = cleaning_packager_groups.CleanPackagerGroups() self.toddler_cls._ipa_session = MagicMock() - def test_process(self): - """ - Assert that process is called correctly. - """ - config = {"pagure": {"pagure.prod.url"}, "pagure_stg": {"pagure.stg.url"}} - message = MagicMock() - message.body = { - "msg": {"agent": "lenkaseg", "group": "packager", "user": "patrikp"}, - "headers": { - "fedora_messaging_group_communishift-admins": True, - "fedora_messaging_schema": "noggin.group.member.sponsor.v1", - "fedora_messaging_severity": 20, - "fedora_messaging_user_lenkaseg": True, - "fedora_messaging_user_patrikp": True, - "priority": 0, - "sent-at": "2024-07-04T15:48:25+00:00", - }, - "id": "35d54838-b12c-49d5-949c-c503a71e7ae5", - "priority": 0, - "queue": "null", - "topic": "org.fedoraproject.stg.fas.group.member.remove", - } - - self.toddler_cls.process = MagicMock() - self.toddler_cls.process(config, message) - self.toddler_cls.process.assert_called_once_with(config, message) - @patch("toddlers.utils.pagure.set_pagure") - def test_not_packager_group(self, mock_set_pagure, caplog): + def test_not_packager_group( + self, mock_set_pagure, group_remove_member_message, caplog + ): """ Assert that if the group in the message is not "packager", plugin stops. """ @@ -90,58 +90,74 @@ class TestProcess: "pagure_stg": "https://stg.pagure.io", "watched_groups": ["packager"], } - message = MagicMock() - message.body = { - "msg": { - "group": "not-packager", - "user": "lenkaseg", - }, - "topic": "org.fedoraproject.stg.fas.group.member.remove", - } - self.toddler_cls.process(config, message) + group_remove_member_message.body["IPA_API_PARAMS"] = ( + '{"cn": "not-packager", "all": false, "raw": false, "version": "2.254", ' + '"no_members": false, "user": ["lenkaseg"]}' + ) + self.toddler_cls.process(config, group_remove_member_message) assert ( caplog.records[-1].message - == "User lenkaseg was not removed from packager group, but " + == "User(s) lenkaseg was not removed from packager group, but " "from not-packager group, nothing to do." ) @pytest.mark.parametrize( - "distgit_groups,ipa_groups,message_1,message_2,message_3,message_4", + "distgit_groups,ipa_groups,messages", ( ( ["group1", "group2"], {"result": {"memberof_group": ["group1", "group3"]}}, - "User lenkaseg removed from distgit group: group1", - "User lenkaseg removed from ipa group: group1", - "User lenkaseg should be removed from following groups: ['group1']", - "Ipa groups: ['group1', 'group3']", + ( + "Fetching all distgit groups:", + "Distgit groups found: ['group1', 'group2']", + "User lenkaseg was removed from packager group, removing from " + "packager-related groups as well.", + "User lenkaseg removed from distgit group: packager", + "Fetching groups user lenkaseg is member of in ipa:", + "Ipa groups: ['group1', 'group3']", + "User lenkaseg should be removed from following groups: ['group1']", + "User lenkaseg removed from ipa group: group1", + "User lenkaseg removed from distgit group: group1", + ), ), ( None, {"result": {"memberof_group": ["group1", "group3"]}}, - "No distgit groups found, bailing.", - "Distgit groups found: None", - "Fetching all distgit groups:", - "User lenkaseg was removed from packager group, removing from " - "packager-related groups as well.", + ( + "Fetching all distgit groups:", + "Distgit groups found: None", + "No distgit groups found, bailing.", + ), ), ( ["group1", "group2"], {"result": {"memberof_group": ["group3", "group4"]}}, - "Seems that user lenkaseg is not member of any groups shared " - "between ipa and distgit", - "Ipa groups: ['group3', 'group4']", - "Fetching groups user lenkaseg is member of in ipa:", - "User lenkaseg removed from distgit group: packager", + ( + "Fetching all distgit groups:", + "Distgit groups found: ['group1', 'group2']", + "User lenkaseg was removed from packager group, removing from " + "packager-related groups as well.", + "User lenkaseg removed from distgit group: packager", + "Fetching groups user lenkaseg is member of in ipa:", + "Ipa groups: ['group3', 'group4']", + "Seems that user lenkaseg is not member of any groups shared " + "between ipa and distgit", + ), ), ( ["group1", "group2"], {"result": {"memberof_group": []}}, - "Seems that user lenkaseg is not member of any groups " - "shared between ipa and distgit", - "Ipa groups: []", - "Fetching groups user lenkaseg is member of in ipa:", - "User lenkaseg removed from distgit group: packager", + ( + "Fetching all distgit groups:", + "Distgit groups found: ['group1', 'group2']", + "User lenkaseg was removed from packager group, removing from " + "packager-related groups as well.", + "User lenkaseg removed from distgit group: packager", + "Fetching groups user lenkaseg is member of in ipa:", + "Ipa groups: []", + "Seems that user lenkaseg is not member of any groups shared " + "between ipa and distgit", + ), ), ), ids=( @@ -157,10 +173,8 @@ class TestProcess: mock_pagure, distgit_groups, ipa_groups, - message_1, - message_2, - message_3, - message_4, + messages, + group_remove_member_message, caplog, ): """ @@ -178,16 +192,10 @@ class TestProcess: "pagure_stg": "https://example.stg.io", "watched_groups": ["packager"], } - message = MagicMock() - message.body = { - "msg": {"group": "packager", "user": "lenkaseg", "agent": "agent"}, - "topic": "org.fedoraproject.stg.fas.group.member.remove", - } - self.toddler_cls.process(config, message) - assert caplog.records[-1].message == message_1 - assert caplog.records[-2].message == message_2 - assert caplog.records[-3].message == message_3 - assert caplog.records[-4].message == message_4 + self.toddler_cls.process(config, group_remove_member_message) + recorded_messages = tuple(r.message for r in caplog.records) + print(recorded_messages) + assert recorded_messages == messages @pytest.mark.parametrize( "ipa_remove_member,error,message_1,message_2", @@ -215,6 +223,7 @@ class TestProcess: error, message_1, message_2, + group_remove_member_message, caplog, ): """ @@ -238,13 +247,8 @@ class TestProcess: "pagure_api_key": "pagure_key", "watched_groups": ["packager"], } - message = MagicMock() - message.body = { - "msg": {"group": "packager", "user": "lenkaseg", "agent": "agent"}, - "topic": "org.fedoraproject.stg.fas.group.member.remove", - } - self.toddler_cls.process(config, message) + self.toddler_cls.process(config, group_remove_member_message) self.toddler_cls._ipa_session.Command.user_show.assert_called_with( uid="lenkaseg" ) diff --git a/tests/plugins/test_pagure_fas_groups_sync.py b/tests/plugins/test_pagure_fas_groups_sync.py index 07c6b0c..e2567ec 100644 --- a/tests/plugins/test_pagure_fas_groups_sync.py +++ b/tests/plugins/test_pagure_fas_groups_sync.py @@ -6,13 +6,37 @@ import logging from unittest.mock import Mock, patch from fedora_messaging.api import Message -from noggin_messages import MemberSponsorV1 +from journal_to_fedora_messaging_messages.ipa import IpaGroupAddMemberV1 import pytest from toddlers.exceptions import PagureError from toddlers.plugins import pagure_fas_groups_sync +@pytest.fixture +def group_add_member_message(): + return IpaGroupAddMemberV1( + { + "IPA_API_PARAMS": ( + '{"cn": "fas_group", "all": false, "raw": false, "version": "2.254", ' + '"no_members": false, "user": ["user"]}' + ), + "__REALTIME_TIMESTAMP": "1742838354523018", + "IPA_API_ACTOR": "agent@EXAMPLE.COM", + "IPA_API_COMMAND": "group_add_member", + "IPA_API_RESULT": "SUCCESS", + "MESSAGE": ( + "[IPA.API] agent@EXAMPLE.COM: group_add_member: SUCCESS [ldap2_139734790206096] " + '{"cn": "fas_group", "all": false, "raw": false, "version": "2.254", ' + '"no_members": false, "user": ["user"]}' + ), + "_HOSTNAME": "ipa.example.com", + "_COMM": "httpd", + "PRIORITY": "5", + } + ) + + class TestAcceptsTopic: """ Test class for `toddlers.plugins.pagure_fas_groups_sync.PagureFASGroupsSync.accepts_topic` @@ -30,11 +54,11 @@ class TestAcceptsTopic: @pytest.mark.parametrize( "topic", [ - "org.fedoraproject.*.fas.group.member.sponsor", + "org.fedoraproject.*.ipa.group_add_member.v1", "org.fedoraproject.*.toddlers.trigger.pagure_fas_groups_sync", - "org.fedoraproject.stg.fas.group.member.sponsor", + "org.fedoraproject.stg.ipa.group_add_member.v1", "org.fedoraproject.stg.toddlers.trigger.pagure_fas_groups_sync", - "org.fedoraproject.prod.fas.group.member.sponsor", + "org.fedoraproject.prod.ipa.group_add_member.v1", "org.fedoraproject.prod.toddlers.trigger.pagure_fas_groups_sync", ], ) @@ -77,7 +101,9 @@ class TestProcess: @patch("toddlers.utils.pagure.set_pagure") @patch("toddlers.utils.fedora_account.set_fasjson") - def test_process_sponsor_message(self, mock_fas, mock_pagure, toddler): + def test_process_sponsor_message( + self, mock_fas, mock_pagure, toddler, group_add_member_message + ): """ Assert that sponsor message is processed correctly. """ @@ -85,12 +111,9 @@ class TestProcess: mock_pagure_obj = Mock() mock_pagure.return_value = mock_pagure_obj config = {"group_map": {"fas_group": "pagure_group"}} - msg = MemberSponsorV1( - {"msg": {"agent": "agent", "user": "user", "group": "fas_group"}} - ) # Test - toddler.process(config, msg) + toddler.process(config, group_add_member_message) # Assertions mock_pagure_obj.add_member_to_group.assert_called_with("user", "pagure_group") @@ -101,7 +124,11 @@ class TestProcess: @patch("toddlers.utils.pagure.set_pagure") @patch("toddlers.utils.fedora_account.set_fasjson") def test_process_sponsor_message_user_not_in_pagure( - self, mock_fas, mock_pagure, toddler + self, + mock_fas, + mock_pagure, + toddler, + group_add_member_message, ): """ Assert that sponsor message is processed correctly when user @@ -112,12 +139,9 @@ class TestProcess: mock_pagure_obj.user_exists.return_value = False mock_pagure.return_value = mock_pagure_obj config = {"group_map": {"fas_group": "pagure_group"}} - msg = MemberSponsorV1( - {"msg": {"agent": "agent", "user": "user", "group": "fas_group"}} - ) # Test - toddler.process(config, msg) + toddler.process(config, group_add_member_message) # Assertions mock_pagure_obj.add_member_to_group.assert_not_called() @@ -128,7 +152,12 @@ class TestProcess: @patch("toddlers.utils.pagure.set_pagure") @patch("toddlers.utils.fedora_account.set_fasjson") def test_process_sponsor_message_failure( - self, mock_fas, mock_pagure, caplog, toddler + self, + mock_fas, + mock_pagure, + caplog, + toddler, + group_add_member_message, ): """ Assert that failure during processing sponsor message is handled correctly. @@ -139,12 +168,9 @@ class TestProcess: mock_pagure_obj.add_member_to_group.side_effect = PagureError("PagureError") mock_pagure.return_value = mock_pagure_obj config = {"group_map": {"fas_group": "pagure_group"}} - msg = MemberSponsorV1( - {"msg": {"agent": "agent", "user": "user", "group": "fas_group"}} - ) # Test - toddler.process(config, msg) + toddler.process(config, group_add_member_message) # Assertions mock_pagure_obj.add_member_to_group.assert_called_with("user", "pagure_group") @@ -157,7 +183,7 @@ class TestProcess: @patch("toddlers.utils.pagure.set_pagure") @patch("toddlers.utils.fedora_account.set_fasjson") def test_process_sponsor_message_skipping( - self, mock_fas, mock_pagure, caplog, toddler + self, mock_fas, mock_pagure, caplog, toddler, group_add_member_message ): """ Assert that group is skipped when we don't care about it. @@ -167,12 +193,13 @@ class TestProcess: mock_pagure_obj = Mock() mock_pagure.return_value = mock_pagure_obj config = {"group_map": {"fas_group": "pagure_group"}} - msg = MemberSponsorV1( - {"msg": {"agent": "agent", "user": "user", "group": "some_group"}} + group_add_member_message.body["IPA_API_PARAMS"] = ( + '{"cn": "some_group", "all": false, "raw": false, "version": "2.254", ' + '"no_members": false, "user": ["user"]}' ) # Test - toddler.process(config, msg) + toddler.process(config, group_add_member_message) # Assertions mock_pagure_obj.add_member_to_group.assert_not_called() diff --git a/toddlers/plugins/cleaning_packager_groups.py b/toddlers/plugins/cleaning_packager_groups.py index aee95b5..55700ce 100644 --- a/toddlers/plugins/cleaning_packager_groups.py +++ b/toddlers/plugins/cleaning_packager_groups.py @@ -1,6 +1,6 @@ """ The script is triggered by fedora-messaging messages published under the topic -``toddlers.trigger.fas.group.member.remove`` and checks if a user was removed +``ipa.group_remove_member.v1`` and checks if a user was removed from group "packagers". If yes, user is removed from packager related groups as well. """ @@ -22,7 +22,7 @@ class CleanPackagerGroups(ToddlerBase): name: str = "clean_packagers_groups" amqp_topics: list[str] = [ - "org.fedoraproject.*.fas.group.member.removed", + "org.fedoraproject.*.ipa.group_remove_member.v1", ] pagure: pagure.Pagure @@ -37,7 +37,7 @@ class CleanPackagerGroups(ToddlerBase): from this specific topic. """ return topic.startswith("org.fedoraproject.") and topic.endswith( - "fas.group.member.removed" + "ipa.group_remove_member.v1" ) def _get_ipa_session(self, config): # pragma: no cover @@ -58,24 +58,17 @@ class CleanPackagerGroups(ToddlerBase): def process(self, config, message): """Process a given message. Remove user that is being removed from a packager group from all groups in distgit""" - msg = message.body - user = msg["msg"]["user"] - group = msg["msg"]["group"] + group = message.group watched_groups = config.get("watched_groups") # If user is not removed from packager group, bail if group not in watched_groups: _log.info( - f"User {user} was not removed from packager group, " + f"User(s) {', '.join(message.user_names)} was not removed from packager group, " f"but from {group} group, nothing to do." ) return - _log.info( - f"User {user} was removed from {group} group, removing from " - "packager-related groups as well." - ) - self.dist_git = pagure.set_pagure( { "pagure_url": config.get("dist_git_url"), @@ -90,6 +83,17 @@ class CleanPackagerGroups(ToddlerBase): _log.info("No distgit groups found, bailing.") return + ipa_session = self._get_ipa_session(config) + + for user in message.user_names: + self._process_removal(config, user, group, distgit_groups, ipa_session) + + def _process_removal(self, config, user, group, distgit_groups, ipa_session): + _log.info( + f"User {user} was removed from {group} group, removing from " + "packager-related groups as well." + ) + # Remove user from the distgit group that triggered the toddler try: self.dist_git.remove_member_from_group(user, group) @@ -99,7 +103,6 @@ class CleanPackagerGroups(ToddlerBase): f"Error while removing user {user} from distgit group {group}" ) - ipa_session = self._get_ipa_session(config) _log.info(f"Fetching groups user {user} is member of in ipa:") ipa_user = ipa_session.Command.user_show(uid=user) ipa_groups = ipa_user["result"]["memberof_group"] diff --git a/toddlers/plugins/pagure_fas_groups_sync.py b/toddlers/plugins/pagure_fas_groups_sync.py index 227f1b5..a4a27c7 100644 --- a/toddlers/plugins/pagure_fas_groups_sync.py +++ b/toddlers/plugins/pagure_fas_groups_sync.py @@ -12,7 +12,6 @@ import sys from typing import Dict from fedora_messaging.api import Message -from noggin_messages import MemberSponsorV1 from toddlers.base import ToddlerBase from toddlers.exceptions import PagureError @@ -32,7 +31,7 @@ class PagureFASGroupsSync(ToddlerBase): name: str = "pagure_fas_groups_sync" amqp_topics: list = [ - "org.fedoraproject.*.fas.group.member.sponsor", + "org.fedoraproject.*.ipa.group_add_member.v1", "org.fedoraproject.*.toddlers.trigger.pagure_fas_groups_sync", ] @@ -51,7 +50,7 @@ class PagureFASGroupsSync(ToddlerBase): :returns: True if topic is accepted, False otherwise. """ if topic.startswith("org.fedoraproject."): - if topic.endswith("fas.group.member.sponsor"): + if topic.endswith("ipa.group_add_member.v1"): return True if topic.endswith("toddlers.trigger.pagure_fas_groups_sync"): return True @@ -81,14 +80,14 @@ class PagureFASGroupsSync(ToddlerBase): for group in group_map: self.sync_group(group, group_map[group]) - if topic.endswith("fas.group.member.sponsor"): - member_sponsor_message = MemberSponsorV1(message.body) - user = member_sponsor_message.user_name - for group in member_sponsor_message.groups: - if group in group_map: + if topic.endswith("ipa.group_add_member.v1"): + for user in message.user_names: + if message.group in group_map: try: if self.pagure.user_exists(user): - self.pagure.add_member_to_group(user, group_map[group]) + self.pagure.add_member_to_group( + user, group_map[message.group] + ) except PagureError as e: _log.exception(str(e)) else: @@ -97,7 +96,7 @@ class PagureFASGroupsSync(ToddlerBase): "but we don't care about this group. " "Skipping.", user, - group, + message.group, ) def sync_group(self, fas_group: str, pagure_group: str):