Refactor + add tests for igdb handler

This commit is contained in:
Georges-Antoine Assi
2023-08-01 00:16:51 -04:00
parent 9ce95242a6
commit ebe557c6f0
13 changed files with 4762 additions and 112 deletions

View File

@@ -21,7 +21,7 @@ async def search_rom_igdb(
if search_term:
log.info(f"Searching by {search_by}: {search_term}")
if search_by == "ID":
matched_roms = igdbh.get_matched_rom_by_id(search_term)
matched_roms = igdbh.get_matched_roms_by_id(search_term)
elif search_by == "Name":
matched_roms = igdbh.get_matched_roms_by_name(search_term, rom["p_igdb_id"])
else:
@@ -30,9 +30,7 @@ async def search_rom_igdb(
f":video_game: {rom['p_slug']}: {COLORS['orange']}{rom['file_name']}{COLORS['reset']}"
)
)
matched_roms = igdbh.get_matched_roms(
rom["file_name"], rom["p_igdb_id"], rom["p_slug"]
)
matched_roms = igdbh.get_matched_roms(rom["file_name"], rom["p_igdb_id"])
log.info("Results:")

View File

@@ -11,12 +11,11 @@ from logger.logger import log
class IGDBHandler:
def __init__(self) -> None:
base_url: str = "https://api.igdb.com/v4"
self.platform_url: str = f"{base_url}/platforms/"
self.games_url: str = f"{base_url}/games/"
self.covers_url: str = f"{base_url}/covers/"
self.screenshots_url: str = f"{base_url}/screenshots/"
self.twitch_auth: TwitchAuth = TwitchAuth()
self.platform_url = "https://api.igdb.com/v4/platforms/"
self.games_url = "https://api.igdb.com/v4/games/"
self.covers_url = "https://api.igdb.com/v4/covers/"
self.screenshots_url = "https://api.igdb.com/v4/screenshots/"
self.twitch_auth = TwitchAuth()
self.headers = {
"Client-ID": self.twitch_auth.client_id,
"Authorization": f"Bearer {self.twitch_auth.get_oauth_token()}",
@@ -41,35 +40,38 @@ class IGDBHandler:
return requests.post(
self.games_url,
headers=self.headers,
data=f'search "{search_term}"; \
fields id, slug, name, summary, screenshots; \
where platforms=[{p_igdb_id}] {category_filter};',
data=f"""
search "{search_term}";
fields id, slug, name, summary, screenshots;
where platforms=[{p_igdb_id}] {category_filter};
""",
).json()[0]
except IndexError:
return {}
@staticmethod
def _normalize_cover_url(url: str) -> str:
url = f"https:{url.replace('https:', '')}"
return url
return f"https:{url.replace('https:', '')}"
def _search_cover(self, rom_id: str) -> str:
try:
res: dict = requests.post(
res = requests.post(
self.covers_url,
headers=self.headers,
data=f"fields url; where game={rom_id};",
).json()[0]
except IndexError:
return ""
return self._normalize_cover_url(res["url"]) if "url" in res.keys() else ""
def _search_screenshots(self, rom_id: str) -> list:
res: dict = requests.post(
res = requests.post(
self.screenshots_url,
headers=self.headers,
data=f"fields url; where game={rom_id}; limit 5;",
).json()
return [
self._normalize_cover_url(r["url"]).replace("t_thumb", "t_original")
for r in res
@@ -77,39 +79,42 @@ class IGDBHandler:
]
@check_twitch_token
def get_platform(self, slug: str) -> tuple:
igdb_id: str = ""
name: str = slug
def get_platform(self, slug: str):
try:
res: dict = requests.post(
res = requests.post(
self.platform_url,
headers=self.headers,
data=f'fields id, name; where slug="{slug}";',
).json()[0]
igdb_id = res["id"]
name = res["name"]
return {
"igdb_id": res["id"],
"name": res["name"],
"slug": slug,
}
except IndexError:
log.warning(f"{slug} not found in IGDB")
return {"igdb_id": igdb_id, "name": name, "slug": slug, "logo_path": ""}
return {}
@check_twitch_token
def get_rom(self, file_name: str, p_igdb_id: int) -> dict:
search_term: str = uc(get_search_term(file_name))
def get_rom(self, file_name: str, p_igdb_id: int):
search_term = uc(get_search_term(file_name))
res = (
self._search_rom(search_term, p_igdb_id, 0)
or self._search_rom(search_term, p_igdb_id, 10)
or self._search_rom(search_term, p_igdb_id)
)
r_igdb_id = res["id"] if "id" in res.keys() else ""
r_slug = res["slug"] if "slug" in res.keys() else ""
r_name = res["name"] if "name" in res.keys() else ""
summary = res["summary"] if "summary" in res.keys() else ""
r_igdb_id = res.get("id", "")
r_slug = res.get("slug", "")
r_name = res.get("name", search_term)
summary = res.get("summary", "")
if not r_name:
r_name = search_term
if not r_igdb_id:
log.warning(f"{r_name} not found in IGDB")
return {}
return {
"r_igdb_id": r_igdb_id,
"r_slug": r_slug,
@@ -120,100 +125,107 @@ class IGDBHandler:
}
@check_twitch_token
def get_rom_by_id(self, r_igdb_id: str) -> list:
res: list = requests.post(
def get_rom_by_id(self, r_igdb_id: str):
res = requests.post(
self.games_url,
headers=self.headers,
data=f"fields slug, name, summary; where id={r_igdb_id};",
)
if res.status_code == 200:
rom: dict = res.json()[0]
r_slug = rom["slug"] if "slug" in rom.keys() else ""
r_name = rom["name"] if "name" in rom.keys() else ""
summary = rom["summary"] if "summary" in rom.keys() else ""
return [
{
"r_igdb_id": r_igdb_id,
"r_slug": r_slug,
"r_name": r_name,
"summary": summary,
"url_cover": self._search_cover(r_igdb_id),
"url_screenshots": self._search_screenshots(r_igdb_id),
}
]
else:
return []
try:
rom = res.json()[0]
return {
"r_igdb_id": r_igdb_id,
"r_slug": rom.get("slug", ""),
"r_name": rom.get("name", ""),
"summary": rom.get("summary", ""),
"url_cover": self._search_cover(r_igdb_id),
"url_screenshots": self._search_screenshots(r_igdb_id),
}
except IndexError:
return {}
@check_twitch_token
def get_matched_rom_by_id(self, igdb_id: str) -> list:
matched_roms: list = self.get_rom_by_id(igdb_id)
for rom in matched_roms:
rom["url_cover"] = rom["url_cover"].replace("t_thumb", f"t_cover_big")
rom["url_screenshots"] = self._search_screenshots(igdb_id)
return matched_roms
def get_matched_roms_by_id(self, r_igdb_id: str):
matched_rom = self.get_rom_by_id(r_igdb_id)
matched_rom.update(
url_cover=matched_rom["url_cover"].replace("t_thumb", "t_cover_big"),
)
return [matched_rom]
@check_twitch_token
def get_matched_roms_by_name(self, search_term: str, p_igdb_id: int) -> list:
matched_roms: list = requests.post(
def get_matched_roms_by_name(self, search_term: str, p_igdb_id: int):
matched_roms = requests.post(
self.games_url,
headers=self.headers,
data=f'search "{uc(search_term)}"; \
fields id, slug, name, summary; \
where platforms=[{p_igdb_id}];',
data=f"""
search "{uc(search_term)}";
fields id, slug, name, summary;
where platforms=[{p_igdb_id}];
""",
).json()
for rom in matched_roms:
rom["url_cover"] = self._search_cover(rom["id"]).replace(
"t_thumb", f"t_cover_big"
return [
dict(
rom,
url_cover=self._search_cover(rom["id"]).replace(
"t_thumb", "t_cover_big"
),
url_screenshots=self._search_screenshots(rom["id"]),
r_igdb_id=rom.pop("id"),
r_slug=rom.pop("slug"),
r_name=rom.pop("name"),
)
rom["url_screenshots"] = self._search_screenshots(rom["id"])
rom["r_igdb_id"] = rom.pop("id")
rom["r_slug"] = rom.pop("slug")
rom["r_name"] = rom.pop("name")
return matched_roms
for rom in matched_roms
]
@check_twitch_token
def get_matched_roms(self, file_name: str, p_igdb_id: int, p_slug: str) -> list:
matched_roms: list[dict] = []
if p_igdb_id:
matched_roms: list = requests.post(
self.games_url,
headers=self.headers,
data=f'search "{uc(get_search_term(file_name))}"; \
fields id, slug, name, summary; \
where platforms=[{p_igdb_id}];',
).json()
for rom in matched_roms:
rom["url_cover"] = self._search_cover(rom["id"]).replace(
"t_thumb", f"t_cover_big"
)
rom["url_screenshots"] = self._search_screenshots(rom["id"])
rom["r_igdb_id"] = rom.pop("id")
rom["r_slug"] = rom.pop("slug")
rom["r_name"] = rom.pop("name")
else:
log.warning(f"{p_slug} is not supported!")
return matched_roms
def get_matched_roms(self, file_name: str, p_igdb_id: int):
if not p_igdb_id:
return []
matched_roms = requests.post(
self.games_url,
headers=self.headers,
data=f"""
search "{uc(get_search_term(file_name))}";
fields id, slug, name, summary;
where platforms=[{p_igdb_id}];
""",
).json()
return [
dict(
rom,
url_cover=self._search_cover(rom["id"]).replace(
"t_thumb", "t_cover_big"
),
url_screenshots=self._search_screenshots(rom["id"]),
r_igdb_id=rom.pop("id"),
r_slug=rom.pop("slug"),
r_name=rom.pop("name"),
)
for rom in matched_roms
]
class TwitchAuth:
def __init__(self) -> None:
self.base_url: str = "https://id.twitch.tv/oauth2/token"
self.token: str = ""
self.token_checkout: int = int(time())
self.SECURE_SECONDS_OFFSET: int = 10 # seconds offset to avoid invalid token
self.token_valid_seconds: int = 0
self.client_id: str = CLIENT_ID
self.client_secret: str = CLIENT_SECRET
self.base_url = "https://id.twitch.tv/oauth2/token"
self.token = ""
self.token_checkout = int(time())
self.SECURE_SECONDS_OFFSET = 10 # seconds offset to avoid invalid token
self.token_valid_seconds = 0
self.client_id = CLIENT_ID
self.client_secret = CLIENT_SECRET
def _is_token_valid(self) -> str:
def _is_token_valid(self) -> bool:
return (
True
if int(time()) + self.SECURE_SECONDS_OFFSET - self.token_checkout
int(time()) + self.SECURE_SECONDS_OFFSET - self.token_checkout
< self.token_valid_seconds
else False
)
def _update_twitch_token(self) -> str:
def _update_twitch_token(self):
res = requests.post(
url=self.base_url,
params={
@@ -222,19 +234,22 @@ class TwitchAuth:
"grant_type": "client_credentials",
},
).json()
self.token_checkout = int(time())
try:
self.token_valid_seconds = res["expires_in"]
self.token = res["access_token"]
log.info("Twitch token fetched!")
except KeyError:
self.token_valid_seconds = res.get("expires_in", 0)
self.token = res.get("access_token", "")
if not self.token:
log.error(
"Could not get twitch auth token: check client_id and client_secret"
)
sys.exit(2)
log.info("Twitch token fetched!")
def get_oauth_token(self) -> str:
if not self._is_token_valid():
log.warning("Twitch token invalid: fetching a new one")
log.warning("Twitch token invalid: fetching a new one...")
self._update_twitch_token()
return self.token

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,224 @@
interactions:
- request:
body: fields slug, name, summary; where id=3340;
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '42'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/games/
response:
body:
string: "[\n {\n \"id\": 3340,\n \"name\": \"Paper Mario\",\n \"slug\":
\"paper-mario\",\n \"summary\": \"Paper Mario, a turn-based JRPG entry
in the Mario franchise with a paper-based aesthetic and platforming elements,
sees the titular character working his way through the Mushroom Kingdom\\u0027s
diverse locales and biomes, meeting its inhabitants, fighthing unruly enemies
and recruiting an array of companions in order to once again save Princess
Peach from the clutches of the evil Koopa King Bowser.\"\n }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb2f8e8bc453f5-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 04:02:28 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=xtfZeK7uBDr86XujM6iIOQYiv3cNr.yyHfzPq6q.gQA-1690862548-0-Adn2oVSNHyz3zkUKoiYctDk401IEBYM1lCBJhYQLyvuwrkv8m0924r88Ey3L9jLjQN+9upnHofwB2UHJSUQ3S/c=;
path=/; expires=Tue, 01-Aug-23 04:32:28 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Transfer-Encoding:
- chunked
Via:
- 1.1 ea419f8269940bd7231c70acd36c430c.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- oSeRLJDNh64iq4Oa7phTz1fEzWBmFr3j1sAcqWEL8ctCLWCnp1iMEA==
X-Amz-Cf-Pop:
- YUL62-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '1'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9mJNHhpvHcFxCA=
x-amzn-Remapped-Content-Length:
- '500'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 04:02:28 GMT
x-amzn-RequestId:
- 9b7ad635-7643-44af-9987-c9fb2a458d90
status:
code: 200
message: OK
- request:
body: fields url; where game=3340;
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '28'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/covers/
response:
body:
string: "[\n {\n \"id\": 80830,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/co1qda.jpg\"\n
\ }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb2f8fb8fd36b5-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 04:02:28 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=yNJu1ibhp40_6PgfMgGYBiqNxKPrfsQFShgYpY4WxQM-1690862548-0-Af673p44x+pWQi71RPf/Zhg4rjs+sXc1QNcgrKNzIBarYDMUuZZERK32ZWOmLbsfhtCWvb8Nt8zRTTYz4oUbgDc=;
path=/; expires=Tue, 01-Aug-23 04:32:28 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Transfer-Encoding:
- chunked
Via:
- 1.1 5fa5e473f638d77357bb0fccef4ca526.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- 8ITHHHNUbl01MAfMxeGtvTkhNVmfQdtfC3n-qu5uDaErnfSEEKCRyw==
X-Amz-Cf-Pop:
- YUL62-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '1'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9mJPHKmPHcFUQQ=
x-amzn-Remapped-Content-Length:
- '96'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 04:02:28 GMT
x-amzn-RequestId:
- ff503170-c13e-4a2a-a198-9ca8efba711c
status:
code: 200
message: OK
- request:
body: fields url; where game=3340; limit 5;
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '37'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/screenshots/
response:
body:
string: "[\n {\n \"id\": 24169,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/ig9ainu9fershqdinox1.jpg\"\n
\ },\n {\n \"id\": 24168,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/hdxgs9nruycvrzcgvseu.jpg\"\n
\ },\n {\n \"id\": 24171,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/kjnf90jnud6njmwto3th.jpg\"\n
\ },\n {\n \"id\": 24170,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/jz66se3deczeta6hd4ys.jpg\"\n
\ },\n {\n \"id\": 24167,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/a5r3k2lf3lgvifrycqeg.jpg\"\n
\ }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb2f911f7da1ea-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 04:02:28 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=ELyvBYDrdPts7Yqom8z4cavFvX7vyy0VSh5m0XAHo3E-1690862548-0-AcSP+8MNTVBljob9DL6joLYyAmTvEqVm5O4CtgteK+7ffW0tQZp6urfN2FIcwgdsUK6a2isuKDoFjP5N84D90Jo=;
path=/; expires=Tue, 01-Aug-23 04:32:28 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Transfer-Encoding:
- chunked
Via:
- 1.1 ae7bbb23871eba9dda7f1abdc6bacfa0.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- cElB3EVKq35RBD8P-iH1fs5r1TQFoEGXTShvRl-DqQufBz38-AmbDA==
X-Amz-Cf-Pop:
- YUL62-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '5'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9mJSGLdPHcFylA=
x-amzn-Remapped-Content-Length:
- '542'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 04:02:28 GMT
x-amzn-RequestId:
- 88315c38-509b-4718-a1f3-0b4c60adc236
status:
code: 200
message: OK
version: 1

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,140 @@
interactions:
- request:
body: fields id, name; where slug="n64";
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '34'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/platforms/
response:
body:
string: "[\n {\n \"id\": 4,\n \"name\": \"Nintendo 64\"\n }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efafe519dff36fa-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 03:28:51 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=ogRLRqNLcmzY9DuPASpJJgZP7GOQO7CzhkyaysJcWjE-1690860531-0-ARduDIuE+vLnjg/+BxKioPkiVn8IvsCy40FTHe5aWssHrRxze80F9ZmLKVBae2p+ziG0x8c81rNPOjNnQeqInio=;
path=/; expires=Tue, 01-Aug-23 03:58:51 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Transfer-Encoding:
- chunked
Via:
- 1.1 684b7c29b4b69bec2dc5afe5ef9c1c50.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- MCUfdjr5_Oa3JFybL0W1L3S4Lk0uOgLa3AgCYidvHZuywEONlKzuEw==
X-Amz-Cf-Pop:
- ORD51-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '1'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9hOGFFFvHcFa7Q=
x-amzn-Remapped-Content-Length:
- '50'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 03:28:51 GMT
x-amzn-RequestId:
- 057e4982-ea50-4eba-8e2b-33d3b62e5500
status:
code: 200
message: OK
- request:
body: fields id, name; where slug="not_real";
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '39'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/platforms/
response:
body:
string: '[]'
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efafe52ec035485-YYZ
Connection:
- keep-alive
Content-Length:
- '2'
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 03:28:51 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=8buhT4UoR0ySLoSLRnJgCt4tQOqiMrYn34dxSyZN4o4-1690860531-0-AX2HFUVAJ3Flj8uJauUGylBmi/nAxFqNougeTZdXaJViv3wumKplwUN6baGBeuDkm+4va5qx07vvCnKeC+ko8NM=;
path=/; expires=Tue, 01-Aug-23 03:58:51 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Via:
- 1.1 6477e7b623b71ec66bc28ed8e271db7e.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- jkLi93MCTST-3fs8nFUpKm-yPrWLxo9rtwYefCMiYMIObbST8bLE1w==
X-Amz-Cf-Pop:
- YTO50-P1
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '0'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9hOIE27vHcFT1Q=
x-amzn-Remapped-Content-Length:
- '2'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 03:28:51 GMT
x-amzn-RequestId:
- ffb19bbc-123d-4bc3-a2d4-52640ffab302
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,486 @@
interactions:
- request:
body: "\n search \"Paper Mario\";\n fields
id, slug, name, summary, screenshots;\n where platforms=[4]
;\n "
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '166'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/games/
response:
body:
string: "[\n {\n \"id\": 3340,\n \"name\": \"Paper Mario\",\n \"screenshots\":
[\n 24167,\n 24168,\n 24169,\n 24170,\n 24171\n ],\n
\ \"slug\": \"paper-mario\",\n \"summary\": \"Paper Mario, a turn-based
JRPG entry in the Mario franchise with a paper-based aesthetic and platforming
elements, sees the titular character working his way through the Mushroom
Kingdom\\u0027s diverse locales and biomes, meeting its inhabitants, fighthing
unruly enemies and recruiting an array of companions in order to once again
save Princess Peach from the clutches of the evil Koopa King Bowser.\"\n },\n
\ {\n \"id\": 257636,\n \"name\": \"Paper Mario TTYD64\",\n \"screenshots\":
[\n 1093074,\n 1093075\n ],\n \"slug\": \"paper-mario-ttyd64\",\n
\ \"summary\": \"TTYD64 is a PM64 romhack that adds TTYD\\u0027s gameplay
into the original Paper Mario plus all new items, badges, and recipes from
that game, and a lot of new areas to explore plus other additions.\"\n },\n
\ {\n \"id\": 159343,\n \"name\": \"Paper Mario: Black Pit\",\n \"screenshots\":
[\n 552543,\n 552544\n ],\n \"slug\": \"paper-mario-black-pit\",\n
\ \"summary\": \"Paper Mario: Black Pit is a ROM hack/mod of Paper Mario
64, developed by elDexter. It adds a new level layout to the game, based on
roguelike mechanics.\"\n },\n {\n \"id\": 187873,\n \"name\": \"Paper
Mario: Master Quest\",\n \"screenshots\": [\n 714703,\n 714704\n
\ ],\n \"slug\": \"paper-mario-master-quest\",\n \"summary\": \"Paper
Mario: Master Quest is a mod made for \\\"Paper Mario\\\" on the N64. It was
created by Emperor_Thamz, Rainchus, JaThePlayer, and Brotenko. It revamps
old content and adds plenty of new as well.\\nOften considered \\\"The Dark
Souls of Paper Mario\\\", the mod is incredibly difficult.\"\n },\n {\n
\ \"id\": 159325,\n \"name\": \"Paper Mario Multiplayer\",\n \"screenshots\":
[\n 552513,\n 552514\n ],\n \"slug\": \"paper-mario-multiplayer\",\n
\ \"summary\": \"Paper Mario Multiplayer is a ROM hack/mod of Paper Mario
(Nintendo 64) developed by SKELUX which adds support for multiplayer, with
the second player controlling Mario\\u0027s partner.\"\n },\n {\n \"id\":
248349,\n \"name\": \"Paper Mario: Master Quest + Jr.\",\n \"screenshots\":
[\n 1044412,\n 1044413,\n 1044414,\n 1044415\n ],\n
\ \"slug\": \"paper-mario-master-quest-plus-jr\",\n \"summary\": \"Paper
Mario: Master Quest is a mod made for \u201CPaper Mario\u201D on the N64.
It revamps old content and adds plenty of new as well. Often considered \u201CThe
Dark Souls of Paper Mario\u201D, the mod is incredibly difficult. It was designed
with elite challenge runners in mind, and unless you have extensive knowledge
of Paper Mario, you may struggle with much of the content.\\n\\nFor those
players there is Paper Mario: Master Quest Jr. which has all of the content
the original has, with a much more reasonable difficulty curve. If you want
to stream the mod, starting with Jr. is recommended.\"\n },\n {\n \"id\":
186399,\n \"name\": \"The Paper Mario Christmas Special\",\n \"screenshots\":
[\n 705997,\n 705998\n ],\n \"slug\": \"the-paper-mario-christmas-special\",\n
\ \"summary\": \"Paper Mario Christmas Special is a ROM Hack of Paper Mario.
It was developed by Rain, Alex, Fish, Fewffwa, and Den of the Paper Mario
Modding Discord.\"\n },\n {\n \"id\": 245039,\n \"name\": \"Paper
Mario Eggstraordinary Egg Hunt\",\n \"screenshots\": [\n 1030891\n
\ ],\n \"slug\": \"paper-mario-eggstraordinary-egg-hunt\",\n \"summary\":
\"Join Mario \\u0026 Luigi for the annual Easter Egg Hunt in Toad Town and
close regions like Koopa Village and Shooting Star Summit!\\n\\nA Paper Mario
Mod made by BOSS05 / Miigle and Den / DenNya as a easter present for the Paper
Mario Modding Community.\"\n },\n {\n \"id\": 155012,\n \"name\":
\"Bowser\\u0027s Dark Story\",\n \"screenshots\": [\n 689665\n ],\n
\ \"slug\": \"bowsers-dark-story\",\n \"summary\": \"Bowser\\u0027s Dark
Story is a ROM hack/mod of Paper Mario. The game is an alternative take on
the story, from the perspective that tells how it would be if Bowser won against
Mario and conquered the Mushroom Kingdom. The player controls the villain,
Bowser, through an adventure, finding allies and battling enemies.\"\n }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb1fb27c3e36aa-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Length:
- '1595'
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 03:51:38 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=tYA7FoYlhkvK11e1rJDYoJt29z8zKtCvnmg8sPCYy_w-1690861898-0-ASwvhl+zouXVmGAkLbYiKnPdKOQ6xYLcGnBq1drKyeM+YI3JH1+pcgdQL83tpDQiC5tG4Nz5FxYZq6Vn+7hyogM=;
path=/; expires=Tue, 01-Aug-23 04:21:38 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Via:
- 1.1 9b4f2014232c90b3056e1fb1e00215fc.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- EA2iGalDUXwdsoMCIP37qOnRHah6i_BN6JQldcQlsMh01zmE-ekC0g==
X-Amz-Cf-Pop:
- YUL62-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '9'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9kjtGKUPHcF1UA=
x-amzn-Remapped-Content-Length:
- '1595'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 03:51:38 GMT
x-amzn-RequestId:
- 30db0468-6dbe-405c-90ff-e093ab4278b3
status:
code: 200
message: OK
- request:
body: fields url; where game=3340;
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '28'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/covers/
response:
body:
string: "[\n {\n \"id\": 80830,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/co1qda.jpg\"\n
\ }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb1fb3ddbc3972-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 03:51:39 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=FebkrRmEuOVhHBzP67Y1M.MHYCqs2.KHGanFcKnJwtY-1690861899-0-Aa3c0EjIqiyw9FVxJ+xIDPLINDtXRrbCILNW1XwQdTvepDk4De9O/h9jUlQOGkLqjUP9rj9p/YqiVUyFZ+bUB8g=;
path=/; expires=Tue, 01-Aug-23 04:21:39 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Transfer-Encoding:
- chunked
Via:
- 1.1 8dc256e43720ba0f5d01b9e6cd4ce544.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- 1scVQqMoUooKOfXS0lws7_9VyShFnWjK7DuktBdhV1zhXFZHvD7d2Q==
X-Amz-Cf-Pop:
- ORD51-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '1'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9kjxG6QvHcFSow=
x-amzn-Remapped-Content-Length:
- '96'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 03:51:39 GMT
x-amzn-RequestId:
- 72a26163-8ddb-404e-b38b-53000cb45683
status:
code: 200
message: OK
- request:
body: fields url; where game=3340; limit 5;
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '37'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/screenshots/
response:
body:
string: "[\n {\n \"id\": 24169,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/ig9ainu9fershqdinox1.jpg\"\n
\ },\n {\n \"id\": 24167,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/a5r3k2lf3lgvifrycqeg.jpg\"\n
\ },\n {\n \"id\": 24168,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/hdxgs9nruycvrzcgvseu.jpg\"\n
\ },\n {\n \"id\": 24171,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/kjnf90jnud6njmwto3th.jpg\"\n
\ },\n {\n \"id\": 24170,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/jz66se3deczeta6hd4ys.jpg\"\n
\ }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb1fb65cd639de-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 03:51:39 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=qfMe0jDOv8xQfLkSSinTP1gVgDoHSboKutTITBGpNko-1690861899-0-ASgSGgVP6uJf8v+WMpKmHJzoUWQgZ0ggJp/UtHk44GLjV53xbwto6jGb1TuvlSE/58hv51O2kP5w04/7tZ+c3Ug=;
path=/; expires=Tue, 01-Aug-23 04:21:39 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Transfer-Encoding:
- chunked
Via:
- 1.1 6f5a63f08c741820abad2a0b2a35176c.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- HygNsNp7_JpnKV9rmFiS3LOxgPhY6PeuZCZyiFWIlA55KduOoFh41Q==
X-Amz-Cf-Pop:
- ORD51-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '5'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9kjzFzpvHcFwHQ=
x-amzn-Remapped-Content-Length:
- '542'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 03:51:39 GMT
x-amzn-RequestId:
- dbb64f4c-cda6-4e13-985c-4fc3341a7aa7
status:
code: 200
message: OK
- request:
body: "\n search \"Not a real game title\";\n fields
id, slug, name, summary, screenshots;\n where platforms=[4]
;\n "
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '176'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/games/
response:
body:
string: '[]'
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb1fb8da23a1ec-YYZ
Connection:
- keep-alive
Content-Length:
- '2'
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 03:51:39 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=RG06o5ZAUvWQyEzHnXvfRVTloGQS83LkqSsc5UQNcb8-1690861899-0-AdCsYBB6/xTNt5afaJTa5HAx3kvwaVLUeZzBPCxKX8CoLDQnkI2/evtllKYoNFDCkF+IJbeIgVY7BvVoq9hAKWE=;
path=/; expires=Tue, 01-Aug-23 04:21:39 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Via:
- 1.1 de0a592002999100a0085e087a370864.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- setlZZdf1Scj7w0ozugKvNf9nIFZ5p-VdxGYCOZmXlhR_Ld3q0tOdw==
X-Amz-Cf-Pop:
- YUL62-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '0'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9kj5GR3PHcFzLQ=
x-amzn-Remapped-Content-Length:
- '2'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 03:51:39 GMT
x-amzn-RequestId:
- 929c1657-ed53-4ddf-b7a3-3910fb3c570b
status:
code: 200
message: OK
- request:
body: "\n search \"Not a real game title\";\n fields
id, slug, name, summary, screenshots;\n where platforms=[4]
& category=10;\n "
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '189'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/games/
response:
body:
string: '[]'
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb1fbad99c38e1-YYZ
Connection:
- keep-alive
Content-Length:
- '2'
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 03:51:40 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=p3M51f.3s3v0XVTOYUcs8CgZzgsK7h660K1uoCEvmt8-1690861900-0-AWjW0oaIJvojYqMLrDZP4VXSXX0zN4XNn8Aq4QSVIybhc6K4bAlSG/1A4pW7+YlRqpZ2g/LLyUYdydm0lq0DK94=;
path=/; expires=Tue, 01-Aug-23 04:21:40 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Via:
- 1.1 238ef6b7fcc1fd30826738c560d235e0.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- m4ZjInTbkJ3_eFzi0xUOsrCIiE0DoMdaFP7WH5ePbpVd3isKHXOhIg==
X-Amz-Cf-Pop:
- ORD51-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '0'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9kj7E5EPHcFkrg=
x-amzn-Remapped-Content-Length:
- '2'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 03:51:40 GMT
x-amzn-RequestId:
- 9e50a8b9-3d3e-427c-96a6-6c15255cd97a
status:
code: 200
message: OK
- request:
body: "\n search \"Not a real game title\";\n fields
id, slug, name, summary, screenshots;\n where platforms=[4]
;\n "
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '176'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/games/
response:
body:
string: '[]'
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb1fbc1b1439e3-YYZ
Connection:
- keep-alive
Content-Length:
- '2'
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 03:51:40 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=U3ZQXP_dXJL0kmdH0AIGc7JuaJQkf7mdnSEgrTbI8I4-1690861900-0-ARqes4hdr46xpGPIGkKXMnFhNlGvzKiETWH/8D+B/lA0xZhJs5QjGhkrZ9xLcivT5UxjXHl1Q81KyYhNAKKlmyU=;
path=/; expires=Tue, 01-Aug-23 04:21:40 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Via:
- 1.1 2b26355dcf9bbc955d60730f6007457c.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- 0_vqElusi94bElcjGQTL9WOQWTeXGfgaNzlsVsOWIco8jf68DQpm6A==
X-Amz-Cf-Pop:
- ORD51-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '0'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9kj-F3svHcFgag=
x-amzn-Remapped-Content-Length:
- '2'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 03:51:40 GMT
x-amzn-RequestId:
- 268c4d22-166e-4591-b866-90f1068f8d33
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,292 @@
interactions:
- request:
body: fields slug, name, summary; where id=3340;
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '42'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/games/
response:
body:
string: "[\n {\n \"id\": 3340,\n \"name\": \"Paper Mario\",\n \"slug\":
\"paper-mario\",\n \"summary\": \"Paper Mario, a turn-based JRPG entry
in the Mario franchise with a paper-based aesthetic and platforming elements,
sees the titular character working his way through the Mushroom Kingdom\\u0027s
diverse locales and biomes, meeting its inhabitants, fighthing unruly enemies
and recruiting an array of companions in order to once again save Princess
Peach from the clutches of the evil Koopa King Bowser.\"\n }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb2f259ab73870-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 04:02:11 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=i1hnIQq6bEFhrB2wW7JvWnYsLWIqXJLP9Jn16rgAY1w-1690862531-0-AYORyWCnwE/sCsm1RJBSMdbevZODJ3XvSL06vzGQSPfSLWewPhrhcTPYtjjAYY4uVWdiWtlhNa15RBhDTPD3S7Y=;
path=/; expires=Tue, 01-Aug-23 04:32:11 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Transfer-Encoding:
- chunked
Via:
- 1.1 a809017c4252ec777a5d97cf31a304ca.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- iCVEVASOjkhjT0cQgtwNq0crI1ss_8nxlIDvKL23G77DeF0q7UQodA==
X-Amz-Cf-Pop:
- ORD51-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '1'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9mGmHwuPHcF2KA=
x-amzn-Remapped-Content-Length:
- '500'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 04:02:11 GMT
x-amzn-RequestId:
- 3cb33f97-7ad8-4c7b-a60f-6c5bf5f73b9f
status:
code: 200
message: OK
- request:
body: fields url; where game=3340;
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '28'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/covers/
response:
body:
string: "[\n {\n \"id\": 80830,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/co1qda.jpg\"\n
\ }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb2f27ab6b36ab-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 04:02:11 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=ZRpxsQoxQ.HQInPWr4VEQ9brPyqcESO99fIHGQgAHlU-1690862531-0-AbmRtWRInI30r/HsyVkRxrj7aUTYZgNklYyth2oSTTZgATrTCIXYTODot3L2TeyBVb6h/6VDnIKozYHkTb681oo=;
path=/; expires=Tue, 01-Aug-23 04:32:11 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Transfer-Encoding:
- chunked
Via:
- 1.1 ea419f8269940bd7231c70acd36c430c.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- e1xv9uKddvoJLnXLASmmYRxGa2VgGp0PuSZ8io9Io-uZ_Vj0jrRHHw==
X-Amz-Cf-Pop:
- YUL62-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '1'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9mGpErpvHcFSGQ=
x-amzn-Remapped-Content-Length:
- '96'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 04:02:11 GMT
x-amzn-RequestId:
- 544f3939-7665-4d02-af04-680d7599d0d0
status:
code: 200
message: OK
- request:
body: fields url; where game=3340; limit 5;
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '37'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/screenshots/
response:
body:
string: "[\n {\n \"id\": 24169,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/ig9ainu9fershqdinox1.jpg\"\n
\ },\n {\n \"id\": 24167,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/a5r3k2lf3lgvifrycqeg.jpg\"\n
\ },\n {\n \"id\": 24168,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/hdxgs9nruycvrzcgvseu.jpg\"\n
\ },\n {\n \"id\": 24171,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/kjnf90jnud6njmwto3th.jpg\"\n
\ },\n {\n \"id\": 24170,\n \"url\": \"//images.igdb.com/igdb/image/upload/t_thumb/jz66se3deczeta6hd4ys.jpg\"\n
\ }\n]"
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb2f290e18a217-YYZ
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 04:02:12 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=EJdO3isAaJKcMeRXmcpkDHGzRtf84ozt_8U5533aulQ-1690862532-0-AVrDAo5KNUkaxQaTm8cMRdJyEuas79edlHrvJnJM+hOnOyHFgxbG111AXMb7ERhb4wmV9d19adlJyyfbs+x//gc=;
path=/; expires=Tue, 01-Aug-23 04:32:12 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Transfer-Encoding:
- chunked
Via:
- 1.1 5fa5e473f638d77357bb0fccef4ca526.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- J5OvOqDUVGCxwmEhjXXyYsRQCwTUfmwgyErgvio59zTrJGWR8N6uXQ==
X-Amz-Cf-Pop:
- YUL62-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '5'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9mGsGw8PHcF8aQ=
x-amzn-Remapped-Content-Length:
- '542'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 04:02:12 GMT
x-amzn-RequestId:
- 8168b675-4621-40e5-91ec-b042cebc7dfb
status:
code: 200
message: OK
- request:
body: fields slug, name, summary; where id=-1;
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Authorization:
- Bearer xxxxxxxxxxxxxxxxxxxxxxxx
Client-ID:
- xxxxxxxxxxxxxxxxxxxxxxxx
Connection:
- keep-alive
Content-Length:
- '40'
User-Agent:
- python-requests/2.31.0
method: POST
uri: https://api.igdb.com/v4/games/
response:
body:
string: '[]'
headers:
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 7efb2f2b8feaa1e6-YYZ
Connection:
- keep-alive
Content-Length:
- '2'
Content-Type:
- application/json
Date:
- Tue, 01 Aug 2023 04:02:12 GMT
Server:
- cloudflare
Set-Cookie:
- __cf_bm=cAyTHDqftrQxH5Z3aRJHN1p.yQspBQkbZ2cbiAhy5QU-1690862532-0-AUabkaAZQnn/lqEyNlFeakrJXyr9Kc+fMb+5G1ikER0JscWmu5mWg/JCnHVg1+5U7UYOhVR+eU+lFtGnZqybYhk=;
path=/; expires=Tue, 01-Aug-23 04:32:12 GMT; domain=.igdb.com; HttpOnly; Secure;
SameSite=None
Strict-Transport-Security:
- max-age=31536000; includeSubDomains; preload
Via:
- 1.1 ae7bbb23871eba9dda7f1abdc6bacfa0.cloudfront.net (CloudFront)
X-Amz-Cf-Id:
- l4vuNKT3tVbbwCD55voSuiHCPxDMw9RB0bvrMfu51uyiOOGKsgLMlA==
X-Amz-Cf-Pop:
- YUL62-C2
X-Cache:
- Miss from cloudfront
X-Content-Type-Options:
- nosniff
X-Count:
- '0'
alt-svc:
- h3=":443"; ma=86400
x-amz-apigw-id:
- I9mGwFWGPHcFQDA=
x-amzn-Remapped-Content-Length:
- '2'
x-amzn-Remapped-Date:
- Tue, 01 Aug 2023 04:02:12 GMT
x-amzn-RequestId:
- ba25354a-8333-4029-9d1f-35203c031ed7
status:
code: 200
message: OK
version: 1

