aa-sov-timer 4.0.1__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.1 → aa_sov_timer-4.0.2}/PKG-INFO +21 -11
  2. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/README.md +16 -7
  3. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/pyproject.toml +8 -10
  4. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/__init__.py +1 -1
  5. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/cs_CZ/LC_MESSAGES/django.po +1 -1
  6. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/de/LC_MESSAGES/django.po +1 -1
  7. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/django.pot +2 -2
  8. {aa_sov_timer-4.0.1 → 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.1 → aa_sov_timer-4.0.2}/sovtimer/locale/fr_FR/LC_MESSAGES/django.po +4 -4
  11. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  12. {aa_sov_timer-4.0.1 → 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.1 → 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.1 → aa_sov_timer-4.0.2}/sovtimer/locale/ko_KR/LC_MESSAGES/django.po +6 -6
  17. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/nl_NL/LC_MESSAGES/django.po +1 -1
  18. {aa_sov_timer-4.0.1 → 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.1 → aa_sov_timer-4.0.2}/sovtimer/locale/ru/LC_MESSAGES/django.po +4 -4
  21. {aa_sov_timer-4.0.1 → 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.1 → 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.1 → aa_sov_timer-4.0.2}/sovtimer/locale/zh_Hans/LC_MESSAGES/django.po +4 -4
  26. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/providers.py +17 -8
  27. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/tests/test_providers.py +64 -1
  28. aa_sov_timer-4.0.1/sovtimer/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  29. aa_sov_timer-4.0.1/sovtimer/locale/ja/LC_MESSAGES/django.mo +0 -0
  30. aa_sov_timer-4.0.1/sovtimer/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  31. aa_sov_timer-4.0.1/sovtimer/locale/ru/LC_MESSAGES/django.mo +0 -0
  32. aa_sov_timer-4.0.1/sovtimer/locale/uk/LC_MESSAGES/django.mo +0 -0
  33. aa_sov_timer-4.0.1/sovtimer/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  34. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/.gitignore +0 -0
  35. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/LICENSE +0 -0
  36. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/app_settings.py +0 -0
  37. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/apps.py +0 -0
  38. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/auth_hooks.py +0 -0
  39. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/constants.py +0 -0
  40. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/.gitkeep +0 -0
  41. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  42. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/de/LC_MESSAGES/django.mo +0 -0
  43. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/es/LC_MESSAGES/django.mo +0 -0
  44. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  45. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  46. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/locale/sk/LC_MESSAGES/django.mo +0 -0
  47. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/management/commands/__init__.py +0 -0
  48. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/management/commands/sovtimer_load_initial_data.py +0 -0
  49. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0001_initial.py +0 -0
  50. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0001_initialize.py +0 -0
  51. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0002_aasovtimercampaigns_aasovtimerstructures.py +0 -0
  52. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0003_auto_20201113_1033.py +0 -0
  53. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0004_auto_20201113_1856.py +0 -0
  54. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0005_auto_20201114_0720.py +0 -0
  55. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0006_rename_models.py +0 -0
  56. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0007_cleanup_models.py +0 -0
  57. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0008_fix_campaign_attackers_score.py +0 -0
  58. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0009_alter_campaign_options_and_more.py +0 -0
  59. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/0010_alter_campaign_event_type.py +0 -0
  60. {aa_sov_timer-4.0.1 → 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.1 → aa_sov_timer-4.0.2}/sovtimer/migrations/__init__.py +0 -0
  62. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/models.py +0 -0
  63. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/css/aa-sov-timer.css +0 -0
  64. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/css/aa-sov-timer.min.css +0 -0
  65. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/css/aa-sov-timer.min.css.map +0 -0
  66. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/font/materialicons/v143/MaterialIcons-Regular.woff2 +0 -0
  67. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/font/materialicons/v143/README.md +0 -0
  68. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/images/zkillboard.png +0 -0
  69. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/js/aa-sov-timer.js +0 -0
  70. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/js/aa-sov-timer.min.js +0 -0
  71. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/static/sovtimer/js/aa-sov-timer.min.js.map +0 -0
  72. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/tasks.py +0 -0
  73. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/base.html +0 -0
  74. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/bundles/aa-sov-timer-css.html +0 -0
  75. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/bundles/aa-sov-timer-js.html +0 -0
  76. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/dashboard.html +0 -0
  77. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/partials/common/spinner.html +0 -0
  78. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/partials/dashboard/table.html +0 -0
  79. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/templates/sovtimer/partials/footer/app-translation-footer.html +0 -0
  80. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/tests/__init__.py +0 -0
  81. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/tests/test_app_settings.py +0 -0
  82. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/tests/test_auth_hooks.py +0 -0
  83. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/tests/test_models.py +0 -0
  84. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/tests/test_tasks.py +0 -0
  85. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/tests/test_user_agent.py +0 -0
  86. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/tests/test_views.py +0 -0
  87. {aa_sov_timer-4.0.1 → aa_sov_timer-4.0.2}/sovtimer/urls.py +0 -0
  88. {aa_sov_timer-4.0.1 → 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.1
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,9 +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
706
+ Requires-Dist: allianceauth>=4.12
707
+ Requires-Dist: django-esi>=8.3.1
708
+ Requires-Dist: django-eveonline-sde>=0.0.1b9
708
709
  Provides-Extra: tests-allianceauth-latest
709
710
  Requires-Dist: coverage; extra == 'tests-allianceauth-latest'
710
711
  Requires-Dist: django-webtest; extra == 'tests-allianceauth-latest'
@@ -725,6 +726,7 @@ Description-Content-Type: text/markdown
725
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/)
726
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)
727
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)
728
730
 
