|
5 | 5 | "episodes": ["id", "count", "title", "saga_id", "arc_id"], |
6 | 6 | "movies": ["id", "count", "title"], |
7 | 7 | "tomes": ["id", "count", "title"], |
8 | | - "chapters": ["id", "count", "title", "tome_id", "tome"], |
| 8 | + "chapters": ["id", "count", "title", "tome_id"], |
9 | 9 | "arcs": ["id", "count", "saga_id"], |
10 | 10 | "sagas": ["id", "count", "title"], |
11 | 11 | "hakis": ["id", "count", "name", "roman_name", "characters_id"], |
12 | | - "characters": ["id", "count", "name", "job", "bounty", "status", "size"], |
| 12 | + "characters": ["id", "count", "name", "job", "bounty", "status", "size", "crew_id", "fruit_id"], |
13 | 13 | "dials": ["id", "count", "name", "type"], |
14 | 14 | "luffy/gears": ["id", "count", "title"], |
15 | 15 | "luffy/techniques": ["id", "count", "name", "translation", "gear_id"], |
|
20 | 20 | "crews": ["id", "count", "name", "status", "yonko"], |
21 | 21 | } |
22 | 22 |
|
23 | | -STRING_SEARCHES = ["name", "job", "bounty", "status", "size", "type", "tome_name", "roman_name", "sea", "affiliation"] |
| 23 | +STRING_SEARCHES = ["name", "job", "bounty", "status", "size", "type", "roman_name", "sea", "affiliation"] |
24 | 24 | ID_SEARCHES = ["crew_id", "captain_id"] |
25 | | -NO_SEARCH_ID_SEARCHES = ["saga_id", "arc_id", "characters_id", "gear_id", "tome_id"] |
| 25 | +NO_SEARCH_ID_SEARCHES = ["saga_id", "arc_id", "characters_id", "gear_id", "tome_id", "fruit_id", "crew_id"] |
26 | 26 | NO_RESOURCE_SEARCHES = ["count", "yonko"] |
27 | 27 |
|
28 | 28 |
|
29 | | -def check_params(endpoint, search=None, resource_id=None): |
| 29 | +def check_params(endpoint, search=None, resource=None): |
30 | 30 | if endpoint not in ENDPOINTS: |
31 | 31 | raise ValueError(f"Unknown API endpoint '{endpoint}'") |
32 | 32 | if search is not None and search not in ENDPOINTS[endpoint]: |
33 | 33 | raise ValueError(f"Unknown search '{search}' for endpoint '{endpoint}'") |
34 | | - if search is not None and search not in NO_RESOURCE_SEARCHES and resource_id is None: |
35 | | - raise ValueError("Resource ID is required for this search") |
36 | | - if resource_id is not None and not isinstance(resource_id, str): |
37 | | - raise ValueError("Resource ID must be a string, even if it's a number") |
| 34 | + if search is not None and search not in NO_RESOURCE_SEARCHES and resource is None: |
| 35 | + raise ValueError("Resource is required for this search") |
| 36 | + if resource is not None and "id" in search and not isinstance(resource, int): |
| 37 | + raise ValueError("Resource must be an integer for this search") |
38 | 38 | return None |
39 | 39 |
|
40 | 40 |
|
41 | | -def build_url(endpoint, search=None, resource_id=None): |
42 | | - check_params(endpoint, search, resource_id) |
| 41 | +def build_url(endpoint, search=None, resource=None): |
| 42 | + check_params(endpoint, search, resource) |
43 | 43 | if search is not None: |
44 | | - if resource_id is not None: |
45 | | - resource_id = convert_name(resource_id) |
46 | | - return adding_search(endpoint, search, resource_id) |
| 44 | + if resource is not None: |
| 45 | + resource = convert_resource(resource) |
| 46 | + return adding_search(endpoint, search, resource) |
47 | 47 | return f"{URL}{endpoint}/{search}" |
48 | 48 | return f"{URL}{endpoint}" |
49 | 49 |
|
50 | 50 |
|
51 | | -def adding_search(endpoint, search, resource_id=None): |
| 51 | +def adding_search(endpoint, search, resource=None): |
52 | 52 | if search in STRING_SEARCHES: |
53 | | - return f"{URL}{endpoint}/search/{search}/{resource_id}" |
54 | | - elif search in ID_SEARCHES or (endpoint == "arcs" and 'id' in search and search != "id"): |
55 | | - return f"{URL}{endpoint}/search/{search[:-3]}/{resource_id}" |
56 | | - elif search in NO_SEARCH_ID_SEARCHES: |
57 | | - return f"{URL}{endpoint}/{search[:-3]}/{resource_id}" |
| 53 | + return f"{URL}{endpoint}/search/{search}/{resource}" |
| 54 | + elif search in NO_SEARCH_ID_SEARCHES and endpoint not in ['boats', 'arcs']: |
| 55 | + return f"{URL}{endpoint}/{search[:-3]}/{resource}" |
| 56 | + elif search in ID_SEARCHES: |
| 57 | + return f"{URL}{endpoint}/search/{search[:-3]}/{resource}" |
58 | 58 | elif search == "title": |
59 | | - return f"{URL}{endpoint}/search/{resource_id}" |
60 | | - return f"{URL}{endpoint}/{resource_id}" |
| 59 | + return f"{URL}{endpoint}/search/{resource}" |
| 60 | + return f"{URL}{endpoint}/{resource}" |
61 | 61 |
|
62 | 62 |
|
63 | | -def convert_name(name): |
64 | | - if ' / ' in name: |
65 | | - name = name.split(" / ")[0] |
66 | | - return name.replace(" ", "%20") |
| 63 | +def convert_resource(resource): |
| 64 | + if isinstance(resource, int): |
| 65 | + return resource |
| 66 | + if ' / ' in resource: |
| 67 | + resource = resource.split(" / ")[0] |
| 68 | + return resource.replace(" ", "%20") |
67 | 69 |
|
68 | 70 |
|
69 | 71 | def pretty_print(data): |
|
0 commit comments