aa-rss-to-discord 2.3.32.3.3__py3-none-any.whl → 2.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. aa_rss_to_discord/__init__.py +3 -2
  2. aa_rss_to_discord/apps.py +5 -2
  3. aa_rss_to_discord/constants.py +1 -1
  4. aa_rss_to_discord/locale/cs_CZ/LC_MESSAGES/django.po +2 -2
  5. aa_rss_to_discord/locale/de/LC_MESSAGES/django.po +2 -2
  6. aa_rss_to_discord/locale/django.pot +3 -3
  7. aa_rss_to_discord/locale/es/LC_MESSAGES/django.mo +0 -0
  8. aa_rss_to_discord/locale/es/LC_MESSAGES/django.po +8 -6
  9. aa_rss_to_discord/locale/fr_FR/LC_MESSAGES/django.po +2 -2
  10. aa_rss_to_discord/locale/it_IT/LC_MESSAGES/django.po +2 -2
  11. aa_rss_to_discord/locale/ja/LC_MESSAGES/django.po +2 -2
  12. aa_rss_to_discord/locale/ko_KR/LC_MESSAGES/django.po +2 -2
  13. aa_rss_to_discord/locale/nl_NL/LC_MESSAGES/django.po +2 -2
  14. aa_rss_to_discord/locale/pl_PL/LC_MESSAGES/django.po +2 -2
  15. aa_rss_to_discord/locale/ru/LC_MESSAGES/django.po +2 -2
  16. aa_rss_to_discord/locale/sk/LC_MESSAGES/django.po +2 -2
  17. aa_rss_to_discord/locale/uk/LC_MESSAGES/django.mo +0 -0
  18. aa_rss_to_discord/locale/uk/LC_MESSAGES/django.po +9 -8
  19. aa_rss_to_discord/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  20. aa_rss_to_discord/locale/zh_Hans/LC_MESSAGES/django.po +12 -13
  21. aa_rss_to_discord/managers.py +1 -1
  22. aa_rss_to_discord/providers.py +43 -0
  23. aa_rss_to_discord/tasks.py +94 -147
  24. aa_rss_to_discord/tests/__init__.py +41 -0
  25. aa_rss_to_discord/tests/test_auth_hooks.py +49 -0
  26. aa_rss_to_discord/tests/test_managers.py +32 -0
  27. aa_rss_to_discord/tests/test_models.py +165 -0
  28. aa_rss_to_discord/tests/test_providers.py +99 -0
  29. aa_rss_to_discord/tests/test_tasks.py +236 -0
  30. {aa_rss_to_discord-2.3.32.3.3.dist-info → aa_rss_to_discord-2.5.0.dist-info}/METADATA +11 -9
  31. aa_rss_to_discord-2.5.0.dist-info/RECORD +51 -0
  32. {aa_rss_to_discord-2.3.32.3.3.dist-info → aa_rss_to_discord-2.5.0.dist-info}/WHEEL +1 -1
  33. aa_rss_to_discord-2.3.32.3.3.dist-info/RECORD +0 -44
  34. {aa_rss_to_discord-2.3.32.3.3.dist-info → aa_rss_to_discord-2.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,236 @@
1
+ """
2
+ Test cases for the fetch_rss task
3
+ """
4
+
5
+ # Standard Library
6
+ from types import SimpleNamespace
7
+ from unittest.mock import MagicMock, patch
8
+
9
+ # AA RSS to Discord
10
+ from aa_rss_to_discord.constants import USER_AGENT
11
+ from aa_rss_to_discord.models import RssFeeds
12
+ from aa_rss_to_discord.tasks import _process_feed, fetch_rss
13
+ from aa_rss_to_discord.tests import BaseTestCase
14
+
15
+
16
+ class TestFetchRss(BaseTestCase):
17
+ """
18
+ Test cases for the fetch_rss task
19
+ """
20
+
21
+ def test_fetch_rss_logs_message_when_no_rss_feeds_found(self):
22
+ """
23
+ Test that fetch_rss logs a message when no RSS feeds are found.
24
+
25
+ :return:
26
+ :rtype:
27
+ """
28
+
29
+ with (
30
+ patch(
31
+ "aa_rss_to_discord.tasks.RssFeeds.objects.select_enabled"
32
+ ) as mock_select_enabled,
33
+ patch("aa_rss_to_discord.tasks.logger.debug") as mock_logger_debug,
34
+ ):
35
+ mock_select_enabled.return_value = []
36
+
37
+ fetch_rss()
38
+
39
+ mock_logger_debug.assert_called_once_with("No RSS feeds found to parse.")
40
+
41
+ def test_fetch_rss_dispatches_tasks_for_enabled_feeds(self):
42
+ """
43
+ Test that fetch_rss dispatches tasks for enabled RSS feeds.
44
+
45
+ :return:
46
+ :rtype:
47
+ """
48
+
49
+ with (
50
+ patch(
51
+ "aa_rss_to_discord.tasks.RssFeeds.objects.select_enabled"
52
+ ) as mock_select_enabled,
53
+ patch("aa_rss_to_discord.tasks.group") as mock_group,
54
+ ):
55
+ mock_rss_feed_1 = MagicMock(id=1)
56
+ mock_rss_feed_2 = MagicMock(id=2)
57
+ mock_select_enabled.return_value = [mock_rss_feed_1, mock_rss_feed_2]
58
+
59
+ fetch_rss()
60
+
61
+ mock_group.assert_called_once()
62
+ mock_group.return_value.apply_async.assert_called_once()
63
+ dispatched_tasks = mock_group.call_args[0][0]
64
+ dispatched_list = list(dispatched_tasks)
65
+ self.assertEqual(len(dispatched_list), 2)
66
+ self.assertEqual(dispatched_list[0].args[0], 1)
67
+ self.assertEqual(dispatched_list[1].args[0], 2)
68
+
69
+ def test_handles_empty_rss_feed_ids_gracefully(self):
70
+ """
71
+ Test that fetch_rss handles an empty list of RSS feed IDs gracefully.
72
+
73
+ :return:
74
+ :rtype:
75
+ """
76
+
77
+ with (
78
+ patch(
79
+ "aa_rss_to_discord.tasks.RssFeeds.objects.select_enabled"
80
+ ) as mock_select_enabled,
81
+ patch("aa_rss_to_discord.tasks.group") as mock_group,
82
+ patch("aa_rss_to_discord.tasks.logger.debug") as mock_logger_debug,
83
+ ):
84
+ mock_select_enabled.return_value = iter([])
85
+
86
+ fetch_rss()
87
+
88
+ mock_group.assert_not_called()
89
+ mock_logger_debug.assert_called_once_with("No RSS feed ids to dispatch.")
90
+
91
+
92
+ class TestHelperProcessRssFeed(BaseTestCase):
93
+ """
94
+ Test cases for the _process_feed task
95
+ """
96
+
97
+ def test_handles_missing_rss_feed_gracefully(self):
98
+ """
99
+ Test that _process_feed handles a missing RSS feed gracefully.
100
+
101
+ :return:
102
+ :rtype:
103
+ """
104
+
105
+ with patch(
106
+ "aa_rss_to_discord.tasks.RssFeeds.objects.select_related"
107
+ ) as mock_select_related:
108
+ mock_select_related.return_value.get.side_effect = RssFeeds.DoesNotExist
109
+
110
+ _process_feed(1)
111
+
112
+ mock_select_related.return_value.get.assert_called_once_with(id=1)
113
+
114
+ def test_logs_and_skips_when_no_entries_in_feed(self):
115
+ """
116
+ Test that _process_feed logs and skips processing when no entries are found in the feed.
117
+
118
+ :return:
119
+ :rtype:
120
+ """
121
+
122
+ with (
123
+ patch(
124
+ "aa_rss_to_discord.tasks.RssFeeds.objects.select_related"
125
+ ) as mock_select_related,
126
+ patch(
127
+ "aa_rss_to_discord.tasks.feedparser.parse", return_value={}
128
+ ) as mock_parse,
129
+ ):
130
+ mock_rss_feed = MagicMock(url="http://example.com", name="No Entries Feed")
131
+ mock_select_related.return_value.get.return_value = mock_rss_feed
132
+
133
+ _process_feed(1)
134
+
135
+ mock_parse.assert_called_once_with(mock_rss_feed.url, agent=USER_AGENT)
136
+
137
+ def test_posts_new_entry_to_discord(self):
138
+ """
139
+ Test that _process_feed posts a new entry to Discord when it's not a duplicate.
140
+
141
+ :return:
142
+ :rtype:
143
+ """
144
+
145
+ entry = {"title": "New Entry", "link": "http://example.com", "id": "123"}
146
+
147
+ with (
148
+ patch(
149
+ "aa_rss_to_discord.tasks.RssFeeds.objects.select_related"
150
+ ) as mock_select_related,
151
+ patch(
152
+ "aa_rss_to_discord.tasks.feedparser.parse",
153
+ return_value=SimpleNamespace(entries=[entry]),
154
+ ) as mock_parse,
155
+ patch("aa_rss_to_discord.tasks.LastItem.objects.filter") as mock_filter,
156
+ patch(
157
+ "aa_rss_to_discord.tasks.LastItem.objects.update_or_create"
158
+ ) as mock_update_or_create,
159
+ patch("aa_rss_to_discord.tasks.send_message") as mock_send_message,
160
+ ):
161
+ mock_rss_feed = MagicMock(
162
+ discord_channel=MagicMock(channel=12345),
163
+ name="Test Feed",
164
+ url="http://example.com",
165
+ )
166
+ mock_select_related.return_value.get.return_value = mock_rss_feed
167
+ mock_filter.return_value.first.return_value = None
168
+ mock_update_or_create.return_value = (MagicMock(), True)
169
+
170
+ _process_feed(1)
171
+
172
+ mock_parse.assert_called_once_with(mock_rss_feed.url, agent=USER_AGENT)
173
+ mock_update_or_create.assert_called_once()
174
+ self.assertTrue(
175
+ mock_send_message.called,
176
+ f"send_message not called. calls: {mock_send_message.call_args_list}",
177
+ )
178
+
179
+ call_args, call_kwargs = mock_send_message.call_args
180
+ called_channel = (
181
+ call_kwargs.get("channel_id")
182
+ if "channel_id" in call_kwargs
183
+ else (call_args[0] if len(call_args) > 0 else None)
184
+ )
185
+ called_message = (
186
+ call_kwargs.get("message")
187
+ if "message" in call_kwargs
188
+ else (
189
+ call_args[1]
190
+ if len(call_args) > 1
191
+ else (call_args[0] if len(call_args) == 1 else None)
192
+ )
193
+ )
194
+
195
+ self.assertEqual(called_channel, 12345)
196
+ self.assertIsNotNone(called_message)
197
+ self.assertIn(mock_rss_feed.url, called_message)
198
+
199
+ def test_skips_posting_duplicate_entry(self):
200
+ """
201
+ Test that _process_feed skips posting a duplicate entry to Discord.
202
+
203
+ :return:
204
+ :rtype:
205
+ """
206
+
207
+ entry = {"title": "Duplicate Entry", "link": "http://example.com", "id": "123"}
208
+
209
+ with (
210
+ patch(
211
+ "aa_rss_to_discord.tasks.RssFeeds.objects.select_related"
212
+ ) as mock_select_related,
213
+ patch(
214
+ "aa_rss_to_discord.tasks.feedparser.parse",
215
+ return_value=SimpleNamespace(entries=[entry]),
216
+ ),
217
+ patch("aa_rss_to_discord.tasks.LastItem.objects.filter") as mock_filter,
218
+ patch("aa_rss_to_discord.tasks.send_message") as mock_send_message,
219
+ ):
220
+ mock_rss_feed = MagicMock(
221
+ discord_channel=MagicMock(channel=12345),
222
+ name="Dup Feed",
223
+ url="http://example.com",
224
+ )
225
+ mock_select_related.return_value.get.return_value = mock_rss_feed
226
+ mock_existing = MagicMock(
227
+ rss_item_time=None,
228
+ rss_item_title="Duplicate Entry",
229
+ rss_item_link="http://example.com",
230
+ rss_item_guid="123",
231
+ )
232
+ mock_filter.return_value.first.return_value = mock_existing
233
+
234
+ _process_feed(1)
235
+
236
+ mock_send_message.assert_not_called()
@@ -1,13 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aa-rss-to-discord
3
- Version: 2.3.32.3.3
3
+ Version: 2.5.0
4
4
  Summary: Alliance Auth module to post news from RSS feeds to your Discord
5
5
  Project-URL: Changelog, https://github.com/ppfeufer/aa-rss-to-discord/blob/master/CHANGELOG.md
6
+ Project-URL: Codecov, https://codecov.io/gh/ppfeufer/aa-rss-to-discord
7
+ Project-URL: Discord, https://discord.gg/fjnHAmk
6
8
  Project-URL: Documentation, https://github.com/ppfeufer/aa-rss-to-discord/blob/master/README.md
7
- Project-URL: Donations, https://ko-fi.com/ppfeufer
8
- Project-URL: Homepage, https://github.com/ppfeufer/aa-rss-to-discord
9
- Project-URL: Source, https://github.com/ppfeufer/aa-rss-to-discord.git
9
+ Project-URL: Donation, https://ko-fi.com/ppfeufer
10
+ Project-URL: GitHub, https://github.com/ppfeufer/aa-rss-to-discord
10
11
  Project-URL: Tracker, https://github.com/ppfeufer/aa-rss-to-discord/issues
12
+ Project-URL: Translation, https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-rss-to-discord/
11
13
  Author-email: Peter Pfeufer <develop@ppfeufer.de>
12
14
  License: GNU GENERAL PUBLIC LICENSE
13
15
  Version 3, 29 June 2007
@@ -699,11 +701,11 @@ Classifier: Programming Language :: Python :: 3.12
699
701
  Classifier: Programming Language :: Python :: 3.13
700
702
  Classifier: Topic :: Internet :: WWW/HTTP
701
703
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
702
- Requires-Python: >=3.10
703
- Requires-Dist: allianceauth-app-utils>=1.14.2
704
+ Requires-Python: <3.14,>=3.10
704
705
  Requires-Dist: allianceauth-discordbot>=3.0.5
705
706
  Requires-Dist: allianceauth<5,>=4.3.1
706
707
  Requires-Dist: feedparser
708
+ Requires-Dist: py-cord>=2.7.0rc2; python_version >= '3.13'
707
709
  Provides-Extra: tests-allianceauth-latest
708
710
  Requires-Dist: coverage; extra == 'tests-allianceauth-latest'
709
711
  Requires-Dist: django-webtest; extra == 'tests-allianceauth-latest'
@@ -718,7 +720,7 @@ Description-Content-Type: text/markdown
718
720
  ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)
