Making sure multilanguage is possible

This commit is contained in:
Profitroll
2022-09-15 00:16:38 +02:00
parent 390e6f326e
commit bd47790b0d
5 changed files with 99 additions and 38 deletions

View File

@@ -1,12 +1,11 @@
# -*- coding: utf-8 -*-
"""Some set of functions needed for discord/telegram bots and other types of apps"""
import gzip
import os
import shutil
from os import sep, stat, makedirs
from datetime import datetime
from ujson import loads, dumps
from shutil import copyfileobj
from gzip import open as gzipopen
def nowtimeGet(format="%H:%M:%S | %d.%m.%Y"):
@@ -21,7 +20,7 @@ def nowtimeGet(format="%H:%M:%S | %d.%m.%Y"):
return datetime.now().strftime(format)
def checkSize(logs_folder="logs/", log_size=1024):
def checkSize(logs_folder=f"logs{sep}", log_size=1024):
"""Checks latest log file size and rotates it if needed.
### Args:
@@ -31,11 +30,11 @@ def checkSize(logs_folder="logs/", log_size=1024):
i = 0
while i < 2:
try:
log = os.stat(logs_folder + 'latest.log')
log = stat(logs_folder + 'latest.log')
if (log.st_size / 1024) > log_size:
with open(logs_folder + 'latest.log', 'rb') as f_in:
with gzip.open(f'{logs_folder}{datetime.now().strftime("%d.%m.%Y_%H:%M:%S")}.zip', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
with gzipopen(f'{logs_folder}{datetime.now().strftime("%d.%m.%Y_%H:%M:%S")}.zip', 'wb') as f_out:
copyfileobj(f_in, f_out)
open(logs_folder + 'latest.log', 'w').close()
i = 2
except FileNotFoundError:
@@ -44,7 +43,7 @@ def checkSize(logs_folder="logs/", log_size=1024):
open(logs_folder + 'latest.log', 'a').close()
except:
try:
os.mkdir(logs_folder)
makedirs(logs_folder, exist_ok=True)
log = open(logs_folder + 'latest.log', 'a')
open(logs_folder + 'latest.log', 'a').close()
except:
@@ -52,7 +51,7 @@ def checkSize(logs_folder="logs/", log_size=1024):
i += 1
def logWrite(message, logs_folder="logs/", level="INFO"):
def logWrite(message, logs_folder=f"logs{sep}", level="INFO"):
"""Append some message to latest log file.
### Args:
@@ -68,7 +67,7 @@ def logWrite(message, logs_folder="logs/", level="INFO"):
open(logs_folder + 'latest.log', 'a').close()
except:
try:
os.mkdir(logs_folder)
makedirs(logs_folder, exist_ok=True)
log = open(logs_folder + 'latest.log', 'a')
open(logs_folder + 'latest.log', 'a').close()
except:

View File

@@ -1,21 +1,41 @@
# -*- coding: utf-8 -*-
"""Essential set of functions needed for discord/telegram bots and other types of apps"""
from modules.functions import jsonLoad, jsonSave
from os import sep
def locale(key, *args):
strings = jsonLoad("strings.json")
string = strings
def configGet(key: str, *args: str):
"""Get value of the config key
Args:
* key (str): The last key of the keys path.
* *args (str): Path to key like: dict[args][key].
Returns:
* any: Value of provided key
"""
this_dict = jsonLoad("config.json")
this_key = this_dict
for dict_key in args:
string = string[dict_key]
return string[key]
this_key = this_key[dict_key]
return this_key[key]
def configGet(key):
return jsonLoad("config.json")[key]
def configAppend(key, value):
config = jsonLoad("config.json")
config[key].append(value)
jsonSave("config.json", config)
def configAppend(key: str, value, *args: str):
"""Set key to a value
Args:
* key (str): The last key of the keys path.
* value (str/int/float/list/dict/None): Some needed value.
* *args (str): Path to key like: dict[args][key].
"""
this_dict = jsonLoad("config.json")
string = "this_dict"
for arg in args:
string += f'["{arg}"]'
if type(value) in [str]:
string += f'["{key}"].append("{value}")'
else:
string += f'["{key}"].append({value})'
exec(string)
jsonSave(this_dict, "config.json")
return
def configRemove(key, value):
config = jsonLoad("config.json")
@@ -23,14 +43,47 @@ def configRemove(key, value):
jsonSave("config.json", config)
def locale(key: str, *args: str, locale=configGet("locale")):
"""Get value of locale string
Args:
* key (str): The last key of the locale's keys path.
* *args (list): Path to key like: dict[args][key].
* locale (str): Locale to looked up in. Defaults to config's locale value.
Returns:
* any: Value of provided locale key
"""
if (locale == None):
locale = configGet("locale")
try:
this_dict = jsonLoad(f'{configGet("locale", "locations")}{sep}{locale}.json')
except FileNotFoundError:
try:
this_dict = jsonLoad(f'{configGet("locale", "locations")}{sep}{configGet("locale")}.json')
except FileNotFoundError:
try:
this_dict = jsonLoad(f'{configGet("locale_fallback", "locations")}{sep}{configGet("locale")}.json')
except:
return f'⚠️ Locale in config is invalid: could not get "{key}" in {str(args)} from locale "{locale}"'
this_key = this_dict
for dict_key in args:
this_key = this_key[dict_key]
try:
return this_key[key]
except KeyError:
return f'⚠️ Locale in config is invalid: could not get "{key}" in {str(args)} from locale "{locale}"'
def userSet(userid, key, value):
user = jsonLoad(f"data/users/{userid}.json")
user = jsonLoad(f"data{sep}users{sep}{userid}.json")
user[key] = value
jsonSave(f"data/users/{userid}.json", user)
jsonSave(f"data{sep}users{sep}{userid}.json", user)
def userGet(userid, key):
try:
return jsonLoad(f"data/users/{userid}.json")[key]
return jsonLoad(f"data{sep}users{sep}{userid}.json")[key]
except KeyError:
return None
except FileNotFoundError:
@@ -38,8 +91,8 @@ def userGet(userid, key):
def userClear(userid, key):
try:
user = jsonLoad(f"data/users/{userid}.json")
user = jsonLoad(f"data{sep}users{sep}{userid}.json")
del user[key]
jsonSave(f"data/users/{userid}.json", user)
jsonSave(f"data{sep}users{sep}{userid}.json", user)
except KeyError:
pass