aa-sov-timer 4.0.0__tar.gz → 4.0.2__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 (88) hide show
  1. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/PKG-INFO +21 -14
  2. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/README.md +16 -9
  3. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/pyproject.toml +8 -11
  4. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/__init__.py +1 -1
  5. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/cs_CZ/LC_MESSAGES/django.po +1 -1
  6. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/de/LC_MESSAGES/django.po +1 -1
  7. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/django.pot +2 -2
  8. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/es/LC_MESSAGES/django.po +1 -1
  9. aa_sov_timer-4.0.2/sovtimer/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  10. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/fr_FR/LC_MESSAGES/django.po +4 -4
  11. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  12. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/it_IT/LC_MESSAGES/django.po +6 -5
  13. aa_sov_timer-4.0.2/sovtimer/locale/ja/LC_MESSAGES/django.mo +0 -0
  14. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/ja/LC_MESSAGES/django.po +4 -4
  15. aa_sov_timer-4.0.2/sovtimer/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  16. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/ko_KR/LC_MESSAGES/django.po +6 -6
  17. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/nl_NL/LC_MESSAGES/django.po +1 -1
  18. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/pl_PL/LC_MESSAGES/django.po +1 -1
  19. aa_sov_timer-4.0.2/sovtimer/locale/ru/LC_MESSAGES/django.mo +0 -0
  20. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/ru/LC_MESSAGES/django.po +4 -4
  21. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/sk/LC_MESSAGES/django.po +1 -1
  22. aa_sov_timer-4.0.2/sovtimer/locale/uk/LC_MESSAGES/django.mo +0 -0
  23. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/uk/LC_MESSAGES/django.po +8 -8
  24. aa_sov_timer-4.0.2/sovtimer/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  25. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/zh_Hans/LC_MESSAGES/django.po +4 -4
  26. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/providers.py +17 -8
  27. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/tests/test_providers.py +64 -1
  28. aa_sov_timer-4.0.0/sovtimer/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  29. aa_sov_timer-4.0.0/sovtimer/locale/ja/LC_MESSAGES/django.mo +0 -0
  30. aa_sov_timer-4.0.0/sovtimer/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  31. aa_sov_timer-4.0.0/sovtimer/locale/ru/LC_MESSAGES/django.mo +0 -0
  32. aa_sov_timer-4.0.0/sovtimer/locale/uk/LC_MESSAGES/django.mo +0 -0
  33. aa_sov_timer-4.0.0/sovtimer/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  34. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/.gitignore +0 -0
  35. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/LICENSE +0 -0
  36. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/app_settings.py +0 -0
  37. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/apps.py +0 -0
  38. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/auth_hooks.py +0 -0
  39. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/constants.py +0 -0
  40. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/.gitkeep +0 -0
  41. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  42. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/de/LC_MESSAGES/django.mo +0 -0
  43. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/es/LC_MESSAGES/django.mo +0 -0
  44. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  45. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  46. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/locale/sk/LC_MESSAGES/django.mo +0 -0
  47. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/management/commands/__init__.py +0 -0
  48. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/management/commands/sovtimer_load_initial_data.py +0 -0
  49. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0001_initial.py +0 -0
  50. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0001_initialize.py +0 -0
  51. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0002_aasovtimercampaigns_aasovtimerstructures.py +0 -0
  52. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0003_auto_20201113_1033.py +0 -0
  53. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0004_auto_20201113_1856.py +0 -0
  54. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0005_auto_20201114_0720.py +0 -0
  55. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0006_rename_models.py +0 -0
  56. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0007_cleanup_models.py +0 -0
  57. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0008_fix_campaign_attackers_score.py +0 -0
  58. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0009_alter_campaign_options_and_more.py +0 -0
  59. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0010_alter_campaign_event_type.py +0 -0
  60. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/0011_alliance_alter_campaign_event_type_and_more.py +0 -0
  61. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/migrations/__init__.py +0 -0
  62. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/models.py +0 -0
  63. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/css/aa-sov-timer.css +0 -0
  64. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/css/aa-sov-timer.min.css +0 -0
  65. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/css/aa-sov-timer.min.css.map +0 -0
  66. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/font/materialicons/v143/MaterialIcons-Regular.woff2 +0 -0
  67. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/font/materialicons/v143/README.md +0 -0
  68. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/images/zkillboard.png +0 -0
  69. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/js/aa-sov-timer.js +0 -0
  70. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/js/aa-sov-timer.min.js +0 -0
  71. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/js/aa-sov-timer.min.js.map +0 -0
  72. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/tasks.py +0 -0
  73. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/base.html +0 -0
  74. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/bundles/aa-sov-timer-css.html +0 -0
  75. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/bundles/aa-sov-timer-js.html +0 -0
  76. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/dashboard.html +0 -0
  77. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/partials/common/spinner.html +0 -0
  78. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/partials/dashboard/table.html +0 -0
  79. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/partials/footer/app-translation-footer.html +0 -0
  80. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/tests/__init__.py +0 -0
  81. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/tests/test_app_settings.py +0 -0
  82. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/tests/test_auth_hooks.py +0 -0
  83. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/tests/test_models.py +0 -0
  84. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/tests/test_tasks.py +0 -0
  85. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/tests/test_user_agent.py +0 -0
  86. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/tests/test_views.py +0 -0
  87. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/urls.py +0 -0
  88. {aa_sov_timer-4.0.0 → aa_sov_timer-4.0.2}/sovtimer/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aa-sov-timer
