aa-structures 2.11.0__tar.gz → 2.12.0__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 (226) hide show
  1. {aa_structures-2.11.0 → aa_structures-2.12.0}/PKG-INFO +1 -1
  2. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/__init__.py +1 -1
  3. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/main.py +18 -0
  4. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/models/notifications.py +5 -1
  5. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/notification_embeds/test_main.py +20 -0
  6. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_notifications_discord.py +21 -0
  7. {aa_structures-2.11.0 → aa_structures-2.12.0}/LICENSE +0 -0
  8. {aa_structures-2.11.0 → aa_structures-2.12.0}/README.md +0 -0
  9. {aa_structures-2.11.0 → aa_structures-2.12.0}/pyproject.toml +0 -0
  10. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/admin.py +0 -0
  11. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/app_settings.py +0 -0
  12. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/apps.py +0 -0
  13. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/auth_hooks.py +0 -0
  14. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/constants.py +0 -0
  15. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/__init__.py +0 -0
  16. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/__init__.py +0 -0
  17. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/billing_embeds.py +0 -0
  18. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/corporate_embeds.py +0 -0
  19. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/helpers.py +0 -0
  20. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/moonmining_embeds.py +0 -0
  21. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/orbital_embeds.py +0 -0
  22. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/sov_embeds.py +0 -0
  23. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/structures_embeds.py +0 -0
  24. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/tower_embeds.py +0 -0
  25. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_embeds/war_embeds.py +0 -0
  26. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_timers.py +0 -0
  27. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/notification_types.py +0 -0
  28. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/serializers.py +0 -0
  29. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/sovereignty.py +0 -0
  30. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/core/starbases.py +0 -0
  31. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/forms.py +0 -0
  32. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/helpers.py +0 -0
  33. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/de/LC_MESSAGES/django.mo +0 -0
  34. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/de/LC_MESSAGES/django.po +0 -0
  35. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/django.pot +0 -0
  36. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/en/LC_MESSAGES/django.mo +0 -0
  37. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/en/LC_MESSAGES/django.po +0 -0
  38. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/es/LC_MESSAGES/django.mo +0 -0
  39. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/es/LC_MESSAGES/django.po +0 -0
  40. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  41. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/fr_FR/LC_MESSAGES/django.po +0 -0
  42. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  43. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/it_IT/LC_MESSAGES/django.po +0 -0
  44. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/ja/LC_MESSAGES/django.mo +0 -0
  45. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/ja/LC_MESSAGES/django.po +0 -0
  46. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  47. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/ko_KR/LC_MESSAGES/django.po +0 -0
  48. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/ru/LC_MESSAGES/django.mo +0 -0
  49. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/ru/LC_MESSAGES/django.po +0 -0
  50. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/uk/LC_MESSAGES/django.mo +0 -0
  51. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/uk/LC_MESSAGES/django.po +0 -0
  52. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  53. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
  54. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/management/commands/__init__.py +0 -0
  55. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/management/commands/structures_load_eve.py +0 -0
  56. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/management/commands/structures_preload_eveuniverse.py +0 -0
  57. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/management/commands/structures_update_poco_planets.py +0 -0
  58. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/managers.py +0 -0
  59. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/migrations/0001_initial_new.py +0 -0
  60. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/migrations/0002_remove_eveuniverse_relation_names.py +0 -0
  61. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/migrations/0003_add_localization_and_unique_key.py +0 -0
  62. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/migrations/0004_improve_localization.py +0 -0
  63. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/migrations/0005_add_notification_types.py +0 -0
  64. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/migrations/0006_add_ownercharacter_disabled.py +0 -0
  65. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/migrations/__init__.py +0 -0
  66. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/models/__init__.py +0 -0
  67. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/models/eveuniverse.py +0 -0
  68. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/models/owners.py +0 -0
  69. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/models/structures_1.py +0 -0
  70. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/models/structures_2.py +0 -0
  71. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/providers.py +0 -0
  72. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/css/global.css +0 -0
  73. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/css/main.css +0 -0
  74. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/css/public.css +0 -0
  75. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/css/statistics.css +0 -0
  76. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/css/structures.css +0 -0
  77. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/bars-rotate-fade-black-36.svg +0 -0
  78. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/bars-rotate-fade-white-36.svg +0 -0
  79. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/eve_symbol_128.png +0 -0
  80. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/0h.png +0 -0
  81. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/0l.png +0 -0
  82. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/0m.png +0 -0
  83. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/0r.png +0 -0
  84. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/0s.png +0 -0
  85. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/1h.png +0 -0
  86. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/1l.png +0 -0
  87. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/1m.png +0 -0
  88. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/1r.png +0 -0
  89. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/2h.png +0 -0
  90. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/2l.png +0 -0
  91. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/2m.png +0 -0
  92. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/2r.png +0 -0
  93. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/3h.png +0 -0
  94. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/3l.png +0 -0
  95. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/3m.png +0 -0
  96. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/3r.png +0 -0
  97. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/4h.png +0 -0
  98. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/4l.png +0 -0
  99. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/4m.png +0 -0
  100. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/4s.png +0 -0
  101. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/5h.png +0 -0
  102. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/5l.png +0 -0
  103. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/5m.png +0 -0
  104. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/5s.png +0 -0
  105. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/6h.png +0 -0
  106. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/6l.png +0 -0
  107. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/6m.png +0 -0
  108. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/7h.png +0 -0
  109. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/7l.png +0 -0
  110. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/7m.png +0 -0
  111. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/8h.png +0 -0
  112. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/8l.png +0 -0
  113. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/8m.png +0 -0
  114. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/blank.png +0 -0
  115. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/circle.png +0 -0
  116. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/dustwheel.png +0 -0
  117. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/h.png +0 -0
  118. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/l.png +0 -0
  119. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/m.png +0 -0
  120. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/noship.png +0 -0
  121. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/r.png +0 -0
  122. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/tyrannis.png +0 -0
  123. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/tyrannis_blue.png +0 -0
  124. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/tyrannis_darkred.png +0 -0
  125. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/tyrannis_default.png +0 -0
  126. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/panel/tyrannis_revelations.png +0 -0
  127. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/img/structures_logo.png +0 -0
  128. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/js/global.js +0 -0
  129. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/js/public.js +0 -0
  130. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/js/statistics.js +0 -0
  131. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/js/structures.js +0 -0
  132. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/vendor/datatables/plugins/dataTables.rowGroup.min.js +0 -0
  133. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/vendor/datatables/plugins/datetime.js +0 -0
  134. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/vendor/datatables/plugins/filterDropDown.min.js +0 -0
  135. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/vendor/datatables/plugins/rowGroup.bootstrap.min.css +0 -0
  136. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/static/structures/vendor/datatables/plugins/rowGroup.dataTables.min.css +0 -0
  137. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tasks.py +0 -0
  138. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/base.html +0 -0
  139. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/modals/fitting_assets.html +0 -0
  140. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/modals/fitting_gfx.html +0 -0
  141. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/modals/poco_details.html +0 -0
  142. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/modals/starbase_detail.html +0 -0
  143. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/modals/structure_details.html +0 -0
  144. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/modals/tab_general_detail.html +0 -0
  145. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/modals/tab_services_detail.html +0 -0
  146. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/partials/menu.html +0 -0
  147. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/partials/public/poco_list.html +0 -0
  148. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/partials/statistics/structure_summary.html +0 -0
  149. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/partials/structures/active_tags.html +0 -0
  150. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/partials/structures/jump_gates_list.html +0 -0
  151. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/partials/structures/poco_list.html +0 -0
  152. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/partials/structures/starbase_list.html +0 -0
  153. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/partials/structures/structure_list.html +0 -0
  154. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/public.html +0 -0
  155. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/statistics.html +0 -0
  156. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/structures.html +0 -0
  157. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/templatetags/detail_title.html +0 -0
  158. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/templatetags/list_asset.html +0 -0
  159. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/templatetags/list_item.html +0 -0
  160. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/templatetags/list_tax_item.html +0 -0
  161. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templates/structures/templatetags/list_title.html +0 -0
  162. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templatetags/__init__.py +0 -0
  163. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/templatetags/structures.py +0 -0
  164. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/__init__.py +0 -0
  165. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/__init__.py +0 -0
  166. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/notification_embeds/__init__.py +0 -0
  167. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/notification_embeds/test_helpers.py +0 -0
  168. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/test_notification_structuretimers.py +0 -0
  169. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/test_notification_types.py +0 -0
  170. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/test_notifications_timerboard.py +0 -0
  171. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/test_serializers.py +0 -0
  172. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/test_sovereignty.py +0 -0
  173. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/core/test_starbases.py +0 -0
  174. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/integration/__init__.py +0 -0
  175. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/integration/test_tasks.py +0 -0
  176. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/integration/test_views.py +0 -0
  177. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/__init__.py +0 -0
  178. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_eveuniverse.py +0 -0
  179. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_notifications_1.py +0 -0
  180. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_notifications_2.py +0 -0
  181. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_notifications_3.py +0 -0
  182. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_owners_1.py +0 -0
  183. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_owners_2.py +0 -0
  184. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_owners_3.py +0 -0
  185. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_owners_4.py +0 -0
  186. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_owners_5.py +0 -0
  187. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_owners_6.py +0 -0
  188. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/models/test_structures.py +0 -0
  189. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/test_admin.py +0 -0
  190. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/test_helpers.py +0 -0
  191. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/test_managers_1.py +0 -0
  192. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/test_managers_2.py +0 -0
  193. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/test_tasks.py +0 -0
  194. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/__init__.py +0 -0
  195. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/create_eveuniverse.py +0 -0
  196. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/entities.json +0 -0
  197. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/esi_data.json +0 -0
  198. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/eveuniverse.json +0 -0
  199. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/factories.py +0 -0
  200. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/generate_notifications.py +0 -0
  201. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/generate_notifications_2.py +0 -0
  202. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/generate_structures.py +0 -0
  203. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/helpers.py +0 -0
  204. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/load_eveuniverse.py +0 -0
  205. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/tasks_loadtest.py +0 -0
  206. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/testdata/test_generate_structures.py +0 -0
  207. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/views/__init__.py +0 -0
  208. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/views/test_public.py +0 -0
  209. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/views/test_service_status.py +0 -0
  210. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/views/test_statistics.py +0 -0
  211. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/views/test_structures.py +0 -0
  212. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/tests/views/utils.py +0 -0
  213. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/urls.py +0 -0
  214. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/views/__init__.py +0 -0
  215. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/views/common.py +0 -0
  216. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/views/public.py +0 -0
  217. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/views/statistics.py +0 -0
  218. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/views/status.py +0 -0
  219. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/views/structures.py +0 -0
  220. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/webhooks/__init__.py +0 -0
  221. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/webhooks/core.py +0 -0
  222. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/webhooks/managers.py +0 -0
  223. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/webhooks/models.py +0 -0
  224. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/webhooks/tests/__init__.py +0 -0
  225. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/webhooks/tests/test_core.py +0 -0
  226. {aa_structures-2.11.0 → aa_structures-2.12.0}/structures/webhooks/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: aa-structures
