summaryrefslogtreecommitdiff
path: root/ffxiv/pystone/lodestone.py
blob: 3f48c2b25245b1c4f2d8217964d9b0e0380ef56b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from typing import Union, List
from pathlib import Path
from json import loads

from requests_cache import CachedSession as Session
# from requests import Session

from pystone.types import MetaDict
from pystone.definition import Definition
from pystone.character import Character

LODESTONE_BASE_URL = 'finalfantasyxiv.com/lodestone'


class Lodestone:
    def __init__(self, *, json_base: Union[str, Path]):
        if isinstance(json_base, str):
            json_base = Path(json_base)
        self.json_base: Path = json_base

        # read meta.json
        with open(json_base / 'meta.json') as f:
            self.meta: MetaDict = loads(f.read())
        self.session = Session()
        # self.session.headers.update({
        #     'User-Agent': self.meta['userAgentDesktop']
        # })

    def get_character_by_id(self, id: Union[str, int]) -> None:
        profile_json_files = (self.json_base / 'profile').expanduser().glob('*.json')
        definitions: List[Definition] = []

        for profile in profile_json_files:
            url = self.meta['applicableUris'][f'profile/{profile.name}']
            d = Definition(profile, url, session=self.session)
            d.process({'id': str(id)})
            definitions.append(d)

        return Character(definitions=definitions)