3
- Version: 4.0.0
3
+ Version: 4.0.2
4
4
  Summary: Sov Campaign Timer for Alliance Auth
5
5
  Project-URL: Changelog, https://github.com/ppfeufer/aa-sov-timer/blob/master/CHANGELOG.md
6
6
  Project-URL: Codecov, https://codecov.io/gh/ppfeufer/aa-sov-timer
@@ -690,6 +690,7 @@ Keywords: allianceauth,eveonline,sovereignty_timer,timerboard
690
690
  Classifier: Environment :: Web Environment
691
691
  Classifier: Framework :: Django
692
692
  Classifier: Framework :: Django :: 4.2
693
+ Classifier: Framework :: Django :: 5.2
693
694
  Classifier: Intended Audience :: Developers
694
695
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
695
696
  Classifier: Operating System :: OS Independent
@@ -702,10 +703,9 @@ Classifier: Programming Language :: Python :: 3.13
702
703
  Classifier: Topic :: Internet :: WWW/HTTP
703
704
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
704
705
  Requires-Python: <3.14,>=3.10
705
- Requires-Dist: allianceauth<5,>=4.12
706
- Requires-Dist: django-esi<9,>=8
707
- Requires-Dist: django-eveonline-sde>=0.0.1b1
708
- Requires-Dist: django-eveuniverse>=1.5.4
706
+ Requires-Dist: allianceauth>=4.12
707
+ Requires-Dist: django-esi>=8.3.1
708
+ Requires-Dist: django-eveonline-sde>=0.0.1b9
709
709
  Provides-Extra: tests-allianceauth-latest
710
710
  Requires-Dist: coverage; extra == 'tests-allianceauth-latest'
711
711
  Requires-Dist: django-webtest; extra == 'tests-allianceauth-latest'
@@ -726,6 +726,7 @@ Description-Content-Type: text/markdown
726
726
  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-sov-timer/svg-badge.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)
