aa-killtracker 0.11.0__py3-none-any.whl → 0.12.1__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aa-killtracker
3
- Version: 0.11.0
3
+ Version: 0.12.1
4
4
  Summary: "An app for running killmail trackers with Alliance Auth and Discord.
5
5
  Author-email: Erik Kalkoken <kalkoken87@gmail.com>
6
6
  Requires-Python: >=3.8
@@ -1,24 +1,23 @@
1
- killtracker/__init__.py,sha256=9X0qtzUQkdX19jG8N-F7Ev7k_eJjHUT1ts-Snqsc9UM,356
2
- killtracker/admin.py,sha256=ax0qJgUxgayzQ7UklsJ2na-P3wOoK6TtQdR7N1YwHgE,18025
1
+ killtracker/__init__.py,sha256=V4m-5KJOKyodZ4W8yOfYnVSdPSXA-9ROan6IGpI_Axs,356
2
+ killtracker/admin.py,sha256=CHudWND2slzqCt046xdf2lzhFaAuEsNKiF7ptaXm1wQ,13696
3
3
  killtracker/app_settings.py,sha256=4Hzd2BhOoNTZ5RakJ_Hd4PMQPdLSyKN2SE-dIs_iaBY,2839
4
4
  killtracker/apps.py,sha256=CfmDvqVXmoy6sumpjXKldhSlJt5xDiQW3XLBfCqH3-c,307
5
- killtracker/auth_hooks.py,sha256=dXZDf6H5mlaTpCTshrVELSSYpZKG_6HajAELSo_3zF8,208
6
- killtracker/constants.py,sha256=fzo5OxAiE-5lj5mbfiM76kMtR8vlFN-GWIj9xJ1tXIE,420
5
+ killtracker/constants.py,sha256=W7-VARE3B4_sdzV_9k7qunUzlxTcdSAeSp_ZJVnbUhw,2514
7
6
  killtracker/exceptions.py,sha256=aFY6qxQOta1V-qvgKp19Cgy6M16O7Si8moc2205OsX0,846
8
7
  killtracker/forms.py,sha256=BqJYcAQ9jbZxTkDsHxrxj0qKKTIGIW0mShbBYdCDlaA,5182
9
- killtracker/managers.py,sha256=55sfsbYcld6uAFvkuxTLqAtlJDGlp8ANiogLaovkQSg,4602
8
+ killtracker/managers.py,sha256=JCrfc3yrKD4uHCfIzPu7y2HF-VIJm1yskdc-CFEf7V4,4390
10
9
  killtracker/providers.py,sha256=smkZe_rKHkZeWFzJ0RhIhJVcbrZUpLYR5fKCge-dpXY,348
11
10
  killtracker/tasks.py,sha256=u_ZAOEeFZWW6qpWcB0HCzgbN0VjA1ZZDHdKPJGHKl0U,7884
12
- killtracker/urls.py,sha256=Kj8hMl93jfc7BE4f3ANW6cYp4UZgqrne4MtANn0vClw,436
13
- killtracker/views.py,sha256=WqAPnmujY_jhSK0txh55NswD2qWgU2R-OiKa-6lmBaQ,901
14
11
  killtracker/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
12
  killtracker/core/discord_messages.py,sha256=mOKiMWq-3WnaSUFbfgVmlkAedGTZ7OWcVxLp7n58-Z0,14132
16
- killtracker/core/killmails.py,sha256=4kwTMbTqsjnn2W0CmpknVSvH5u7LKC_gxSI8RAx47MA,19523
17
- killtracker/management/commands/killtracker_load_eve.py,sha256=7A2rhBboWYLRkrlU01z7zzeMa1eA2B_np5EZnwJnI0E,996
13
+ killtracker/core/killmails.py,sha256=ahppV9_MPi-0uPVo1brQflu9h5osK_uLzWwxLa7KveM,19734
14
+ killtracker/management/commands/killtracker_load_eve.py,sha256=5P2wr6LU-EMl9_gG-DKP2yw3eFXOU7ApeuGAWEbvCKk,1159
18
15
  killtracker/migrations/0001_initial_new.py,sha256=WszI5DmNFtk45IZ2Zul3_Ak-VXmye9ffJKFAsGIxoXA,27818
19
16
  killtracker/migrations/0001_squashed_all.py,sha256=KXwOcRayjGGGmleg7-aTcXeIi-92Mn4BaGkEY3iE9Vc,26221
20
17
  killtracker/migrations/0002_fix_webhook_notes_field.py,sha256=c_Uymy3K_NSwuZzoKZ2ub-YRgT0VKIVe6bhhcrvfu5Q,494
