Start a profiling mod
parent
7a268ea88e
commit
55f34dfed0
|
@ -0,0 +1,20 @@
|
||||||
|
|
||||||
|
"""
|
||||||
|
Profiling wrappers for internal libs.
|
||||||
|
"""
|
||||||
|
import time
|
||||||
|
from functools import wraps
|
||||||
|
|
||||||
|
|
||||||
|
def timeit(fn):
|
||||||
|
@wraps(fn)
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
t = time.time()
|
||||||
|
res = fn(*args, **kwargs)
|
||||||
|
print(
|
||||||
|
'%s.%s: %.4f sec'
|
||||||
|
% (fn.__module__, fn.__qualname__, time.time() - t)
|
||||||
|
)
|
||||||
|
return res
|
||||||
|
|
||||||
|
return wrapper
|
|
@ -1,81 +0,0 @@
|
||||||
"""Utils."""
|
|
||||||
|
|
||||||
import importlib.util
|
|
||||||
import inspect
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
import os.path
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
from datetime import datetime
|
|
||||||
from functools import wraps
|
|
||||||
|
|
||||||
from PyQt5 import QtCore
|
|
||||||
|
|
||||||
__all__ = (
|
|
||||||
'BASE_DIR',
|
|
||||||
'Settings',
|
|
||||||
'timeit',
|
|
||||||
'fromtimestamp',
|
|
||||||
'get_data_path',
|
|
||||||
'get_resource_path',
|
|
||||||
'strategies_from_file',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
|
|
||||||
def get_data_path(path=''):
|
|
||||||
data_path = QtCore.QStandardPaths.writableLocation(
|
|
||||||
QtCore.QStandardPaths.AppDataLocation
|
|
||||||
)
|
|
||||||
data_path = os.path.join(data_path, path)
|
|
||||||
os.makedirs(data_path, mode=0o755, exist_ok=True)
|
|
||||||
return data_path
|
|
||||||
|
|
||||||
|
|
||||||
def get_resource_path(relative_path):
|
|
||||||
# PyInstaller creates a temp folder and stores path in _MEIPASS
|
|
||||||
base_path = getattr(sys, '_MEIPASS', BASE_DIR)
|
|
||||||
return os.path.join(base_path, relative_path)
|
|
||||||
|
|
||||||
|
|
||||||
config_path = os.path.join(get_data_path(), 'Quantdom', 'config.ini')
|
|
||||||
Settings = QtCore.QSettings(config_path, QtCore.QSettings.IniFormat)
|
|
||||||
|
|
||||||
|
|
||||||
def timeit(fn):
|
|
||||||
@wraps(fn)
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
t = time.time()
|
|
||||||
res = fn(*args, **kwargs)
|
|
||||||
print(
|
|
||||||
'%s.%s: %.4f sec'
|
|
||||||
% (fn.__module__, fn.__qualname__, time.time() - t)
|
|
||||||
)
|
|
||||||
return res
|
|
||||||
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
def fromtimestamp(timestamp):
|
|
||||||
if timestamp == 0:
|
|
||||||
# on Win zero timestamp cause error
|
|
||||||
return datetime(1970, 1, 1)
|
|
||||||
return datetime.fromtimestamp(timestamp)
|
|
||||||
|
|
||||||
|
|
||||||
def strategies_from_file(filepath):
|
|
||||||
from .strategy import AbstractStrategy
|
|
||||||
|
|
||||||
spec = importlib.util.spec_from_file_location('Strategy', filepath)
|
|
||||||
module = importlib.util.module_from_spec(spec)
|
|
||||||
spec.loader.exec_module(module)
|
|
||||||
|
|
||||||
is_strategy = lambda _class: ( # noqa:E731
|
|
||||||
inspect.isclass(_class)
|
|
||||||
and issubclass(_class, AbstractStrategy)
|
|
||||||
and _class.__name__ != 'AbstractStrategy'
|
|
||||||
)
|
|
||||||
return [_class for _, _class in inspect.getmembers(module, is_strategy)]
|
|
Loading…
Reference in New Issue