aa-structures 2.9.0__tar.gz → 2.10.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.
- {aa_structures-2.9.0 → aa_structures-2.10.0}/PKG-INFO +1 -1
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/__init__.py +1 -1
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/auth_hooks.py +6 -1
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/models/owners.py +3 -1
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/integration/test_tasks.py +2 -3
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/integration/test_views.py +2 -2
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_owners_1.py +20 -0
- aa_structures-2.10.0/structures/tests/views/test_service_status.py +113 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/views/test_structures.py +1 -82
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/urls.py +3 -2
- aa_structures-2.10.0/structures/views/status.py +22 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/views/structures.py +1 -17
- {aa_structures-2.9.0 → aa_structures-2.10.0}/LICENSE +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/README.md +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/pyproject.toml +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/admin.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/app_settings.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/apps.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/constants.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/billing_embeds.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/corporate_embeds.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/helpers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/main.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/moonmining_embeds.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/orbital_embeds.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/sov_embeds.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/structures_embeds.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/tower_embeds.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/war_embeds.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_timers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_types.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/serializers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/sovereignty.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/starbases.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/forms.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/helpers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/de/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/de/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/django.pot +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/en/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/en/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/es/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/es/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/fr_FR/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/it_IT/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/it_IT/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/ja/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/ja/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/ko_KR/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/ru/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/ru/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/uk/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/uk/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/management/commands/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/management/commands/structures_load_eve.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/management/commands/structures_preload_eveuniverse.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/management/commands/structures_update_poco_planets.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/managers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/migrations/0001_initial_new.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/migrations/0002_remove_eveuniverse_relation_names.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/migrations/0003_add_localization_and_unique_key.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/migrations/0004_improve_localization.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/migrations/0005_add_notification_types.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/migrations/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/models/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/models/eveuniverse.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/models/notifications.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/models/structures_1.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/models/structures_2.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/providers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/css/global.css +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/css/main.css +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/css/public.css +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/css/statistics.css +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/css/structures.css +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/bars-rotate-fade-black-36.svg +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/bars-rotate-fade-white-36.svg +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/eve_symbol_128.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/0h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/0l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/0m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/0r.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/0s.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/1h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/1l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/1m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/1r.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/2h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/2l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/2m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/2r.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/3h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/3l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/3m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/3r.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/4h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/4l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/4m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/4s.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/5h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/5l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/5m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/5s.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/6h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/6l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/6m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/7h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/7l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/7m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/8h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/8l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/8m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/blank.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/circle.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/dustwheel.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/h.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/l.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/m.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/noship.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/r.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/tyrannis.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/tyrannis_blue.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/tyrannis_darkred.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/tyrannis_default.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/panel/tyrannis_revelations.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/structures_logo.png +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/js/global.js +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/js/public.js +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/js/statistics.js +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/js/structures.js +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/vendor/datatables/plugins/dataTables.rowGroup.min.js +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/vendor/datatables/plugins/datetime.js +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/vendor/datatables/plugins/filterDropDown.min.js +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/vendor/datatables/plugins/rowGroup.bootstrap.min.css +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/vendor/datatables/plugins/rowGroup.dataTables.min.css +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tasks.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/base.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/modals/fitting_assets.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/modals/fitting_gfx.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/modals/poco_details.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/modals/starbase_detail.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/modals/structure_details.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/modals/tab_general_detail.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/modals/tab_services_detail.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/partials/menu.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/partials/public/poco_list.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/partials/statistics/structure_summary.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/partials/structures/active_tags.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/partials/structures/jump_gates_list.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/partials/structures/poco_list.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/partials/structures/starbase_list.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/partials/structures/structure_list.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/public.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/statistics.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/structures.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/templatetags/detail_title.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/templatetags/list_asset.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/templatetags/list_item.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/templatetags/list_tax_item.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templates/structures/templatetags/list_title.html +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templatetags/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/templatetags/structures.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/notification_embeds/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/notification_embeds/test_helpers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/notification_embeds/test_main.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/test_notification_structuretimers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/test_notification_types.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/test_notifications_timerboard.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/test_serializers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/test_sovereignty.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/core/test_starbases.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/integration/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_eveuniverse.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_notifications_1.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_notifications_2.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_notifications_3.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_notifications_discord.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_owners_2.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_owners_3.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_owners_4.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_owners_5.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/models/test_structures.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/test_admin.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/test_helpers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/test_managers_1.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/test_managers_2.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/test_tasks.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/create_eveuniverse.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/entities.json +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/esi_data.json +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/eveuniverse.json +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/factories.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/generate_notifications.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/generate_notifications_2.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/generate_structures.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/helpers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/load_eveuniverse.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/tasks_loadtest.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/testdata/test_generate_structures.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/views/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/views/test_public.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/views/test_statistics.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/tests/views/utils.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/views/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/views/common.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/views/public.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/views/statistics.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/webhooks/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/webhooks/core.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/webhooks/managers.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/webhooks/models.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/webhooks/tests/__init__.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/webhooks/tests/test_core.py +0 -0
- {aa_structures-2.9.0 → aa_structures-2.10.0}/structures/webhooks/tests/test_utils.py +0 -0
@@ -32,4 +32,9 @@ def register_menu():
|
|
32
32
|
|
33
33
|
@hooks.register("url_hook")
|
34
34
|
def register_urls():
|
35
|
-
return UrlHook(
|
35
|
+
return UrlHook(
|
36
|
+
urls,
|
37
|
+
"structures",
|
38
|
+
r"^structures/",
|
39
|
+
excluded_views=["structures.views.status.service_status"],
|
40
|
+
)
|
@@ -235,7 +235,9 @@ class Owner(models.Model):
|
|
235
235
|
is_alliance_main=False
|
236
236
|
)
|
237
237
|
if "update_fields" in kwargs:
|
238
|
-
kwargs["update_fields"]
|
238
|
+
u = set(kwargs["update_fields"])
|
239
|
+
u.add("is_alliance_main")
|
240
|
+
kwargs["update_fields"] = u
|
239
241
|
super().save(*args, **kwargs)
|
240
242
|
|
241
243
|
@property
|
@@ -16,8 +16,7 @@ from app_utils.esi_testing import EsiClientStub, EsiEndpoint
|
|
16
16
|
from structures import tasks
|
17
17
|
from structures.core.notification_types import NotificationType
|
18
18
|
from structures.models import Structure
|
19
|
-
|
20
|
-
from ..testdata.factories import (
|
19
|
+
from structures.tests.testdata.factories import (
|
21
20
|
EveEntityAllianceFactory,
|
22
21
|
EveEntityCorporationFactory,
|
23
22
|
NotificationFactory,
|
@@ -28,7 +27,7 @@ from ..testdata.factories import (
|
|
28
27
|
WebhookFactory,
|
29
28
|
datetime_to_esi,
|
30
29
|
)
|
31
|
-
from
|
30
|
+
from structures.tests.testdata.load_eveuniverse import load_eveuniverse
|
32
31
|
|
33
32
|
if "structuretimers" in app_labels():
|
34
33
|
from structuretimers.models import Timer as StructureTimer
|
@@ -5,7 +5,7 @@ from django.urls import reverse
|
|
5
5
|
|
6
6
|
from app_utils.testing import add_character_to_user
|
7
7
|
|
8
|
-
from
|
8
|
+
from structures.tests.testdata.factories import (
|
9
9
|
EveCharacterFactory,
|
10
10
|
JumpGateFactory,
|
11
11
|
OwnerFactory,
|
@@ -15,7 +15,7 @@ from ..testdata.factories import (
|
|
15
15
|
UserMainBasicFactory,
|
16
16
|
UserMainDefaultFactory,
|
17
17
|
)
|
18
|
-
from
|
18
|
+
from structures.tests.testdata.load_eveuniverse import load_eveuniverse
|
19
19
|
|
20
20
|
STRUCTURES_PATH = "structures.views.structures"
|
21
21
|
PUBLIC_PATH = "structures.views.public"
|
@@ -190,6 +190,26 @@ class TestOwner(NoSocketsTestCase):
|
|
190
190
|
self.owner.refresh_from_db()
|
191
191
|
self.assertFalse(self.owner.is_alliance_main)
|
192
192
|
|
193
|
+
def test_should_ensure_is_alliance_main_is_set_for_update_fields_1(self):
|
194
|
+
# given
|
195
|
+
corporation = EveCorporationInfoFactory(alliance=self.alliance)
|
196
|
+
owner = OwnerFactory(corporation=corporation, is_alliance_main=True)
|
197
|
+
# when
|
198
|
+
owner.save(update_fields={"is_active"})
|
199
|
+
# then
|
200
|
+
owner.refresh_from_db()
|
201
|
+
self.assertTrue(owner.is_alliance_main)
|
202
|
+
|
203
|
+
def test_should_ensure_is_alliance_main_is_set_for_update_fields_2(self):
|
204
|
+
# given
|
205
|
+
corporation = EveCorporationInfoFactory(alliance=self.alliance)
|
206
|
+
owner = OwnerFactory(corporation=corporation, is_alliance_main=True)
|
207
|
+
# when
|
208
|
+
owner.save(update_fields=["is_active"])
|
209
|
+
# then
|
210
|
+
owner.refresh_from_db()
|
211
|
+
self.assertTrue(owner.is_alliance_main)
|
212
|
+
|
193
213
|
def test_should_allow_mains_from_other_alliances(self):
|
194
214
|
# given
|
195
215
|
self.owner.is_alliance_main = True
|
@@ -0,0 +1,113 @@
|
|
1
|
+
import datetime as dt
|
2
|
+
from unittest.mock import patch
|
3
|
+
|
4
|
+
from django.test import TestCase
|
5
|
+
from django.urls import reverse
|
6
|
+
from django.utils.timezone import now
|
7
|
+
|
8
|
+
from app_utils.testing import response_text
|
9
|
+
|
10
|
+
from structures.tests.testdata.factories import OwnerFactory
|
11
|
+
from structures.views import status
|
12
|
+
|
13
|
+
OWNERS_PATH = "structures.models.owners"
|
14
|
+
|
15
|
+
|
16
|
+
@patch(OWNERS_PATH + ".STRUCTURES_STRUCTURE_SYNC_GRACE_MINUTES", 30)
|
17
|
+
@patch(OWNERS_PATH + ".STRUCTURES_NOTIFICATION_SYNC_GRACE_MINUTES", 30)
|
18
|
+
class TestServiceStatus(TestCase):
|
19
|
+
def test_should_report_ok(self):
|
20
|
+
# given
|
21
|
+
OwnerFactory(
|
22
|
+
structures_last_update_at=now(),
|
23
|
+
notifications_last_update_at=now(),
|
24
|
+
forwarding_last_update_at=now(),
|
25
|
+
assets_last_update_at=now(),
|
26
|
+
)
|
27
|
+
request = self.client.get(reverse("structures:service_status"))
|
28
|
+
# when
|
29
|
+
response = status.service_status(request)
|
30
|
+
# then
|
31
|
+
self.assertEqual(response.status_code, 200)
|
32
|
+
self.assertEqual(response_text(response), "service is up")
|
33
|
+
|
34
|
+
def test_should_report_ok_when_downed_owner_is_inactive(self):
|
35
|
+
# given
|
36
|
+
OwnerFactory(
|
37
|
+
structures_last_update_at=now(),
|
38
|
+
notifications_last_update_at=now(),
|
39
|
+
forwarding_last_update_at=now(),
|
40
|
+
assets_last_update_at=now(),
|
41
|
+
)
|
42
|
+
OwnerFactory(
|
43
|
+
structures_last_update_at=now() - dt.timedelta(minutes=31),
|
44
|
+
notifications_last_update_at=now(),
|
45
|
+
forwarding_last_update_at=now(),
|
46
|
+
assets_last_update_at=now(),
|
47
|
+
is_active=False,
|
48
|
+
)
|
49
|
+
request = self.client.get(reverse("structures:service_status"))
|
50
|
+
# when
|
51
|
+
response = status.service_status(request)
|
52
|
+
# then
|
53
|
+
self.assertEqual(response.status_code, 200)
|
54
|
+
|
55
|
+
def test_should_report_fail_when_issue_with_structures(self):
|
56
|
+
# given
|
57
|
+
OwnerFactory(
|
58
|
+
structures_last_update_at=now() - dt.timedelta(minutes=31),
|
59
|
+
notifications_last_update_at=now(),
|
60
|
+
forwarding_last_update_at=now(),
|
61
|
+
assets_last_update_at=now(),
|
62
|
+
)
|
63
|
+
request = self.client.get(reverse("structures:service_status"))
|
64
|
+
# when
|
65
|
+
response = status.service_status(request)
|
66
|
+
# then
|
67
|
+
self.assertEqual(response.status_code, 500)
|
68
|
+
self.assertEqual(response_text(response), "service is down")
|
69
|
+
|
70
|
+
def test_should_report_fail_when_issue_with_notifications(self):
|
71
|
+
# given
|
72
|
+
OwnerFactory(
|
73
|
+
structures_last_update_at=now(),
|
74
|
+
notifications_last_update_at=now() - dt.timedelta(minutes=31),
|
75
|
+
forwarding_last_update_at=now(),
|
76
|
+
assets_last_update_at=now(),
|
77
|
+
)
|
78
|
+
request = self.client.get(reverse("structures:service_status"))
|
79
|
+
# when
|
80
|
+
response = status.service_status(request)
|
81
|
+
# then
|
82
|
+
self.assertEqual(response.status_code, 500)
|
83
|
+
self.assertEqual(response_text(response), "service is down")
|
84
|
+
|
85
|
+
def test_should_report_fail_when_issue_with_forwarding(self):
|
86
|
+
# given
|
87
|
+
OwnerFactory(
|
88
|
+
structures_last_update_at=now(),
|
89
|
+
notifications_last_update_at=now(),
|
90
|
+
forwarding_last_update_at=now() - dt.timedelta(minutes=31),
|
91
|
+
assets_last_update_at=now(),
|
92
|
+
)
|
93
|
+
request = self.client.get(reverse("structures:service_status"))
|
94
|
+
# when
|
95
|
+
response = status.service_status(request)
|
96
|
+
# then
|
97
|
+
self.assertEqual(response.status_code, 500)
|
98
|
+
self.assertEqual(response_text(response), "service is down")
|
99
|
+
|
100
|
+
def test_should_report_fail_when_issue_with_assets(self):
|
101
|
+
# given
|
102
|
+
OwnerFactory(
|
103
|
+
structures_last_update_at=now(),
|
104
|
+
notifications_last_update_at=now(),
|
105
|
+
forwarding_last_update_at=now(),
|
106
|
+
assets_last_update_at=now() - dt.timedelta(minutes=31),
|
107
|
+
)
|
108
|
+
request = self.client.get(reverse("structures:service_status"))
|
109
|
+
# when
|
110
|
+
response = status.service_status(request)
|
111
|
+
# then
|
112
|
+
self.assertEqual(response.status_code, 500)
|
113
|
+
self.assertEqual(response_text(response), "service is down")
|
@@ -11,6 +11,7 @@ from django.utils.timezone import now
|
|
11
11
|
from app_utils.testdata_factories import UserMainFactory
|
12
12
|
from app_utils.testing import json_response_to_python
|
13
13
|
|
14
|
+
import structures.views.status
|
14
15
|
from structures.models import Owner, Structure
|
15
16
|
from structures.views import structures
|
16
17
|
|
@@ -656,88 +657,6 @@ class TestAddStructureOwner(TestCase):
|
|
656
657
|
self.assertTrue(owner.is_active)
|
657
658
|
|
658
659
|
|
659
|
-
class TestStatus(TestCase):
|
660
|
-
@classmethod
|
661
|
-
def setUpClass(cls):
|
662
|
-
super().setUpClass()
|
663
|
-
cls.factory = RequestFactory()
|
664
|
-
# Owner.objects.filter(is_included_in_service_status=True)
|
665
|
-
|
666
|
-
def test_view_service_status_ok(self):
|
667
|
-
# given
|
668
|
-
OwnerFactory(
|
669
|
-
structures_last_update_at=now(),
|
670
|
-
notifications_last_update_at=now(),
|
671
|
-
forwarding_last_update_at=now(),
|
672
|
-
assets_last_update_at=now(),
|
673
|
-
)
|
674
|
-
request = self.factory.get(reverse("structures:service_status"))
|
675
|
-
# when
|
676
|
-
response = structures.service_status(request)
|
677
|
-
# then
|
678
|
-
self.assertEqual(response.status_code, 200)
|
679
|
-
|
680
|
-
@patch(OWNERS_PATH + ".STRUCTURES_STRUCTURE_SYNC_GRACE_MINUTES", 30)
|
681
|
-
def test_view_service_status_fail_structures(self):
|
682
|
-
# given
|
683
|
-
OwnerFactory(
|
684
|
-
structures_last_update_at=now() - dt.timedelta(minutes=31),
|
685
|
-
notifications_last_update_at=now(),
|
686
|
-
forwarding_last_update_at=now(),
|
687
|
-
assets_last_update_at=now(),
|
688
|
-
)
|
689
|
-
request = self.factory.get(reverse("structures:service_status"))
|
690
|
-
# when
|
691
|
-
response = structures.service_status(request)
|
692
|
-
# then
|
693
|
-
self.assertEqual(response.status_code, 500)
|
694
|
-
|
695
|
-
@patch(OWNERS_PATH + ".STRUCTURES_NOTIFICATION_SYNC_GRACE_MINUTES", 30)
|
696
|
-
def test_view_service_status_fail_notifications(self):
|
697
|
-
# given
|
698
|
-
OwnerFactory(
|
699
|
-
structures_last_update_at=now(),
|
700
|
-
notifications_last_update_at=now() - dt.timedelta(minutes=31),
|
701
|
-
forwarding_last_update_at=now(),
|
702
|
-
assets_last_update_at=now(),
|
703
|
-
)
|
704
|
-
request = self.factory.get(reverse("structures:service_status"))
|
705
|
-
# when
|
706
|
-
response = structures.service_status(request)
|
707
|
-
# then
|
708
|
-
self.assertEqual(response.status_code, 500)
|
709
|
-
|
710
|
-
@patch(OWNERS_PATH + ".STRUCTURES_NOTIFICATION_SYNC_GRACE_MINUTES", 30)
|
711
|
-
def test_view_service_status_fail_forwarding(self):
|
712
|
-
# given
|
713
|
-
OwnerFactory(
|
714
|
-
structures_last_update_at=now(),
|
715
|
-
notifications_last_update_at=now(),
|
716
|
-
forwarding_last_update_at=now() - dt.timedelta(minutes=31),
|
717
|
-
assets_last_update_at=now(),
|
718
|
-
)
|
719
|
-
request = self.factory.get(reverse("structures:service_status"))
|
720
|
-
# when
|
721
|
-
response = structures.service_status(request)
|
722
|
-
# then
|
723
|
-
self.assertEqual(response.status_code, 500)
|
724
|
-
|
725
|
-
@patch(OWNERS_PATH + ".STRUCTURES_STRUCTURE_SYNC_GRACE_MINUTES", 30)
|
726
|
-
def test_view_service_status_fail_assets(self):
|
727
|
-
# given
|
728
|
-
OwnerFactory(
|
729
|
-
structures_last_update_at=now(),
|
730
|
-
notifications_last_update_at=now(),
|
731
|
-
forwarding_last_update_at=now(),
|
732
|
-
assets_last_update_at=now() - dt.timedelta(minutes=31),
|
733
|
-
)
|
734
|
-
request = self.factory.get(reverse("structures:service_status"))
|
735
|
-
# when
|
736
|
-
response = structures.service_status(request)
|
737
|
-
# then
|
738
|
-
self.assertEqual(response.status_code, 500)
|
739
|
-
|
740
|
-
|
741
660
|
class TestStructureFittingModal(TestCase):
|
742
661
|
@classmethod
|
743
662
|
def setUpClass(cls):
|
@@ -1,8 +1,9 @@
|
|
1
1
|
"""Tasks for Structures."""
|
2
2
|
|
3
3
|
from django.urls import path
|
4
|
+
from django.views.decorators.cache import never_cache
|
4
5
|
|
5
|
-
from .views import public, statistics, structures
|
6
|
+
from .views import public, statistics, status, structures
|
6
7
|
|
7
8
|
app_name = "structures"
|
8
9
|
|
@@ -19,7 +20,7 @@ urlpatterns = [
|
|
19
20
|
structures.add_structure_owner,
|
20
21
|
name="add_structure_owner",
|
21
22
|
),
|
22
|
-
path("service_status",
|
23
|
+
path("service_status", never_cache(status.service_status), name="service_status"),
|
23
24
|
path(
|
24
25
|
"<int:structure_id>/structure_details",
|
25
26
|
structures.structure_details,
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"""Status views."""
|
2
|
+
|
3
|
+
from django.http import HttpRequest, HttpResponse, HttpResponseServerError
|
4
|
+
|
5
|
+
from structures.models import Owner
|
6
|
+
|
7
|
+
|
8
|
+
def service_status(request: HttpRequest):
|
9
|
+
"""Public view to 3rd party monitoring.
|
10
|
+
|
11
|
+
This is view allows running a 3rd party monitoring on the status
|
12
|
+
of this services. Service will be reported as down if any of the
|
13
|
+
configured structure or notifications syncs fails or is delayed
|
14
|
+
"""
|
15
|
+
active_owners = Owner.objects.filter(
|
16
|
+
is_included_in_service_status=True, is_active=True
|
17
|
+
)
|
18
|
+
for owner in active_owners:
|
19
|
+
if not owner.are_all_syncs_ok:
|
20
|
+
return HttpResponseServerError("service is down")
|
21
|
+
|
22
|
+
return HttpResponse("service is up")
|
@@ -10,7 +10,7 @@ from django.contrib import messages
|
|
10
10
|
from django.contrib.auth.decorators import login_required, permission_required
|
11
11
|
from django.contrib.auth.models import User
|
12
12
|
from django.db.models import Prefetch
|
13
|
-
from django.http import HttpRequest,
|
13
|
+
from django.http import HttpRequest, JsonResponse
|
14
14
|
from django.shortcuts import get_object_or_404, redirect, render
|
15
15
|
from django.templatetags.static import static
|
16
16
|
from django.urls import reverse
|
@@ -651,19 +651,3 @@ def add_structure_owner(request: HttpRequest, token: Token):
|
|
651
651
|
title=_("%s: Character added to: %s") % (__title__, owner),
|
652
652
|
)
|
653
653
|
return redirect("structures:index")
|
654
|
-
|
655
|
-
|
656
|
-
def service_status(request: HttpRequest):
|
657
|
-
"""Public view to 3rd party monitoring.
|
658
|
-
|
659
|
-
This is view allows running a 3rd party monitoring on the status
|
660
|
-
of this services. Service will be reported as down if any of the
|
661
|
-
configured structure or notifications syncs fails or is delayed
|
662
|
-
"""
|
663
|
-
status_ok = True
|
664
|
-
for owner in Owner.objects.filter(is_included_in_service_status=True):
|
665
|
-
status_ok = status_ok and owner.are_all_syncs_ok
|
666
|
-
|
667
|
-
if status_ok:
|
668
|
-
return HttpResponse(_("service is up"))
|
669
|
-
return HttpResponseServerError(_("service is down"))
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/__init__.py
RENAMED
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/billing_embeds.py
RENAMED
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/corporate_embeds.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/orbital_embeds.py
RENAMED
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/sov_embeds.py
RENAMED
File without changes
|
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/tower_embeds.py
RENAMED
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/core/notification_embeds/war_embeds.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/zh_Hans/LC_MESSAGES/django.mo
RENAMED
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/locale/zh_Hans/LC_MESSAGES/django.po
RENAMED
File without changes
|
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/management/commands/structures_load_eve.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/migrations/0004_improve_localization.py
RENAMED
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/migrations/0005_add_notification_types.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/css/statistics.css
RENAMED
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/css/structures.css
RENAMED
File without changes
|
File without changes
|
File without changes
|
{aa_structures-2.9.0 → aa_structures-2.10.0}/structures/static/structures/img/eve_symbol_128.png
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|