18
+ killtracker/migrations/0002_tracker_require_attackers_weapon_groups_and_more.py,sha256=zLBGMxzxha4cq9SX3yKuJA6y7yGQJ7B0TB3G9MtUfFI,1184
21
19
  killtracker/migrations/0003_add_state_clauses.py,sha256=J0AwRYrmiSAmkpui-p637k_aVa404ED2nvw_mVEsY7g,1663
20
+ killtracker/migrations/0003_optimize_tracker_form.py,sha256=Q_5ArFB1mxCShgoV3CwpSAgP7DM2xR9Vr_fo92MozH0,3623
22
21
  killtracker/migrations/0004_django4_update.py,sha256=fOgbzWr6gMZWYr9Q-Ozg9mHxeUxY1VhuqBvyXv60pAg,7542
23
22
  killtracker/migrations/0005_add_final_blow_clause_and_more.py,sha256=XvaXUChQkcARcP-o8xTQ1inbc5l9IiAmUXuWY1UqzGQ,15550
24
23
  killtracker/migrations/0006_evetypeplus.py,sha256=SpaxJKA5mwnELVtUPFmDcp5Ws1CVono5Fzn2ZuiTZfg,569
@@ -26,28 +25,28 @@ killtracker/migrations/0007_restructure_killsmails.py,sha256=_FAUJUM4mpRm8-C8Ogl
26
25
  killtracker/migrations/0008_copy_data_to_new_structure.py,sha256=Dgw1jxbei8g8vYYD0LzgH3FKgwRaakelwnFVZv_VXMU,2372
27
26
  killtracker/migrations/0009_remove_old_models.py,sha256=bDIz0hywpFKbHYhdXFXzra5D6mo9yCFg27MVFrTaUNY,1291
28
27
  killtracker/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- killtracker/models/__init__.py,sha256=EK3rc2y-CqnHgCSPidzUxLnstPRA992oSurKG4-ZrnU,195
28
+ killtracker/models/__init__.py,sha256=WL6VD9MK7EsZot_RLPz0nX8WxJkp7RtQpw_mYpnVqu8,188
30
29
  killtracker/models/killmails.py,sha256=CCdrHkwUSoTOGqavG-TpMxDRleF9UEacOTui8v3-VT8,5181
31
- killtracker/models/trackers.py,sha256=O0mbTLh5v1dtKaDED3N1LRQwJePIudwy1w9kcRk_DGw,33067
30
+ killtracker/models/trackers.py,sha256=2ShkcH8CPix0EszHg-jxZZaJSM5iZUfjPWBEPxIPoOw,28791
31
+ killtracker/models/webhooks.py,sha256=hh1mYE4pBU26YFawkv1z-j4uyX8aT25B0crOTsocSSY,8268
32
32
  killtracker/static/killtracker/killtracker_logo.png,sha256=3jc9zmYHqP60Np5piP5RfkX0_II-315DNjZ4FRGbqKc,74625
33
33
  killtracker/static/killtracker/zkb_icon.png,sha256=wuVfgyTbTs9qS4KGbDAH3Q9KVPgHqYV5eaVrjEmTjsE,328
34
- killtracker/templates/admin/killtracker/tracker/change_form.html,sha256=b-0N19QjQRa_T-lypJk_Bs7Ry8dj3In-xlj1l1IzGMo,519
35
34
  killtracker/templates/admin/killtracker/tracker/killmail_test.html,sha256=TI2ON8qf9pW4rX6G7pT990ZadkipwncQgGUC0FPcWQY,649
36
- killtracker/templates/admin/killtracker/tracker/toogle_npc_button.html,sha256=oCtzMJ_exQp23s-gloxVTE_HfGaDdl3eZFPGM6tku34,701
37
35
  killtracker/tests/__init__.py,sha256=CEt5qqp6ptDrx1lwuA6epZ5bzh1CwUJYXeMZqWK9jT0,278
38
- killtracker/tests/test_admin.py,sha256=C6iYFfRn5p78M0ZwgOriRfNJ2OVae1E3y_SNLg0P7-0,11439
36
+ killtracker/tests/test_admin.py,sha256=Yj3CQ2ZaOq0PnsP6X_cC6iZEJ9gPdna6Oyx84G2-Fmg,5642
39
37
  killtracker/tests/test_admin_2.py,sha256=rP0EscM9qUil_ZuXute3R8TQY2P5XSjmxHLbziCGcVw,1140
40
38
  killtracker/tests/test_exceptions.py,sha256=wheTwm0JOBqYVI-DJM4KK2usFAZT1Q-O52VMOnSAz8Y,326
