aa-structures 3.3.1__tar.gz → 4.0.0b3__tar.gz

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 (246) hide show
  1. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/PKG-INFO +13 -8
  2. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/pyproject.toml +15 -11
  3. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/__init__.py +1 -1
  4. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/admin.py +2 -3
  5. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/app_settings.py +1 -1
  6. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/constants.py +2 -1
  7. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/helpers.py +9 -11
  8. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/main.py +1 -2
  9. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_timers.py +108 -106
  10. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/starbases.py +1 -0
  11. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/management/commands/structures_load_eve.py +1 -2
  12. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/management/commands/structures_preload_eveuniverse.py +1 -3
  13. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/management/commands/structures_update_poco_planets.py +1 -3
  14. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/managers.py +11 -11
  15. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/models/notifications.py +107 -107
  16. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/models/owners.py +223 -200
  17. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/models/structures_1.py +3 -5
  18. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/models/structures_2.py +1 -3
  19. aa_structures-4.0.0b3/structures/openapi_2025-12-16.json +32582 -0
  20. aa_structures-4.0.0b3/structures/providers.py +29 -0
  21. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tasks.py +16 -26
  22. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/partials/public/poco_list.html +1 -1
  23. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/partials/statistics/structure_summary.html +1 -1
  24. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/partials/structures/jump_gate_list.html +1 -1
  25. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/partials/structures/orbital_list.html +1 -1
  26. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/partials/structures/starbase_list.html +1 -1
  27. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/partials/structures/structure_list.html +1 -1
  28. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/public.html +1 -1
  29. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/statistics.html +1 -1
  30. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/structures.html +2 -2
  31. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/core/notification_embeds/test_main.py +55 -30
  32. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/core/test_notification_structuretimers.py +13 -7
  33. aa_structures-4.0.0b3/structures/tests/core/test_notifications_timers.py +159 -0
  34. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/core/test_serializers.py +30 -21
  35. aa_structures-4.0.0b3/structures/tests/core/test_starbases.py +123 -0
  36. aa_structures-4.0.0b3/structures/tests/helpers.py +27 -0
  37. aa_structures-4.0.0b3/structures/tests/integration/test_tasks.py +550 -0
  38. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/integration/test_views.py +5 -9
  39. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/models/test_eveuniverse.py +10 -8
  40. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/models/test_notifications_1.py +85 -38
  41. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/models/test_notifications_2.py +25 -20
  42. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/models/test_notifications_3.py +0 -3
  43. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/models/test_notifications_discord.py +4 -11
  44. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/models/test_owners_1.py +41 -29
  45. aa_structures-4.0.0b3/structures/tests/models/test_owners_2.py +590 -0
  46. aa_structures-4.0.0b3/structures/tests/models/test_owners_3.py +372 -0
  47. aa_structures-4.0.0b3/structures/tests/models/test_owners_4.py +517 -0
  48. aa_structures-4.0.0b3/structures/tests/models/test_owners_5.py +1066 -0
  49. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/models/test_structures.py +76 -65
  50. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/test_admin.py +50 -29
  51. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/test_managers_1.py +196 -190
  52. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/test_managers_2.py +0 -2
  53. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/testdata/factories.py +251 -131
  54. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/testdata/generate_notifications.py +2 -3
  55. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/testdata/generate_structures.py +4 -4
  56. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/testdata/helpers.py +88 -46
  57. aa_structures-4.0.0b3/structures/tests/testdata/notifications.json +771 -0
  58. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/views/test_public.py +11 -6
  59. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/views/test_statistics.py +10 -9
  60. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/views/test_structures.py +4 -12
  61. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/views/public.py +1 -3
  62. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/views/statistics.py +1 -3
  63. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/views/structures.py +36 -33
  64. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/webhooks/core.py +3 -3
  65. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/webhooks/managers.py +1 -4
  66. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/webhooks/tests/test_core.py +6 -3
  67. aa_structures-3.3.1/structures/providers.py +0 -12
  68. aa_structures-3.3.1/structures/tests/core/test_notifications_timers.py +0 -146
  69. aa_structures-3.3.1/structures/tests/core/test_starbases.py +0 -91
  70. aa_structures-3.3.1/structures/tests/integration/test_tasks.py +0 -716
  71. aa_structures-3.3.1/structures/tests/models/test_owners_2.py +0 -596
  72. aa_structures-3.3.1/structures/tests/models/test_owners_3.py +0 -403
  73. aa_structures-3.3.1/structures/tests/models/test_owners_4.py +0 -459
  74. aa_structures-3.3.1/structures/tests/models/test_owners_5.py +0 -950
  75. aa_structures-3.3.1/structures/tests/testdata/create_eveuniverse.py +0 -62
  76. aa_structures-3.3.1/structures/tests/testdata/entities.json +0 -850
  77. aa_structures-3.3.1/structures/tests/testdata/esi_data.json +0 -374
  78. aa_structures-3.3.1/structures/tests/testdata/eveuniverse.json +0 -44427
  79. aa_structures-3.3.1/structures/tests/testdata/load_eveuniverse.py +0 -19
  80. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/LICENSE +0 -0
  81. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/README.md +0 -0
  82. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/apps.py +0 -0
  83. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/auth_hooks.py +0 -0
  84. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/checks.py +0 -0
  85. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/__init__.py +0 -0
  86. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/__init__.py +0 -0
  87. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/billing_embeds.py +0 -0
  88. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/corporate_embeds.py +0 -0
  89. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/moonmining_embeds.py +0 -0
  90. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/orbital_embeds.py +0 -0
  91. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/skyhook_embeds.py +0 -0
  92. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/sov_embeds.py +0 -0
  93. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/structures_embeds.py +0 -0
  94. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/tower_embeds.py +0 -0
  95. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_embeds/war_embeds.py +0 -0
  96. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/notification_types.py +0 -0
  97. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/serializers.py +0 -0
  98. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/core/sovereignty.py +0 -0
  99. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/forms.py +0 -0
  100. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/helpers.py +0 -0
  101. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/de/LC_MESSAGES/django.mo +0 -0
  102. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/de/LC_MESSAGES/django.po +0 -0
  103. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/django.pot +0 -0
  104. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/en/LC_MESSAGES/django.mo +0 -0
  105. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/en/LC_MESSAGES/django.po +0 -0
  106. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/es/LC_MESSAGES/django.mo +0 -0
  107. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/es/LC_MESSAGES/django.po +0 -0
  108. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  109. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/fr_FR/LC_MESSAGES/django.po +0 -0
  110. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  111. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/it_IT/LC_MESSAGES/django.po +0 -0
  112. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/ja/LC_MESSAGES/django.mo +0 -0
  113. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/ja/LC_MESSAGES/django.po +0 -0
  114. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  115. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/ko_KR/LC_MESSAGES/django.po +0 -0
  116. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/ru/LC_MESSAGES/django.mo +0 -0
  117. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/ru/LC_MESSAGES/django.po +0 -0
  118. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/uk/LC_MESSAGES/django.mo +0 -0
  119. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/uk/LC_MESSAGES/django.po +0 -0
  120. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  121. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
  122. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/management/commands/__init__.py +0 -0
  123. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/0001_initial_new.py +0 -0
  124. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/0002_remove_eveuniverse_relation_names.py +0 -0
  125. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/0003_add_localization_and_unique_key.py +0 -0
  126. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/0004_improve_localization.py +0 -0
  127. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/0005_add_notification_types.py +0 -0
  128. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/0006_add_ownercharacter_disabled.py +0 -0
  129. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/0007_add_notificationtypes_skyhook_metenox.py +0 -0
  130. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/0008_add_notificationtypes_skyhook_metenox.py +0 -0
  131. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/0009_add_project_goal_notifications.py +0 -0
  132. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/migrations/__init__.py +0 -0
  133. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/models/__init__.py +0 -0
  134. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/models/eveuniverse.py +0 -0
  135. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/css/global.css +0 -0
  136. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/css/main.css +0 -0
  137. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/css/public.css +0 -0
  138. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/css/statistics.css +0 -0
  139. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/css/structures.css +0 -0
  140. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/bars-rotate-fade-black-36.svg +0 -0
  141. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/bars-rotate-fade-white-36.svg +0 -0
  142. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/eve_symbol_128.png +0 -0
  143. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/0h.png +0 -0
  144. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/0l.png +0 -0
  145. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/0m.png +0 -0
  146. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/0r.png +0 -0
  147. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/0s.png +0 -0
  148. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/1h.png +0 -0
  149. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/1l.png +0 -0
  150. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/1m.png +0 -0
  151. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/1r.png +0 -0
  152. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/1s.png +0 -0
  153. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/2h.png +0 -0
  154. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/2l.png +0 -0
  155. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/2m.png +0 -0
  156. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/2r.png +0 -0
  157. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/2s.png +0 -0
  158. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/3h.png +0 -0
  159. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/3l.png +0 -0
  160. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/3m.png +0 -0
  161. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/3r.png +0 -0
  162. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/3s.png +0 -0
  163. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/4h.png +0 -0
  164. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/4l.png +0 -0
  165. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/4m.png +0 -0
  166. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/4s.png +0 -0
  167. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/5h.png +0 -0
  168. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/5l.png +0 -0
  169. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/5m.png +0 -0
  170. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/5s.png +0 -0
  171. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/6h.png +0 -0
  172. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/6l.png +0 -0
  173. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/6m.png +0 -0
  174. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/7h.png +0 -0
  175. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/7l.png +0 -0
  176. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/7m.png +0 -0
  177. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/8h.png +0 -0
  178. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/8l.png +0 -0
  179. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/8m.png +0 -0
  180. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/blank.png +0 -0
  181. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/circle.png +0 -0
  182. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/dustwheel.png +0 -0
  183. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/h.png +0 -0
  184. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/l.png +0 -0
  185. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/m.png +0 -0
  186. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/noship.png +0 -0
  187. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/r.png +0 -0
  188. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/tyrannis.png +0 -0
  189. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/tyrannis_blue.png +0 -0
  190. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/tyrannis_darkred.png +0 -0
  191. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/tyrannis_default.png +0 -0
  192. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/panel/tyrannis_revelations.png +0 -0
  193. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/img/structures_logo.png +0 -0
  194. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/js/global.js +0 -0
  195. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/js/public.js +0 -0
  196. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/js/statistics.js +0 -0
  197. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/js/structures.js +0 -0
  198. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/vendor/datatables/plugins/dataTables.rowGroup.min.js +0 -0
  199. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/vendor/datatables/plugins/datetime.js +0 -0
  200. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/vendor/datatables/plugins/filterDropDown.min.js +0 -0
  201. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/vendor/datatables/plugins/rowGroup.bootstrap.min.css +0 -0
  202. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/static/structures/vendor/datatables/plugins/rowGroup.dataTables.min.css +0 -0
  203. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/base.html +0 -0
  204. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/modals/fitting_assets.html +0 -0
  205. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/modals/fitting_gfx.html +0 -0
  206. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/modals/poco_details.html +0 -0
  207. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/modals/starbase_detail.html +0 -0
  208. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/modals/structure_details.html +0 -0
  209. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/modals/tab_general_detail.html +0 -0
  210. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/modals/tab_services_detail.html +0 -0
  211. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/partials/menu.html +0 -0
  212. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/partials/structures/active_tags.html +0 -0
  213. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/templatetags/detail_title.html +0 -0
  214. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/templatetags/list_asset.html +0 -0
  215. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/templatetags/list_item.html +0 -0
  216. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/templatetags/list_tax_item.html +0 -0
  217. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templates/structures/templatetags/list_title.html +0 -0
  218. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templatetags/__init__.py +0 -0
  219. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/templatetags/structures.py +0 -0
  220. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/__init__.py +0 -0
  221. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/core/__init__.py +0 -0
  222. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/core/notification_embeds/__init__.py +0 -0
  223. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/core/notification_embeds/test_helpers.py +0 -0
  224. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/core/test_notification_types.py +0 -0
  225. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/core/test_sovereignty.py +0 -0
  226. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/integration/__init__.py +0 -0
  227. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/models/__init__.py +0 -0
  228. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/models/test_owners_6.py +0 -0
  229. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/test_helpers.py +0 -0
  230. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/test_tasks.py +0 -0
  231. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/testdata/__init__.py +0 -0
  232. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/testdata/constants.py +0 -0
  233. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/testdata/generate_notifications_2.py +0 -0
  234. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/testdata/tasks_loadtest.py +0 -0
  235. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/testdata/test_generate_structures.py +0 -0
  236. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/views/__init__.py +0 -0
  237. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/views/test_service_status.py +0 -0
  238. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/tests/views/utils.py +0 -0
  239. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/urls.py +0 -0
  240. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/views/__init__.py +0 -0
  241. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/views/common.py +0 -0
  242. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/views/status.py +0 -0
  243. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/webhooks/__init__.py +0 -0
  244. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/webhooks/models.py +0 -0
  245. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/webhooks/tests/__init__.py +0 -0
  246. {aa_structures-3.3.1 → aa_structures-4.0.0b3}/structures/webhooks/tests/test_utils.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aa-structures
