Skip to content

Commit

Permalink
clean up
Browse files Browse the repository at this point in the history
  • Loading branch information
withtwoemms committed Dec 28, 2023
1 parent 8bbd477 commit f4e5751
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 51 deletions.
15 changes: 6 additions & 9 deletions pokedex/api/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
from argparse import ArgumentParser

from pokedex.api.client import get_pokemon_by_move, get_pokemon_by_type
from pokedex.db.client import persist
from pokedex.db.client import persist_requests
from pokedex.db.models import Report


def go(args=sys.argv):
Expand All @@ -24,14 +25,10 @@ def go(args=sys.argv):
args = parser.parse_args()

if args.type:
# print(json.dumps(list(get_pokemon_by_type(args.type)), indent=4))
results = list(persist(get_pokemon_by_type(args.type)))
report = {'persisted': dict(results), 'count': len(results)}
print(json.dumps(report, indent=4))
results = dict(persist_requests(get_pokemon_by_type(args.type)))
print(Report(persisted=results))

if args.move:
move = str(args.move).replace(" ", "-")
# print(json.dumps(list(get_pokemon_by_move(move)), indent=4))
results = list(persist(get_pokemon_by_move(move)))
report = {'persisted': dict(results), 'count': len(results)}
print(json.dumps(report, indent=4))
results = dict(persist_requests(get_pokemon_by_move(move)))
print(Report(persisted=results))
23 changes: 3 additions & 20 deletions pokedex/api/client.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Any, Dict, Generator, Iterable, List, Optional
from typing import Generator, Iterable, List, Optional
from actionpack import Procedure

import requests
Expand All @@ -13,7 +13,6 @@

def get_endpoints(endpoints_request: PokeApiRequest) -> PokeApiEndpoints:
response: requests.Response = endpoints_request()
# response.raise_for_status() # TODO: handle error states
endpoints: PokeApiEndpoints = response.json()
if isinstance(endpoints, str):
print(type(endpoints), endpoints)
Expand All @@ -37,13 +36,10 @@ def generate_pokemon_requests(api_request: PokeApiRequest, response_key: str) ->
resource_refs = response.json()[response_key]
for resource_ref in resource_refs:
if response_key == "pokemon":
model = PokemonRef(**resource_ref).to_api_resource_ref()
model = PokemonRef(**resource_ref).as_api_resource_ref()
else:
model = PokeApiResourceRef(**resource_ref)
request = model.as_request()
# print(request)
yield request
# yield model.as_request()
yield model.as_request()


def get_pokemon(pokemon_requests: Iterable[PokeApiRequest]) -> Generator[Pokemon, None, None]:
Expand Down Expand Up @@ -76,29 +72,16 @@ def search_endpoint(
def fetch(endpoint_name: str) -> PokeApiResource:
endpoints = get_endpoints(PokeApiRequest(BASE_URL))
endpoint = select_endpoint(endpoint_name, endpoints)
# print(endpoint)
return get_resource(endpoint)


def get_pokemon_by_move(pokemon_move: str) -> Generator[PokeApiRequest, None, None]:
endpoint_request = search_endpoint("move", pokemon_move)
if endpoint_request:
# pokemon_requests = generate_pokemon_requests(endpoint_request, "learned_by_pokemon")
# yield from get_pokemon(pokemon_requests)
yield from generate_pokemon_requests(endpoint_request, "learned_by_pokemon")
# def get_pokemon_by_move(pokemon_move: str) -> Generator[Pokemon, None, None]:
# endpoint_request = search_endpoint("move", pokemon_move)
# if endpoint_request:
# pokemon_requests = generate_pokemon_requests(endpoint_request, "learned_by_pokemon")
# yield from get_pokemon(pokemon_requests)


def get_pokemon_by_type(pokemon_type: str) -> Generator[PokeApiRequest, None, None]:
endpoint_request = search_endpoint("type", pokemon_type)
if endpoint_request:
yield from generate_pokemon_requests(endpoint_request, "pokemon")
# def get_pokemon_by_type(pokemon_type: str):
# endpoint_request = search_endpoint("type", pokemon_type)
# if endpoint_request:
# pokemon_requests = generate_pokemon_requests(endpoint_request, "pokemon")
# yield from get_pokemon(pokemon_requests)
25 changes: 3 additions & 22 deletions pokedex/api/models.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,18 @@
import json
from dataclasses import dataclass
from typing import List, Optional
# from typing import Any, Dict, List, Optional

import requests
from pydantic import BaseModel

# from pokedex.db.client import DbRead, DbInsert
from pokedex.db.actions import DbRead, DbInsert
# from pokedex.db.client import CheckKey, DbRead, DbInsert, DbInsertPokemon


# ApiResponseType = Dict[str, Any]
from pokedex.db.client import cached_get


@dataclass(frozen=True)
class PokeApiRequest:
url: str

def __call__(self) -> requests.Response:
cache_result = DbRead(self.url.encode()).perform()
if cache_result.successful:
response = requests.Response()
response._content = cache_result.value
response.status_code = 200
else:
response = requests.get(self.url)
response.raise_for_status() # TODO: handle error states
DbInsert(
key=self.url,
value=json.dumps(response.json()),
).perform(should_raise=True)
return response
return cached_get(self.url)

@property
def __name__(self):
Expand All @@ -50,7 +31,7 @@ class PokemonRef(BaseModel):
pokemon: PokeApiResourceRef
slot: int

def to_api_resource_ref(self) -> PokeApiRequest:
def as_api_resource_ref(self) -> PokeApiResourceRef:
return self.pokemon

def as_request(self) -> PokeApiRequest:
Expand Down

0 comments on commit f4e5751

Please sign in to comment.