File size: 1,432 Bytes
cb7ff7d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
40
41
42
import json

from streamlit_local_storage import LocalStorage

from local_storage.entities import DetailsType, SavedDetails, PersonalDetails, LocationDetails, ContractorDetails

ls = LocalStorage()


def get_detail(key: str):
    for detail_type in DetailsType.values():
        detail = json.loads((ls.getItem(detail_type.name) or {}).get(key))
        if detail:
            type_ = detail["type"]
            if type_ == DetailsType.PERSONAL_DETAILS.name:
                return PersonalDetails(**detail)
            elif type_ == DetailsType.LOCATION_DETAILS.name:
                return LocationDetails(**detail)
            elif type_ == DetailsType.CONTRACTOR_DETAILS.name:
                return ContractorDetails(**detail)
            return None
    return None


def save_details(details: SavedDetails, key: str):
    if isinstance(details, PersonalDetails):
        type_ = DetailsType.PERSONAL_DETAILS
    elif isinstance(details, LocationDetails):
        type_ = DetailsType.LOCATION_DETAILS
    elif isinstance(details, ContractorDetails):
        type_ = DetailsType.CONTRACTOR_DETAILS
    else:
        raise ValueError("Unexpected type: {}", type(details))
    existing_data = json.loads(ls.getItem(type_.name) or "{}")
    existing_data[key] = details.to_json()
    ls.setItem(type_.name, existing_data, type_.name)


def get_details(type_: DetailsType):
    return json.loads((ls.getItem(type_.name) or "{}"))