3
- Version: 3.3.1
3
+ Version: 4.0.0b3
4
4
  Summary: App for managing Eve Online structures with Alliance Auth.
5
5
  Author-email: Erik Kalkoken <kalkoken87@gmail.com>
6
- Requires-Python: >=3.8
6
+ Requires-Python: >=3.10
7
7
  Description-Content-Type: text/markdown
8
8
  Classifier: Environment :: Web Environment
9
9
  Classifier: Framework :: Django
@@ -12,28 +12,33 @@ Classifier: Intended Audience :: End Users/Desktop
12
12
  Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Operating System :: OS Independent
14
14
  Classifier: Programming Language :: Python
15
- Classifier: Programming Language :: Python :: 3.8
16
- Classifier: Programming Language :: Python :: 3.9
17
15
  Classifier: Programming Language :: Python :: 3.10
18
16
  Classifier: Programming Language :: Python :: 3.11
19
17
  Classifier: Programming Language :: Python :: 3.12
20
18
  Classifier: Topic :: Internet :: WWW/HTTP
21
19
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
22
20
  License-File: LICENSE
23
- Requires-Dist: allianceauth-app-utils>=1.29.1
24
- Requires-Dist: allianceauth>=4,<5
21
+ Requires-Dist: allianceauth-app-utils>=1.31.0a1
22
+ Requires-Dist: allianceauth>=4,<6
25
23
  Requires-Dist: dhooks-lite>=1.0