719
721
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/ppfeufer/aa-rss-to-discord/master.svg)](https://results.pre-commit.ci/latest/github/ppfeufer/aa-rss-to-discord/master)
720
722
  [![Code Style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](http://black.readthedocs.io/en/latest/)
721
- [![Discord](https://img.shields.io/discord/790364535294132234?label=discord)](https://discord.gg/zmh52wnfvM)
723
+ [![Discord](https://img.shields.io/discord/399006117012832262?label=discord)](https://discord.gg/fjnHAmk)
722
724
  [![Checks](https://github.com/ppfeufer/aa-rss-to-discord/actions/workflows/automated-checks.yml/badge.svg)](https://github.com/ppfeufer/aa-rss-to-discord/actions/workflows/automated-checks.yml)
723
725
  [![codecov](https://codecov.io/gh/ppfeufer/aa-rss-to-discord/branch/master/graph/badge.svg?token=LVEQ6W55ZB)](https://codecov.io/gh/ppfeufer/aa-rss-to-discord)
724
726
  [![Badge: Translation Status]][weblate engage]
@@ -771,7 +773,7 @@ Make sure you're in the virtual environment (venv) of your Alliance Auth
771
773
  installation Then install the latest release directly from PyPi.
772
774
 
773
775
  ```shell
774
- pip install aa-rss-to-discord
776
+ pip install aa-rss-to-discord==2.5.0
775
777
  ```
776
778
 
777
779
  ### Step 2: Configure Alliance Auth<a name="step-2-configure-alliance-auth"></a>
@@ -826,7 +828,7 @@ To update your existing installation of Alliance Auth RSS to Discord, first enab
826
828
  virtual environment (venv) of your Alliance Auth installation.
827
829
 
828
830
  ```bash
829
- pip install -U aa-rss-to-discord
831
+ pip install aa-rss-to-discord==2.5.0
830
832
 
831
833
  python manage.py migrate
832
834
  ```
@@ -0,0 +1,51 @@
1
+ aa_rss_to_discord/__init__.py,sha256=oRLjP5GxtTTBs3u8daT9UZGf9VY442AI9mO6fKlhOSM,177
2
+ aa_rss_to_discord/admin.py,sha256=bbvD0w0vFgD4kR4riWIwpOWpb9t8R6BI7ofYqTZbjDw,440
3
+ aa_rss_to_discord/apps.py,sha256=jtIy1uXn92yURf7QG7TxzLniSbOAL41OzqjCLxTwMbA,458
4
+ aa_rss_to_discord/auth_hooks.py,sha256=k5mLzQR1NwtA5MCedLzPyULEhv4ylwqvFpTPZ62eWJ0,273
5
+ aa_rss_to_discord/constants.py,sha256=SD5aSlRanXsE07tV5q4PxVJXH0Xgivr8DjfNgyTDaqk,383
6
+ aa_rss_to_discord/managers.py,sha256=oERpP9OXZNg3_SJCKiMZrt7aa_NGxKswZntfgYkpRdA,307
7
+ aa_rss_to_discord/models.py,sha256=G-_LjShFDQFcbcg3nuR5mwjBl4zmANsgF8PIrokJOdU,1781
8
+ aa_rss_to_discord/providers.py,sha256=AwZ4QgWg_LNQsWjwHCurAFBHEFwTXGEDGUP6xTKxGJc,1029
9
+ aa_rss_to_discord/tasks.py,sha256=8-XzCVqWqc3bDE7Msf68ahsID2P5db6TSl1TTvVB0DQ,4360
10
+ aa_rss_to_discord/discordbot/cogs/__init__.py,sha256=3u3OJfO3Xh1GightCaX0lhbUbP7Lq2c1nY4Tg1FsrZo,27
11
+ aa_rss_to_discord/discordbot/cogs/rss.py,sha256=aPov4y-ckTwzXdXfKtA5WZZKwy7myOlW2xyK5yWGhy4,8174
12
+ aa_rss_to_discord/locale/django.pot,sha256=8TIU7nbQSLvCn7ydJlDSTQ3XchA-wI58x-6381VM5lA,962
13
+ aa_rss_to_discord/locale/cs_CZ/LC_MESSAGES/django.mo,sha256=e5Bcjwg3sIKgDgHKifbl2DcH0atHMSygiZwgvKEaifs,565
14
+ aa_rss_to_discord/locale/cs_CZ/LC_MESSAGES/django.po,sha256=glSjLlEzwDk1Pd67Jrq_RDUNaz2QE3mc2Ql9DES-ZeM,1187
15
+ aa_rss_to_discord/locale/de/LC_MESSAGES/django.mo,sha256=NGLMzDZwRKCvQH_RtK9wm6UXKWHLuipasTLnjaosbRE,717
16
+ aa_rss_to_discord/locale/de/LC_MESSAGES/django.po,sha256=9LPjn0KuhgP4UysXBNCsNuk8N3r1ByW3HIO45P2f2l0,1183
17
+ aa_rss_to_discord/locale/es/LC_MESSAGES/django.mo,sha256=VqcFVQKAN-xQqvtysBccVIbDGedac6l-qxgx-751R0c,665
18
+ aa_rss_to_discord/locale/es/LC_MESSAGES/django.po,sha256=_B94_jbdlKJZXWdJafD5e4gsT1P_slfdCU2GFHwxrOw,1239
19
+ aa_rss_to_discord/locale/fr_FR/LC_MESSAGES/django.mo,sha256=zwgaGEqI-UlHpc9q1irjc4xDxZJZBheixtIWz-43q1U,721
20
+ aa_rss_to_discord/locale/fr_FR/LC_MESSAGES/django.po,sha256=z8v_ElD8812eH9fin5ECwLabpSQtPMmTqLrV-NhgmSQ,1337
21
+ aa_rss_to_discord/locale/it_IT/LC_MESSAGES/django.mo,sha256=jyxuImpxL3PnEGxbqzYoLvrE014f-wPENwh0LMuWviM,487
22
+ aa_rss_to_discord/locale/it_IT/LC_MESSAGES/django.po,sha256=_3t0rE0nNX3hoR1WuJ8Sgz0NYGNiOHsKOi21Y0m8ti4,1107
23
+ aa_rss_to_discord/locale/ja/LC_MESSAGES/django.mo,sha256=dzafm9mmWwOeYbuJWyMmxTKxqdBu7ptUXdhXllkSoY4,770
24
+ aa_rss_to_discord/locale/ja/LC_MESSAGES/django.po,sha256=e3hUCwxBtvQ1n49Sca2EUg76pWECCb0M7BtTSi2hdN8,1229
25
+ aa_rss_to_discord/locale/ko_KR/LC_MESSAGES/django.mo,sha256=1IW9bwgVPrzDl_0crEO0UMaPF4jP3SyTUrZeRjalzCk,738
26
+ aa_rss_to_discord/locale/ko_KR/LC_MESSAGES/django.po,sha256=xcq0UAngQpTWXpThZE9446mSfCoFGQC6rqYrN6KbOMU,1239
27
+ aa_rss_to_discord/locale/nl_NL/LC_MESSAGES/django.mo,sha256=JLv2IW5Kp2wqE7MqNn9P9blZ_I-Jp0CIWiHsadYgFUU,483
28
+ aa_rss_to_discord/locale/nl_NL/LC_MESSAGES/django.po,sha256=tuGC3FENtiy5gLAq-Yr06Qi0bPCPWVDFGIQ-lw6ub28,1105
29
+ aa_rss_to_discord/locale/pl_PL/LC_MESSAGES/django.mo,sha256=2ugIqkNNVUGxIgfxUjU8SCIBJvSCn6vGzAV9Xnqiyag,543
30
+ aa_rss_to_discord/locale/pl_PL/LC_MESSAGES/django.po,sha256=fXiZFjrBEJ8zd3Di7jGLV8ertqHdWLlJ0ji2rNZENd0,1164
31
+ aa_rss_to_discord/locale/ru/LC_MESSAGES/django.mo,sha256=BzuRJnMwz-rpbr8rc_K755H-sstix0LsOpb7lSbkRuo,865
32
+ aa_rss_to_discord/locale/ru/LC_MESSAGES/django.po,sha256=HjHdmJwHL0npb3G-JsQLxR_wwpviWmmN21QVcJNriQU,1351
33
+ aa_rss_to_discord/locale/sk/LC_MESSAGES/django.mo,sha256=WPcDxnOaK_bCNIPoZQRxryi5F97g2RNn0Zuh9us90U0,562
34
+ aa_rss_to_discord/locale/sk/LC_MESSAGES/django.po,sha256=egM80yZBYOfHnHxV6DWCso0cHLy4NE4vcprFP6ywo2I,1180
35
+ aa_rss_to_discord/locale/uk/LC_MESSAGES/django.mo,sha256=lkMHhhk6cARn69ekx4BfYukLBm6y8-V6OaryZ2FQFP8,868
36
+ aa_rss_to_discord/locale/uk/LC_MESSAGES/django.po,sha256=o1GAI3lu-Qa0ofmOgOiG5Zulrx82h8CD9sdlmA33NGE,1412
37
+ aa_rss_to_discord/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=kFA6fZgb6fIbeSwnGhKHVqyV9eOxC0MMYi6DWBC2xII,768
38
+ aa_rss_to_discord/locale/zh_Hans/LC_MESSAGES/django.po,sha256=6sGFx_xqC5VUYgCcVvikD7fso5tZo0et5TRHqwF7r6I,1200
39
+ aa_rss_to_discord/migrations/0001_initial.py,sha256=TD8ZmWLleWEw1G3PlQh3HBU4pRXxwIfp_LMQj4IyTDE,2764
40
+ aa_rss_to_discord/migrations/0002_enable_disable_rss_feeds.py,sha256=apLeuxILrxvTntSc1bixfcDqpgt49VscyT6inLKU9k8,396
41
+ aa_rss_to_discord/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ aa_rss_to_discord/tests/__init__.py,sha256=hQ-yK-riPHikEE78PrbFZUKRToIZhif7-mD-yiHzjkM,873
43
+ aa_rss_to_discord/tests/test_auth_hooks.py,sha256=DZLEdVO9E82GEqPMv6_JOgSLPjU_DrB9uLWDgWgQ34w,1147
44
+ aa_rss_to_discord/tests/test_managers.py,sha256=Ar4Mc4z1k0701jjAWKTqe9BzxBjX-32KIdT4VgXfJ_s,1023
45
+ aa_rss_to_discord/tests/test_models.py,sha256=XtqGVZQbbtyDktYlHYsKFrLb3qB-UpU7wIpA6gXsKL8,4823
46
+ aa_rss_to_discord/tests/test_providers.py,sha256=ZF1zV3-_yFWwruiR_g2yB-RRy_t5W0WPbaF7guFRXF8,2677
47
+ aa_rss_to_discord/tests/test_tasks.py,sha256=lSoeqGulKiRFT3Hyrlg1svv7RqiBD3DSfC8vOGRVqhs,7969
48
+ aa_rss_to_discord-2.5.0.dist-info/METADATA,sha256=EIURDFtfbPZ7jYn7nBxKCIr6CapGqGBzVNP4dJs9cXs,50408
49
+ aa_rss_to_discord-2.5.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
50
+ aa_rss_to_discord-2.5.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
51
+ aa_rss_to_discord-2.5.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,44 +0,0 @@
1
- aa_rss_to_discord/__init__.py,sha256=0whaokU-P0UIlscIvzUt30Yp45Q_KIi_jQQhl7JQB-0,142
2
- aa_rss_to_discord/admin.py,sha256=bbvD0w0vFgD4kR4riWIwpOWpb9t8R6BI7ofYqTZbjDw,440
3
- aa_rss_to_discord/apps.py,sha256=2VCJz9NRLjonlVLMngaoTQLk62hfJwBTSc49PfUK4EE,322
4
- aa_rss_to_discord/auth_hooks.py,sha256=k5mLzQR1NwtA5MCedLzPyULEhv4ylwqvFpTPZ62eWJ0,273
5
- aa_rss_to_discord/constants.py,sha256=A-HavWaksOcqEjaaAR-iXwWS9dtZSH3G-yP9SFBZU7s,386
6
- aa_rss_to_discord/managers.py,sha256=bM4Mi4J-DFKVUhTFrKRh7FmZfZrWcUgOlF7Yeu69lw0,303
7
- aa_rss_to_discord/models.py,sha256=G-_LjShFDQFcbcg3nuR5mwjBl4zmANsgF8PIrokJOdU,1781
8
- aa_rss_to_discord/tasks.py,sha256=_PSOR-lapSkvp97X9TFg7hxEYCU8cDANnUJlv2iL-pI,7189
9
- aa_rss_to_discord/discordbot/cogs/__init__.py,sha256=3u3OJfO3Xh1GightCaX0lhbUbP7Lq2c1nY4Tg1FsrZo,27
10
- aa_rss_to_discord/discordbot/cogs/rss.py,sha256=aPov4y-ckTwzXdXfKtA5WZZKwy7myOlW2xyK5yWGhy4,8174
11
- aa_rss_to_discord/locale/django.pot,sha256=MRNwbemT080BPXdaOXE6Nq6WU_MDrvxAbiEg5v53PXk,966
12
- aa_rss_to_discord/locale/cs_CZ/LC_MESSAGES/django.mo,sha256=e5Bcjwg3sIKgDgHKifbl2DcH0atHMSygiZwgvKEaifs,565
13
- aa_rss_to_discord/locale/cs_CZ/LC_MESSAGES/django.po,sha256=aTxx0QopU2fycwY6N-gDalRXXvh2CqAiwtqaVrIlYXE,1186
14
- aa_rss_to_discord/locale/de/LC_MESSAGES/django.mo,sha256=NGLMzDZwRKCvQH_RtK9wm6UXKWHLuipasTLnjaosbRE,717
15
- aa_rss_to_discord/locale/de/LC_MESSAGES/django.po,sha256=AWRwEh2bxYFQzTw1cTKWu9N3cNUVAwIv9ZoGiKUeNtQ,1182
16
- aa_rss_to_discord/locale/es/LC_MESSAGES/django.mo,sha256=BNXYj-j0OPYFuLpm0uJS_b28tdtbs1BOMYp_HCWcoC8,664
17
- aa_rss_to_discord/locale/es/LC_MESSAGES/django.po,sha256=0exdtddV-bYcBXo0-HE5MzAnoqgs_v69fuzha4vKyGs,1195
18
- aa_rss_to_discord/locale/fr_FR/LC_MESSAGES/django.mo,sha256=zwgaGEqI-UlHpc9q1irjc4xDxZJZBheixtIWz-43q1U,721
19
- aa_rss_to_discord/locale/fr_FR/LC_MESSAGES/django.po,sha256=d_yO6m-FwEvYwQFS-XjGgPSvPserqxmkAbiv4G80rs4,1336
20
- aa_rss_to_discord/locale/it_IT/LC_MESSAGES/django.mo,sha256=jyxuImpxL3PnEGxbqzYoLvrE014f-wPENwh0LMuWviM,487
21
- aa_rss_to_discord/locale/it_IT/LC_MESSAGES/django.po,sha256=W3I2fyATzgRVlWqias9YNU2rACFP5td7KZEsgjNRNGE,1106
22
- aa_rss_to_discord/locale/ja/LC_MESSAGES/django.mo,sha256=dzafm9mmWwOeYbuJWyMmxTKxqdBu7ptUXdhXllkSoY4,770
23
- aa_rss_to_discord/locale/ja/LC_MESSAGES/django.po,sha256=qRxwrEuNSWsAlFzvVdhufdVyH588Sblr3QkzSK4nCi0,1228
24
- aa_rss_to_discord/locale/ko_KR/LC_MESSAGES/django.mo,sha256=1IW9bwgVPrzDl_0crEO0UMaPF4jP3SyTUrZeRjalzCk,738
25
- aa_rss_to_discord/locale/ko_KR/LC_MESSAGES/django.po,sha256=plSKIMGtfVDCzA9KS8VJ1r-VchImlXjKtIPuj3K1QMA,1238
26
- aa_rss_to_discord/locale/nl_NL/LC_MESSAGES/django.mo,sha256=JLv2IW5Kp2wqE7MqNn9P9blZ_I-Jp0CIWiHsadYgFUU,483
27
- aa_rss_to_discord/locale/nl_NL/LC_MESSAGES/django.po,sha256=Z9GQfIOu01jReNrD1AyMUQWYcNB-kU4A8ax0Zie33pQ,1104
28
- aa_rss_to_discord/locale/pl_PL/LC_MESSAGES/django.mo,sha256=2ugIqkNNVUGxIgfxUjU8SCIBJvSCn6vGzAV9Xnqiyag,543
29
- aa_rss_to_discord/locale/pl_PL/LC_MESSAGES/django.po,sha256=DCTXRAYUTp0Pl7LQtyBbjNzvBDDebwYEkuZPr6WH6tw,1163
30
- aa_rss_to_discord/locale/ru/LC_MESSAGES/django.mo,sha256=BzuRJnMwz-rpbr8rc_K755H-sstix0LsOpb7lSbkRuo,865
31
- aa_rss_to_discord/locale/ru/LC_MESSAGES/django.po,sha256=FHWUDQuXVFtC66i_3zmOKLom_59_eiz3Qlkpq4C5Tik,1350
32
- aa_rss_to_discord/locale/sk/LC_MESSAGES/django.mo,sha256=WPcDxnOaK_bCNIPoZQRxryi5F97g2RNn0Zuh9us90U0,562
33
- aa_rss_to_discord/locale/sk/LC_MESSAGES/django.po,sha256=sHM7QAkVQSoma3HFvCjlOpZjnZKe-Cv8uD51LS0FNXc,1179
34
- aa_rss_to_discord/locale/uk/LC_MESSAGES/django.mo,sha256=1Qlw1MJfXv9eapoWPS_Rw9FuPBXL1bSIGu8PjB6Hgt8,866
35
- aa_rss_to_discord/locale/uk/LC_MESSAGES/django.po,sha256=wgGagDcwL8lK_Iz-MeoYilNeeVmDGNAvNaSuG_CCiuM,1359
36
- aa_rss_to_discord/locale/zh_Hans/LC_MESSAGES/django.mo,sha256=DaODnWQcYUSgtxUaPmZoEG6IQ190DS3WzCh6uNvhHh8,518
37
- aa_rss_to_discord/locale/zh_Hans/LC_MESSAGES/django.po,sha256=izUmS9k0tEiR7_aDH_Z0ku4GFzcTTnSI7l9tZIboFSI,1121
38
- aa_rss_to_discord/migrations/0001_initial.py,sha256=TD8ZmWLleWEw1G3PlQh3HBU4pRXxwIfp_LMQj4IyTDE,2764
39
- aa_rss_to_discord/migrations/0002_enable_disable_rss_feeds.py,sha256=apLeuxILrxvTntSc1bixfcDqpgt49VscyT6inLKU9k8,396
40
- aa_rss_to_discord/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- aa_rss_to_discord-2.3.32.3.3.dist-info/METADATA,sha256=UXFmdqcrdOuu7jdVJ_HPEQTTSqi-GjMINhpNNoqPfig,50239
42
- aa_rss_to_discord-2.3.32.3.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
43
- aa_rss_to_discord-2.3.32.3.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
44
- aa_rss_to_discord-2.3.32.3.3.dist-info/RECORD,,