41
- killtracker/tests/test_integration.py,sha256=zCzhXZro1BrJZPisr7lBfSmHUSg4lao1LUXW40wdea8,3155
42
- killtracker/tests/test_tasks.py,sha256=Mfh0eRN1-MizRjfqWJKgqJebzN1Xs2TlLRuPz5F9-CA,13929
39
+ killtracker/tests/test_integration.py,sha256=8ISULhhkvymFJ2DHgl3Xpr8CihXBuUpESI_4NB23Bz4,3155
40
+ killtracker/tests/test_tasks.py,sha256=ZDoCUBd-1kSOKrvSeTrlDaSGFmzHieT5ef0iBz6nr2I,13929
43
41
  killtracker/tests/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
42
  killtracker/tests/core/test_discord_messages_1.py,sha256=dXEj36ejOtf1t6E9gM1GgpOHd77NIxDVlNf4rOrPzxc,3054
45
43
  killtracker/tests/core/test_discord_messages_2.py,sha256=Dm1hzJOg3E_yfkGaU0dbvjucmm5pVjjclOmfO7NDapI,4743
46
- killtracker/tests/core/test_killmails.py,sha256=EtOia0CGLGTMzt91G7_09xEv9DNukWvCJnPnm5CDMUY,11440
44
+ killtracker/tests/core/test_killmails.py,sha256=mZzeED2rd2vXHdV5NmPxC0Wt8qkvNz6OX3l046BnEi8,11647
47
45
  killtracker/tests/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
46
  killtracker/tests/models/test_killmails.py,sha256=qSEClhyrqmvsU2P1DiCUonfnl5NDUu50aReQIsCz9CQ,8233
49
- killtracker/tests/models/test_trackers_1.py,sha256=WpturLmTQLzFgc5rKDfZvpA2reJgFtjpLRgTzLxEWPA,33129
50
- killtracker/tests/models/test_trackers_2.py,sha256=8-yfmeVLST7UuSMY0Fn43PEie14fRnmcA4F3L1Brm3Q,10517
47
+ killtracker/tests/models/test_trackers_1.py,sha256=KgpoEE7IrfRGe1UMTA7geFb-sOWkU8Ulo5iJrgA_LKw,35211
48
+ killtracker/tests/models/test_trackers_2.py,sha256=ry4Bb3ab3OTC7Df9hTow1UuKwXULpDrF_qhbGCV8uPo,5373
49
+ killtracker/tests/models/test_webhook.py,sha256=E4BgmQw9mI5ZenV6ncYHbBonlEeWvvdilAS8IKFkbjw,5246
51
50
  killtracker/tests/testdata/__init__.py,sha256=9aQhf8V-DseZMWjJ_QMXOba6CypoHFSVpYRZEUh-oFc,212
52
51
  killtracker/tests/testdata/create_eveuniverse.py,sha256=Ewr5OBiQwjK1kwDCRh3A3f0Z-CCPi8Gp8dpsPgVAU4A,966
53
52
  killtracker/tests/testdata/evealliances.json,sha256=i6udrtUnWQjn71Iw17WWz9Eb1fdGUNhI1UYLt0hZHog,307
@@ -60,7 +59,7 @@ killtracker/tests/testdata/killmails.json,sha256=HKfpXQJ_ikymBSewh4wWixYpLwC3kNB
60
59
  killtracker/tests/testdata/load_eveuniverse.py,sha256=FitVc12E_ob56ezK5Y1q07Kbyc7N8poHiCNaLRGU4Jg,388
61
60
  killtracker/tools/drop_tables_killtracker.sql,sha256=fJrGY23NKRunpYC3hI-klFkWub4sBuhfP8TaT__zjPg,1726
62
61
  killtracker/tools/generate_conditions_text.py,sha256=CiXBtaH2KY6JHpuxNlGmxLI6GsvxKKBX5xhXsSz3Rno,768
63
- aa_killtracker-0.11.0.dist-info/LICENSE,sha256=XZiwB_S_40_HhnvLg5xvtBb3g1oGjPrk0rpFwk8iInE,1070
64
- aa_killtracker-0.11.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
65
- aa_killtracker-0.11.0.dist-info/METADATA,sha256=2ayB0ge9SQ3WPPJ8M5HUspNuuKCH1dv1tehuLyTTvZI,12484
66
- aa_killtracker-0.11.0.dist-info/RECORD,,
62
+ aa_killtracker-0.12.1.dist-info/LICENSE,sha256=XZiwB_S_40_HhnvLg5xvtBb3g1oGjPrk0rpFwk8iInE,1070
63
+ aa_killtracker-0.12.1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
64
+ aa_killtracker-0.12.1.dist-info/METADATA,sha256=wi0FJgujuWNYApqjRCeX37PbzxRh6MR8rVatiOXuc2c,12484
65
+ aa_killtracker-0.12.1.dist-info/RECORD,,
killtracker/__init__.py CHANGED
@@ -3,7 +3,7 @@
3
3
  # pylint: disable = invalid-name