View File

@@ -0,0 +1,84 @@
from handler.igdb_handler import IGDBHandler, TwitchAuth
import pytest
igdbh = IGDBHandler()
@pytest.mark.vcr()
def test_get_platform():
platform = igdbh.get_platform("n64")
assert platform["igdb_id"] == 4
assert platform["name"] == "Nintendo 64"
assert platform["slug"] == "n64"
platform = igdbh.get_platform("not_real")
assert platform == {}
@pytest.mark.vcr()
def test_get_rom():
rom = igdbh.get_rom("Paper Mario (USA).n64", 4)
assert rom["r_igdb_id"] == 3340
assert rom["r_slug"] == "paper-mario"
assert rom["r_name"] == "Paper Mario"
assert rom["summary"]
assert "images.igdb.com" in rom["url_cover"]
assert "images.igdb.com" in rom["url_screenshots"][0]
rom = igdbh.get_rom("Not a real game title", 4)
assert rom == {}
@pytest.mark.vcr()
def test_get_rom_by_id():
rom = igdbh.get_rom_by_id(3340)
assert rom["r_igdb_id"] == 3340
assert rom["r_slug"] == "paper-mario"
assert rom["r_name"] == "Paper Mario"
assert rom["summary"]
assert "images.igdb.com" in rom["url_cover"]
assert "images.igdb.com" in rom["url_screenshots"][0]
rom = igdbh.get_rom_by_id(-1)
assert rom == {}
@pytest.mark.vcr()
def test_get_matched_roms_by_id():
roms = igdbh.get_matched_roms_by_id(3340)
assert len(roms) == 1
assert roms[0]["r_igdb_id"] == 3340
assert roms[0]["r_slug"] == "paper-mario"
assert "t_cover_big" in roms[0]["url_cover"]
@pytest.mark.vcr()
def test_get_matched_roms_by_name():
roms = igdbh.get_matched_roms_by_name("Mario", 4)
assert len(roms) == 10
assert roms[0]["r_igdb_id"] == 132642
assert roms[0]["r_slug"] == "super-mario-64-shindou-pak-taiou-version"
assert roms[0]["r_name"] == "Super Mario 64: Shindou Pak Taiou Version"
assert roms[1]["r_igdb_id"] == 3475
assert roms[1]["r_slug"] == "dr-mario-64"
assert roms[1]["r_name"] == "Dr. Mario 64"
roms = igdbh.get_matched_roms_by_name("Notarealgametitle", 4)
assert roms == []
@pytest.mark.vcr()
def test_get_matched_roms():
roms = igdbh.get_matched_roms("Paper Mario (USA).n64", 4)
assert len(roms) == 9
assert roms[0]["r_igdb_id"] == 3340
assert roms[0]["r_slug"] == "paper-mario"
assert roms[0]["r_name"] == "Paper Mario"
assert roms[0]["summary"]
assert "images.igdb.com" in roms[0]["url_cover"]
assert "images.igdb.com" in roms[0]["url_screenshots"][0]
roms = igdbh.get_matched_roms("Paper Mario (USA).n64", None)
assert roms == []
roms = igdbh.get_matched_roms("Notarealgametitle", 4)
assert roms == []

