# Path: lib/Utility.py
# RE_COMPILED_TYPE = type(re.compile(''))
# POE_NINJA_API = 'http://api.poe.ninja/api/Data/'
#     CONFIG_FNAME = "cfg\\app.ini"
# class MsgType(IntEnum):
# class Messenger:
# class AppException(Exception):
# class CompileException(AppException):
# class AppConfiguration:
# class NoIndent(object):
# class NoIndentEncoder(json.JSONEncoder):
# class ConfidenceLevel(IntEnum):
#     def __init__(self):
#     def send_tmsg(self, msg, log_level=logging.NOTSET, tag=None):
#     def send_msg(self, msg, log_level=logging.NOTSET, timed=False, tag=None):
#     def send_stopped(self):
#     def send_update_id(self, id):
#     def send_object(self, obj):
#     def __init__(self):
#     def load(self):
#     def load_default(self):
#     def _load_settings(self, settings=None):
#     def update(self, cfg):
#     def save(self):
# def getBytesFromURL(url, handle=None, max_attempts=1, connect_timeout=None, timeout=None, gzip=True):
# def getJsonFromURL(url, handle=None, max_attempts=1, gzip=True):
# def getDataFromUrl(url, callback, max_attempts=1):
# def str2bool(val):
# def round_up(num):
# def round_down(num):
# def dround(num, ndigits=2):
# def tmsg(msg):
# def getBaseUrl(url):
# def isAbsoluteUrl(url):
# def logexception():
# def get_verror_msg(verror, data=None):
#     def __init__(self, value):
#     def __init__(self, *args, **kwargs):
#     def default(self, o):
#     def encode(self, o):
# def utc_to_local(utc_dt):
# def namify(text):
# def normalize_id(text):


import json
import pycurl
import re
import threading
from datetime import datetime, timedelta
from json import JSONEncoder
from urllib.parse import urljoin
from lib.Utility import getJsonFromURL, AppException, config, NoIndent, NoIndentEncoder, logexception, msgr, \
    utc_to_local, CompileException, ConfidenceLevel, POE_NINJA_API

        with open(CurrencyManager.CURRENCY_FNAME, "w", encoding="utf-8", errors="replace") as f:
            f.write(json.dumps(data, indent=4, separators=(',', ': '), sort_keys=True, cls=CurrencyEncoder))

    def compile(self, shorts=None, rates=None, overrides=None, last_update=None):
        with self.compile_lock:
            if rates is None:
                rates = self.rates
            if shorts is None:
                shorts = self.shorts
            if overrides is None:
                overrides = self.overrides

            tcm = CurrencyManager()
            tcm._compile(rates, shorts, overrides)

            self.shorts = shorts
            self.rates = rates
            self.overrides = overrides
            self.cshorts = tcm.cshorts
            self.crates = tcm.crates

            if last_update:
                self.last_update = last_update
            self.save()
            self.initialized = True

            msgr.send_object(CurrencyInfo())



# Path: lib/Utility.py
# RE_COMPILED_TYPE = type(re.compile(''))
# POE_NINJA_API = 'http://api.poe.ninja/api/Data/'
#     CONFIG_FNAME = "cfg\\app.ini"
# class MsgType(IntEnum):
# class Messenger:
# class AppException(Exception):
# class CompileException(AppException):
# class AppConfiguration:
# class NoIndent(object):
# class NoIndentEncoder(json.JSONEncoder):
# class ConfidenceLevel(IntEnum):
#     def __init__(self):
#     def send_tmsg(self, msg, log_level=logging.NOTSET, tag=None):
#     def send_msg(self, msg, log_level=logging.NOTSET, timed=False, tag=None):
#     def send_stopped(self):
#     def send_update_id(self, id):
#     def send_object(self, obj):
#     def __init__(self):
#     def load(self):
#     def load_default(self):
#     def _load_settings(self, settings=None):
#     def update(self, cfg):
#     def save(self):
# def getBytesFromURL(url, handle=None, max_attempts=1, connect_timeout=None, timeout=None, gzip=True):
# def getJsonFromURL(url, handle=None, max_attempts=1, gzip=True):
# def getDataFromUrl(url, callback, max_attempts=1):
# def str2bool(val):
# def round_up(num):
# def round_down(num):
# def dround(num, ndigits=2):
# def tmsg(msg):
# def getBaseUrl(url):
# def isAbsoluteUrl(url):
# def logexception():
# def get_verror_msg(verror, data=None):
#     def __init__(self, value):
#     def __init__(self, *args, **kwargs):
#     def default(self, o):
#     def encode(self, o):
# def utc_to_local(utc_dt):
# def namify(text):
# def normalize_id(text):


# Path: lib/CurrencyManager.py
import json
import pycurl
import re
import threading
from datetime import datetime, timedelta
from json import JSONEncoder
from urllib.parse import urljoin
from lib.Utility import getJsonFromURL, AppException, config, NoIndent, NoIndentEncoder, logexception, msgr, \
    utc_to_local, CompileException, ConfidenceLevel, POE_NINJA_API


        with open(CurrencyManager.CURRENCY_FNAME, "w", encoding="utf-8", errors="replace") as f:
            f.write(json.dumps(data, indent=4, separators=(',', ': '), sort_keys=True, cls=CurrencyEncoder))

    def compile(self, shorts=None, rates=None, overrides=None, last_update=None):
        with self.compile_lock:
            if rates is None:
                rates = self.rates
            if shorts is None:
                shorts = self.shorts
            if overrides is None:
                overrides = self.overrides

            tcm = CurrencyManager()
            tcm._compile(rates, shorts, overrides)

            self.shorts = shorts
            self.rates = rates
            self.overrides = overrides
            self.cshorts = tcm.cshorts
            self.crates = tcm.crates

            if last_update:
                self.last_update = last_update
            self.save()
            self.initialized = True

            msgr.send_object(CurrencyInfo())



    @property