4
4
  default_app_config = "killtracker.apps.KillmailsConfig"
5
5
 
6
- __version__ = "0.11.0"
6
+ __version__ = "0.12.1"
7
7
  __title__ = "Killtracker"
8
8
 
9
9
  APP_NAME = "aa-killtracker"
killtracker/admin.py CHANGED
@@ -4,26 +4,16 @@
4
4
 
5
5
 
6
6
  from django.contrib import admin
7
- from django.db.models import Q
8
- from django.db.models.functions import Lower
9
- from django.http import HttpResponse, HttpResponseRedirect
10
- from django.shortcuts import get_object_or_404, render
7
+ from django.http import HttpResponseRedirect
8
+ from django.shortcuts import render
11
9
  from django.utils.safestring import mark_safe
12
- from eveuniverse.models import EveGroup
13
10
 
14
11
  from allianceauth import NAME as site_header
15
- from allianceauth.eveonline.models import EveAllianceInfo, EveCorporationInfo
16
12
 
17
13
  from . import tasks
18
- from .constants import (
19
- SESSION_KEY_TOOGLE_NPC,
20
- SESSION_KEY_USES_NPC,
21
- EveCategoryId,
22
- EveGroupId,
23
- )
24
14
  from .core.killmails import Killmail
25
15
  from .forms import TrackerAdminForm, TrackerAdminKillmailIdForm, field_nice_display
26
- from .models import EveKillmail, EveKillmailAttacker, EveTypePlus, Tracker, Webhook
16
+ from .models import EveKillmail, EveKillmailAttacker, Tracker, Webhook
27
17
 
28
18
 
29
19
  class EveKillmailAttackerInline(admin.TabularInline):
@@ -105,8 +95,11 @@ class TrackerAdmin(admin.ModelAdmin):
105
95
  )
106
96
  ordering = ("name",)
107
97
  actions = ["disable_tracker", "enable_tracker", "reset_color", "run_test_killmail"]
108
- autocomplete_fields = ["origin_solar_system"]
109
- filter_horizontal = (
98
+ autocomplete_fields = [
99
+ "origin_solar_system",
100
+ "require_regions",
101
+ "require_constellations",
102
+ "require_solar_systems",
110
103
  "exclude_attacker_alliances",
111
104
  "exclude_attacker_corporations",
112
105
  "require_attacker_alliances",
@@ -115,16 +108,17 @@ class TrackerAdmin(admin.ModelAdmin):
115
108
  "exclude_victim_alliances",
116
109
  "require_victim_corporations",
117
110
  "exclude_victim_corporations",
118
- "exclude_attacker_states",
119
- "require_attacker_states",
120
- "require_victim_states",
121
- "require_regions",
122
- "require_constellations",
123
- "require_solar_systems",
124
- "require_attackers_ship_groups",
125
111
  "require_attackers_ship_types",
112
+ "require_attackers_ship_groups",
113
+ "require_attackers_weapon_groups",
114
+ "require_attackers_weapon_types",
126
115
  "require_victim_ship_groups",
127
116
  "require_victim_ship_types",
117
+ ]
118
+ filter_horizontal = (
119
+ "exclude_attacker_states",
120
+ "require_attacker_states",
121
+ "require_victim_states",
128
122
  "ping_groups",
129
123
  )
130
124
  fieldsets = (
@@ -206,11 +200,13 @@ class TrackerAdmin(admin.ModelAdmin):
206
200
  },
207
201
  ),
