Standardize formatting with black and apply ruff auto-fixes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
156 lines
4.6 KiB
Python
156 lines
4.6 KiB
Python
import asyncio
|
|
import datetime
|
|
import sys
|
|
import urllib.parse
|
|
|
|
from db_calls import db_get, url_get, db_post, db_patch
|
|
from exceptions import logger
|
|
|
|
CARD_BASE_URL = "https://pd.manticorum.com/api/v2/players"
|
|
CARDSET_ID = 20
|
|
SKIP_ARMS = False
|
|
SKIP_BATS = False
|
|
START_ID = None
|
|
TEST_COUNT_MAX = None
|
|
HTML_CARDS = False
|
|
|
|
|
|
async def main(args):
|
|
p_query = await db_get(
|
|
"players",
|
|
params=[("inc_dex", False), ("cardset_id", CARDSET_ID), ("short_output", True)],
|
|
)
|
|
if p_query["count"] == 0:
|
|
raise ValueError("No players returned from Paper Dynasty API")
|
|
all_players = p_query["players"]
|
|
del p_query
|
|
|
|
errors = []
|
|
successes = []
|
|
cxn_error = False
|
|
count = -1
|
|
start_time = datetime.datetime.now()
|
|
|
|
for x in all_players:
|
|
if "pitching" in x["image"] and SKIP_ARMS:
|
|
pass
|
|
elif "batting" in x["image"] and SKIP_BATS:
|
|
pass
|
|
elif START_ID is not None and START_ID > x["player_id"]:
|
|
pass
|
|
# elif 'sombaseball' in x['image']:
|
|
# errors.append((x, f'Bad card url: {x["image"]}'))
|
|
elif "sombaseball" in x["image"]:
|
|
print(
|
|
f'Found old image URL for {x["p_name"]} - setting card type by pos_1: {x["pos_1"]}'
|
|
)
|
|
release_dir = f"{start_time.year}-{start_time.month}-{start_time.day}"
|
|
if x["pos_1"] in ["SP", "RP", "CP", "P"]:
|
|
image_url = (
|
|
f'{CARD_BASE_URL}/{x["player_id"]}/pitchingcard'
|
|
f'{urllib.parse.quote("?d=")}{release_dir}'
|
|
)
|
|
else:
|
|
image_url = (
|
|
f'{CARD_BASE_URL}/{x["player_id"]}/battingcard'
|
|
f'{urllib.parse.quote("?d=")}{release_dir}'
|
|
)
|
|
this_player = await db_patch(
|
|
"players", object_id=x["player_id"], params=[("image", image_url)]
|
|
)
|
|
else:
|
|
count += 1
|
|
if count % 20 == 0:
|
|
print(f'Card #{count + 1} being updated is {x["p_name"]}...')
|
|
elif TEST_COUNT_MAX is not None and TEST_COUNT_MAX < count:
|
|
print("Done setting URLs")
|
|
break
|
|
|
|
try:
|
|
resp = await db_post(f'players/{x["player_id"]}/image-reset')
|
|
|
|
except ConnectionError as e:
|
|
if cxn_error:
|
|
raise e
|
|
|
|
cxn_error = True
|
|
errors.append((x, e))
|
|
|
|
except ValueError as e:
|
|
errors.append((x, e))
|
|
|
|
count = -1
|
|
for x in all_players:
|
|
if HTML_CARDS:
|
|
card_url = f'{x["image"]}&html=true'
|
|
timeout = 2
|
|
else:
|
|
card_url = x["image"]
|
|
timeout = 6
|
|
|
|
if TEST_COUNT_MAX is not None and TEST_COUNT_MAX < count:
|
|
print("Done pulling images")
|
|
break
|
|
|
|
try:
|
|
logger.info("calling the card url")
|
|
resp = await url_get(card_url, timeout=timeout)
|
|
|
|
except ConnectionError as e:
|
|
if cxn_error:
|
|
raise e
|
|
|
|
cxn_error = True
|
|
errors.append((x, e))
|
|
|
|
except ValueError as e:
|
|
errors.append((x, e))
|
|
|
|
else:
|
|
if x["image2"] is not None:
|
|
if HTML_CARDS:
|
|
card_url = f'{x["image2"]}&html=true'
|
|
else:
|
|
card_url = x["image2"]
|
|
|
|
if "sombaseball" in x["image2"]:
|
|
errors.append((x, f'Bad card url: {x["image"]}'))
|
|
else:
|
|
try:
|
|
resp = await url_get(card_url, timeout=6)
|
|
|
|
except ConnectionError as e:
|
|
if cxn_error:
|
|
raise e
|
|
|
|
cxn_error = True
|
|
errors.append((x, e))
|
|
|
|
except ValueError as e:
|
|
errors.append((x, e))
|
|
|
|
else:
|
|
successes.append(x)
|
|
else:
|
|
successes.append(x)
|
|
|
|
count += 1
|
|
|
|
if len(errors) > 0:
|
|
logger.error("All Errors:")
|
|
for x in errors:
|
|
logger.error(f'ID {x[0]["player_id"]} {x[0]["p_name"]} - Error: {x[1]}')
|
|
|
|
if len(successes) > 0:
|
|
logger.debug("All Successes:")
|
|
for x in successes:
|
|
logger.info(f'ID {x["player_id"]} {x["p_name"]}')
|
|
|
|
p_run_time = datetime.datetime.now() - start_time
|
|
print(f"\nAll done!\nErrors: {len(errors)}\nSuccesses: {len(successes)}")
|
|
print(f"Total runtime: {p_run_time.total_seconds()} seconds")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main(sys.argv[1:]))
|