727
727
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg "Contributor Covenant")](https://github.com/ppfeufer/aa-sov-timer/blob/master/CODE_OF_CONDUCT.md)
728
728
  [![Discord](https://img.shields.io/discord/399006117012832262?label=discord)](https://discord.gg/fjnHAmk)
729
+ [![Alliance Auth Compatibility](https://img.shields.io/badge/Alliance_Auth-v4_%7C_v5-brightgreen)](https://gitlab.com/allianceauth/allianceauth)
729
730
 
730
731
  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)
731
732
 
@@ -803,7 +804,7 @@ Make sure you're in the virtual environment (venv) of your Alliance Auth install
803
804
  Then install the latest version:
804
805
 
805
806
  ```shell
806
- pip install aa-sov-timer==4.0.0
807
+ pip install aa-sov-timer==4.0.2
807
808
  ```
808
809
 
809
810
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings"></a>
@@ -813,10 +814,9 @@ Configure your AA settings (`local.py`) as follows:
813
814
  - Modify `INSTALLED_APPS` to include the following entries:
814
815
 
815
816
  ```python
816
- INSTALLED_APPS = [
817
+ INSTALLED_APPS += [
817
818
  # ...
818
819
  "eve_sde", # Only if not already added for another app
819
- "eveuniverse", # This is still needed, but we are migrating away from it. It's a multi-step process, so we need to keep it for now.
820
820
  "sovtimer",
821
821
  # ...
822
822
  ]
@@ -836,11 +836,15 @@ Configure your AA settings (`local.py`) as follows:
836
836
  }
837
837
 
838
838
  if "eve_sde" in INSTALLED_APPS:
839
- # Run at 12:00 UTC each day
839
+ # Run at 12:00 each day
840
840
  CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
841
841
  "task": "eve_sde.tasks.check_for_sde_updates",
842
842
  "schedule": crontab(minute="0", hour="12"),
843
843
  }
844
+
845
+ # Set the following when you have a bare metal installation, or Docker with a
846
+ # non-standard storage for `myauth`
847
+ ESDE_TASK_SPLIT = True
844
848
  ```
845
849
 
846
850
  #### Step 3: Finalizing the Installation<a name="step-3-finalizing-the-installation"></a>
@@ -878,7 +882,7 @@ Once you have completed all previous steps, restart your AA supervisor service t
878
882
  Add the app to your `conf/requirements.txt`:
879
883
 
880
884
  ```text
881
- aa-sov-timer==4.0.0
885
+ aa-sov-timer==4.0.2
882
886
  ```
883
887
 
884
888
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings-1"></a>
@@ -891,7 +895,6 @@ Configure your AA settings (`conf/local.py`) as follows:
891
895
  INSTALLED_APPS = [
892
896
  # ...
893
897
  "eve_sde", # Only if not already added for another app
894
- "eveuniverse", # This is still needed, but we are migrating away from it. It's a multi-step process, so we need to keep it for now.
895
898
  "sovtimer",
896
899
  # ...
897
900
  ]
@@ -911,11 +914,15 @@ Configure your AA settings (`conf/local.py`) as follows:
911
914
  }
912
915
 
913
916
  if "eve_sde" in INSTALLED_APPS:
914
- # Run at 12:00 UTC each day
917
+ # Run at 12:00 each day
915
918
  CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
916
919
  "task": "eve_sde.tasks.check_for_sde_updates",
917
920
  "schedule": crontab(minute="0", hour="12"),
918
921
  }
922
+
923
+ # Set the following when you have a bare metal installation, or Docker with a
924
+ # non-standard storage for `myauth`
925
+ ESDE_TASK_SPLIT = True
919
926
  ```
920
927
 
921
928
  #### Step 3: Build Auth and Restart Your Containers<a name="step-3-build-auth-and-restart-your-containers"></a>
@@ -972,7 +979,7 @@ Then run the following commands from your AA project directory (the one that
972
979
  contains `manage.py`).
973
980
 
974
981
  ```shell
975
- pip install aa-sov-timer==4.0.0
982
+ pip install aa-sov-timer==4.0.2
976
983
 
977
984
  python manage.py collectstatic
978
985
  python manage.py migrate
@@ -985,7 +992,7 @@ Finally, restart your AA supervisor service.
985
992
  To update your existing installation of AA Sovereignty Timer, all you need to do is to update the respective line in your `conf/requirements.txt` file to the latest version.
986
993
 
987
994
  ```text
988
- aa-sov-timer==4.0.0
995
+ aa-sov-timer==4.0.2
989
996
  ```
990
997
 
991
998
  Now rebuild your containers and restart them:
@@ -12,6 +12,7 @@
12
12
  [![Translation status](https://weblate.ppfeufer.de/widget/alliance-auth-apps/aa-sov-timer/svg-badge.svg)](https://weblate.ppfeufer.de/engage/alliance-auth-apps/)
13
13
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg "Contributor Covenant")](https://github.com/ppfeufer/aa-sov-timer/blob/master/CODE_OF_CONDUCT.md)
14
14
  [![Discord](https://img.shields.io/discord/399006117012832262?label=discord)](https://discord.gg/fjnHAmk)
15
+ [![Alliance Auth Compatibility](https://img.shields.io/badge/Alliance_Auth-v4_%7C_v5-brightgreen)](https://gitlab.com/allianceauth/allianceauth)
15
16
 
16
17
  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)
17
18
 
@@ -89,7 +90,7 @@ Make sure you're in the virtual environment (venv) of your Alliance Auth install
89
90
  Then install the latest version:
90
91
 
91
92
  ```shell
92
- pip install aa-sov-timer==4.0.0
93
+ pip install aa-sov-timer==4.0.2
93
94
  ```
94
95
 
95
96
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings"></a>
@@ -99,10 +100,9 @@ Configure your AA settings (`local.py`) as follows:
99
100
  - Modify `INSTALLED_APPS` to include the following entries:
100
101
 
101
102
  ```python
102
- INSTALLED_APPS = [
103
+ INSTALLED_APPS += [
103
104
  # ...
104
105
  "eve_sde", # Only if not already added for another app
105
- "eveuniverse", # This is still needed, but we are migrating away from it. It's a multi-step process, so we need to keep it for now.
106
106
  "sovtimer",
107
107
  # ...
108
108
  ]
@@ -122,11 +122,15 @@ Configure your AA settings (`local.py`) as follows:
122
122
  }
123
123
 
124
124
  if "eve_sde" in INSTALLED_APPS:
125
- # Run at 12:00 UTC each day
125
+ # Run at 12:00 each day
126
126
  CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
127
127
  "task": "eve_sde.tasks.check_for_sde_updates",
128
128
  "schedule": crontab(minute="0", hour="12"),
129
129
  }
130
+
131
+ # Set the following when you have a bare metal installation, or Docker with a
132
+ # non-standard storage for `myauth`
133
+ ESDE_TASK_SPLIT = True
130
134
  ```
131
135
 
132
136
  #### Step 3: Finalizing the Installation<a name="step-3-finalizing-the-installation"></a>
@@ -164,7 +168,7 @@ Once you have completed all previous steps, restart your AA supervisor service t
164
168
  Add the app to your `conf/requirements.txt`:
165
169
 
166
170
  ```text
167
- aa-sov-timer==4.0.0
171
+ aa-sov-timer==4.0.2
168
172
  ```
169
173
 
170
174
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings-1"></a>
@@ -177,7 +181,6 @@ Configure your AA settings (`conf/local.py`) as follows:
177
181
  INSTALLED_APPS = [
178
182
  # ...
179
183
  "eve_sde", # Only if not already added for another app
180
- "eveuniverse", # This is still needed, but we are migrating away from it. It's a multi-step process, so we need to keep it for now.
181
184
  "sovtimer",
182
185
  # ...
183
186
  ]
@@ -197,11 +200,15 @@ Configure your AA settings (`conf/local.py`) as follows:
197
200
  }
198
201
 
199
202
  if "eve_sde" in INSTALLED_APPS:
200
- # Run at 12:00 UTC each day
203
+ # Run at 12:00 each day
201
204
  CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
202
205
  "task": "eve_sde.tasks.check_for_sde_updates",
203
206
  "schedule": crontab(minute="0", hour="12"),
204
207
  }
208
+
209
+ # Set the following when you have a bare metal installation, or Docker with a
210
+ # non-standard storage for `myauth`
211
+ ESDE_TASK_SPLIT = True
205
212
  ```
206
213
 
207
214
  #### Step 3: Build Auth and Restart Your Containers<a name="step-3-build-auth-and-restart-your-containers"></a>
@@ -258,7 +265,7 @@ Then run the following commands from your AA project directory (the one that
258
265
  contains `manage.py`).
259
266
 
260
267
  ```shell
261
- pip install aa-sov-timer==4.0.0
268
+ pip install aa-sov-timer==4.0.2
262
269
 
263
270
  python manage.py collectstatic
264
271
  python manage.py migrate
@@ -271,7 +278,7 @@ Finally, restart your AA supervisor service.
271
278
  To update your existing installation of AA Sovereignty Timer, all you need to do is to update the respective line in your `conf/requirements.txt` file to the latest version.
272
279
 
273
280
  ```text
274
- aa-sov-timer==4.0.0
281
+ aa-sov-timer==4.0.2
275
282
  ```
276
283
 
277
284
  Now rebuild your containers and restart them:
@@ -23,6 +23,7 @@ classifiers = [
23
23
  "Environment :: Web Environment",
24
24
  "Framework :: Django",
25
25
  "Framework :: Django :: 4.2",
26
+ "Framework :: Django :: 5.2",
26
27
  "Intended Audience :: Developers",
27
28
  "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
28
29
  "Operating System :: OS Independent",
@@ -39,10 +40,9 @@ dynamic = [
39
40
  "version",
40
41
  ]
41
42
  dependencies = [
42
- "allianceauth>=4.12,<5",
43
- "django-esi>=8,<9",
44
- "django-eveonline-sde>=0.0.1b1",
45
- "django-eveuniverse>=1.5.4",
43
+ "allianceauth>=4.12",
44
+ "django-esi>=8.3.1",
45
+ "django-eveonline-sde>=0.0.1b9",
46
46
  ]
47
47
  optional-dependencies.tests-allianceauth-latest = [
48
48
  "coverage",
@@ -58,12 +58,9 @@ urls.GitHub = "https://github.com/ppfeufer/aa-sov-timer"
58
58
  urls.Tracker = "https://github.com/ppfeufer/aa-sov-timer/issues"
59
59
  urls.Translation = "https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/"
60
60
 
61
- [tool.hatch.build]
62
- include = [
61
+ [tool.hatch]
62
+ build.include = [
63
63
  "/sovtimer",
64
64
  ]
65
-
66
- [tool.hatch.metadata]
67
- allow-direct-references = true
68
- [tool.hatch.version]
69
- path = "sovtimer/__init__.py"
65
+ metadata.allow-direct-references = true
66
+ version.path = "sovtimer/__init__.py"
@@ -5,7 +5,7 @@ App init
5
5
  # Django
6
6
  from django.utils.translation import gettext_lazy as _
7
7
 
8
- __version__ = "4.0.0"
8
+ __version__ = "4.0.2"
9
9
  __title__ = "Sovereignty Timer"
10
10
  __title_translated__ = _("Sovereignty Timer")
11
11
 
@@ -6,7 +6,7 @@ msgid ""
6
6
  msgstr ""
7
7
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
8
8
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
9
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
9
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
10
10
  "PO-Revision-Date: 2024-07-10 14:26+0000\n"
11
11
  "Last-Translator: Dadas Aideron <dadas.aideron@gmail.com>\n"
12
12
  "Language-Team: Czech <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/cs/>\n"
@@ -6,7 +6,7 @@ msgid ""
6
6
  msgstr ""
7
7
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
8
8
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
9
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
9
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
10
10
  "PO-Revision-Date: 2026-02-27 10:17+0000\n"
11
11
  "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
12
12
  "Language-Team: German <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/de/>\n"
@@ -6,9 +6,9 @@
6
6
  #, fuzzy
7
7
  msgid ""
8
8
  msgstr ""
9
- "Project-Id-Version: AA Sov Timer 4.0.0\n"
9
+ "Project-Id-Version: AA Sov Timer 4.0.2\n"
10
10
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
11
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
11
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -7,7 +7,7 @@ msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
9
9
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
10
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
10
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
11
11
  "PO-Revision-Date: 2025-07-29 20:18+0000\n"
12
12
  "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
13
13
  "Language-Team: Spanish <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/es/>\n"
@@ -13,8 +13,8 @@ msgid ""
13
13
  msgstr ""
14
14
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
15
15
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
16
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
17
- "PO-Revision-Date: 2026-02-01 14:23+0000\n"
16
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
17
+ "PO-Revision-Date: 2026-03-22 19:23+0000\n"
18
18
  "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
19
19
  "Language-Team: French <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/fr/>\n"
20
20
  "Language: fr_FR\n"
@@ -22,7 +22,7 @@ msgstr ""
22
22
  "Content-Type: text/plain; charset=UTF-8\n"
23
23
  "Content-Transfer-Encoding: 8bit\n"
24
24
  "Plural-Forms: nplurals=2; plural=n > 1;\n"
25
- "X-Generator: Weblate 5.15.2\n"
25
+ "X-Generator: Weblate 5.16.2\n"
26
26
 
27
27
  #: sovtimer/__init__.py:10 sovtimer/models.py:35
28
28
  #: sovtimer/templates/sovtimer/base.html:7
@@ -36,7 +36,7 @@ msgstr "Peut accéder le module Minuterie de souveraineté"
36
36
 
37
37
  #: sovtimer/models.py:56
38
38
  msgid "Alliance"
39
- msgstr ""
39
+ msgstr "Alliance"
40
40
 
41
41
  #: sovtimer/models.py:57
42
42
  msgid "Alliances"
@@ -2,26 +2,27 @@
2
2
  # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
3
  # This file is distributed under the same license as the PACKAGE package.
4
4
  # Peter Pfeufer <info@ppfeufer.de>, 2024.
5
+ # Vlad Cocan <cfvlad@gmail.com>, 2026.
5
6
  msgid ""
6
7
  msgstr ""
7
8
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
8
9
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
9
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
10
- "PO-Revision-Date: 2024-12-22 21:15+0000\n"
11
- "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
10
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
11
+ "PO-Revision-Date: 2026-04-07 17:48+0000\n"
12
+ "Last-Translator: Vlad Cocan <cfvlad@gmail.com>\n"
12
13
  "Language-Team: Italian <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/it/>\n"
13
14
  "Language: it_IT\n"
14
15
  "MIME-Version: 1.0\n"
15
16
  "Content-Type: text/plain; charset=UTF-8\n"
16
17
  "Content-Transfer-Encoding: 8bit\n"
17
18
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
18
- "X-Generator: Weblate 5.9.2\n"
19
+ "X-Generator: Weblate 5.16.2\n"
19
20
 
20
21
  #: sovtimer/__init__.py:10 sovtimer/models.py:35
21
22
  #: sovtimer/templates/sovtimer/base.html:7
22
23
  #: sovtimer/templates/sovtimer/base.html:11
23
24
  msgid "Sovereignty Timer"
24
- msgstr ""
25
+ msgstr "Timer Sovranità"
25
26
 
26
27
  #: sovtimer/models.py:38
27
28
  msgid "Can access the Sovereignty Timer module"
@@ -8,8 +8,8 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
10
10
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
11
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
12
- "PO-Revision-Date: 2026-02-05 01:23+0000\n"
11
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
12
+ "PO-Revision-Date: 2026-03-22 19:23+0000\n"
13
13
  "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
14
14
  "Language-Team: Japanese <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/ja/>\n"
15
15
  "Language: ja\n"
@@ -17,7 +17,7 @@ msgstr ""
17
17
  "Content-Type: text/plain; charset=UTF-8\n"
18
18
  "Content-Transfer-Encoding: 8bit\n"
19
19
  "Plural-Forms: nplurals=1; plural=0;\n"
20
- "X-Generator: Weblate 5.15.2\n"
20
+ "X-Generator: Weblate 5.16.2\n"
21
21
 
22
22
  #: sovtimer/__init__.py:10 sovtimer/models.py:35
23
23
  #: sovtimer/templates/sovtimer/base.html:7
@@ -31,7 +31,7 @@ msgstr "領有権タイマーのモジュールにアクセス可能です"
31
31
 
32
32
  #: sovtimer/models.py:56
33
33
  msgid "Alliance"
34
- msgstr ""
34
+ msgstr "アライアンス"
35
35
 
36
36
  #: sovtimer/models.py:57
37
37
  msgid "Alliances"
@@ -1,7 +1,7 @@
1
1
  # SOME DESCRIPTIVE TITLE.
2
2
  # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
3
  # This file is distributed under the same license as the PACKAGE package.
4
- # Peter Pfeufer <info@ppfeufer.de>, 2023, 2024.
4
+ # Peter Pfeufer <info@ppfeufer.de>, 2023, 2024, 2026.
5
5
  # Author50CO <tkddlschry@gmail.com>, 2023, 2024.
6
6
  # Mind of the Raven <okanieva@gmail.com>, 2024.
7
7
  # Rodpold Shard <rodpold@gmail.com>, 2024.
@@ -10,16 +10,16 @@ msgid ""
10
10
  msgstr ""
11
11
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
12
12
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
13
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
14
- "PO-Revision-Date: 2025-04-28 07:24+0000\n"
15
- "Last-Translator: SiO4 <hohoit0078@gmail.com>\n"
13
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
14
+ "PO-Revision-Date: 2026-03-22 19:23+0000\n"
15
+ "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
16
16
  "Language-Team: Korean <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/ko/>\n"
17
17
  "Language: ko_KR\n"
18
18
  "MIME-Version: 1.0\n"
19
19
  "Content-Type: text/plain; charset=UTF-8\n"
20
20
  "Content-Transfer-Encoding: 8bit\n"
21
21
  "Plural-Forms: nplurals=1; plural=0;\n"
22
- "X-Generator: Weblate 5.11.1\n"
22
+ "X-Generator: Weblate 5.16.2\n"
23
23
 
24
24
  #: sovtimer/__init__.py:10 sovtimer/models.py:35
25
25
  #: sovtimer/templates/sovtimer/base.html:7
@@ -33,7 +33,7 @@ msgstr "소버린티 타이머 모듈에 접근할 수 있는 권한"
33
33
 
34
34
  #: sovtimer/models.py:56
35
35
  msgid "Alliance"
36
- msgstr ""
36
+ msgstr "얼라이언스"
37
37
 
38
38
  #: sovtimer/models.py:57
39
39
  msgid "Alliances"
@@ -6,7 +6,7 @@ msgid ""
6
6
  msgstr ""
7
7
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
8
8
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
9
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
9
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
10
10
  "PO-Revision-Date: 2026-02-01 14:23+0000\n"
11
11
  "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
12
12
  "Language-Team: Dutch <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/nl/>\n"
@@ -6,7 +6,7 @@ msgid ""
6
6
  msgstr ""
7
7
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
8
8
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
9
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
9
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
10
10
  "PO-Revision-Date: 2024-05-10 14:12+0000\n"
11
11
  "Last-Translator: Anonymous <noreply@weblate.org>\n"
12
12
  "Language-Team: Polish <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/pl/>\n"
@@ -8,8 +8,8 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
10
10
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
11
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
12
- "PO-Revision-Date: 2026-01-09 17:17+0000\n"
11
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
12
+ "PO-Revision-Date: 2026-03-22 19:23+0000\n"
13
13
  "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
14
14
  "Language-Team: Russian <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/ru/>\n"
15
15
  "Language: ru\n"
@@ -17,7 +17,7 @@ msgstr ""
17
17
  "Content-Type: text/plain; charset=UTF-8\n"
18
18
  "Content-Transfer-Encoding: 8bit\n"
19
19
  "Plural-Forms: nplurals=4; plural=n==1 ? 3 : (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
20
- "X-Generator: Weblate 5.15.1\n"
20
+ "X-Generator: Weblate 5.16.2\n"
21
21
 
22
22
  #: sovtimer/__init__.py:10 sovtimer/models.py:35
23
23
  #: sovtimer/templates/sovtimer/base.html:7
@@ -31,7 +31,7 @@ msgstr "Имеет доступ к модулю 'Таймер суверенит
31
31
 
32
32
  #: sovtimer/models.py:56
33
33
  msgid "Alliance"
34
- msgstr ""
34
+ msgstr "Альянс"
35
35
 
36
36
  #: sovtimer/models.py:57
37
37
  msgid "Alliances"
@@ -7,7 +7,7 @@ msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
9
9
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
10
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
10
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
11
11
  "PO-Revision-Date: 2024-05-10 14:12+0000\n"
12
12
  "Last-Translator: Anonymous <noreply@weblate.org>\n"
13
13
  "Language-Team: Slovak <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/sk/>\n"
@@ -2,15 +2,15 @@
2
2
  # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
3
  # This file is distributed under the same license as the PACKAGE package.
4
4
  # "Andrii M." <elfleg0las88@gmail.com>, 2023, 2024.
5
- # Peter Pfeufer <info@ppfeufer.de>, 2023, 2024.
5
+ # Peter Pfeufer <info@ppfeufer.de>, 2023, 2024, 2026.
6
6
  # M <skrypets@gmail.com>, 2025.
7
- # s0k0l -_- <salarysalo@gmail.com>, 2025.
7
+ # s0k0l -_- <salarysalo@gmail.com>, 2025, 2026.
8
8
  msgid ""
9
9
  msgstr ""
10
10
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
11
11
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
12
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
13
- "PO-Revision-Date: 2025-11-15 22:39+0000\n"
12
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
13
+ "PO-Revision-Date: 2026-03-29 04:01+0000\n"
14
14
  "Last-Translator: s0k0l -_- <salarysalo@gmail.com>\n"
15
15
  "Language-Team: Ukrainian <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/uk/>\n"
16
16
  "Language: uk\n"
@@ -18,7 +18,7 @@ msgstr ""
18
18
  "Content-Type: text/plain; charset=UTF-8\n"
19
19
  "Content-Transfer-Encoding: 8bit\n"
20
20
  "Plural-Forms: nplurals=4; plural=n==1 ? 3 : (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
21
- "X-Generator: Weblate 5.14.3\n"
21
+ "X-Generator: Weblate 5.16.2\n"
22
22
 
23
23
  #: sovtimer/__init__.py:10 sovtimer/models.py:35
24
24
  #: sovtimer/templates/sovtimer/base.html:7
@@ -32,11 +32,11 @@ msgstr "Є доступ до модуля Таймерів Сувереніте
32
32
 
33
33
  #: sovtimer/models.py:56
34
34
  msgid "Alliance"
35
- msgstr ""
35
+ msgstr "Аліянс"
36
36
 
37
37
  #: sovtimer/models.py:57
38
38
  msgid "Alliances"
39
- msgstr ""
39
+ msgstr "Ал'янси"
40
40
 
41
41
  #: sovtimer/models.py:153
42
42
  msgid "Sovereignty structure"
@@ -92,7 +92,7 @@ msgstr "Система"
92
92
 
93
93
  #: sovtimer/templates/sovtimer/partials/dashboard/table.html:65
94
94
  msgid "Constellation"
95
- msgstr "Сузірʼя"
95
+ msgstr "Констеляція"
96
96
 
97
97
  #: sovtimer/templates/sovtimer/partials/dashboard/table.html:66
98
98
  msgid "Region"
@@ -7,15 +7,15 @@
7
7
  # MxdHana <236833425@qq.com>, 2024.
8
8
  # SAM_FPS <sam_fps@163.com>, 2024.
9
9
  # AKA Patrick <hsc844766246@gmail.com>, 2025.
10
- # LichenKass <yuanchengwei_sz@163.com>, 2025.
10
+ # LichenKass <yuanchengwei_sz@163.com>, 2025, 2026.
11
11
  # nm l <mmttyyluo@gmail.com>, 2026.
12
12
  # shkno <l13244536339@163.com>, 2026.
13
13
  msgid ""
14
14
  msgstr ""
15
15
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
16
16
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
17
- "POT-Creation-Date: 2026-02-27 11:19+0100\n"
18
- "PO-Revision-Date: 2026-02-12 05:23+0000\n"
17
+ "POT-Creation-Date: 2026-04-07 19:56+0200\n"
18
+ "PO-Revision-Date: 2026-03-06 10:23+0000\n"
19
19
  "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
20
20
  "Language-Team: Chinese (Simplified Han script) <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/zh_Hans/>\n"
21
21
  "Language: zh_Hans\n"
@@ -23,7 +23,7 @@ msgstr ""
23
23
  "Content-Type: text/plain; charset=UTF-8\n"
24
24
  "Content-Transfer-Encoding: 8bit\n"
25
25
  "Plural-Forms: nplurals=1; plural=0;\n"
26
- "X-Generator: Weblate 5.15.2\n"
26
+ "X-Generator: Weblate 5.16.1\n"
27
27
 
28
28
  #: sovtimer/__init__.py:10 sovtimer/models.py:35
29
29
  #: sovtimer/templates/sovtimer/base.html:7
@@ -4,10 +4,11 @@ Providers
4
4
 
5
5
  # Standard Library
6
6
  import logging
7
+ import typing
7
8
  from typing import Any
8
9
 
9
10
  # Third Party
10
- from aiopenapi3 import ContentTypeError
11
+ from aiopenapi3 import ContentTypeError, RequestError
11
12
  from httpx import Response
12
13
 
13
14
  # Alliance Auth
@@ -24,6 +25,14 @@ from sovtimer import (
24
25
  __version__,
25
26
  )
26
27
 
28
+ if typing.TYPE_CHECKING:
29
+ # Alliance Auth
30
+ from esi.stubs import (
31
+ AllianceDetail,
32
+ SovereigntyCampaignsGet,
33
+ SovereigntyStructuresGet,
34
+ )
35
+
27
36
  # ESI client
28
37
  esi = ESIClientProvider(
29
38
  # Use the latest compatibility date, see https://esi.evetech.net/meta/compatibility-dates
@@ -98,7 +107,7 @@ class ESIHandler:
98
107
  )
99
108
 
100
109
  esi_result = None
101
- except HTTPClientError as exc:
110
+ except (HTTPClientError, RequestError) as exc:
102
111
  logger.error(msg=f"Error while fetching data from ESI: {str(exc)}")
103
112
 
104
113
  esi_result = None
@@ -108,7 +117,7 @@ class ESIHandler:
108
117
  @classmethod
109
118
  def get_alliances_alliance_id(
110
119
  cls, alliance_id: int, force_refresh: bool = False
111
- ) -> dict | None:
120
+ ) -> "AllianceDetail | None":
112
121
  """
113
122
  Get alliance information from ESI.
114
123
 
@@ -117,7 +126,7 @@ class ESIHandler:
117
126
  :param force_refresh: Whether to force a refresh of the data from ESI, bypassing any caches.
118
127
  :type force_refresh: bool
119
128
  :return: Alliance information or None if an error occurred.
120
- :rtype: dict | None
129
+ :rtype: AllianceDetail | None
121
130
  """
122
131
 
123
132
  logger.debug(
@@ -134,12 +143,12 @@ class ESIHandler:
134
143
  @classmethod
135
144
  def get_sovereignty_campaigns(
136
145
  cls, force_refresh: bool = False
137
- ) -> list[dict] | None:
146
+ ) -> "list[SovereigntyCampaignsGet] | None":
138
147
  """
139
148
  Get sovereignty campaigns from ESI.
140
149
 
141
150
  :return: List of sovereignty campaigns or None if an error occurred.
142
- :rtype: list[dict] | None
151
+ :rtype: list[SovereigntyCampaignsGet] | None
143
152
  """
144
153
 
145
154
  logger.debug("Fetching sovereignty campaigns from ESI...")
@@ -152,12 +161,12 @@ class ESIHandler:
152
161
  @classmethod
153
162
  def get_sovereignty_structures(
154
163
  cls, force_refresh: bool = False
155
- ) -> list[dict] | None:
164
+ ) -> "list[SovereigntyStructuresGet] | None":
156
165
  """
157
166
  Get sovereignty structures from ESI.
158
167
 
159
168
  :return: List of sovereignty structures or None if an error occurred.
160
- :rtype: list[dict] | None
169
+ :rtype: list[SovereigntyStructuresGet] | None
161
170
  """
162
171
 
163
172
  logger.debug("Fetching sovereignty structures from ESI...")
@@ -3,12 +3,16 @@ Test for the providers module.
3
3
  """
4
4
 
5
5
  # Standard Library
6
+ import importlib
6
7
  import logging
8
+ import sys
9
+ import types
10
+ import typing
7
11
  from http import HTTPStatus
8
12
  from unittest.mock import MagicMock, patch
9
13
 
10
14
  # Third Party
11
- from aiopenapi3 import ContentTypeError
15
+ from aiopenapi3 import ContentTypeError, RequestError
12
16
 
13
17
  # Alliance Auth
14
18
  from esi.exceptions import HTTPClientError, HTTPNotModified
@@ -18,6 +22,44 @@ from sovtimer.providers import AppLogger, ESIHandler
18
22
  from sovtimer.tests import BaseTestCase
19
23
 
20
24
 
25
+ class TestTypingTypeCheckingIfCondition(BaseTestCase):
26
+ def test_when_typing_TYPE_CHECKING_true_then_stub_types_are_imported_into_module_namespace(
27
+ self,
28
+ ):
29
+ """
30
+ Test that when `typing.TYPE_CHECKING` is set to `True`, the stub types from `esi.stubs` are imported into the module namespace.
31
+
32
+ :return:
33
+ :rtype:
34
+ """
35
+
36
+ fake_stubs = types.ModuleType("esi.stubs")
37
+ fake_stubs.AllianceDetail = type("AllianceDetail", (), {})
38
+ fake_stubs.SovereigntyCampaignsGet = type("SovereigntyCampaignsGet", (), {})
39
+ fake_stubs.SovereigntyStructuresGet = type("SovereigntyStructuresGet", (), {})
40
+
41
+ original_sys_modules = sys.modules.copy()
42
+
43
+ try:
44
+ sys.modules["esi.stubs"] = fake_stubs
45
+
46
+ with patch.object(typing, "TYPE_CHECKING", True):
47
+ providers = importlib.import_module("sovtimer.providers")
48
+ importlib.reload(providers)
49
+
50
+ self.assertTrue(hasattr(providers, "AllianceDetail"))
51
+ self.assertTrue(hasattr(providers, "SovereigntyCampaignsGet"))
52
+ self.assertTrue(hasattr(providers, "SovereigntyStructuresGet"))
53
+ finally:
54
+ sys.modules.clear()
55
+ sys.modules.update(original_sys_modules)
56
+
57
+ try:
58
+ importlib.reload(importlib.import_module("sovtimer.providers"))
59
+ except Exception:
60
+ pass
61
+
62
+
21
63
  class TestESIHandlerResult(BaseTestCase):
22
64
  """
23
65
  Test the ESIHandler.result method.
@@ -97,6 +139,27 @@ class TestESIHandlerResult(BaseTestCase):
97
139
  self.assertIsNone(response)
98
140
  mock_operation.result.assert_called_once()
99
141
 
142
+ def test_returns_none_when_request_error_occurs(self):
143
+ """
144
+ Test that an HTTPRequestError exception is raised correctly.
145
+
146
+ :return:
147
+ :rtype:
148
+ """
149
+
150
+ mock_operation = MagicMock()
151
+ mock_operation.result.side_effect = RequestError(
152
+ operation=mock_operation,
153
+ request=MagicMock(),
154
+ data={},
155
+ parameters={},
156
+ )
157
+
158
+ response = ESIHandler.result(mock_operation)
159
+
160
+ self.assertIsNone(response)
161
+ mock_operation.result.assert_called_once()
162
+
100
163
  def test_passes_extra_parameters_to_operation(self):
101
164
  """
102
165
  Test that extra parameters are passed correctly to the ESI operation.
File without changes
File without changes