729
731
  [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/N4N8CL1BY)
730
732
 
@@ -802,7 +804,7 @@ Make sure you're in the virtual environment (venv) of your Alliance Auth install
802
804
  Then install the latest version:
803
805
 
804
806
  ```shell
805
- pip install aa-sov-timer==4.0.1
807
+ pip install aa-sov-timer==4.0.2
806
808
  ```
807
809
 
808
810
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings"></a>
@@ -812,7 +814,7 @@ Configure your AA settings (`local.py`) as follows:
812
814
  - Modify `INSTALLED_APPS` to include the following entries:
813
815
 
814
816
  ```python
815
- INSTALLED_APPS = [
817
+ INSTALLED_APPS += [
816
818
  # ...
817
819
  "eve_sde", # Only if not already added for another app
818
820
  "sovtimer",
@@ -834,11 +836,15 @@ Configure your AA settings (`local.py`) as follows:
834
836
  }
835
837
 
836
838
  if "eve_sde" in INSTALLED_APPS:
837
- # Run at 12:00 UTC each day
839
+ # Run at 12:00 each day
838
840
  CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
839
841
  "task": "eve_sde.tasks.check_for_sde_updates",
840
842
  "schedule": crontab(minute="0", hour="12"),
841
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
842
848
  ```
843
849
 
844
850
  #### Step 3: Finalizing the Installation<a name="step-3-finalizing-the-installation"></a>
@@ -876,7 +882,7 @@ Once you have completed all previous steps, restart your AA supervisor service t
876
882
  Add the app to your `conf/requirements.txt`:
877
883
 
878
884
  ```text
879
- aa-sov-timer==4.0.1
885
+ aa-sov-timer==4.0.2
880
886
  ```
881
887
 
882
888
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings-1"></a>
@@ -908,11 +914,15 @@ Configure your AA settings (`conf/local.py`) as follows:
908
914
  }
909
915
 
910
916
  if "eve_sde" in INSTALLED_APPS:
911
- # Run at 12:00 UTC each day
917
+ # Run at 12:00 each day
912
918
  CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
913
919
  "task": "eve_sde.tasks.check_for_sde_updates",
914
920
  "schedule": crontab(minute="0", hour="12"),
