aa-fleetfinder 2.7.2__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.

Files changed (32) hide show
  1. {aa_fleetfinder-2.7.2.dist-info → aa_fleetfinder-3.0.0b1.dist-info}/METADATA +5 -14
  2. {aa_fleetfinder-2.7.2.dist-info → aa_fleetfinder-3.0.0b1.dist-info}/RECORD +32 -32
  3. fleetfinder/__init__.py +5 -3
  4. fleetfinder/apps.py +5 -4
  5. fleetfinder/locale/cs_CZ/LC_MESSAGES/django.po +21 -22
  6. fleetfinder/locale/de/LC_MESSAGES/django.mo +0 -0
  7. fleetfinder/locale/de/LC_MESSAGES/django.po +27 -24
  8. fleetfinder/locale/django.pot +22 -23
  9. fleetfinder/locale/es/LC_MESSAGES/django.po +25 -22
  10. fleetfinder/locale/fr_FR/LC_MESSAGES/django.po +26 -22
  11. fleetfinder/locale/it_IT/LC_MESSAGES/django.po +21 -22
  12. fleetfinder/locale/ja/LC_MESSAGES/django.po +25 -22
  13. fleetfinder/locale/ko_KR/LC_MESSAGES/django.po +25 -22
  14. fleetfinder/locale/nl_NL/LC_MESSAGES/django.po +21 -22
  15. fleetfinder/locale/pl_PL/LC_MESSAGES/django.po +21 -22
  16. fleetfinder/locale/ru/LC_MESSAGES/django.po +25 -22
  17. fleetfinder/locale/sk/LC_MESSAGES/django.po +21 -22
  18. fleetfinder/locale/uk/LC_MESSAGES/django.po +26 -22
  19. fleetfinder/locale/zh_Hans/LC_MESSAGES/django.po +25 -22
  20. fleetfinder/providers.py +22 -4
  21. fleetfinder/tasks.py +279 -110
  22. fleetfinder/tests/__init__.py +39 -1
  23. fleetfinder/tests/test_access.py +2 -2
  24. fleetfinder/tests/test_auth_hooks.py +2 -2
  25. fleetfinder/tests/test_settings.py +3 -2
  26. fleetfinder/tests/test_tasks.py +1010 -34
  27. fleetfinder/tests/test_templatetags.py +2 -4
  28. fleetfinder/tests/test_user_agent.py +62 -14
  29. fleetfinder/tests/test_views.py +700 -52
  30. fleetfinder/views.py +102 -55
  31. {aa_fleetfinder-2.7.2.dist-info → aa_fleetfinder-3.0.0b1.dist-info}/WHEEL +0 -0
  32. {aa_fleetfinder-2.7.2.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) -> tuple:
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: Tuple containing the fleet result, fleet commander, and fleet ID
56
- :rtype: tuple
55
+ :return: Fleet information from ESI
56
+ :rtype: GetCharactersCharacterIdFleetOperation
57
57
  """
58
58
 
59
- fleet_result = esi.client.Fleets.get_characters_character_id_fleet(
60
- character_id=token.character_id, token=token.valid_access_token()
61
- ).result()
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
- fleet_commander = EveCharacter.objects.get(character_id=token.character_id)
66
- fleet_id = fleet_result.get("fleet_id")
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 (HTTPNotFound, ValueError) as ex:
236
- logger.debug(f"Error during fleet creation: {ex}", exc_info=True)
248
+ except (HTTPClientError, ValueError) as ex:
249
+ error_detail = str(ex)
237
250
 
238
- if isinstance(ex, HTTPNotFound):
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
- error_message = _(
244
- f"<h4>Error!</h4><p>There was an error creating the fleet: {error_detail}</p>"
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: %s", context)
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.get("fleet_id")
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.put_fleets_fleet_id(
422
+ esi.client.Fleets.PutFleetsFleetId(
411
423
  fleet_id=fleet_id,
412
- token=token.valid_access_token(),
413
- # new_settings={"is_free_move": free_move, "motd": motd},
414
- new_settings={"is_free_move": free_move},
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 HTTPNotFound as ex:
434
- logger.debug(f"ESI returned 404 for fleet creation: {ex}", exc_info=True)
445
+ except HTTPClientError as ex:
446
+ esi_error = str(ex)
435
447
 
436
- esi_error = ex.swagger_result.get("error", "Unknown error")
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(request, mark_safe(error_message))
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
- error_message = _(
446
- f"<h4>Error!</h4><p>There was an error creating the fleet: {ex}</p>"
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={"error": _(f"Fleet with ID {fleet_id} does not exist.")}, safe=False
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={"error": _(f"Error retrieving fleet composition: {ex}")}, safe=False
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(request: WSGIRequest, fleet_id: int) -> JsonResponse:
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")}, status=405
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")}, status=400
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.delete_fleets_fleet_id_members_member_id(
599
+ esi.client.Fleets.DeleteFleetsFleetIdMembersMemberId(
567
600
  fleet_id=fleet_id,
568
601
  member_id=member_id,
569
- token=token.valid_access_token(),
570
- ).result()
602
+ token=token,
603
+ ).result(force_refresh=True)
571
604
 
572
- return JsonResponse(data={"success": True}, status=200)
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")}, status=404
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")}, status=400
613
+ data={"success": False, "error": _("Invalid request data")},
614
+ status=HTTPStatus.BAD_REQUEST,
580
615
  )
581
- except HTTPNotFound:
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={"success": False, "error": _("Member not found in fleet")}, status=404
626
+ data={
627
+ "success": False,
628
+ "error": _("An ESI error occurred: {ex}").format(ex=str(ex)),
629
+ },
630
+ status=ex.status_code,
584
631
  )