3
- Version: 2.11.0
3
+ Version: 2.12.0
4
4
  Summary: App for managing Eve Online structures with Alliance Auth.
5
5
  Author-email: Erik Kalkoken <kalkoken87@gmail.com>
6
6
  Requires-Python: >=3.8
@@ -3,5 +3,5 @@
3
3
  # pylint: disable = invalid-name
4
4
  default_app_config = "structures.apps.StructuresConfig"
5
5
 
6
- __version__ = "2.11.0"
6
+ __version__ = "2.12.0"
7
7
  __title__ = "Structures"
@@ -10,6 +10,8 @@ import dhooks_lite
10
10
  from django.conf import settings
11
11
  from django.utils.translation import gettext as _
12
12
 
13
+ from allianceauth.services.hooks import get_extension_logger
14
+ from app_utils.logging import LoggerAddTag
13
15
  from app_utils.urls import reverse_absolute, static_file_absolute_url
14
16
 
15
17
  from structures import __title__
@@ -19,6 +21,8 @@ from structures.models.notifications import Notification, NotificationBase, Webh
19
21
 
20
22
  from .helpers import target_datetime_formatted
21
23
 
24
+ logger = LoggerAddTag(get_extension_logger(__name__), __title__)
25
+
22
26
 
23
27
  class NotificationBaseEmbed:
