aa-fleetfinder 2.7.1__py3-none-any.whl → 3.0.0b1__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.
Potentially problematic release.
This version of aa-fleetfinder might be problematic. Click here for more details.
- {aa_fleetfinder-2.7.1.dist-info → aa_fleetfinder-3.0.0b1.dist-info}/METADATA +5 -14
- {aa_fleetfinder-2.7.1.dist-info → aa_fleetfinder-3.0.0b1.dist-info}/RECORD +35 -35
- fleetfinder/__init__.py +5 -3
- fleetfinder/apps.py +5 -4
- fleetfinder/locale/cs_CZ/LC_MESSAGES/django.po +21 -22
- fleetfinder/locale/de/LC_MESSAGES/django.mo +0 -0
- fleetfinder/locale/de/LC_MESSAGES/django.po +27 -24
- fleetfinder/locale/django.pot +22 -23
- fleetfinder/locale/es/LC_MESSAGES/django.po +25 -22
- fleetfinder/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
- fleetfinder/locale/fr_FR/LC_MESSAGES/django.po +67 -59
- fleetfinder/locale/it_IT/LC_MESSAGES/django.po +21 -22
- fleetfinder/locale/ja/LC_MESSAGES/django.po +25 -22
- fleetfinder/locale/ko_KR/LC_MESSAGES/django.po +25 -22
- fleetfinder/locale/nl_NL/LC_MESSAGES/django.po +21 -22
- fleetfinder/locale/pl_PL/LC_MESSAGES/django.po +21 -22
- fleetfinder/locale/ru/LC_MESSAGES/django.po +25 -22
- fleetfinder/locale/sk/LC_MESSAGES/django.po +21 -22
- fleetfinder/locale/uk/LC_MESSAGES/django.mo +0 -0
- fleetfinder/locale/uk/LC_MESSAGES/django.po +50 -56
- fleetfinder/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- fleetfinder/locale/zh_Hans/LC_MESSAGES/django.po +28 -25
- fleetfinder/providers.py +22 -4
- fleetfinder/tasks.py +279 -110
- fleetfinder/tests/__init__.py +39 -1
- fleetfinder/tests/test_access.py +2 -2
- fleetfinder/tests/test_auth_hooks.py +2 -2
- fleetfinder/tests/test_settings.py +3 -2
- fleetfinder/tests/test_tasks.py +1010 -34
- fleetfinder/tests/test_templatetags.py +2 -4
- fleetfinder/tests/test_user_agent.py +62 -14
- fleetfinder/tests/test_views.py +700 -52
- fleetfinder/views.py +102 -55
- {aa_fleetfinder-2.7.1.dist-info → aa_fleetfinder-3.0.0b1.dist-info}/WHEEL +0 -0
- {aa_fleetfinder-2.7.1.dist-info → aa_fleetfinder-3.0.0b1.dist-info}/licenses/LICENSE +0 -0
fleetfinder/views.py
CHANGED
|
@@ -4,9 +4,7 @@ Views
|
|
|
4
4
|
|
|
5
5
|
# Standard Library
|
|
6
6
|
import json
|
|
7
|
-
|
|
8
|
-
# Third Party
|
|
9
|
-
from bravado.exception import HTTPNotFound
|
|
7
|
+
from http import HTTPStatus
|
|
10
8
|
|
|
11
9
|
# Django
|
|
12
10
|
from django.contrib import messages
|
|
@@ -28,7 +26,9 @@ from allianceauth.framework.api.user import get_all_characters_from_user
|
|
|
28
26
|
from allianceauth.groupmanagement.models import AuthGroup
|
|
29
27
|
from allianceauth.services.hooks import get_extension_logger
|
|
30
28
|
from esi.decorators import token_required
|
|
29
|
+
from esi.exceptions import HTTPClientError
|
|
31
30
|
from esi.models import Token
|
|
31
|
+
from esi.openapi_clients import EsiOperation
|
|
32
32
|
|
|
33
33
|
# Alliance Auth (External Libs)
|
|
34
34
|
from app_utils.logging import LoggerAddTag
|
|
@@ -44,7 +44,7 @@ logger = LoggerAddTag(my_logger=get_extension_logger(name=__name__), prefix=__ti
|
|
|
44
44
|
|
|
45
45
|
@login_required()
|
|
46
46
|
@permission_required(perm="fleetfinder.access_fleetfinder")
|
|
47
|
-
def _get_and_validate_fleet(token: Token, character_id: int) ->
|
|
47
|
+
def _get_and_validate_fleet(token: Token, character_id: int) -> EsiOperation:
|
|
48
48
|
"""
|
|
49
49
|
Get fleet information and validate fleet commander permissions
|
|
50
50
|
|
|
@@ -52,24 +52,37 @@ def _get_and_validate_fleet(token: Token, character_id: int) -> tuple:
|
|
|
52
52
|
:type token: Token
|
|
53
53
|
:param character_id: The character ID of the fleet commander
|
|
54
54
|
:type character_id: int
|
|
55
|
-
:return:
|
|
56
|
-
:rtype:
|
|
55
|
+
:return: Fleet information from ESI
|
|
56
|
+
:rtype: GetCharactersCharacterIdFleetOperation
|
|
57
57
|
"""
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
try:
|
|
60
|
+
fleet_result = esi.client.Fleets.GetCharactersCharacterIdFleet(
|
|
61
|
+
character_id=token.character_id,
|
|
62
|
+
token=token,
|
|
63
|
+
).result(force_refresh=True)
|
|
64
|
+
except HTTPClientError as ex:
|
|
65
|
+
logger.debug(f"ESI fleet cannot be retrieved: {str(ex)}", exc_info=True)
|
|
66
|
+
|
|
67
|
+
raise ValueError("Fleet not found") from ex
|
|
68
|
+
except Exception as ex:
|
|
69
|
+
logger.debug(f"Error retrieving fleet from ESI: {str(ex)}", exc_info=True)
|
|
70
|
+
|
|
71
|
+
raise RuntimeError(f"Error retrieving fleet from ESI: {str(ex)}") from ex
|
|
62
72
|
|
|
63
73
|
logger.debug(f"Fleet result: {fleet_result}")
|
|
64
74
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
fleet_boss_id = fleet_result.get("fleet_boss_id")
|
|
75
|
+
fleet_id = fleet_result.fleet_id
|
|
76
|
+
fleet_boss_id = fleet_result.fleet_boss_id
|
|
68
77
|
|
|
69
78
|
if not fleet_id:
|
|
79
|
+
fleet_commander = EveCharacter.objects.get(character_id=token.character_id)
|
|
80
|
+
|
|
70
81
|
raise ValueError(f"No fleet found for {fleet_commander.character_name}")
|
|
71
82
|
|
|
72
83
|
if fleet_boss_id != character_id:
|
|
84
|
+
fleet_commander = EveCharacter.objects.get(character_id=token.character_id)
|
|
85
|
+
|
|
73
86
|
raise ValueError(f"{fleet_commander.character_name} is not the fleet boss")
|
|
74
87
|
|
|
75
88
|
return fleet_result
|
|
@@ -232,20 +245,20 @@ def create_fleet(request, token):
|
|
|
232
245
|
# Validate the token and check if the character is in a fleet and is the fleet boss
|
|
233
246
|
try:
|
|
234
247
|
_get_and_validate_fleet(token, token.character_id)
|
|
235
|
-
except (
|
|
236
|
-
|
|
248
|
+
except (HTTPClientError, ValueError) as ex:
|
|
249
|
+
error_detail = str(ex)
|
|
237
250
|
|
|
238
|
-
|
|
239
|
-
error_detail = ex.swagger_result["error"]
|
|
240
|
-
else:
|
|
241
|
-
error_detail = str(ex)
|
|
251
|
+
logger.debug(f"Error during fleet creation: {error_detail}", exc_info=True)
|
|
242
252
|
|
|
243
|
-
|
|
244
|
-
|
|
253
|
+
messages.error(
|
|
254
|
+
request,
|
|
255
|
+
mark_safe(
|
|
256
|
+
_(
|
|
257
|
+
"<h4>Error!</h4><p>There was an error creating the fleet: {error_detail}</p>"
|
|
258
|
+
).format(error_detail=error_detail)
|
|
259
|
+
),
|
|
245
260
|
)
|
|
246
261
|
|
|
247
|
-
messages.error(request, mark_safe(error_message))
|
|
248
|
-
|
|
249
262
|
return redirect("fleetfinder:dashboard")
|
|
250
263
|
|
|
251
264
|
if request.method != "POST":
|
|
@@ -296,8 +309,7 @@ def edit_fleet(request, fleet_id):
|
|
|
296
309
|
"fleet": fleet,
|
|
297
310
|
}
|
|
298
311
|
|
|
299
|
-
logger.debug("Context for fleet edit:
|
|
300
|
-
|
|
312
|
+
logger.debug(f"Context for fleet edit: {context}")
|
|
301
313
|
logger.info(msg=f"Fleet {fleet_id} edit view by {request.user}")
|
|
302
314
|
|
|
303
315
|
return render(
|
|
@@ -387,7 +399,7 @@ def save_fleet(request):
|
|
|
387
399
|
|
|
388
400
|
fleet_result = _get_and_validate_fleet(token, character_id)
|
|
389
401
|
fleet_commander = EveCharacter.objects.get(character_id=character_id)
|
|
390
|
-
fleet_id = fleet_result.
|
|
402
|
+
fleet_id = fleet_result.fleet_id
|
|
391
403
|
|
|
392
404
|
fleet, created = Fleet.objects.get_or_create(
|
|
393
405
|
fleet_id=fleet_id,
|
|
@@ -407,12 +419,12 @@ def save_fleet(request):
|
|
|
407
419
|
|
|
408
420
|
fleet.groups.set(groups)
|
|
409
421
|
|
|
410
|
-
esi.client.Fleets.
|
|
422
|
+
esi.client.Fleets.PutFleetsFleetId(
|
|
411
423
|
fleet_id=fleet_id,
|
|
412
|
-
token=token
|
|
413
|
-
#
|
|
414
|
-
|
|
415
|
-
).result()
|
|
424
|
+
token=token,
|
|
425
|
+
# body={"is_free_move": free_move, "motd": motd},
|
|
426
|
+
body={"is_free_move": free_move},
|
|
427
|
+
).result(force_refresh=True)
|
|
416
428
|
|
|
417
429
|
if request.method != "POST":
|
|
418
430
|
return redirect("fleetfinder:dashboard")
|
|
@@ -430,24 +442,31 @@ def save_fleet(request):
|
|
|
430
442
|
|
|
431
443
|
try:
|
|
432
444
|
_edit_or_create_fleet(**form_data)
|
|
433
|
-
except
|
|
434
|
-
|
|
445
|
+
except HTTPClientError as ex:
|
|
446
|
+
esi_error = str(ex)
|
|
435
447
|
|
|
436
|
-
|
|
437
|
-
error_message = _(
|
|
438
|
-
f"<h4>Error!</h4><p>ESI returned the following error: {esi_error}</p>"
|
|
439
|
-
)
|
|
448
|
+
logger.debug(f"ESI returned 404 for fleet creation: {esi_error}", exc_info=True)
|
|
440
449
|
|
|
441
|
-
messages.error(
|
|
450
|
+
messages.error(
|
|
451
|
+
request,
|
|
452
|
+
mark_safe(
|
|
453
|
+
_(
|
|
454
|
+
"<h4>Error!</h4><p>ESI returned the following error: {esi_error}</p>"
|
|
455
|
+
).format(esi_error=esi_error)
|
|
456
|
+
),
|
|
457
|
+
)
|
|
442
458
|
except ValueError as ex:
|
|
443
459
|
logger.debug(f"Value error during fleet creation: {ex}", exc_info=True)
|
|
444
460
|
|
|
445
|
-
|
|
446
|
-
|
|
461
|
+
messages.error(
|
|
462
|
+
request,
|
|
463
|
+
mark_safe(
|
|
464
|
+
_(
|
|
465
|
+
"<h4>Error!</h4><p>There was an error creating the fleet: {ex}</p>"
|
|
466
|
+
).format(ex=str(ex))
|
|
467
|
+
),
|
|
447
468
|
)
|
|
448
469
|
|
|
449
|
-
messages.error(request, mark_safe(error_message))
|
|
450
|
-
|
|
451
470
|
return redirect("fleetfinder:dashboard")
|
|
452
471
|
|
|
453
472
|
|
|
@@ -507,13 +526,23 @@ def ajax_fleet_details(
|
|
|
507
526
|
logger.debug(f"Fleet with ID {fleet_id} does not exist.")
|
|
508
527
|
|
|
509
528
|
return JsonResponse(
|
|
510
|
-
data={
|
|
529
|
+
data={
|
|
530
|
+
"error": _("Fleet with ID {fleet_id} does not exist.").format(
|
|
531
|
+
fleet_id=fleet_id
|
|
532
|
+
)
|
|
533
|
+
},
|
|
534
|
+
safe=False,
|
|
511
535
|
)
|
|
512
536
|
except RuntimeError as ex:
|
|
513
|
-
logger.debug(f"Error retrieving fleet composition: {ex}", exc_info=True)
|
|
537
|
+
logger.debug(f"Error retrieving fleet composition: {str(ex)}", exc_info=True)
|
|
514
538
|
|
|
515
539
|
return JsonResponse(
|
|
516
|
-
data={
|
|
540
|
+
data={
|
|
541
|
+
"error": _("Error retrieving fleet composition: {ex}").format(
|
|
542
|
+
ex=str(ex)
|
|
543
|
+
)
|
|
544
|
+
},
|
|
545
|
+
safe=False,
|
|
517
546
|
)
|
|
518
547
|
|
|
519
548
|
data = {
|
|
@@ -529,7 +558,9 @@ def ajax_fleet_details(
|
|
|
529
558
|
|
|
530
559
|
@login_required()
|
|
531
560
|
@permission_required(perm="fleetfinder.manage_fleets")
|
|
532
|
-
def ajax_fleet_kick_member(
|
|
561
|
+
def ajax_fleet_kick_member( # pylint: disable=too-many-return-statements
|
|
562
|
+
request: WSGIRequest, fleet_id: int
|
|
563
|
+
) -> JsonResponse:
|
|
533
564
|
"""
|
|
534
565
|
Ajax :: Kick member from fleet
|
|
535
566
|
|
|
@@ -543,7 +574,8 @@ def ajax_fleet_kick_member(request: WSGIRequest, fleet_id: int) -> JsonResponse:
|
|
|
543
574
|
|
|
544
575
|
if request.method != "POST":
|
|
545
576
|
return JsonResponse(
|
|
546
|
-
data={"success": False, "error": _("Method not allowed")},
|
|
577
|
+
data={"success": False, "error": _("Method not allowed")},
|
|
578
|
+
status=HTTPStatus.METHOD_NOT_ALLOWED,
|
|
547
579
|
)
|
|
548
580
|
|
|
549
581
|
try:
|
|
@@ -553,7 +585,8 @@ def ajax_fleet_kick_member(request: WSGIRequest, fleet_id: int) -> JsonResponse:
|
|
|
553
585
|
|
|
554
586
|
if not member_id:
|
|
555
587
|
return JsonResponse(
|
|
556
|
-
data={"success": False, "error": _("Member ID required")},
|
|
588
|
+
data={"success": False, "error": _("Member ID required")},
|
|
589
|
+
status=HTTPStatus.BAD_REQUEST,
|
|
557
590
|
)
|
|
558
591
|
|
|
559
592
|
logger.debug(f"Request data for kicking member: {data}")
|
|
@@ -563,22 +596,36 @@ def ajax_fleet_kick_member(request: WSGIRequest, fleet_id: int) -> JsonResponse:
|
|
|
563
596
|
scopes=["esi-fleets.write_fleet.v1"],
|
|
564
597
|
)
|
|
565
598
|
|
|
566
|
-
esi.client.Fleets.
|
|
599
|
+
esi.client.Fleets.DeleteFleetsFleetIdMembersMemberId(
|
|
567
600
|
fleet_id=fleet_id,
|
|
568
601
|
member_id=member_id,
|
|
569
|
-
token=token
|
|
570
|
-
).result()
|
|
602
|
+
token=token,
|
|
603
|
+
).result(force_refresh=True)
|
|
571
604
|
|
|
572
|
-
return JsonResponse(data={"success": True}, status=
|
|
605
|
+
return JsonResponse(data={"success": True}, status=HTTPStatus.OK)
|
|
573
606
|
except Fleet.DoesNotExist:
|
|
574
607
|
return JsonResponse(
|
|
575
|
-
data={"success": False, "error": _("Fleet not found")},
|
|
608
|
+
data={"success": False, "error": _("Fleet not found")},
|
|
609
|
+
status=HTTPStatus.NOT_FOUND,
|
|
576
610
|
)
|
|
577
611
|
except (json.JSONDecodeError, ValueError):
|
|
578
612
|
return JsonResponse(
|
|
579
|
-
data={"success": False, "error": _("Invalid request data")},
|
|
613
|
+
data={"success": False, "error": _("Invalid request data")},
|
|
614
|
+
status=HTTPStatus.BAD_REQUEST,
|
|
580
615
|
)
|
|
581
|
-
except
|
|
616
|
+
except HTTPClientError as ex:
|
|
617
|
+
if ex.status_code == HTTPStatus.NOT_FOUND:
|
|
618
|
+
return JsonResponse(
|
|
619
|
+
data={"success": False, "error": _("Member not found in fleet")},
|
|
620
|
+
status=HTTPStatus.NOT_FOUND,
|
|
621
|
+
)
|
|
622
|
+
|
|
623
|
+
logger.debug(f"ESI error while kicking member: {str(ex)}", exc_info=True)
|
|
624
|
+
|
|
582
625
|
return JsonResponse(
|
|
583
|
-
data={
|
|
626
|
+
data={
|
|
627
|
+
"success": False,
|
|
628
|
+
"error": _("An ESI error occurred: {ex}").format(ex=str(ex)),
|
|
629
|
+
},
|
|
630
|
+
status=ex.status_code,
|
|
584
631
|
)
|
|
File without changes
|
|
File without changes
|