You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
|
10 months ago
|
# -*- coding: utf-8 -*-
|
||
|
|
"""Common functions."""
|
||
|
|
import json
|
||
|
|
import yaml
|
||
|
|
from urllib.parse import urlencode
|
||
|
|
from urllib.request import Request, urlopen
|
||
|
|
|
||
|
|
|
||
|
|
def load_yaml_file(yaml_file: str) -> dict:
|
||
|
|
with open(yaml_file, 'r', encoding='utf-8') as file:
|
||
|
|
return yaml.safe_load(file)
|
||
|
|
|
||
|
|
|
||
|
|
def save_yaml_file(yaml_file: str, data: dict) -> None:
|
||
|
|
with open(yaml_file, 'w', encoding='utf-8') as file:
|
||
|
|
yaml.safe_dump(
|
||
|
|
data=data, stream=file, allow_unicode=True)
|
||
|
|
|
||
|
|
|
||
|
|
def load_json_file(json_file: str) -> dict:
|
||
|
|
with open(json_file, 'r', encoding='utf-8') as file:
|
||
|
|
return json.load(file)
|
||
|
|
|
||
|
|
|
||
|
|
def save_json_file(json_file: str, data: dict) -> None:
|
||
|
|
with open(json_file, 'w', encoding='utf-8') as file:
|
||
|
|
json.dump(data, file, ensure_ascii=False, indent=4)
|
||
|
|
|
||
|
|
|
||
|
|
def http_get(
|
||
|
|
url: str, params: dict = None, headers: dict = None
|
||
|
|
) -> dict:
|
||
|
|
if params:
|
||
|
|
encoded_params = urlencode(params)
|
||
|
|
full_url = f'{url}?{encoded_params}'
|
||
|
|
else:
|
||
|
|
full_url = url
|
||
|
|
request = Request(full_url, method='GET', headers=headers or {})
|
||
|
|
content: bytes = None
|
||
|
|
with urlopen(request) as response:
|
||
|
|
content = response.read()
|
||
|
|
return (
|
||
|
|
json.loads(str(content, 'utf-8'))
|
||
|
|
if content is not None else None)
|