24
28
  """Base class for all notification embeds.
@@ -141,6 +145,20 @@ class NotificationBaseEmbed:
141
145
  footer_text += f" #{my_text}"
142
146
  footer_icon_url = footer_icon_url if is_absolute_url(footer_icon_url) else None
143
147
  footer = dhooks_lite.Footer(text=footer_text, icon_url=footer_icon_url)
148
+ max_description = dhooks_lite.Embed.MAX_DESCRIPTION
149
+ if self._description and len(self._description) > max_description:
150
+ logger.warning(
151
+ "%s: Description of notification is too long: %s",
152
+ self,
153
+ self._description,
154
+ )
155
+ self._description = self._description[:max_description]
156
+ max_title = dhooks_lite.Embed.MAX_TITLE
157
+ if self._title and len(self._title) > max_title:
158
+ logger.warning(
159
+ "%s: Title of notification is too long: %s", self, self._title
160
+ )
161
+ self._title = self._title[:max_title]
144
162
  return dhooks_lite.Embed(
145
163
  author=author,
146
164
  color=self._color,
@@ -410,11 +410,15 @@ class NotificationBase(models.Model):
410
410
  try:
411
411
  embed, ping_type = self._generate_embed(webhook.language_code)
412
412
  except OSError as ex:
413
- logger.warning("%s: Failed to generate embed: %s", self, ex, exc_info=True)
413
+ logger.error("%s: Failed to generate embed: %s", self, ex, exc_info=True)
414
414
  return False
415
415
 
416
416
  content = self._create_content_with_pings(webhook, ping_type)
417
417
  content += self._add_discord_group_pings(webhook)
418
+ max_content = dhooks_lite.Webhook.MAX_CHARACTERS
419
+ if content and len(content) > max_content:
420
+ logger.error("%s: Content of notification is too long: %s", self, content)
421
+ return False
418
422
 
419
423
  username, avatar_url = self._gen_avatar()
420
424
  new_queue_size = webhook.send_message(
@@ -240,6 +240,26 @@ class TestNotificationEmbedsGenerate(TestCase):
240
240
  self.assertEqual(discord_embed.footer.text, "Structures")
241
241
  self.assertIn("structures_logo.png", discord_embed.footer.icon_url)
242
242
 
243
+ def test_should_not_break_with_too_large_description(self):
244
+ # given
245
+ notification = Notification.objects.get(notification_id=1000000403)
246
+ notification_embed = NotificationBaseEmbed.create(notification)
247
+ notification_embed._description = "x" * 2049
248
+ # when
249
+ discord_embed = notification_embed.generate_embed()
250
+ # then
251
+ self.assertIsInstance(discord_embed, dhooks_lite.Embed)
252
+
253
+ def test_should_not_break_with_too_large_title(self):
254
+ # given
255
+ notification = Notification.objects.get(notification_id=1000000403)
256
+ notification_embed = NotificationBaseEmbed.create(notification)
257
+ notification_embed._title = "x" * 257
258
+ # when
259
+ discord_embed = notification_embed.generate_embed()
260
+ # then
261
+ self.assertIsInstance(discord_embed, dhooks_lite.Embed)
262
+
243
263
 
244
264
  class TestNotificationEmbedsClasses(NoSocketsTestCase):
245
265
  @classmethod
@@ -33,6 +33,7 @@ if "discord" in app_labels():
33
33
  super().setUpClass()
34
34
  load_eveuniverse()
35
35
  load_eve_entities()
36
+
36
37
  cls.group_1 = Group.objects.create(name="Dummy Group 1")
37
38
  cls.group_2 = Group.objects.create(name="Dummy Group 2")
38
39
  cls.owner = OwnerFactory()
@@ -140,3 +141,23 @@ if "discord" in app_labels():
140
141
  self.assertTrue(mock_import_discord.called)
141
142
  _, kwargs = mock_send_message.call_args
142
143
  self.assertFalse(re.search(r"(<@&\d+>)", kwargs["content"]))
144
+
145
+ def test_should_abort_when_content_is_too_large(
146
+ self, mock_send_message, mock_import_discord
147
+ ):
148
+ # given
149
+ mock_send_message.return_value = 1
150
+ mock_import_discord.return_value.objects.group_to_role.side_effect = (
151
+ self._my_group_to_role
152
+ )
153
+ webhook = WebhookFactory()
154
+ for i in range(286):
155
+ group = Group.objects.create(name=f"Group {i+1}")
156
+ webhook.ping_groups.add(group)
157
+ obj = clone_notification(
158
+ Notification.objects.get(notification_id=1000000509)
159
+ )
160
+ # when
161
+ result = obj.send_to_webhook(webhook)
162
+ # then
163
+ self.assertFalse(result)
File without changes
File without changes