Switch to using an enum for API ID constants.
This commit is contained in:
parent
96dd9a865e
commit
b92cd4f579
@ -286,10 +286,17 @@ def lookup(protoversion: str, requestgame: str, requestversion: str) -> Dict[str
|
||||
# Don't support this version!
|
||||
abort(404)
|
||||
|
||||
idtype = requestdata['type']
|
||||
ids = requestdata['ids']
|
||||
if idtype not in [APIConstants.ID_TYPE_CARD, APIConstants.ID_TYPE_SONG, APIConstants.ID_TYPE_INSTANCE, APIConstants.ID_TYPE_SERVER]:
|
||||
# Attempt to coerce ID type. If we fail, provide the correct failure message.
|
||||
idtype = None
|
||||
try:
|
||||
idtype = APIConstants(requestdata['type'])
|
||||
except ValueError:
|
||||
pass
|
||||
if idtype is None:
|
||||
raise APIException('Invalid ID type provided!')
|
||||
|
||||
# Validate the provided IDs given the ID type above.
|
||||
ids = requestdata['ids']
|
||||
if idtype == APIConstants.ID_TYPE_CARD and len(ids) == 0:
|
||||
raise APIException('Invalid number of IDs given!')
|
||||
if idtype == APIConstants.ID_TYPE_SONG and len(ids) not in [1, 2]:
|
||||
|
@ -1,7 +1,7 @@
|
||||
from typing import List, Any, Dict
|
||||
|
||||
from bemani.api.exceptions import APIException
|
||||
from bemani.common import GameConstants
|
||||
from bemani.common import APIConstants, GameConstants
|
||||
from bemani.data import Data
|
||||
|
||||
|
||||
@ -20,5 +20,5 @@ class BaseObject:
|
||||
self.version = version
|
||||
self.omnimix = omnimix
|
||||
|
||||
def fetch_v1(self, idtype: str, ids: List[str], params: Dict[str, Any]) -> Any:
|
||||
def fetch_v1(self, idtype: APIConstants, ids: List[str], params: Dict[str, Any]) -> Any:
|
||||
raise APIException('Object fetch not supported for this version!')
|
||||
|
@ -192,7 +192,7 @@ class CatalogObject(BaseObject):
|
||||
else:
|
||||
return self.version
|
||||
|
||||
def fetch_v1(self, idtype: str, ids: List[str], params: Dict[str, Any]) -> Dict[str, List[Dict[str, Any]]]:
|
||||
def fetch_v1(self, idtype: APIConstants, ids: List[str], params: Dict[str, Any]) -> Dict[str, List[Dict[str, Any]]]:
|
||||
# Verify IDs
|
||||
if idtype != APIConstants.ID_TYPE_SERVER:
|
||||
raise APIException(
|
||||
|
@ -73,7 +73,7 @@ class ProfileObject(BaseObject):
|
||||
|
||||
return base
|
||||
|
||||
def fetch_v1(self, idtype: str, ids: List[str], params: Dict[str, Any]) -> List[Dict[str, Any]]:
|
||||
def fetch_v1(self, idtype: APIConstants, ids: List[str], params: Dict[str, Any]) -> List[Dict[str, Any]]:
|
||||
# Fetch the profiles
|
||||
profiles: List[Tuple[UserID, ValidatedDict]] = []
|
||||
if idtype == APIConstants.ID_TYPE_SERVER:
|
||||
|
@ -230,7 +230,7 @@ class RecordsObject(BaseObject):
|
||||
else:
|
||||
return self.version
|
||||
|
||||
def fetch_v1(self, idtype: str, ids: List[str], params: Dict[str, Any]) -> List[Dict[str, Any]]:
|
||||
def fetch_v1(self, idtype: APIConstants, ids: List[str], params: Dict[str, Any]) -> List[Dict[str, Any]]:
|
||||
since = params.get('since')
|
||||
until = params.get('until')
|
||||
|
||||
|
@ -180,7 +180,7 @@ class StatisticsObject(BaseObject):
|
||||
|
||||
return retval
|
||||
|
||||
def fetch_v1(self, idtype: str, ids: List[str], params: Dict[str, Any]) -> List[Dict[str, Any]]:
|
||||
def fetch_v1(self, idtype: APIConstants, ids: List[str], params: Dict[str, Any]) -> List[Dict[str, Any]]:
|
||||
retval: List[Dict[str, Any]] = []
|
||||
|
||||
# Fetch the attempts
|
||||
|
@ -132,11 +132,9 @@ class VersionConstants:
|
||||
SDVX_HEAVENLY_HAVEN: Final[int] = 4
|
||||
|
||||
|
||||
class APIConstants:
|
||||
class APIConstants(Enum):
|
||||
"""
|
||||
The four types of IDs found in a BEMAPI request or response.
|
||||
|
||||
TODO: These should be an enum.
|
||||
"""
|
||||
ID_TYPE_SERVER: Final[str] = 'server'
|
||||
ID_TYPE_CARD: Final[str] = 'card'
|
||||
|
@ -2,7 +2,7 @@ import json
|
||||
import requests
|
||||
from typing import Tuple, Dict, List, Any, Optional
|
||||
|
||||
from bemani.common import GameConstants, VersionConstants, DBConstants, ValidatedDict
|
||||
from bemani.common import APIConstants, GameConstants, VersionConstants, DBConstants, ValidatedDict
|
||||
|
||||
|
||||
class APIException(Exception):
|
||||
@ -194,7 +194,7 @@ class APIClient:
|
||||
'versions': resp['versions'],
|
||||
})
|
||||
|
||||
def get_profiles(self, game: GameConstants, version: int, idtype: str, ids: List[str]) -> List[Dict[str, Any]]:
|
||||
def get_profiles(self, game: GameConstants, version: int, idtype: APIConstants, ids: List[str]) -> List[Dict[str, Any]]:
|
||||
# Allow remote servers to be disabled
|
||||
if not self.allow_scores:
|
||||
return []
|
||||
@ -205,7 +205,7 @@ class APIClient:
|
||||
f'{self.API_VERSION}/{servergame}/{serverversion}',
|
||||
{
|
||||
'ids': ids,
|
||||
'type': idtype,
|
||||
'type': idtype.value,
|
||||
'objects': ['profile'],
|
||||
},
|
||||
)
|
||||
@ -218,7 +218,7 @@ class APIClient:
|
||||
self,
|
||||
game: GameConstants,
|
||||
version: int,
|
||||
idtype: str,
|
||||
idtype: APIConstants,
|
||||
ids: List[str],
|
||||
since: Optional[int]=None,
|
||||
until: Optional[int]=None,
|
||||
@ -231,7 +231,7 @@ class APIClient:
|
||||
servergame, serverversion = self.__translate(game, version)
|
||||
data: Dict[str, Any] = {
|
||||
'ids': ids,
|
||||
'type': idtype,
|
||||
'type': idtype.value,
|
||||
'objects': ['records'],
|
||||
}
|
||||
if since is not None:
|
||||
@ -247,7 +247,7 @@ class APIClient:
|
||||
# Couldn't talk to server, assume empty records
|
||||
return []
|
||||
|
||||
def get_statistics(self, game: GameConstants, version: int, idtype: str, ids: List[str]) -> List[Dict[str, Any]]:
|
||||
def get_statistics(self, game: GameConstants, version: int, idtype: APIConstants, ids: List[str]) -> List[Dict[str, Any]]:
|
||||
# Allow remote servers to be disabled
|
||||
if not self.allow_stats:
|
||||
return []
|
||||
@ -258,7 +258,7 @@ class APIClient:
|
||||
f'{self.API_VERSION}/{servergame}/{serverversion}',
|
||||
{
|
||||
'ids': ids,
|
||||
'type': idtype,
|
||||
'type': idtype.value,
|
||||
'objects': ['statistics'],
|
||||
},
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user