208
202
  (
209
- "Ship types",
203
+ "Ship & Weapon types",
210
204
  {
211
205
  "fields": (
212
206
  "require_attackers_ship_groups",
213
207
  "require_attackers_ship_types",
208
+ "require_attackers_weapon_groups",
209
+ "require_attackers_weapon_types",
214
210
  "require_victim_ship_groups",
215
211
  "require_victim_ship_types",
216
212
  ),
@@ -237,30 +233,13 @@ class TrackerAdmin(admin.ModelAdmin):
237
233
  "require_solar_systems",
238
234
  "require_attackers_ship_groups",
239
235
  "require_attackers_ship_types",
236
+ "require_attackers_weapon_groups",
237
+ "require_attackers_weapon_types",
240
238
  "require_victim_ship_groups",
241
239
  "require_victim_ship_types",
242
240
  "ping_groups",
243
241
  )
244
242
 
245
- def change_view(
246
- self, request, object_id, form_url="", extra_context=None
247
- ) -> HttpResponse:
248
- extra_context = extra_context or {}
249
- tracker = get_object_or_404(Tracker, pk=object_id)
250
- is_using_npc = (
251
- tracker.require_attackers_ship_types.filter(
252
- eve_group__eve_category_id=EveCategoryId.ENTITY
253
- ).exists()
254
- or tracker.require_attackers_ship_groups.filter(
255
- eve_category_id=EveCategoryId.ENTITY
256
- ).exists()
257
- )
258
- request.session[SESSION_KEY_USES_NPC] = is_using_npc
259
- extra_context["is_using_npc"] = is_using_npc
260
- return super().change_view(
261
- request, object_id, form_url, extra_context=extra_context
262
- )
263
-
264
243
  def _color(self, obj):
265
244
  html = (
266
245
  f'<input type="color" value="{obj.color}" disabled>' if obj.color else "-"
@@ -306,6 +285,8 @@ class TrackerAdmin(admin.ModelAdmin):
306
285
  ("require_min_value", self._add_to_clauses_1),
307
286
  ("require_attackers_ship_groups", self._add_to_clauses_2),
308
287
  ("require_attackers_ship_types", self._add_to_clauses_2),
288
+ ("require_attackers_weapon_groups", self._add_to_clauses_2),
289
+ ("require_attackers_weapon_types", self._add_to_clauses_2),
309
290
  ("require_victim_ship_groups", self._add_to_clauses_2),
310
291
  ("require_victim_ship_types", self._add_to_clauses_2),
311
292
  ("exclude_npc_kills", self._add_to_clauses_1),
@@ -327,21 +308,21 @@ class TrackerAdmin(admin.ModelAdmin):
327
308
  def _append_field_to_clauses(self, clauses, field, text):
328
309
  clauses.append(f"{field_nice_display(field)} = {text}")
329
310
 
330
- @admin.display(description="Reset color for selected trackers")
311
+ @admin.action(description="Reset color for selected trackers")
331
312
  def reset_color(self, request, queryset):
332
313
  queryset.update(color="")
333
314
 
334
- @admin.display(description="Enable selected trackers")
315
+ @admin.action(description="Enable selected trackers")
335
316
  def enable_tracker(self, request, queryset):
336
317
  queryset.update(is_enabled=True)
337
318
  self.message_user(request, f"{queryset.count()} trackers enabled.")
338
319
 
339
- @admin.display(description="Disable selected trackers")
320
+ @admin.action(description="Disable selected trackers")
340
321
  def disable_tracker(self, request, queryset):
341
322
  queryset.update(is_enabled=False)
342
323
  self.message_user(request, f"{queryset.count()} trackers disabled.")
343
324
 
344
- @admin.display(description="Run test killmail with selected trackers")
325
+ @admin.action(description="Run test killmail with selected trackers")
345
326
  def run_test_killmail(self, request, queryset):
346
327
  if "apply" in request.POST:
347
328
  form = TrackerAdminKillmailIdForm(request.POST)
@@ -390,91 +371,3 @@ class TrackerAdmin(admin.ModelAdmin):
390
371
  "queryset": queryset.order_by("name"),
391
372
  },
392
373
  )
