aa-killtracker 0.17.0__py3-none-any.whl → 1.0.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 (39) hide show
  1. {aa_killtracker-0.17.0.dist-info → aa_killtracker-1.0.0.dist-info}/METADATA +7 -8
  2. {aa_killtracker-0.17.0.dist-info → aa_killtracker-1.0.0.dist-info}/RECORD +36 -29
  3. killtracker/__init__.py +1 -1
  4. killtracker/admin.py +13 -8
  5. killtracker/app_settings.py +20 -10
  6. killtracker/apps.py +2 -4
  7. killtracker/core/discord.py +162 -0
  8. killtracker/core/helpers.py +13 -0
  9. killtracker/core/{discord_messages.py → trackers.py} +74 -59
  10. killtracker/core/workers.py +46 -0
  11. killtracker/core/{killmails.py → zkb.py} +97 -72
  12. killtracker/forms.py +1 -1
  13. killtracker/managers.py +3 -3
  14. killtracker/models/trackers.py +7 -10
  15. killtracker/models/webhooks.py +60 -128
  16. killtracker/providers.py +1 -1
  17. killtracker/signals.py +31 -0
  18. killtracker/tasks.py +141 -92
  19. killtracker/tests/core/test_discord.py +184 -0
  20. killtracker/tests/core/test_helpers.py +23 -0
  21. killtracker/tests/core/{test_discord_messages_1.py → test_tracker_1.py} +28 -8
  22. killtracker/tests/core/{test_discord_messages_2.py → test_tracker_2.py} +11 -11
  23. killtracker/tests/core/test_workers.py +49 -0
  24. killtracker/tests/core/{test_killmails.py → test_zkb.py} +109 -52
  25. killtracker/tests/models/test_killmails.py +0 -2
  26. killtracker/tests/models/test_trackers_1.py +24 -24
  27. killtracker/tests/models/test_trackers_2.py +6 -5
  28. killtracker/tests/models/test_webhooks.py +63 -0
  29. killtracker/tests/test_integration.py +25 -12
  30. killtracker/tests/test_tasks.py +161 -92
  31. killtracker/tests/test_utils.py +39 -0
  32. killtracker/tests/testdata/factories.py +1 -1
  33. killtracker/tests/testdata/helpers.py +1 -1
  34. killtracker/tests/utils.py +44 -0
  35. killtracker/exceptions.py +0 -32
  36. killtracker/tests/models/test_webhook.py +0 -150
  37. killtracker/tests/test_exceptions.py +0 -12
  38. {aa_killtracker-0.17.0.dist-info → aa_killtracker-1.0.0.dist-info}/WHEEL +0 -0
  39. {aa_killtracker-0.17.0.dist-info → aa_killtracker-1.0.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,150 +0,0 @@
1
- import json
2
-
3
- import dhooks_lite
4
- import requests_mock
5
-
6
- from django.core.cache import cache
7
- from django.test import TestCase
8
-
9
- from app_utils.json import JSONDateTimeDecoder
10
-
11
- from killtracker.exceptions import WebhookTooManyRequests
12
- from killtracker.models import Webhook
13
- from killtracker.tests.testdata.helpers import LoadTestDataMixin
14
-
15
-
16
- class TestWebhookQueue(LoadTestDataMixin, TestCase):
17
- @classmethod
18
- def setUpClass(cls):
19
- super().setUpClass()
20
-
21
- def setUp(self) -> None:
22
- self.webhook_1.main_queue.clear()
23
- self.webhook_1.error_queue.clear()
24
-
25
- def test_reset_failed_messages(self):
26
- message = "Test message"
27
- self.webhook_1.error_queue.enqueue(message)
28
- self.webhook_1.error_queue.enqueue(message)
29
- self.assertEqual(self.webhook_1.error_queue.size(), 2)
30
- self.assertEqual(self.webhook_1.main_queue.size(), 0)
31
- self.webhook_1.reset_failed_messages()
32
- self.assertEqual(self.webhook_1.error_queue.size(), 0)
33
- self.assertEqual(self.webhook_1.main_queue.size(), 2)
34
-
35
- def test_discord_message_asjson_normal(self):
36
- embed = dhooks_lite.Embed(description="my_description")
37
- result = Webhook._discord_message_asjson(
38
- content="my_content",
39
- username="my_username",
40
- avatar_url="my_avatar_url",
41
- embeds=[embed],
42
- )
43
- message_python = json.loads(result, cls=JSONDateTimeDecoder)
44
- expected = {
45
- "content": "my_content",
46
- "embeds": [{"description": "my_description", "type": "rich"}],
47
- "username": "my_username",
48
- "avatar_url": "my_avatar_url",
49
- }
50
- self.assertDictEqual(message_python, expected)
51
-
52
- def test_discord_message_asjson_empty(self):
53
- with self.assertRaises(ValueError):
54
- Webhook._discord_message_asjson("")
55
-
56
-
57
- @requests_mock.Mocker()
58
- class TestWebhookSendMessage(LoadTestDataMixin, TestCase):
59
- def setUp(self) -> None:
60
- self.message = Webhook._discord_message_asjson(content="Test message")
61
- cache.clear()
62
-
63
- def test_when_send_ok_returns_true(self, requests_mocker):
64
- # given
65
- requests_mocker.register_uri(
66
- "POST",
67
- self.webhook_1.url,
68
- status_code=200,
69
- json={
70
- "name": "test webhook",
71
- "type": 1,
72
- "channel_id": "199737254929760256",
73
- "token": "3d89bb7572e0fb30d8128367b3b1b44fecd1726de135cbe28a41f8b2f777c372ba2939e72279b94526ff5d1bd4358d65cf11",
74
- "avatar": None,
75
- "guild_id": "199737254929760256",
76
- "id": "223704706495545344",
77
- "application_id": None,
78
- "user": {
79
- "username": "test",
80
- "discriminator": "7479",
81
- "id": "190320984123768832",
82
- "avatar": "b004ec1740a63ca06ae2e14c5cee11f3",
83
- "public_flags": 131328,
84
- },
85
- },
86
- )
87
- # when
88
- response = self.webhook_1.send_message_to_webhook(self.message)
89
- # then
90
- self.assertTrue(response.status_ok)
91
- self.assertTrue(requests_mocker.called)
92
-
93
- def test_when_send_not_ok_returns_false(self, requests_mocker):
94
- # given
95
- requests_mocker.register_uri("POST", self.webhook_1.url, status_code=404)
96
- # when
97
- response = self.webhook_1.send_message_to_webhook(self.message)
98
- # then
99
- self.assertFalse(response.status_ok)
100
- self.assertTrue(requests_mocker.called)
101
-
102
- def test_too_many_requests_normal(self, requests_mocker):
103
- # given
104
- requests_mocker.register_uri(
105
- "POST",
106
- self.webhook_1.url,
107
- status_code=429,
108
- json={
109
- "global": False,
110
- "message": "You are being rate limited.",
111
- "retry_after": 2000,
112
- },
113
- headers={
114
- "x-ratelimit-remaining": "5",
115
- "x-ratelimit-reset-after": "60",
116
- "Retry-After": "2000",
117
- },
118
- )
119
- # when/then
120
- try:
121
- self.webhook_1.send_message_to_webhook(self.message)
122
- except Exception as ex:
123
- self.assertIsInstance(ex, WebhookTooManyRequests)
124
- self.assertEqual(ex.retry_after, 2002)
125
- else:
126
- self.fail("Did not raise excepted exception")
127
-
128
- self.assertAlmostEqual(
129
- cache.ttl(self.webhook_1._blocked_cache_key()), 2002, delta=5
130
- )
131
-
132
- def test_too_many_requests_no_retry_value(self, requests_mocker):
133
- # given
134
- requests_mocker.register_uri(
135
- "POST",
136
- self.webhook_1.url,
137
- status_code=429,
138
- headers={
139
- "x-ratelimit-remaining": "5",
140
- "x-ratelimit-reset-after": "60",
141
- },
142
- )
143
- # when/then
144
- try:
145
- self.webhook_1.send_message_to_webhook(self.message)
146
- except Exception as ex:
147
- self.assertIsInstance(ex, WebhookTooManyRequests)
148
- self.assertEqual(ex.retry_after, WebhookTooManyRequests.DEFAULT_RESET_AFTER)
149
- else:
150
- self.fail("Did not raise excepted exception")
@@ -1,12 +0,0 @@
1
- from django.test import TestCase
2
-
3
- from killtracker.exceptions import WebhookTooManyRequests
4
-
5
-
6
- class TestExceptions(TestCase):
7
- def test_exception(self):
8
- ex = WebhookTooManyRequests(10)
9
- self.assertEqual(ex.retry_after, 10)
10
-
11
- ex = WebhookTooManyRequests()
12
- self.assertEqual(ex.retry_after, 600)