915
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
916
926
  ```
917
927
 
918
928
  #### Step 3: Build Auth and Restart Your Containers<a name="step-3-build-auth-and-restart-your-containers"></a>
@@ -969,7 +979,7 @@ Then run the following commands from your AA project directory (the one that
969
979
  contains `manage.py`).
970
980
 
971
981
  ```shell
972
- pip install aa-sov-timer==4.0.1
982
+ pip install aa-sov-timer==4.0.2
973
983
 
974
984
  python manage.py collectstatic
975
985
  python manage.py migrate
@@ -982,7 +992,7 @@ Finally, restart your AA supervisor service.
982
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.
983
993
 
984
994
  ```text
985
- aa-sov-timer==4.0.1
995
+ aa-sov-timer==4.0.2
986
996
  ```
987
997
 
988
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.1
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,7 +100,7 @@ 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
106
  "sovtimer",
@@ -121,11 +122,15 @@ Configure your AA settings (`local.py`) as follows:
121
122
  }
122
123
 
123
124
  if "eve_sde" in INSTALLED_APPS:
124
- # Run at 12:00 UTC each day
125
+ # Run at 12:00 each day
125
126
  CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
126
127
  "task": "eve_sde.tasks.check_for_sde_updates",
127
128
  "schedule": crontab(minute="0", hour="12"),
128
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
129
134
  ```
130
135
 
131
136
  #### Step 3: Finalizing the Installation<a name="step-3-finalizing-the-installation"></a>
@@ -163,7 +168,7 @@ Once you have completed all previous steps, restart your AA supervisor service t
163
168
  Add the app to your `conf/requirements.txt`:
164
169
 
165
170
  ```text
166
- aa-sov-timer==4.0.1
171
+ aa-sov-timer==4.0.2
167
172
  ```
168
173
 
169
174
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings-1"></a>
@@ -195,11 +200,15 @@ Configure your AA settings (`conf/local.py`) as follows:
195
200
  }
196
201
 
197
202
  if "eve_sde" in INSTALLED_APPS:
198
- # Run at 12:00 UTC each day
203
+ # Run at 12:00 each day
199
204
  CELERYBEAT_SCHEDULE["EVE SDE :: Check for SDE Updates"] = {
200
205
  "task": "eve_sde.tasks.check_for_sde_updates",
201
206
  "schedule": crontab(minute="0", hour="12"),
202
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
203
212
  ```
204
213
 
205
214
  #### Step 3: Build Auth and Restart Your Containers<a name="step-3-build-auth-and-restart-your-containers"></a>
@@ -256,7 +265,7 @@ Then run the following commands from your AA project directory (the one that
256
265
  contains `manage.py`).
257
266
 
258
267
  ```shell
259
- pip install aa-sov-timer==4.0.1
268
+ pip install aa-sov-timer==4.0.2
260
269
 
261
270
  python manage.py collectstatic
262
271
  python manage.py migrate
@@ -269,7 +278,7 @@ Finally, restart your AA supervisor service.
269
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.
270
279
 
271
280
  ```text
272
- aa-sov-timer==4.0.1
281
+ aa-sov-timer==4.0.2
273
282
  ```
274
283
 
275
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,9 +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",
43
+ "allianceauth>=4.12",
44
+ "django-esi>=8.3.1",
45
+ "django-eveonline-sde>=0.0.1b9",
45
46
  ]
46
47
  optional-dependencies.tests-allianceauth-latest = [
47
48
  "coverage",
@@ -57,12 +58,9 @@ urls.GitHub = "https://github.com/ppfeufer/aa-sov-timer"
57
58
  urls.Tracker = "https://github.com/ppfeufer/aa-sov-timer/issues"
58
59
  urls.Translation = "https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/"
59
60
 
60
- [tool.hatch.build]
61
- include = [
61
+ [tool.hatch]
62
+ build.include = [
62
63
  "/sovtimer",
63
64
  ]
64
-
65
- [tool.hatch.metadata]
66
- allow-direct-references = true
67
- [tool.hatch.version]
68
- 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.1"
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