393
-
394
- def formfield_for_manytomany(self, db_field, request, **kwargs):
395
- """overriding this formfield to have sorted lists in the form"""
396
- show_npc_types = request.session.get(
397
- SESSION_KEY_USES_NPC, False
398
- ) or request.session.get(SESSION_KEY_TOOGLE_NPC, False)
399
- if db_field.name in {
400
- "exclude_attacker_alliances",
401
- "require_attacker_alliances",
402
- "require_victim_alliances",
403
- "exclude_victim_alliances",
404
- }:
405
- kwargs["queryset"] = EveAllianceInfo.objects.order_by(
406
- Lower("alliance_name")
407
- )
408
- elif db_field.name in {
409
- "exclude_attacker_corporations",
410
- "require_attacker_corporations",
411
- "require_victim_corporations",
412
- "exclude_victim_corporations",
413
- }:
414
- kwargs["queryset"] = EveCorporationInfo.objects.order_by(
415
- Lower("corporation_name")
416
- )
417
- elif db_field.name == "require_attackers_ship_groups":
418
- qs = EveGroup.objects.filter(
419
- eve_category_id__in=[
420
- EveCategoryId.STRUCTURE,
421
- EveCategoryId.SHIP,
422
- EveCategoryId.FIGHTER,
423
- ],
424
- published=True,
425
- )
426
- if show_npc_types:
427
- qs = (
428
- qs
429
- | EveGroup.objects.filter(
430
- eve_category_id=EveCategoryId.ENTITY
431
- ).filter(eve_types__mass__gt=1, eve_types__volume__gt=1)
432
- ).distinct()
433
- kwargs["queryset"] = qs.order_by(Lower("name"))
434
- elif db_field.name == "require_victim_ship_groups":
435
- kwargs["queryset"] = EveGroup.objects.filter(
436
- (
437
- Q(
438
- eve_category_id__in=[
439
- EveCategoryId.STRUCTURE,
440
- EveCategoryId.SHIP,
441
- EveCategoryId.FIGHTER,
442
- ]
443
- )
444
- & Q(published=True)
445
- )
446
- | (Q(id=EveGroupId.MINING_DRONE) & Q(published=True))
447
- | Q(id=EveGroupId.ORBITAL_INFRASTRUCTURE)
448
- ).order_by(Lower("name"))
449
- elif db_field.name == "require_attackers_ship_types":
450
- qs = EveTypePlus.objects.filter(
451
- eve_group__eve_category_id__in=[
452
- EveCategoryId.STRUCTURE,
453
- EveCategoryId.SHIP,
454
- EveCategoryId.FIGHTER,
455
- ],
456
- published=True,
457
- )
458
- if show_npc_types:
459
- qs = qs | EveTypePlus.objects.filter(
460
- eve_group__eve_category_id=EveCategoryId.ENTITY,
461
- mass__gt=1,
462
- volume__gt=1,
463
- )
464
- kwargs["queryset"] = qs.order_by(Lower("name"))
465
- elif db_field.name == "require_victim_ship_types":
466
- kwargs["queryset"] = EveTypePlus.objects.filter(
467
- (
468
- Q(
469
- eve_group__eve_category_id__in=[
470
- EveCategoryId.STRUCTURE,
471
- EveCategoryId.SHIP,
472
- EveCategoryId.FIGHTER,
473
- ]
474
- )
475
- & Q(published=True)
476
- )
477
- | (Q(eve_group_id=EveGroupId.MINING_DRONE) & Q(published=True))
478
- | Q(eve_group_id=EveGroupId.ORBITAL_INFRASTRUCTURE)
479
- ).order_by(Lower("name"))
480
- return super().formfield_for_manytomany(db_field, request, **kwargs)
killtracker/constants.py CHANGED
@@ -1,14 +1,13 @@
1
1
  """Global constants for killtracker."""
2
2
 
3
3
  from enum import IntEnum
4
-
5
- SESSION_KEY_TOOGLE_NPC = "killtracker_toogle_npc"
6
- SESSION_KEY_USES_NPC = "killtracker_uses_npc"
4
+ from typing import Set
7
5
 
8
6
 
9
7
  class EveCategoryId(IntEnum):
10
8
  """An Eve category ID."""
11
9
 
10
+ DEPLOYABLE = 22
12
11
  ENTITY = 11
13
12
  FIGHTER = 87
14
13
  MODULE = 7
@@ -19,5 +18,69 @@ class EveCategoryId(IntEnum):
19
18
  class EveGroupId(IntEnum):
20
19
  """An Eve group ID."""
21
20
 
21
+ FRIGATE = 25
22
22
  MINING_DRONE = 101
23
23
  ORBITAL_INFRASTRUCTURE = 1025