26
- Requires-Dist: django-eveuniverse>=1.6
24
+ Requires-Dist: django-esi>=8,<10
25
+ Requires-Dist: django-eveuniverse>=2.0.0a1
27
26
  Requires-Dist: django-multiselectfield
28
27
  Requires-Dist: django-navhelper
28
+ Requires-Dist: humanize>=4.7
29
29
  Requires-Dist: pytz!=2022.2
30
+ Requires-Dist: pyyaml>=6
30
31
  Requires-Dist: redis-simple-mq>=1.1
31
- Requires-Dist: humanize>=4.7
32
+ Requires-Dist: coverage ; extra == "test"
33
+ Requires-Dist: factory_boy ; extra == "test"
34
+ Requires-Dist: markdown ; extra == "test"
35
+ Requires-Dist: pook ; extra == "test"
32
36
  Project-URL: Changelog, https://gitlab.com/ErikKalkoken/aa-structures/-/blob/master/CHANGELOG.md
33
37
  Project-URL: Documentation, https://aa-structures.readthedocs.io/en/latest/
34
38
  Project-URL: Homepage, https://gitlab.com/ErikKalkoken/aa-structures
35
39
  Project-URL: Source, https://gitlab.com/ErikKalkoken/aa-structures
36
40
  Project-URL: Tracker, https://gitlab.com/ErikKalkoken/aa-structures/-/issues
