11from abc import abstractmethod , ABC
22from datetime import date
33from http import HTTPStatus
4- from typing import Any , Final , Literal , NotRequired , Optional , Required , TypedDict
4+ from typing import Any , Final , Literal , NotRequired , Optional , override , Required , TypedDict , TypeGuard
55import re
66import warnings
77
1111
1212__all__ = ["LpdbError" , "LpdbWarning" , "LpdbSession" ]
1313
14+ type LpdbDataType = Literal ["broadcasters" , "company" , "datapoint" , "externalmedialink" , "match" , "placement" , "player" , "series" , "squadplayer" , "standingsentry" , "standingstable" , "team" , "tournament" , "transfer" ]
15+
1416
1517class LpdbResponse (TypedDict ):
1618 """
@@ -54,6 +56,23 @@ class AbstractLpdbSession(ABC):
5456
5557 BASE_URL : Final [str ] = "https://api.liquipedia.net/api/v3/"
5658
59+ __DATA_TYPES : Final [set [str ]] = {
60+ "broadcasters" ,
61+ "company" ,
62+ "datapoint" ,
63+ "externalmedialink" ,
64+ "match" ,
65+ "placement" ,
66+ "player" ,
67+ "series" ,
68+ "squadplayer" ,
69+ "standingsentry" ,
70+ "standingstable" ,
71+ "team" ,
72+ "tournament" ,
73+ "transfer" ,
74+ }
75+
5776 __api_key : str
5877
5978 def __init__ (self , api_key : str ):
@@ -66,6 +85,10 @@ def _get_header(self) -> dict[str, str]:
6685 "accept-encoding" : "gzip" ,
6786 }
6887
88+ @staticmethod
89+ def _validate_datatype_name (lpdb_datatype : str ) -> TypeGuard [LpdbDataType ]:
90+ return lpdb_datatype in AbstractLpdbSession .__DATA_TYPES
91+
6992 @staticmethod
7093 @abstractmethod
7194 def get_wikis () -> set [str ]:
@@ -179,7 +202,7 @@ def _parse_params(
179202 if isinstance (wiki , str ):
180203 parameters ["wiki" ] = wiki
181204 elif isinstance (wiki , list ):
182- parameters ["wiki" ] = "| " .join (wiki )
205+ parameters ["wiki" ] = ", " .join (wiki )
183206 else :
184207 raise TypeError ()
185208 parameters ["limit" ] = min (limit , 1000 )
@@ -239,7 +262,7 @@ def __handle_response(response: requests.Response) -> list[dict[str, Any]]:
239262
240263 def make_request (
241264 self ,
242- lpdb_datatype ,
265+ lpdb_datatype : str ,
243266 wiki : str | list [str ],
244267 limit : int = 20 ,
245268 offset : int = 0 ,
@@ -248,6 +271,8 @@ def make_request(
248271 order : Optional [list [tuple [str , Literal ["asc" , "desc" ]]]] = None ,
249272 groupby : Optional [list [tuple [str , Literal ["asc" , "desc" ]]]] = None ,
250273 ) -> list [dict [str , Any ]]:
274+ if not AbstractLpdbSession ._validate_datatype_name (lpdb_datatype ):
275+ raise ValueError (f'Invalid LPDB data type: "{ lpdb_datatype } "' )
251276 lpdb_response = requests .get (
252277 AbstractLpdbSession .BASE_URL + lpdb_datatype ,
253278 headers = self ._get_header (),
0 commit comments