mirror of
https://github.com/EDCD/EDMarketConnector.git
synced 2025-06-07 10:53:26 +03:00
Added utility sparse list index function
Frontier sometimes uses dicts as sparse lists, this should work to index them either way. Doctests included do pass.
This commit is contained in:
parent
98c946fa31
commit
a3e0823701
32
companion.py
32
companion.py
@ -22,7 +22,7 @@ from email.utils import parsedate
|
|||||||
# TODO: see https://github.com/EDCD/EDMarketConnector/issues/569
|
# TODO: see https://github.com/EDCD/EDMarketConnector/issues/569
|
||||||
from http.cookiejar import LWPCookieJar # noqa: F401 - No longer needed but retained in case plugins use it
|
from http.cookiejar import LWPCookieJar # noqa: F401 - No longer needed but retained in case plugins use it
|
||||||
from os.path import join
|
from os.path import join
|
||||||
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
from typing import Mapping, OrderedDict, TYPE_CHECKING, Any, Dict, List, Optional, TypeVar, Union
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
@ -848,5 +848,35 @@ def ship(data: CAPIData) -> CAPIData:
|
|||||||
return filter_ship(data['ship'])
|
return filter_ship(data['ship'])
|
||||||
|
|
||||||
|
|
||||||
|
V = TypeVar('V')
|
||||||
|
|
||||||
|
|
||||||
|
def index_possibly_sparse_list(data: Union[Mapping[str, V], List[V]], key: int) -> V:
|
||||||
|
"""
|
||||||
|
Index into a "list" that may or may not be sparseified into a dict.
|
||||||
|
|
||||||
|
:param data: List or Dict to index
|
||||||
|
:param key: Key to use to index
|
||||||
|
:raises ValueError: When data is of an unexpected type
|
||||||
|
:return: The value at the key
|
||||||
|
|
||||||
|
>>> data = {"1": "test"}
|
||||||
|
>>> index_possibly_sparse_list(data, 1)
|
||||||
|
'test'
|
||||||
|
|
||||||
|
>>> data = ["test_list"]
|
||||||
|
>>> index_possibly_sparse_list(data, 0)
|
||||||
|
'test_list'
|
||||||
|
"""
|
||||||
|
if isinstance(data, list):
|
||||||
|
return data[key]
|
||||||
|
|
||||||
|
elif isinstance(data, (dict, OrderedDict)):
|
||||||
|
return data[str(key)]
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise ValueError(f'Unexpected data type {type(data)}')
|
||||||
|
|
||||||
|
|
||||||
# singleton
|
# singleton
|
||||||
session = Session()
|
session = Session()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user