41
+ Provides-Extra: test
37
42
 
38
43
  # Structures
39
44
 
@@ -7,7 +7,7 @@ name = "aa-structures"
7
7
  dynamic = ["version", "description"]
8
8
  readme = "README.md"
9
9
  license = { file = "LICENSE" }
10
- requires-python = ">=3.8"
10
+ requires-python = ">=3.10"
11
11
  authors = [{ name = "Erik Kalkoken", email = "kalkoken87@gmail.com" }]
12
12
  classifiers = [
13
13
  "Environment :: Web Environment",
@@ -17,8 +17,6 @@ classifiers = [
17
17
  "License :: OSI Approved :: MIT License",
18
18
  "Operating System :: OS Independent",
19
19
  "Programming Language :: Python",
20
- "Programming Language :: Python :: 3.8",
21
- "Programming Language :: Python :: 3.9",
22
20
  "Programming Language :: Python :: 3.10",
23
21
  "Programming Language :: Python :: 3.11",
24
22
  "Programming Language :: Python :: 3.12",
@@ -26,17 +24,22 @@ classifiers = [
26
24
  "Topic :: Internet :: WWW/HTTP :: Dynamic Content",
27
25
  ]
28
26
  dependencies = [
29
- "allianceauth-app-utils>=1.29.1",
30
- "allianceauth>=4,<5",
27
+ "allianceauth-app-utils>=1.31.0a1",
28
+ "allianceauth>=4,<6",
31
29
  "dhooks-lite>=1.0",
32
- "django-eveuniverse>=1.6",
30
+ "django-esi>=8,<10",
31
+ "django-eveuniverse>=2.0.0a1",
33
32
  "django-multiselectfield",
34
33
  "django-navhelper",
34
+ "humanize>=4.7",
35
35
  "pytz!=2022.2",
36
+ "pyyaml>=6",
36
37
  "redis-simple-mq>=1.1",
37
- "humanize>=4.7",
38
38
  ]
39
39
 
40
+ [project.optional-dependencies]
41
+ test = ["coverage", "factory_boy", "markdown", "pook"]
42
+
40
43
  [project.urls]
41
44
  Homepage = "https://gitlab.com/ErikKalkoken/aa-structures"
42
45
  Documentation = "https://aa-structures.readthedocs.io/en/latest/"
@@ -74,12 +77,13 @@ max-line-length = 120
74
77
 
75
78
  [tool.pylint.'MESSAGES CONTROL']
76
79
  disable = [
77
- "too-many-instance-attributes",
78
- "too-few-public-methods",
79
- "imported-auth-user",
80
80
  "cyclic-import",
81
81
  "fixme",
82
82
  "import-outside-toplevel",
83
- "redefined-builtin",
83
+ "imported-auth-user",
84
84
  "no-member",
85
+ "redefined-builtin",
86
+ "too-few-public-methods",
87
+ "too-many-instance-attributes",
88
+ "too-many-return-statements",
85
89
  ]
@@ -3,5 +3,5 @@
3
3
  # pylint: disable = invalid-name
4
4
  default_app_config = "structures.apps.StructuresConfig"
5
5
 
6
- __version__ = "3.3.1"
6
+ __version__ = "4.0.0b3"
7
7
  __title__ = "Structures"
@@ -18,9 +18,8 @@ from django.utils.translation import gettext_lazy as _
18
18
  from allianceauth.eveonline.models import EveAllianceInfo, EveCorporationInfo
19
19
  from allianceauth.services.hooks import get_extension_logger
20
20
  from app_utils.django import admin_boolean_icon_html
21
- from app_utils.logging import LoggerAddTag
22
21
 
23
- from . import __title__, app_settings, tasks
22
+ from . import app_settings, tasks
24
23
  from .core.notification_types import NotificationType
25
24
  from .models import (
26
25
  FuelAlert,
@@ -40,7 +39,7 @@ from .models import (
40
39
  Webhook,
41
40
  )
42
41
 
43
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
42
+ logger = get_extension_logger(__name__)
44
43
 
45
44
 
46
45
  def lines_sorted_html(items: list) -> str:
@@ -49,7 +49,7 @@ STRUCTURES_FEATURE_REFUELED_NOTIFICATIONS = clean_setting(
49
49
  )
50
50
  """Enable / disable refueled notifications feature."""
51
51
 
52
- STRUCTURES_FEATURE_SKYHOOKS = clean_setting("STRUCTURES_FEATURE_SKYHOOKS", False)
52
+ STRUCTURES_FEATURE_SKYHOOKS = clean_setting("STRUCTURES_FEATURE_SKYHOOKS", True)
53
53
  """Show skyhooks in structures list."""
54
54
 
55
55
 
@@ -33,17 +33,18 @@ class EveGroupId(IntEnum):
33
33
  REFINERY = 1406
34
34
  STRUCTURE_CITADEL_SERVICE_MODULE = 1321
35
35
  UNCOMMON_MOON_ASTEROIDS = 1921
36
+ UPWELL_JUMP_BRIDGE = 1408
36
37
  UPWELL_MOON_DRILL = 4744
37
38
 
38
39
 
39
40
  class EveTypeId(IntEnum):
40
41
  """An EVE type ID."""
41
42
 
43
+ ANSIBLE_JUMP_BRIDGE = 35841
42
44
  ASTRAHUS_UPWELL_QUANTUM_CORE = 56201
43
45
  CALDARI_CONTROL_TOWER = 16213
44
46
  CUSTOMS_OFFICE = 2233
45
47
  IHUB = 32458
46
- JUMP_GATE = 35841
47
48
  LIQUID_OZONE = 16273
48
49
  NITROGEN_FUEL_BLOCK = 4051
49
50
  ORBITAL_SKYHOOK = 81080
@@ -63,17 +63,15 @@ def gen_eve_entity_link(eve_entity: EveEntity) -> str:
63
63
  except AttributeError:
64
64
  return ""
65
65
 
66
- if category == EveEntity.CATEGORY_ALLIANCE:
67
- url = dotlan.alliance_url(eve_entity.name)
68
-
69
- elif category == EveEntity.CATEGORY_CORPORATION:
70
- url = dotlan.corporation_url(eve_entity.name)
71
-
72
- elif category == EveEntity.CATEGORY_CHARACTER:
73
- url = evewho.character_url(eve_entity.id)
74
-
75
- else:
76
- return ""
66
+ match category:
67
+ case EveEntity.CATEGORY_ALLIANCE:
68
+ url = dotlan.alliance_url(eve_entity.name)
69
+ case EveEntity.CATEGORY_CORPORATION:
70
+ url = dotlan.corporation_url(eve_entity.name)
71
+ case EveEntity.CATEGORY_CHARACTER:
72
+ url = evewho.character_url(eve_entity.id)
73
+ case _:
74
+ return ""
77
75
 
78
76
  return Webhook.create_link(eve_entity.name, url)
79
77
 
@@ -11,7 +11,6 @@ from django.conf import settings
11
11
  from django.utils.translation import gettext as _
12
12
 
13
13
  from allianceauth.services.hooks import get_extension_logger
14
- from app_utils.logging import LoggerAddTag
15
14
  from app_utils.urls import reverse_absolute, static_file_absolute_url
16
15
 
17
16
  from structures import __title__
@@ -21,7 +20,7 @@ from structures.models.notifications import Notification, NotificationBase, Webh
21
20
 
22
21
  from .helpers import gen_alliance_link, gen_corporation_link, target_datetime_formatted
23
22
 
24
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
23
+ logger = get_extension_logger(__name__)
25
24
 
26
25
 
27
26
  class NotificationBaseEmbed:
@@ -14,9 +14,7 @@ from app_utils.datetime import (
14
14
  ldap_timedelta_2_timedelta,
15
15
  )
16
16
  from app_utils.django import app_labels
17
- from app_utils.logging import LoggerAddTag
18
17
 
19
- from structures import __title__
20
18
  from structures.app_settings import (
21
19
  STRUCTURES_MOON_EXTRACTION_TIMERS_ENABLED,
22
20
  STRUCTURES_TIMERS_ARE_CORP_RESTRICTED,
@@ -37,7 +35,7 @@ if "structuretimers" in app_labels():
37
35
  else:
38
36
  Timer = None # pylint: disable = invalid-name
39
37
 
40
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
38
+ logger = get_extension_logger(__name__)
41
39
 
42
40
 
43
41
  def add_or_remove_timer(notif: Notification) -> bool:
@@ -45,33 +43,36 @@ def add_or_remove_timer(notif: Notification) -> bool:
45
43
 
46
44
  Returns True when timers where added or removed, else False
47
45
  """
48
- if notif.notif_type in [
49
- NotificationType.STRUCTURE_LOST_ARMOR,
50
- NotificationType.STRUCTURE_LOST_SHIELD,
51
- ]:
52
- timer_processed = _gen_timer_structure_reinforcement(notif)
53
- elif notif.notif_type == NotificationType.SOV_STRUCTURE_REINFORCED:
54
- timer_processed = _gen_timer_sov_reinforcements(notif)
55
- elif notif.notif_type == NotificationType.ORBITAL_REINFORCED:
56
- timer_processed = _gen_timer_customs_office_reinforcements(notif)
57
- elif notif.notif_type == NotificationType.SKYHOOK_LOST_SHIELDS:
58
- timer_processed = _gen_timer_skyhook_reinforcements(notif)
59
- elif notif.notif_type in [
60
- NotificationType.MOONMINING_EXTRACTION_STARTED,
61
- NotificationType.MOONMINING_EXTRACTION_CANCELLED,
62
- ]:
63
- if not STRUCTURES_MOON_EXTRACTION_TIMERS_ENABLED:
64
- timer_processed = None
65
- else:
66
- timer_processed = _gen_timer_moon_extraction(notif)
67
- elif notif.notif_type == NotificationType.TOWER_REINFORCED_EXTRA:
68
- timer_processed = _gen_timer_tower_reinforcements(notif)
69
- else:
70
- raise NotImplementedError(notif.notif_type)
46
+ match notif.notif_type:
47
+ case (
48
+ NotificationType.STRUCTURE_LOST_ARMOR
49
+ | NotificationType.STRUCTURE_LOST_SHIELD
50
+ ):
51
+ timer_processed = _gen_timer_structure_reinforcement(notif)
52
+ case NotificationType.SOV_STRUCTURE_REINFORCED:
53
+ timer_processed = _gen_timer_sov_reinforcements(notif)
54
+ case NotificationType.ORBITAL_REINFORCED:
55
+ timer_processed = _gen_timer_customs_office_reinforcements(notif)
56
+ case NotificationType.SKYHOOK_LOST_SHIELDS:
57
+ timer_processed = _gen_timer_skyhook_reinforcements(notif)
58
+ case (
59
+ NotificationType.MOONMINING_EXTRACTION_STARTED
60
+ | NotificationType.MOONMINING_EXTRACTION_CANCELLED
61
+ ):
62
+ if not STRUCTURES_MOON_EXTRACTION_TIMERS_ENABLED:
63
+ timer_processed = None
64
+ else:
65
+ timer_processed = _gen_timer_moon_extraction(notif)
66
+ case NotificationType.TOWER_REINFORCED_EXTRA:
67
+ timer_processed = _gen_timer_tower_reinforcements(notif)
68
+ case _:
69
+ raise NotImplementedError(notif.notif_type)
70
+
71
71
  if timer_processed:
72
72
  logger.info("%s: Created timer for notification", notif.notification_id)
73
73
  notif.is_timer_added = True
74
74
  notif.save()
75
+
75
76
  return timer_processed
76
77
 
77
78
 
@@ -290,88 +291,89 @@ def _gen_timer_moon_extraction(notif: Notification) -> bool:
290
291
  timer_processed = False
291
292
  structure_type = notif.eve_structure_type()
292
293
 
293
- if notif.notif_type == NotificationType.MOONMINING_EXTRACTION_STARTED:
294
- if AuthTimer:
295
- AuthTimer.objects.create(
296
- details=gettext("Extraction ready"),
297
- system=solar_system.name,
298
- planet_moon=moon.name,
299
- structure=structure_type_name,
300
- objective=objective,
301
- eve_time=eve_time,
302
- eve_corp=notif.owner.corporation,
303
- corp_timer=STRUCTURES_TIMERS_ARE_CORP_RESTRICTED,
304
- )
305
- timer_processed = True
306
-
307
- if Timer:
308
- Timer.objects.create(
309
- eve_solar_system=solar_system,
310
- structure_type=structure_type,
311
- timer_type=Timer.Type.MOONMINING,
312
- objective=Timer.Objective.FRIENDLY,
313
- date=eve_time,
314
- location_details=moon.name,
315
- eve_corporation=notif.owner.corporation,
316
- eve_alliance=notif.owner.corporation.alliance,
317
- visibility=_calc_visibility(),
318
- structure_name=parsed_text["structureName"],
319
- owner_name=notif.owner.corporation.corporation_name,
320
- details_notes=_timer_details_notes(notif),
321
- )
294
+ match notif.notif_type:
295
+ case NotificationType.MOONMINING_EXTRACTION_STARTED:
296
+ if AuthTimer:
297
+ AuthTimer.objects.create(
298
+ details=gettext("Extraction ready"),
299
+ system=solar_system.name,
300
+ planet_moon=moon.name,
301
+ structure=structure_type_name,
302
+ objective=objective,
303
+ eve_time=eve_time,
304
+ eve_corp=notif.owner.corporation,
305
+ corp_timer=STRUCTURES_TIMERS_ARE_CORP_RESTRICTED,
306
+ )
307
+ timer_processed = True
308
+
309
+ if Timer:
310
+ Timer.objects.create(
311
+ eve_solar_system=solar_system,
312
+ structure_type=structure_type,
313
+ timer_type=Timer.Type.MOONMINING,
314
+ objective=Timer.Objective.FRIENDLY,
315
+ date=eve_time,
316
+ location_details=moon.name,
317
+ eve_corporation=notif.owner.corporation,
318
+ eve_alliance=notif.owner.corporation.alliance,
319
+ visibility=_calc_visibility(),
320
+ structure_name=parsed_text["structureName"],
321
+ owner_name=notif.owner.corporation.corporation_name,
322
+ details_notes=_timer_details_notes(notif),
323
+ )
324
+ timer_processed = True
325
+
326
+ case NotificationType.MOONMINING_EXTRACTION_CANCELLED:
322
327
  timer_processed = True
323
328
 
324
- elif notif.notif_type == NotificationType.MOONMINING_EXTRACTION_CANCELLED:
325
- timer_processed = True
326
-
327
- for notification in Notification.objects.filter(
328
- notif_type=NotificationType.MOONMINING_EXTRACTION_STARTED,
329
- owner=notif.owner,
330
- is_timer_added=True,
331
- timestamp__lte=notif.timestamp,
332
- ).order_by("-timestamp"):
333
- notification: Notification
334
- parsed_text_2 = notification.parsed_text()
335
- my_structure_type_id = parsed_text_2["structureTypeID"]
336
- if my_structure_type_id == parsed_text["structureTypeID"]:
337
- eve_time_2 = _extract_eve_time(parsed_text_2)
338
-
339
- if AuthTimer:
340
- timer_query = AuthTimer.objects.filter(
341
- system=solar_system.name,
342
- planet_moon=moon.name,
343
- structure=structure_type_name,
344
- objective=objective,
345
- eve_time=eve_time_2,
346
- )
347
- deleted_count, _ = timer_query.delete()
348
- logger.info(
349
- "%s: removed %d obsolete Auth timers related to notification",
350
- notif.notification_id,
351
- deleted_count,
352
- )
353
-
354
- if Timer:
355
- timer_query = Timer.objects.filter(
356
- eve_solar_system=solar_system,
357
- structure_type=structure_type,
358
- timer_type=Timer.Type.MOONMINING,
359
- location_details=moon.name,
360
- date=eve_time_2,
361
- objective=Timer.Objective.FRIENDLY,
362
- eve_corporation=notif.owner.corporation,
363
- eve_alliance=notif.owner.corporation.alliance,
364
- visibility=_calc_visibility(),
365
- structure_name=parsed_text["structureName"],
366
- owner_name=notif.owner.corporation.corporation_name,
367
- )
368
- deleted_count, _ = timer_query.delete()
369
- logger.info(
370
- "%s: removed %d obsolete structure timers "
371
- "related to notification",
372
- notif.notification_id,
373
- deleted_count,
374
- )
329
+ for notification in Notification.objects.filter(
330
+ notif_type=NotificationType.MOONMINING_EXTRACTION_STARTED,
331
+ owner=notif.owner,
332
+ is_timer_added=True,
333
+ timestamp__lte=notif.timestamp,
334
+ ).order_by("-timestamp"):
335
+ notification: Notification
336
+ parsed_text_2 = notification.parsed_text()
337
+ my_structure_type_id = parsed_text_2["structureTypeID"]
338
+ if my_structure_type_id == parsed_text["structureTypeID"]:
339
+ eve_time_2 = _extract_eve_time(parsed_text_2)
340
+
341
+ if AuthTimer:
342
+ timer_query = AuthTimer.objects.filter(
343
+ system=solar_system.name,
344
+ planet_moon=moon.name,
345
+ structure=structure_type_name,
346
+ objective=objective,
347
+ eve_time=eve_time_2,
348
+ )
349
+ deleted_count, _ = timer_query.delete()
350
+ logger.info(
351
+ "%s: removed %d obsolete Auth timers related to notification",
352
+ notif.notification_id,
353
+ deleted_count,
354
+ )
355
+
356
+ if Timer:
357
+ timer_query = Timer.objects.filter(
358
+ eve_solar_system=solar_system,
359
+ structure_type=structure_type,
360
+ timer_type=Timer.Type.MOONMINING,
361
+ location_details=moon.name,
362
+ date=eve_time_2,
363
+ objective=Timer.Objective.FRIENDLY,
364
+ eve_corporation=notif.owner.corporation,
365
+ eve_alliance=notif.owner.corporation.alliance,
366
+ visibility=_calc_visibility(),
367
+ structure_name=parsed_text["structureName"],
368
+ owner_name=notif.owner.corporation.corporation_name,
369
+ )
370
+ deleted_count, _ = timer_query.delete()
371
+ logger.info(
372
+ "%s: removed %d obsolete structure timers "
373
+ "related to notification",
374
+ notif.notification_id,
375
+ deleted_count,
376
+ )
375
377
 
376
378
  return timer_processed
377
379
 
@@ -22,6 +22,7 @@ def is_starbase(eve_type: EveType) -> bool:
22
22
  return eve_type.eve_group_id == EveGroupId.CONTROL_TOWER
23
23
 
24
24
 
25
+ # TODO: Use dogmas to determine tower size instead of name
25
26
  def starbase_size(eve_type: EveType) -> StarbaseSize:
26
27
  """Return the size of a starbase or None if this type is not a starbase."""
27
28
  if not is_starbase(eve_type):
@@ -4,12 +4,11 @@ from django.core.management import call_command
4
4
  from django.core.management.base import BaseCommand
5
5
 
6
6
  from allianceauth.services.hooks import get_extension_logger
7
- from app_utils.logging import LoggerAddTag
8
7
 
9
8
  from structures import __title__
10
9
  from structures.constants import EveCategoryId, EveGroupId, EveTypeId
11
10
 
12
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
11
+ logger = get_extension_logger(__name__)
13
12
 
14
13
 
15
14
  class Command(BaseCommand):
@@ -5,12 +5,10 @@ from eveuniverse.models import EveEntity, EveMoon, EvePlanet, EveSolarSystem, Ev
5
5
 
6
6
  from allianceauth.services.hooks import get_extension_logger
7
7
  from app_utils.esi import fetch_esi_status
8
- from app_utils.logging import LoggerAddTag
9
8
 
10
- from structures import __title__
11
9
  from structures.models import Notification, StarbaseDetailFuel, Structure, StructureItem
12
10
 
13
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
11
+ logger = get_extension_logger(__name__)
14
12
 
15
13
 
16
14
  class Command(BaseCommand):
@@ -4,13 +4,11 @@ from django.core.management.base import BaseCommand
4
4
  from eveuniverse.models import EveSolarSystem
5
5
 
6
6
  from allianceauth.services.hooks import get_extension_logger
7
- from app_utils.logging import LoggerAddTag
8
7
 
9
- from structures import __title__
10
8
  from structures.constants import EveTypeId
11
9
  from structures.models import Structure
12
10
 
13
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
11
+ logger = get_extension_logger(__name__)
14
12
 
15
13
 
16
14
  class Command(BaseCommand):
@@ -17,9 +17,7 @@ from eveuniverse.models import EveMoon, EvePlanet, EveSolarSystem, EveType
17
17
 
18
18
  from allianceauth.eveonline.models import EveCorporationInfo
19
19
  from allianceauth.services.hooks import get_extension_logger
20
- from app_utils.logging import LoggerAddTag
21
20
 
22
- from . import __title__
23
21
  from .app_settings import STRUCTURES_HOURS_UNTIL_STALE_NOTIFICATION
24
22
  from .constants import EveCategoryId, EveTypeId
25
23
  from .core.notification_types import NotificationType
@@ -27,19 +25,20 @@ from .providers import esi
27
25
  from .webhooks.managers import WebhookBaseManager
28
26
 
29
27
  if TYPE_CHECKING:
30
- from .models import Owner
28
+ from .models import Owner, Structure
31
29
 
32
- logger = LoggerAddTag(get_extension_logger(__name__), __title__)
30
+ logger = get_extension_logger(__name__)
33
31
 
34
32
 
35
33
  class EveSovereigntyMapManager(models.Manager):
36
34
  def update_or_create_all_from_esi(self):
37
35
  """Update or create complete sovereignty map from ESI."""
38
- sov_map = esi.client.Sovereignty.get_sovereignty_map().results()
36
+ sov_map = esi.client.Sovereignty.GetSovereigntyMap().results(use_etag=False)
39
37
  logger.info("Retrieved sovereignty map from ESI")
40
38
  last_updated = now()
41
39
  obj_list = []
42
- for solar_system in sov_map:
40
+ for row in sov_map:
41
+ solar_system = row.model_dump()
43
42
  obj_def = {
44
43
  "solar_system_id": solar_system["system_id"],
45
44
  "last_updated": last_updated,
@@ -373,9 +372,10 @@ class StructureManagerBase(models.Manager):
373
372
  if token is None:
374
373
  raise ValueError("Can not fetch structure without token")
375
374
 
376
- structure_info = esi.client.Universe.get_universe_structures_structure_id(
377
- structure_id=id, token=token.valid_access_token()
378
- ).results()
375
+ data = esi.client.Universe.GetUniverseStructuresStructureId(
376
+ structure_id=id, token=token
377
+ ).result(use_etag=False)
378
+ structure_info = data.model_dump()
379
379
  structure = {
380
380
  "structure_id": id,
381
381
  "name": self.model.extract_name_from_esi_response(structure_info["name"]),
@@ -384,7 +384,7 @@ class StructureManagerBase(models.Manager):
384
384
  "system_id": structure_info["solar_system_id"],
385
385
  }
386
386
  owner = Owner.objects.get(
387
- corporation__corporation_id=structure_info["corporation_id"]
387
+ corporation__corporation_id=structure_info["owner_id"]
388
388
  )
389
389
  obj, created = self.update_or_create_from_dict(structure=structure, owner=owner)
390
390
  return obj, created
@@ -393,7 +393,6 @@ class StructureManagerBase(models.Manager):
393
393
  self, structure: dict, owner: Owner
394
394
  ) -> Tuple[Any, bool]:
395
395
  """Update or create a structure from a dict."""
396
-
397
396
  eve_type: EveType = EveType.objects.get_or_create_esi(id=structure["type_id"])[
398
397
  0
399
398
  ]
@@ -409,6 +408,7 @@ class StructureManagerBase(models.Manager):
409
408
  except self.model.DoesNotExist:
410
409
  old_obj = None
411
410
 
411
+ obj: Structure
412
412
  obj, created = self.update_or_create(
413
413
  id=structure["structure_id"],
414
414
  defaults={