django-esi 8.0.0a3__py3-none-any.whl → 8.0.0b1__py3-none-any.whl
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.
Potentially problematic release.
This version of django-esi might be problematic. Click here for more details.
- {django_esi-8.0.0a3.dist-info → django_esi-8.0.0b1.dist-info}/METADATA +3 -2
- {django_esi-8.0.0a3.dist-info → django_esi-8.0.0b1.dist-info}/RECORD +44 -33
- esi/__init__.py +2 -2
- esi/aiopenapi3/plugins.py +100 -3
- esi/clients.py +15 -6
- esi/helpers.py +37 -0
- esi/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
- esi/locale/cs_CZ/LC_MESSAGES/django.po +53 -0
- esi/locale/de/LC_MESSAGES/django.mo +0 -0
- esi/locale/de/LC_MESSAGES/django.po +10 -9
- esi/locale/en/LC_MESSAGES/django.mo +0 -0
- esi/locale/en/LC_MESSAGES/django.po +3 -3
- esi/locale/es/LC_MESSAGES/django.mo +0 -0
- esi/locale/es/LC_MESSAGES/django.po +12 -10
- esi/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
- esi/locale/fr_FR/LC_MESSAGES/django.po +18 -10
- esi/locale/it_IT/LC_MESSAGES/django.mo +0 -0
- esi/locale/it_IT/LC_MESSAGES/django.po +12 -10
- esi/locale/ja/LC_MESSAGES/django.mo +0 -0
- esi/locale/ja/LC_MESSAGES/django.po +10 -9
- esi/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
- esi/locale/ko_KR/LC_MESSAGES/django.po +10 -9
- esi/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
- esi/locale/nl_NL/LC_MESSAGES/django.po +53 -0
- esi/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
- esi/locale/pl_PL/LC_MESSAGES/django.po +53 -0
- esi/locale/ru/LC_MESSAGES/django.mo +0 -0
- esi/locale/ru/LC_MESSAGES/django.po +13 -10
- esi/locale/sk/LC_MESSAGES/django.mo +0 -0
- esi/locale/sk/LC_MESSAGES/django.po +55 -0
- esi/locale/uk/LC_MESSAGES/django.mo +0 -0
- esi/locale/uk/LC_MESSAGES/django.po +57 -0
- esi/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- esi/locale/zh_Hans/LC_MESSAGES/django.po +10 -9
- esi/management/commands/generate_esi_stubs.py +11 -31
- esi/models.py +1 -1
- esi/openapi_clients.py +207 -54
- esi/stubs.pyi +395 -395
- esi/tests/__init__.py +3 -3
- esi/tests/test_clients.py +77 -19
- esi/tests/test_openapi.json +264 -0
- esi/tests/test_openapi.py +402 -1
- {django_esi-8.0.0a3.dist-info → django_esi-8.0.0b1.dist-info}/WHEEL +0 -0
- {django_esi-8.0.0a3.dist-info → django_esi-8.0.0b1.dist-info}/licenses/LICENSE +0 -0
esi/tests/__init__.py
CHANGED
|
@@ -23,10 +23,10 @@ def _generate_token(
|
|
|
23
23
|
expires_in: int = 1200,
|
|
24
24
|
sso_version: int = 2
|
|
25
25
|
) -> dict:
|
|
26
|
-
|
|
26
|
+
import datetime as dt
|
|
27
27
|
|
|
28
28
|
if timestamp_dt is None:
|
|
29
|
-
timestamp_dt = datetime.
|
|
29
|
+
timestamp_dt = dt.datetime.now(dt.timezone.utc)
|
|
30
30
|
if scopes is None:
|
|
31
31
|
scopes = [
|
|
32
32
|
'esi-mail.read_mail.v1',
|
|
@@ -40,7 +40,7 @@ def _generate_token(
|
|
|
40
40
|
'timestamp': int(timestamp_dt.timestamp()),
|
|
41
41
|
'character_id': character_id,
|
|
42
42
|
'name': character_name,
|
|
43
|
-
'ExpiresOn': _dt_eveformat(timestamp_dt + timedelta(seconds=expires_in)),
|
|
43
|
+
'ExpiresOn': _dt_eveformat(timestamp_dt + dt.timedelta(seconds=expires_in)),
|
|
44
44
|
'scp': scopes,
|
|
45
45
|
'token_type': 'character',
|
|
46
46
|
'owner': character_owner_hash,
|
esi/tests/test_clients.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import datetime
|
|
2
2
|
import os
|
|
3
3
|
from unittest.mock import patch, Mock
|
|
4
4
|
import json
|
|
@@ -49,7 +49,7 @@ def _load_json_file(path):
|
|
|
49
49
|
|
|
50
50
|
class MockResultFuture:
|
|
51
51
|
def __init__(self):
|
|
52
|
-
dt = datetime.
|
|
52
|
+
dt = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(seconds=60)
|
|
53
53
|
self.headers = {"Expires": dt.strftime("%a, %d %b %Y %H:%M:%S %Z")}
|
|
54
54
|
self.status_code = 200
|
|
55
55
|
self.text = "dummy"
|
|
@@ -57,7 +57,7 @@ class MockResultFuture:
|
|
|
57
57
|
|
|
58
58
|
class MockResultPast:
|
|
59
59
|
def __init__(self):
|
|
60
|
-
dt = datetime.
|
|
60
|
+
dt = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(seconds=60)
|
|
61
61
|
self.headers = {"Expires": dt.strftime("%a, %d %b %Y %H:%M:%S %Z")}
|
|
62
62
|
|
|
63
63
|
|
|
@@ -198,7 +198,7 @@ class TestTokenAuthenticator(NoSocketsTestCase):
|
|
|
198
198
|
request.headers = dict()
|
|
199
199
|
request.params = dict()
|
|
200
200
|
|
|
201
|
-
self.token.created -= timedelta(121)
|
|
201
|
+
self.token.created -= datetime.timedelta(121)
|
|
202
202
|
|
|
203
203
|
x = TokenAuthenticator(token=self.token)
|
|
204
204
|
request2 = x.apply(request)
|
|
@@ -212,7 +212,7 @@ class TestTokenAuthenticator(NoSocketsTestCase):
|
|
|
212
212
|
request.headers = dict()
|
|
213
213
|
request.params = dict()
|
|
214
214
|
|
|
215
|
-
self.token.created -= timedelta(121)
|
|
215
|
+
self.token.created -= datetime.timedelta(121)
|
|
216
216
|
self.token.refresh_token = None
|
|
217
217
|
|
|
218
218
|
x = TokenAuthenticator(token=self.token)
|
|
@@ -733,7 +733,10 @@ class TestClientResult2(NoSocketsTestCase):
|
|
|
733
733
|
# then
|
|
734
734
|
self.assertTrue(requests_mocker.called)
|
|
735
735
|
request = requests_mocker.last_request
|
|
736
|
-
|
|
736
|
+
|
|
737
|
+
expected_title = 'DjangoEsi'
|
|
738
|
+
|
|
739
|
+
self.assertEqual(request._request.headers["User-Agent"], f"{expected_title}/1.0.0 (email@example.com; +https://gitlab.com/allianceauth/django-esi)")
|
|
737
740
|
|
|
738
741
|
def test_existing_headers(self, requests_mocker):
|
|
739
742
|
# given
|
|
@@ -743,7 +746,10 @@ class TestClientResult2(NoSocketsTestCase):
|
|
|
743
746
|
# then
|
|
744
747
|
self.assertTrue(requests_mocker.called)
|
|
745
748
|
request = requests_mocker.last_request
|
|
746
|
-
|
|
749
|
+
|
|
750
|
+
expected_title = 'DjangoEsi'
|
|
751
|
+
|
|
752
|
+
self.assertEqual(request._request.headers["User-Agent"], f"{expected_title}/1.0.0 (email@example.com; +https://gitlab.com/allianceauth/django-esi)")
|
|
747
753
|
|
|
748
754
|
|
|
749
755
|
class TestRequestsClientPlus(NoSocketsTestCase):
|
|
@@ -809,7 +815,9 @@ class TestEsiClientFactoryAppText(NoSocketsTestCase):
|
|
|
809
815
|
# when
|
|
810
816
|
operation = client.Status.get_status()
|
|
811
817
|
# then
|
|
812
|
-
|
|
818
|
+
expected_app_name = "MyApp"
|
|
819
|
+
expected_title = 'DjangoEsi'
|
|
820
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_title}/1.0.0 (None; +https://gitlab.com/allianceauth/django-esi)")
|
|
813
821
|
|
|
814
822
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
815
823
|
def test_defaults_email(self, requests_mocker) -> None:
|
|
@@ -821,7 +829,9 @@ class TestEsiClientFactoryAppText(NoSocketsTestCase):
|
|
|
821
829
|
# when
|
|
822
830
|
operation = client.Status.get_status()
|
|
823
831
|
# then
|
|
824
|
-
|
|
832
|
+
expected_app_name = "MyApp"
|
|
833
|
+
expected_title = 'DjangoEsi'
|
|
834
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_title}/1.0.0 (email@example.com; +https://gitlab.com/allianceauth/django-esi)")
|
|
825
835
|
|
|
826
836
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", None)
|
|
827
837
|
def test_app_text(self, requests_mocker) -> None:
|
|
@@ -835,7 +845,9 @@ class TestEsiClientFactoryAppText(NoSocketsTestCase):
|
|
|
835
845
|
# when
|
|
836
846
|
operation = client.Status.get_status()
|
|
837
847
|
# then
|
|
838
|
-
|
|
848
|
+
expected_app_name = "MyApp"
|
|
849
|
+
expected_title = 'DjangoEsi'
|
|
850
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"my-app v1.0.0 (None) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)",)
|
|
839
851
|
|
|
840
852
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
841
853
|
def test_app_text_with_email(self, requests_mocker):
|
|
@@ -848,7 +860,9 @@ class TestEsiClientFactoryAppText(NoSocketsTestCase):
|
|
|
848
860
|
# when
|
|
849
861
|
operation = client.Status.get_status()
|
|
850
862
|
# then
|
|
851
|
-
|
|
863
|
+
expected_app_name = "MyApp"
|
|
864
|
+
expected_title = 'DjangoEsi'
|
|
865
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"my-app v1.0.0 (email@example.com) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)",)
|
|
852
866
|
|
|
853
867
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
854
868
|
def test_ua_generator(self, requests_mocker):
|
|
@@ -859,7 +873,41 @@ class TestEsiClientFactoryAppText(NoSocketsTestCase):
|
|
|
859
873
|
# when
|
|
860
874
|
operation = client.Status.get_status()
|
|
861
875
|
# then
|
|
862
|
-
|
|
876
|
+
expected_app_name = "MyApp"
|
|
877
|
+
expected_title = 'DjangoEsi'
|
|
878
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_app_name}/1.0.0 (email@example.com) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)")
|
|
879
|
+
|
|
880
|
+
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
881
|
+
def test_ua_generator_for_appname_with_spaces(self, requests_mocker):
|
|
882
|
+
requests_mocker.register_uri("GET", url="https://esi.evetech.net/_latest/swagger.json", json=self.spec)
|
|
883
|
+
requests_mocker.register_uri("GET", url="https://esi.evetech.net/latest/swagger.json", json=self.spec)
|
|
884
|
+
requests_mocker.register_uri("GET", url="https://esi.evetech.net/v1/status/", json=self.status_response)
|
|
885
|
+
client = esi_client_factory(ua_appname="My App", ua_version="1.0.0")
|
|
886
|
+
|
|
887
|
+
# when
|
|
888
|
+
operation = client.Status.get_status()
|
|
889
|
+
|
|
890
|
+
# then
|
|
891
|
+
expected_app_name = "MyApp"
|
|
892
|
+
expected_title = 'DjangoEsi'
|
|
893
|
+
|
|
894
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_app_name}/1.0.0 (email@example.com) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)")
|
|
895
|
+
|
|
896
|
+
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
897
|
+
def test_ua_generator_for_appname_with_hyphens(self, requests_mocker):
|
|
898
|
+
requests_mocker.register_uri("GET", url="https://esi.evetech.net/_latest/swagger.json", json=self.spec)
|
|
899
|
+
requests_mocker.register_uri("GET", url="https://esi.evetech.net/latest/swagger.json", json=self.spec)
|
|
900
|
+
requests_mocker.register_uri("GET", url="https://esi.evetech.net/v1/status/", json=self.status_response)
|
|
901
|
+
client = esi_client_factory(ua_appname="My-App", ua_version="1.0.0")
|
|
902
|
+
|
|
903
|
+
# when
|
|
904
|
+
operation = client.Status.get_status()
|
|
905
|
+
|
|
906
|
+
# then
|
|
907
|
+
expected_app_name = "MyApp"
|
|
908
|
+
expected_title = 'DjangoEsi'
|
|
909
|
+
|
|
910
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_app_name}/1.0.0 (email@example.com) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)")
|
|
863
911
|
|
|
864
912
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
865
913
|
def test_ua_generator_with_url(self, requests_mocker):
|
|
@@ -870,7 +918,9 @@ class TestEsiClientFactoryAppText(NoSocketsTestCase):
|
|
|
870
918
|
# when
|
|
871
919
|
operation = client.Status.get_status()
|
|
872
920
|
# then
|
|
873
|
-
|
|
921
|
+
expected_app_name = "MyApp"
|
|
922
|
+
expected_title = 'DjangoEsi'
|
|
923
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_app_name}/1.0.0 (email@example.com; +https://example.com) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)")
|
|
874
924
|
|
|
875
925
|
@patch(MODULE_PATH + ".__title__", "Django-ESI")
|
|
876
926
|
@patch(MODULE_PATH + ".__version__", "1.0.0")
|
|
@@ -897,7 +947,8 @@ class TestEsiClientProviderAppText(NoSocketsTestCase):
|
|
|
897
947
|
# when
|
|
898
948
|
operation = client.Status.get_status()
|
|
899
949
|
# then
|
|
900
|
-
|
|
950
|
+
expected_title = 'DjangoEsi'
|
|
951
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_title}/1.0.0 (None; +https://gitlab.com/allianceauth/django-esi)")
|
|
901
952
|
|
|
902
953
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
903
954
|
def test_defaults_email(self, requests_mocker) -> None:
|
|
@@ -909,7 +960,8 @@ class TestEsiClientProviderAppText(NoSocketsTestCase):
|
|
|
909
960
|
# when
|
|
910
961
|
operation = client.Status.get_status()
|
|
911
962
|
# then
|
|
912
|
-
|
|
963
|
+
expected_title = 'DjangoEsi'
|
|
964
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_title}/1.0.0 (email@example.com; +https://gitlab.com/allianceauth/django-esi)")
|
|
913
965
|
|
|
914
966
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", None)
|
|
915
967
|
def test_app_text(self, requests_mocker) -> None:
|
|
@@ -923,7 +975,8 @@ class TestEsiClientProviderAppText(NoSocketsTestCase):
|
|
|
923
975
|
# when
|
|
924
976
|
operation = client.Status.get_status()
|
|
925
977
|
# then
|
|
926
|
-
|
|
978
|
+
expected_title = 'DjangoEsi'
|
|
979
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"my-app v1.0.0 (None) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)",)
|
|
927
980
|
|
|
928
981
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
929
982
|
def test_app_text_with_email(self, requests_mocker):
|
|
@@ -936,7 +989,8 @@ class TestEsiClientProviderAppText(NoSocketsTestCase):
|
|
|
936
989
|
# when
|
|
937
990
|
operation = client.Status.get_status()
|
|
938
991
|
# then
|
|
939
|
-
|
|
992
|
+
expected_title = 'DjangoEsi'
|
|
993
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"my-app v1.0.0 (email@example.com) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)",)
|
|
940
994
|
|
|
941
995
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
942
996
|
def test_ua_generator(self, requests_mocker):
|
|
@@ -947,7 +1001,9 @@ class TestEsiClientProviderAppText(NoSocketsTestCase):
|
|
|
947
1001
|
# when
|
|
948
1002
|
operation = client.Status.get_status()
|
|
949
1003
|
# then
|
|
950
|
-
|
|
1004
|
+
expected_app_name = "MyApp"
|
|
1005
|
+
expected_title = 'DjangoEsi'
|
|
1006
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_app_name}/1.0.0 (email@example.com) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)")
|
|
951
1007
|
|
|
952
1008
|
@patch(MODULE_PATH + ".app_settings.ESI_USER_CONTACT_EMAIL", "email@example.com")
|
|
953
1009
|
def test_ua_generator_with_url(self, requests_mocker):
|
|
@@ -958,4 +1014,6 @@ class TestEsiClientProviderAppText(NoSocketsTestCase):
|
|
|
958
1014
|
# when
|
|
959
1015
|
operation = client.Status.get_status()
|
|
960
1016
|
# then
|
|
961
|
-
|
|
1017
|
+
expected_app_name = "MyApp"
|
|
1018
|
+
expected_title = 'DjangoEsi'
|
|
1019
|
+
self.assertEqual(operation.future.request.headers["User-Agent"], f"{expected_app_name}/1.0.0 (email@example.com; +https://example.com) {expected_title}/1.0.0 (+https://gitlab.com/allianceauth/django-esi)")
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
{
|
|
2
|
+
"components": {
|
|
3
|
+
"headers": {
|
|
4
|
+
"CacheControl": {
|
|
5
|
+
"description": "Directives for caching mechanisms. It controls how the response can be cached, by whom, and for how long.",
|
|
6
|
+
"schema": { "type": "string" }
|
|
7
|
+
},
|
|
8
|
+
"ContentLanguage": {
|
|
9
|
+
"description": "The language used in the response.",
|
|
10
|
+
"schema": {
|
|
11
|
+
"enum": ["en", "de", "fr", "ja", "ru", "zh", "ko", "es"],
|
|
12
|
+
"type": "string"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"ETag": {
|
|
16
|
+
"description": "The ETag value of the response body. Use this with If-None-Match to check whether the resource has changed.",
|
|
17
|
+
"schema": { "type": "string" }
|
|
18
|
+
},
|
|
19
|
+
"LastModified": {
|
|
20
|
+
"description": "The last modified date of the response. Use this with If-Modified-Since to check whether the resource has changed.",
|
|
21
|
+
"schema": { "type": "string" }
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"parameters": {
|
|
25
|
+
"AcceptLanguage": {
|
|
26
|
+
"description": "The language to use for the response.",
|
|
27
|
+
"in": "header",
|
|
28
|
+
"name": "Accept-Language",
|
|
29
|
+
"schema": {
|
|
30
|
+
"default": "en",
|
|
31
|
+
"enum": ["en", "de", "fr", "ja", "ru", "zh", "ko", "es"],
|
|
32
|
+
"type": "string"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"CompatibilityDate": {
|
|
36
|
+
"description": "The compatibility date for the request.",
|
|
37
|
+
"in": "header",
|
|
38
|
+
"name": "X-Compatibility-Date",
|
|
39
|
+
"required": true,
|
|
40
|
+
"schema": { "enum": ["2025-08-26"], "format": "date", "type": "string" }
|
|
41
|
+
},
|
|
42
|
+
"IfModifiedSince": {
|
|
43
|
+
"description": "The date the resource was last modified. A 304 will be returned if the resource has not been modified since this date.",
|
|
44
|
+
"in": "header",
|
|
45
|
+
"name": "If-Modified-Since",
|
|
46
|
+
"schema": { "type": "string" }
|
|
47
|
+
},
|
|
48
|
+
"IfNoneMatch": {
|
|
49
|
+
"description": "The ETag of the previous request. A 304 will be returned if this matches the current ETag.",
|
|
50
|
+
"in": "header",
|
|
51
|
+
"name": "If-None-Match",
|
|
52
|
+
"schema": { "type": "string" }
|
|
53
|
+
},
|
|
54
|
+
"Tenant": {
|
|
55
|
+
"description": "The tenant ID for the request.",
|
|
56
|
+
"example": "",
|
|
57
|
+
"in": "header",
|
|
58
|
+
"name": "X-Tenant",
|
|
59
|
+
"schema": { "default": "tranquility", "type": "string" }
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"schemas": {
|
|
63
|
+
"StatusGet": {
|
|
64
|
+
"properties": {
|
|
65
|
+
"players": {
|
|
66
|
+
"description": "Current online player count",
|
|
67
|
+
"type": "integer"
|
|
68
|
+
},
|
|
69
|
+
"server_version": {
|
|
70
|
+
"description": "Running version as string",
|
|
71
|
+
"type": "string"
|
|
72
|
+
},
|
|
73
|
+
"start_time": {
|
|
74
|
+
"description": "Server start timestamp",
|
|
75
|
+
"format": "date-time",
|
|
76
|
+
"type": "string"
|
|
77
|
+
},
|
|
78
|
+
"vip": {
|
|
79
|
+
"description": "If the server is in VIP mode",
|
|
80
|
+
"type": "boolean"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"required": ["start_time", "players", "server_version"],
|
|
84
|
+
"type": "object"
|
|
85
|
+
},
|
|
86
|
+
"Error": {
|
|
87
|
+
"additionalProperties": false,
|
|
88
|
+
"properties": {
|
|
89
|
+
"details": {
|
|
90
|
+
"description": "List of individual error details.",
|
|
91
|
+
"items": {
|
|
92
|
+
"$ref": "#/components/schemas/ErrorDetail"
|
|
93
|
+
},
|
|
94
|
+
"type": [
|
|
95
|
+
"array",
|
|
96
|
+
"null"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
"error": {
|
|
100
|
+
"description": "Error message.",
|
|
101
|
+
"type": "string"
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"required": [
|
|
105
|
+
"error"
|
|
106
|
+
],
|
|
107
|
+
"type": "object"
|
|
108
|
+
},
|
|
109
|
+
"ErrorDetail": {
|
|
110
|
+
"additionalProperties": false,
|
|
111
|
+
"properties": {
|
|
112
|
+
"location": {
|
|
113
|
+
"description": "Where the error occurred, e.g. 'body.items[3].tags' or 'path.thing-id'",
|
|
114
|
+
"type": "string"
|
|
115
|
+
},
|
|
116
|
+
"message": {
|
|
117
|
+
"description": "Error message text",
|
|
118
|
+
"type": "string"
|
|
119
|
+
},
|
|
120
|
+
"value": {
|
|
121
|
+
"description": "The value at the given location"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"type": "object"
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"securitySchemes": {
|
|
128
|
+
"OAuth2": {
|
|
129
|
+
"flows": {
|
|
130
|
+
"authorizationCode": {
|
|
131
|
+
"authorizationUrl": "https://login.eveonline.com/v2/oauth/authorize",
|
|
132
|
+
"scopes": {
|
|
133
|
+
"esi-alliances.read_contacts.v1": "esi-alliances.read_contacts.v1",
|
|
134
|
+
"esi-assets.read_assets.v1": "esi-assets.read_assets.v1",
|
|
135
|
+
"esi-assets.read_corporation_assets.v1": "esi-assets.read_corporation_assets.v1",
|
|
136
|
+
"esi-calendar.read_calendar_events.v1": "esi-calendar.read_calendar_events.v1",
|
|
137
|
+
"esi-calendar.respond_calendar_events.v1": "esi-calendar.respond_calendar_events.v1",
|
|
138
|
+
"esi-characters.read_agents_research.v1": "esi-characters.read_agents_research.v1",
|
|
139
|
+
"esi-characters.read_blueprints.v1": "esi-characters.read_blueprints.v1",
|
|
140
|
+
"esi-characters.read_contacts.v1": "esi-characters.read_contacts.v1",
|
|
141
|
+
"esi-characters.read_corporation_roles.v1": "esi-characters.read_corporation_roles.v1",
|
|
142
|
+
"esi-characters.read_fatigue.v1": "esi-characters.read_fatigue.v1",
|
|
143
|
+
"esi-characters.read_fw_stats.v1": "esi-characters.read_fw_stats.v1",
|
|
144
|
+
"esi-characters.read_loyalty.v1": "esi-characters.read_loyalty.v1",
|
|
145
|
+
"esi-characters.read_medals.v1": "esi-characters.read_medals.v1",
|
|
146
|
+
"esi-characters.read_notifications.v1": "esi-characters.read_notifications.v1",
|
|
147
|
+
"esi-characters.read_standings.v1": "esi-characters.read_standings.v1",
|
|
148
|
+
"esi-characters.read_titles.v1": "esi-characters.read_titles.v1",
|
|
149
|
+
"esi-characters.write_contacts.v1": "esi-characters.write_contacts.v1",
|
|
150
|
+
"esi-clones.read_clones.v1": "esi-clones.read_clones.v1",
|
|
151
|
+
"esi-clones.read_implants.v1": "esi-clones.read_implants.v1",
|
|
152
|
+
"esi-contracts.read_character_contracts.v1": "esi-contracts.read_character_contracts.v1",
|
|
153
|
+
"esi-contracts.read_corporation_contracts.v1": "esi-contracts.read_corporation_contracts.v1",
|
|
154
|
+
"esi-corporations.read_blueprints.v1": "esi-corporations.read_blueprints.v1",
|
|
155
|
+
"esi-corporations.read_contacts.v1": "esi-corporations.read_contacts.v1",
|
|
156
|
+
"esi-corporations.read_container_logs.v1": "esi-corporations.read_container_logs.v1",
|
|
157
|
+
"esi-corporations.read_corporation_membership.v1": "esi-corporations.read_corporation_membership.v1",
|
|
158
|
+
"esi-corporations.read_divisions.v1": "esi-corporations.read_divisions.v1",
|
|
159
|
+
"esi-corporations.read_facilities.v1": "esi-corporations.read_facilities.v1",
|
|
160
|
+
"esi-corporations.read_fw_stats.v1": "esi-corporations.read_fw_stats.v1",
|
|
161
|
+
"esi-corporations.read_medals.v1": "esi-corporations.read_medals.v1",
|
|
162
|
+
"esi-corporations.read_projects.v1": "esi-corporations.read_projects.v1",
|
|
163
|
+
"esi-corporations.read_standings.v1": "esi-corporations.read_standings.v1",
|
|
164
|
+
"esi-corporations.read_starbases.v1": "esi-corporations.read_starbases.v1",
|
|
165
|
+
"esi-corporations.read_structures.v1": "esi-corporations.read_structures.v1",
|
|
166
|
+
"esi-corporations.read_titles.v1": "esi-corporations.read_titles.v1",
|
|
167
|
+
"esi-corporations.track_members.v1": "esi-corporations.track_members.v1",
|
|
168
|
+
"esi-fittings.read_fittings.v1": "esi-fittings.read_fittings.v1",
|
|
169
|
+
"esi-fittings.write_fittings.v1": "esi-fittings.write_fittings.v1",
|
|
170
|
+
"esi-fleets.read_fleet.v1": "esi-fleets.read_fleet.v1",
|
|
171
|
+
"esi-fleets.write_fleet.v1": "esi-fleets.write_fleet.v1",
|
|
172
|
+
"esi-industry.read_character_jobs.v1": "esi-industry.read_character_jobs.v1",
|
|
173
|
+
"esi-industry.read_character_mining.v1": "esi-industry.read_character_mining.v1",
|
|
174
|
+
"esi-industry.read_corporation_jobs.v1": "esi-industry.read_corporation_jobs.v1",
|
|
175
|
+
"esi-industry.read_corporation_mining.v1": "esi-industry.read_corporation_mining.v1",
|
|
176
|
+
"esi-killmails.read_corporation_killmails.v1": "esi-killmails.read_corporation_killmails.v1",
|
|
177
|
+
"esi-killmails.read_killmails.v1": "esi-killmails.read_killmails.v1",
|
|
178
|
+
"esi-location.read_location.v1": "esi-location.read_location.v1",
|
|
179
|
+
"esi-location.read_online.v1": "esi-location.read_online.v1",
|
|
180
|
+
"esi-location.read_ship_type.v1": "esi-location.read_ship_type.v1",
|
|
181
|
+
"esi-mail.organize_mail.v1": "esi-mail.organize_mail.v1",
|
|
182
|
+
"esi-mail.read_mail.v1": "esi-mail.read_mail.v1",
|
|
183
|
+
"esi-mail.send_mail.v1": "esi-mail.send_mail.v1",
|
|
184
|
+
"esi-markets.read_character_orders.v1": "esi-markets.read_character_orders.v1",
|
|
185
|
+
"esi-markets.read_corporation_orders.v1": "esi-markets.read_corporation_orders.v1",
|
|
186
|
+
"esi-markets.structure_markets.v1": "esi-markets.structure_markets.v1",
|
|
187
|
+
"esi-planets.manage_planets.v1": "esi-planets.manage_planets.v1",
|
|
188
|
+
"esi-planets.read_customs_offices.v1": "esi-planets.read_customs_offices.v1",
|
|
189
|
+
"esi-search.search_structures.v1": "esi-search.search_structures.v1",
|
|
190
|
+
"esi-skills.read_skillqueue.v1": "esi-skills.read_skillqueue.v1",
|
|
191
|
+
"esi-skills.read_skills.v1": "esi-skills.read_skills.v1",
|
|
192
|
+
"esi-ui.open_window.v1": "esi-ui.open_window.v1",
|
|
193
|
+
"esi-ui.write_waypoint.v1": "esi-ui.write_waypoint.v1",
|
|
194
|
+
"esi-universe.read_structures.v1": "esi-universe.read_structures.v1",
|
|
195
|
+
"esi-wallet.read_character_wallet.v1": "esi-wallet.read_character_wallet.v1",
|
|
196
|
+
"esi-wallet.read_corporation_wallets.v1": "esi-wallet.read_corporation_wallets.v1"
|
|
197
|
+
},
|
|
198
|
+
"tokenUrl": "https://login.eveonline.com/v2/oauth/token"
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
"type": "oauth2"
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"info": {
|
|
206
|
+
"contact": {
|
|
207
|
+
"name": "ESI Support",
|
|
208
|
+
"url": "https://developers.eveonline.com/docs/support/"
|
|
209
|
+
},
|
|
210
|
+
"license": {
|
|
211
|
+
"name": "EVE Developer License",
|
|
212
|
+
"url": "https://developers.eveonline.com/license-agreement"
|
|
213
|
+
},
|
|
214
|
+
"termsOfService": "https://support.eveonline.com/hc/en-us/articles/8414770561948-EVE-Online-Terms-of-Service",
|
|
215
|
+
"title": "EVE Stable Infrastructure (ESI) - tranquility",
|
|
216
|
+
"version": "2025-08-26"
|
|
217
|
+
},
|
|
218
|
+
"openapi": "3.1.0",
|
|
219
|
+
"paths": {
|
|
220
|
+
"/status": {
|
|
221
|
+
"get": {
|
|
222
|
+
"description": "EVE Server status",
|
|
223
|
+
"operationId": "GetStatus",
|
|
224
|
+
"parameters": [
|
|
225
|
+
{ "$ref": "#/components/parameters/AcceptLanguage" },
|
|
226
|
+
{ "$ref": "#/components/parameters/IfNoneMatch" },
|
|
227
|
+
{ "$ref": "#/components/parameters/CompatibilityDate" },
|
|
228
|
+
{ "$ref": "#/components/parameters/Tenant" }
|
|
229
|
+
],
|
|
230
|
+
"responses": {
|
|
231
|
+
"200": {
|
|
232
|
+
"content": {
|
|
233
|
+
"application/json": {
|
|
234
|
+
"schema": { "$ref": "#/components/schemas/StatusGet" }
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
"description": "OK",
|
|
238
|
+
"headers": {
|
|
239
|
+
"Cache-Control": { "$ref": "#/components/headers/CacheControl" },
|
|
240
|
+
"ETag": { "$ref": "#/components/headers/ETag" },
|
|
241
|
+
"Last-Modified": { "$ref": "#/components/headers/LastModified" }
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
"default": {
|
|
245
|
+
"content": {
|
|
246
|
+
"application/json": {
|
|
247
|
+
"schema": { "$ref": "#/components/schemas/Error" }
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"description": "Error"
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
"summary": "Retrieve the uptime and player counts",
|
|
254
|
+
"tags": ["Status"],
|
|
255
|
+
"x-cache-age": 30,
|
|
256
|
+
"x-compatibility-date": "2020-01-01"
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"servers": [{ "url": "https://esi.evetech.net" }],
|
|
261
|
+
"tags": [
|
|
262
|
+
{ "name": "Status" }
|
|
263
|
+
]
|
|
264
|
+
}
|