View File

@@ -1,3 +1,3 @@
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import declarative_base
BaseModel = declarative_base()

287
poetry.lock generated
View File

@@ -613,6 +613,89 @@ files = [
[package.dependencies]
traitlets = "*"
[[package]]
name = "multidict"
version = "6.0.4"
description = "multidict implementation"
optional = false
python-versions = ">=3.7"
files = [
{file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"},
{file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"},
{file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"},
{file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"},
{file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"},
{file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"},
{file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"},
{file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"},
{file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"},
{file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"},
{file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"},
{file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"},
{file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"},
{file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"},
{file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"},
{file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"},
{file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"},
{file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"},
{file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"},
{file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"},
{file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"},
{file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"},
{file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"},
{file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"},
{file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"},
{file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"},
{file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"},
{file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"},
{file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"},
{file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"},
{file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"},
{file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"},
{file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"},
{file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"},
{file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"},
{file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"},
{file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"},
{file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"},
{file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"},
{file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"},
{file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"},
{file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"},
{file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"},
{file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"},
{file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"},
{file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"},
{file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"},
{file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"},
{file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"},
{file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"},
{file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"},
{file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"},
{file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"},
{file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"},
{file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"},
{file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"},
{file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"},
{file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"},
{file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"},
{file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"},
{file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"},
{file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"},
{file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"},
{file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"},
{file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"},
{file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"},
{file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"},
{file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"},
{file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"},
{file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"},
{file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"},
{file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"},
{file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"},
{file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"},
]
[[package]]
name = "packaging"
version = "23.1"
@@ -840,6 +923,21 @@ pytest = ">=7.3.1"
[package.extras]
test = ["coverage (>=7.2.7)", "pytest-mock (>=3.10)"]
[[package]]
name = "pytest-vcr"
version = "1.0.2"
description = "Plugin for managing VCR.py cassettes"
optional = false
python-versions = "*"
files = [
{file = "pytest-vcr-1.0.2.tar.gz", hash = "sha256:23ee51b75abbcc43d926272773aae4f39f93aceb75ed56852d0bf618f92e1896"},
{file = "pytest_vcr-1.0.2-py2.py3-none-any.whl", hash = "sha256:2f316e0539399bea0296e8b8401145c62b6f85e9066af7e57b6151481b0d6d9c"},
]
[package.dependencies]
pytest = ">=3.6.0"
vcrpy = "*"
[[package]]
name = "python-dateutil"
version = "2.8.2"
@@ -1207,6 +1305,22 @@ h11 = ">=0.8"
[package.extras]
standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
[[package]]
name = "vcrpy"
version = "5.1.0"
description = "Automatically mock your HTTP interactions to simplify and speed up testing"
optional = false
python-versions = ">=3.8"
files = [
{file = "vcrpy-5.1.0-py2.py3-none-any.whl", hash = "sha256:605e7b7a63dcd940db1df3ab2697ca7faf0e835c0852882142bafb19649d599e"},
{file = "vcrpy-5.1.0.tar.gz", hash = "sha256:bbf1532f2618a04f11bce2a99af3a9647a32c880957293ff91e0a5f187b6b3d2"},
]
[package.dependencies]
PyYAML = "*"
wrapt = "*"
yarl = "*"
[[package]]
name = "wcwidth"
version = "0.2.6"
@@ -1297,7 +1411,178 @@ files = [
{file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"},
]
[[package]]
name = "wrapt"
version = "1.15.0"
description = "Module for decorators, wrappers and monkey patching."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
files = [
{file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"},
{file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"},
{file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"},
{file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"},
{file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"},
{file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"},
{file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"},
{file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"},
{file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"},
{file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"},
{file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"},
{file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"},
{file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"},
{file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"},
{file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"},
{file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"},
{file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"},
{file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"},
{file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"},
{file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"},
{file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"},
{file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"},
{file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"},
{file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"},
{file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"},
{file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"},
{file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"},
{file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"},
{file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"},
{file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"},
{file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"},
{file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"},
{file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"},
{file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"},
{file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"},
{file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"},
{file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"},
{file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"},
{file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"},
{file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"},
{file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"},
{file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"},
{file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"},
{file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"},
{file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"},
{file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"},
{file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"},
{file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"},
{file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"},
{file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"},
{file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"},
{file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"},
{file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"},
{file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"},
{file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"},
{file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"},
{file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"},
{file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"},
{file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"},
{file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"},
{file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"},
{file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"},
{file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"},
{file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"},
{file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"},
{file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"},
{file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"},
{file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"},
{file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"},
{file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"},
{file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"},
{file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"},
{file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"},
{file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"},
{file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"},
]
[[package]]
name = "yarl"
version = "1.9.2"
description = "Yet another URL library"
optional = false
python-versions = ">=3.7"
files = [
{file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"},
{file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"},
{file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"},
{file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"},
{file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"},
{file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"},
{file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"},
{file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"},
{file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"},
{file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"},
{file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"},
{file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"},
{file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"},
{file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"},
{file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"},
{file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"},
{file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"},
{file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"},
{file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"},
{file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"},
{file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"},
{file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"},
{file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"},
{file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"},
{file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"},
{file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"},
{file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"},
{file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"},
{file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"},
{file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"},
{file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"},
{file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"},
{file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"},
{file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"},
{file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"},
{file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"},
{file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"},
{file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"},
{file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"},
{file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"},
{file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"},
{file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"},
{file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"},
{file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"},
{file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"},
{file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"},
{file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"},
{file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"},
{file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"},
{file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"},
{file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"},
{file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"},
{file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"},
{file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"},
{file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"},
{file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"},
{file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"},
{file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"},
{file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"},
{file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"},
{file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"},
{file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"},
{file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"},
{file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"},
{file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"},
{file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"},
{file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"},
{file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"},
{file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"},
{file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"},
{file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"},
{file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"},
{file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"},
{file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"},
]
[package.dependencies]
idna = ">=2.0"
multidict = ">=4.0"
[metadata]
lock-version = "2.0"
python-versions = "^3.10"
content-hash = "fdce215f954e232e1e650bb8c8a8c9a49c9eb16ba0468abb0282831636fb6b36"
content-hash = "897d3d7a13b638d6f80acc6087f5d4f31e200740ce9f77e9f9b0bb6fa9f336d9"

View File

@@ -25,6 +25,7 @@ sqlakeyset = "^2.0.1684285512"
pydash = "^7.0.6"
pytest = "^7.4.0"
pytest-env = "^0.8.2"
pytest-vcr = "^1.0.2"
[build-system]

View File

@@ -5,4 +5,3 @@ env =
DB_NAME=romm_test
DB_USER=romm_test
DB_PASSWD=passwd