24
+ PROJECTILE_WEAPON = 55
25
+ TACTICAL_DESTROYER = 1305
26
+
27
+ BURST_PROJECTORS = 842
28
+ ENERGY_NEUTRALIZER = 71
29
+ ENERGY_NOSFERATU = 68
30
+ ENERGY_WEAPON = 53
31
+ HYBRID_WEAPON = 74
32
+ INTERDICTION_NULLIFIER = 4117
33
+ INTERDICTION_SPHERE_LAUNCHER = 589
34
+ MISSILE_LAUNCHER_BOMB = 862
35
+ MISSILE_LAUNCHER_CRUISE = 506
36
+ MISSILE_LAUNCHER_DEFENDER = 512
37
+ MISSILE_LAUNCHER_HEAVY = 510
38
+ MISSILE_LAUNCHER_HEAVY_ASSAULT = 771
39
+ MISSILE_LAUNCHER_LIGHT = 509
40
+ MISSILE_LAUNCHER_RAPID_HEAVY = 1245
41
+ MISSILE_LAUNCHER_RAPID_LIGHT = 511
42
+ MISSILE_LAUNCHER_RAPID_TORPEDO = 1673
43
+ MISSILE_LAUNCHER_ROCKET = 507
44
+ MISSILE_LAUNCHER_TORPEDO = 508
45
+ MISSILE_LAUNCHER_XL_CRUISE = 1674
46
+ MISSILE_LAUNCHER_XL_TORPEDO = 524
47
+ PRECURSOR_WEAPON = 1986
48
+ SMART_BOMB = 72
49
+ STRIP_MINER = 464
50
+ SUPER_WEAPON = 588
51
+ TITAN_PHENOMENA_GENERATOR = 1815
52
+ VORTON_PROJECTOR = 4060
53
+ WARP_DISRUPT_FIELD_GENERATOR = 899
54
+
55
+ @classmethod
56
+ def weapons(cls) -> Set["EveGroupId"]:
57
+ """Return group IDs for all weapons."""
58
+ return {
59
+ cls.BURST_PROJECTORS,
60
+ cls.ENERGY_NEUTRALIZER,
61
+ cls.ENERGY_NOSFERATU,
62
+ cls.ENERGY_WEAPON,
63
+ cls.HYBRID_WEAPON,
64
+ cls.INTERDICTION_NULLIFIER,
65
+ cls.INTERDICTION_SPHERE_LAUNCHER,
66
+ cls.MISSILE_LAUNCHER_BOMB,
67
+ cls.MISSILE_LAUNCHER_CRUISE,
68
+ cls.MISSILE_LAUNCHER_DEFENDER,
69
+ cls.MISSILE_LAUNCHER_HEAVY,
70
+ cls.MISSILE_LAUNCHER_HEAVY_ASSAULT,
71
+ cls.MISSILE_LAUNCHER_LIGHT,
72
+ cls.MISSILE_LAUNCHER_RAPID_HEAVY,
73
+ cls.MISSILE_LAUNCHER_RAPID_LIGHT,
74
+ cls.MISSILE_LAUNCHER_RAPID_TORPEDO,
75
+ cls.MISSILE_LAUNCHER_ROCKET,
76
+ cls.MISSILE_LAUNCHER_TORPEDO,
77
+ cls.MISSILE_LAUNCHER_XL_CRUISE,
78
+ cls.MISSILE_LAUNCHER_XL_TORPEDO,
79
+ cls.PRECURSOR_WEAPON,
80
+ cls.PROJECTILE_WEAPON,
81
+ cls.SMART_BOMB,
82
+ cls.SUPER_WEAPON,
83
+ cls.TITAN_PHENOMENA_GENERATOR,
84
+ cls.VORTON_PROJECTOR,
85
+ cls.WARP_DISRUPT_FIELD_GENERATOR,
86
+ }
@@ -181,6 +181,10 @@ class Killmail(_KillmailBase):
181
181
  """Returns ship type IDs of all attackers with duplicates."""
182
182
  return [obj.ship_type_id for obj in self.attackers if obj.ship_type_id]
183
183
 
184
+ def attackers_weapon_type_ids(self) -> List[int]:
185
+ """Returns weapon type IDs of all attackers with duplicates."""
186
+ return [obj.weapon_type_id for obj in self.attackers if obj.weapon_type_id]
187
+
184
188
  def entity_ids(self) -> Set[int]:
185
189
  """Return distinct IDs of all entities (excluding None)."""
186
190
  ids = {
@@ -19,6 +19,8 @@ class Command(BaseCommand):
19
19
  "eveuniverse_load_types",
20
20
  __title__,
21
21
  "--category_id",
22
+ str(EveCategoryId.DEPLOYABLE.value),
23
+ "--category_id",
22
24
  str(EveCategoryId.ENTITY.value),
23
25
  "--category_id",
24
26
  str(EveCategoryId.SHIP.value),
@@ -26,6 +28,8 @@ class Command(BaseCommand):
26
28
  str(EveCategoryId.STRUCTURE.value),
27
29
  "--category_id",
28
30
  str(EveCategoryId.FIGHTER.value),
31
+ "--category_id_with_dogma",
32
+ str(EveCategoryId.MODULE.value),
29
33
  "--group_id",
30
34
  str(EveGroupId.ORBITAL_INFRASTRUCTURE.value),
31
35
  "--group_id",
killtracker/managers.py CHANGED
@@ -20,13 +20,6 @@ from .core.killmails import Killmail, _KillmailCharacter
20
20
  logger = LoggerAddTag(get_extension_logger(__name__), __title__)
21
21
 
22
22
 
23
- class EveTypePlusManager(models.Manager):
24
- def get_queryset(self):
25
- """Add join with EveGroup to default queryset."""
26
- qs = super().get_queryset()
27
- return qs.select_related("eve_group")
28
-
29
-
30
23
  class EveKillmailQuerySet(models.QuerySet):
31
24
  """Custom queryset for EveKillmail"""
32
25
 
@@ -0,0 +1,35 @@
1
+ # Generated by Django 4.0.10 on 2023-09-11 12:22
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ ("eveuniverse", "0010_alter_eveindustryactivityduration_eve_type_and_more"),
9
+ ("killtracker", "0001_initial_new"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name="tracker",
15
+ name="require_attackers_weapon_groups",
16
+ field=models.ManyToManyField(
17
+ blank=True,
18
+ default=None,
19
+ help_text="Only include killmails where at least one attacker is using one of these weapon groups. ",
20
+ related_name="+",
21
+ to="eveuniverse.evegroup",
22
+ ),
23
+ ),
24
+ migrations.AddField(
25
+ model_name="tracker",
26
+ name="require_attackers_weapon_types",
27
+ field=models.ManyToManyField(
28
+ blank=True,
29
+ default=None,
30
+ help_text="Only include killmails where at least one attacker is using one of these weapon types. ",
31
+ related_name="+",
32
+ to="eveuniverse.evetype",
33
+ ),
34
+ ),
35
+ ]
@@ -0,0 +1,90 @@
1
+ # Generated by Django 4.0.10 on 2023-10-05 18:56
2
+
3
+ from django.db import migrations, models
4
+
5
+ import killtracker.models.trackers
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ dependencies = [
10
+ ("eveuniverse", "0010_alter_eveindustryactivityduration_eve_type_and_more"),
11
+ ("killtracker", "0002_tracker_require_attackers_weapon_groups_and_more"),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.DeleteModel(
16
+ name="EveTypePlus",
17
+ ),
18
+ migrations.AlterField(
19
+ model_name="tracker",
20
+ name="require_attackers_ship_groups",
21
+ field=models.ManyToManyField(
22
+ blank=True,
23
+ default=None,
24
+ help_text="Only include killmails where at least one attacker is flying one of these ship groups. ",
25
+ limit_choices_to=killtracker.models.trackers._require_attackers_ship_groups_query,
26
+ related_name="+",
27
+ to="eveuniverse.evegroup",
28
+ ),
29
+ ),
30
+ migrations.AlterField(
31
+ model_name="tracker",
32
+ name="require_attackers_ship_types",
33
+ field=models.ManyToManyField(
34
+ blank=True,
35
+ default=None,
36
+ help_text="Only include killmails where at least one attacker is flying one of these ship types. ",
37
+ limit_choices_to=killtracker.models.trackers._require_attackers_ship_types_query,
38
+ related_name="+",
39
+ to="eveuniverse.evetype",
40
+ ),
41
+ ),
42
+ migrations.AlterField(
43
+ model_name="tracker",
44
+ name="require_attackers_weapon_groups",
45
+ field=models.ManyToManyField(
46
+ blank=True,
47
+ default=None,
48
+ help_text="Only include killmails where at least one attacker is using one of these weapon groups. ",
49
+ limit_choices_to=killtracker.models.trackers._require_attackers_weapon_groups_query,
50
+ related_name="+",
51
+ to="eveuniverse.evegroup",
52
+ ),
53
+ ),
54
+ migrations.AlterField(
55
+ model_name="tracker",
56
+ name="require_attackers_weapon_types",
57
+ field=models.ManyToManyField(
58
+ blank=True,
59
+ default=None,
60
+ help_text="Only include killmails where at least one attacker is using one of these weapon types. ",
61
+ limit_choices_to=killtracker.models.trackers._require_attackers_weapon_types_query,
62
+ related_name="+",
63
+ to="eveuniverse.evetype",
64
+ ),
65
+ ),
66
+ migrations.AlterField(
67
+ model_name="tracker",
68
+ name="require_victim_ship_groups",
69
+ field=models.ManyToManyField(
70
+ blank=True,
71
+ default=None,
72
+ help_text="Only include killmails where victim is flying one of these ship groups. ",
73
+ limit_choices_to=killtracker.models.trackers._require_victim_ship_groups_query,
74
+ related_name="+",
75
+ to="eveuniverse.evegroup",
76
+ ),
77
+ ),
78
+ migrations.AlterField(
79
+ model_name="tracker",
80
+ name="require_victim_ship_types",
81
+ field=models.ManyToManyField(
82
+ blank=True,
83
+ default=None,
84
+ help_text="Only include killmails where victim is flying one of these ship types. ",
85
+ limit_choices_to=killtracker.models.trackers._require_victim_ship_types_query,
86
+ related_name="+",
87
+ to="eveuniverse.evetype",
88
+ ),
89
+ ),
90
+ ]
@@ -1,4 +1,5 @@
1
1
  from .killmails import EveKillmail, EveKillmailAttacker
2
- from .trackers import EveTypePlus, Tracker, Webhook
2
+ from .trackers import Tracker
3
+ from .webhooks import Webhook
3
4
 
4
- __all__ = ["EveKillmail", "EveKillmailAttacker", "EveTypePlus", "Tracker", "Webhook"]
5
+ __all__ = ["EveKillmail", "EveKillmailAttacker", "Tracker", "Webhook"]