mirror of
https://github.com/bcomsugi/Quickbooks-API.git
synced 2026-01-09 09:42:40 +07:00
add getvaluesof()
This commit is contained in:
parent
0f769f33ce
commit
d7dd3ae1ba
89
QBClasses.py
89
QBClasses.py
@ -1,33 +1,23 @@
|
||||
from server import baseQBQuery, timing
|
||||
import pprint
|
||||
import timeit
|
||||
from time import time
|
||||
import xml.dom.minidom
|
||||
from utils import timing, cleanIncludeRetElements
|
||||
|
||||
|
||||
def timing(f):
|
||||
# @wraps(f)
|
||||
def wrap(*args, **kw):
|
||||
ts = time()
|
||||
result = f(*args, **kw)
|
||||
te = time()
|
||||
print('func:%r args:[%r, %r] took: %2.6f sec' % \
|
||||
(f.__name__, args, kw, te-ts))
|
||||
return result
|
||||
return wrap
|
||||
|
||||
# from functools import wraps
|
||||
|
||||
def cleanIncludeRetElements(includeRetElements_allowed:list, includeRetElements:list):
|
||||
iREs = []
|
||||
# print(f'{includeRetElements_allowed = }\n{includeRetElements = }')
|
||||
if isinstance(includeRetElements, str): #if user put 1 str argument in IncludeRetElements, change it to list
|
||||
includeRetElements = [includeRetElements]
|
||||
for iRE in includeRetElements:
|
||||
for iRE_a in includeRetElements_allowed:
|
||||
if iRE.lower() == iRE_a.lower():
|
||||
iREs.append(iRE_a)
|
||||
break
|
||||
return iREs
|
||||
# def cleanIncludeRetElements(includeRetElements_allowed:list, includeRetElements:list):
|
||||
# iREs = []
|
||||
# # print(f'{includeRetElements_allowed = }\n{includeRetElements = }')
|
||||
# if isinstance(includeRetElements, str): #if user put 1 str argument in IncludeRetElements, change it to list
|
||||
# includeRetElements = [includeRetElements]
|
||||
# for iRE in includeRetElements:
|
||||
# for iRE_a in includeRetElements_allowed:
|
||||
# if iRE.lower() == iRE_a.lower():
|
||||
# iREs.append(iRE_a)
|
||||
# break
|
||||
# return iREs
|
||||
|
||||
|
||||
class ItemInventoryQuery(baseQBQuery):
|
||||
@ -79,6 +69,7 @@ class ItemInventoryQuery(baseQBQuery):
|
||||
|
||||
# print(self.__class__.__name__ + "Rq")
|
||||
# print(self.QBDict)
|
||||
self.runCheck() ### running the qbxml connection to get data ###
|
||||
|
||||
class GeneralSummaryReportQuery(baseQBQuery):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@ -126,6 +117,7 @@ class GeneralSummaryReportQuery(baseQBQuery):
|
||||
|
||||
print(self.__class__.__name__ + "Rq")
|
||||
print(f'{self.QBDict = }')
|
||||
self.runCheck() ### running the qbxml connection to get data ###
|
||||
|
||||
class InvoiceAdd(baseQBQuery):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@ -162,42 +154,6 @@ class InvoiceAdd(baseQBQuery):
|
||||
# print(self.__class__.__name__ + "Rq")
|
||||
# print(self.QBDict)
|
||||
|
||||
# x=ItemInventoryQuery('bagus', 'kedua', key5=5, key2="hore", FullName1='hooooo', FromName1="sg", ToName1="sugi", IncludeRetElement1=['Name', 'FullName'], MaxReturned="2")
|
||||
# x.create_QBXML()
|
||||
# x.connect_to_quickbooks()
|
||||
# # print(x.find_firstListOfDict("FullName")['FullName'])
|
||||
|
||||
# # print(x.find_firstListOfDictValue("PurchaseCost"))
|
||||
# # print(x.find_firstListOfDict("PurchaseCost"))
|
||||
# # print(x.find_allListOfDict("FullName"))
|
||||
# # pprint.pprint(x.Rs)
|
||||
# # print("ada" if list(x.find_listOfDict("FullName")) else "ga")
|
||||
|
||||
# print(x.filter("FullName"))
|
||||
# y=x.filter("Name")
|
||||
# print(type(x.filter("FullName1")))
|
||||
# print(type(y))
|
||||
# print(x.filter("FullName1").all())
|
||||
# _test=x.filter("FullName1").all()
|
||||
# if _test:
|
||||
# print(_test)
|
||||
# try:
|
||||
# print(x.filter("FullName1").all()[-1])
|
||||
# except Exception as e:
|
||||
# print(e)
|
||||
# print(x.filter("FullName1").first())
|
||||
# print(x.filter("FullName1").firstValue())
|
||||
# print(x.filter("FullName1").last())
|
||||
# print(x.filter("FullName1").lastValue())
|
||||
# print(x.filter("FullName").count())
|
||||
# print(y.last())
|
||||
# print(y.lastValue())
|
||||
# pprint.pprint(x.all())
|
||||
# a1=x.filter("FullName")
|
||||
# print(a1)
|
||||
# a2 = x.filter("Name")
|
||||
# print(a2)
|
||||
# print(a1)
|
||||
|
||||
|
||||
class CustomerQuery(baseQBQuery):
|
||||
@ -246,10 +202,11 @@ class CustomerQuery(baseQBQuery):
|
||||
self.QBDict[self.__class__.__name__ + "Rq"]["IncludeRetElement"]=IRE
|
||||
if 'OwnerID' in kwargs:
|
||||
self.QBDict[self.__class__.__name__ + "Rq"]["OwnerID"]=kwargs['OwnerID']
|
||||
|
||||
print(self.__class__.__name__ + "Rq")
|
||||
print(f'{self.QBDict = }' )
|
||||
print(f'{self.includeRetElements_allowed =}')
|
||||
|
||||
# print(f'{self.includeRetElements_allowed =}')
|
||||
self.runCheck() ### running the qbxml connection to get data ###
|
||||
|
||||
|
||||
|
||||
@ -266,7 +223,7 @@ if __name__ == "__main__":
|
||||
@timing
|
||||
def iteminventoryquery():
|
||||
# g=ItemInventoryQuery()
|
||||
g=ItemInventoryQuery(debug = False, MaxReturned = None, IncludeRetElement=["FullName", "DataExtRet", "Name", "QuantityOnHand", "QuantityOnSalesOrder", "QuantityOnOrder", ]) #put OwnerID=0 to get DataExtRet
|
||||
g=ItemInventoryQuery(debug = True, MaxReturned = 3, IncludeRetElement=["FullName", "DataExtRet", "Name", "QuantityOnHand", "QuantityOnSalesOrder", "QuantityOnOrder", ]) #put OwnerID=0 to get DataExtRet
|
||||
# print("before g.all")
|
||||
# print(f'{g.all() = }')
|
||||
# print("after g.all")
|
||||
@ -275,13 +232,17 @@ if __name__ == "__main__":
|
||||
# print(f'{g.filter("fullname") = }')
|
||||
|
||||
# print(f'{g = }')
|
||||
# pprint.pprint(g.response_string,indent=4 )
|
||||
print(g.response_string, type(g.response_string))
|
||||
print("before")
|
||||
# print(g.filter([ "Name", "QuantityOnHand", "QUantityOnSalesOrder", "QuantityonOrder"]).first())
|
||||
c = g.filter([ "Name", "QuantityOnHand", "QUantityOnSalesOrder", "QuantityonOrder"]).all()
|
||||
print(c)
|
||||
c = g.filter([ "Name", "QuantityOnHand", "QUantityOnSalesOrder", "QuantityonOrder"]).first()
|
||||
print("c:",type(c), c)
|
||||
# pprint.pprint(g.returnRet())
|
||||
# print(g.filter("name").firstValue())
|
||||
print(g.count())
|
||||
print(g.statusOk)
|
||||
print(g.filter(["name", "quantityonhand"]).getValuesOf("quantityonhand"))
|
||||
|
||||
|
||||
# print(g.filter(["DataExtRet"]).all())
|
||||
|
||||
128
server.py
128
server.py
@ -1,9 +1,10 @@
|
||||
import pprint
|
||||
import xmltodict
|
||||
import win32com.client
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
# import xml.etree.ElementTree as ET
|
||||
import xml.dom.minidom as minidom
|
||||
from time import time
|
||||
from utils import cleanIncludeRetElements
|
||||
|
||||
def timing(f):
|
||||
# @wraps(f)
|
||||
@ -28,18 +29,18 @@ class baseQBQuery:
|
||||
self.varDict = {}
|
||||
### start ### variable to be replace with other class init value
|
||||
self.onError = "continueOnError"
|
||||
self.cleanIncludeRetElements = None
|
||||
# self.cleanIncludeRetElements = None
|
||||
self.includeRetElements_allowed = None
|
||||
self.retName = None
|
||||
self.defaultFilterKey = None
|
||||
self.class_debug = False
|
||||
### end ### variable to be replace with other class init value
|
||||
self.listOfDict = self.ListOfDict(None, self.varDict, self.retName)
|
||||
self.listOfDict = self.ListOfDict(None, self.varDict, self.retName, False)
|
||||
self.statusCode = -1
|
||||
self.statusMessage = ""
|
||||
self.statusSeverity = ""
|
||||
self.statusOk = False
|
||||
|
||||
self.statusOk = False
|
||||
|
||||
# @timing
|
||||
def create_QBXML(self):
|
||||
version = "13.0"
|
||||
@ -71,7 +72,7 @@ class baseQBQuery:
|
||||
print(f'{dataDict = }')
|
||||
# # QBXML = '<?qbxml version="13.0"?>' + xmltodict.unparse(dataDict, pretty=True)
|
||||
self.QBXML = xmltodict.unparse(dataDict, pretty=True).replace("</?qbxml>", "").replace(f'version="{version}"', f'version="{version}"?')
|
||||
print(self.QBXML)
|
||||
print(self.QBXML, type(self.QBXML))
|
||||
return self.QBXML
|
||||
|
||||
# @timing
|
||||
@ -88,7 +89,13 @@ class baseQBQuery:
|
||||
# Disconnect from Quickbooks
|
||||
sessionManager.EndSession(ticket) # Close the company file
|
||||
sessionManager.CloseConnection() # Close the connection
|
||||
|
||||
# Beautify response_string
|
||||
# print(f'{self.response_string = }')
|
||||
xml = minidom.parseString(self.response_string.replace("\n", ""))
|
||||
self.response_string = xml.toprettyxml()
|
||||
# print(f'{self.response_string = }')
|
||||
|
||||
self.statusOk = self.isDataOK()
|
||||
return self.statusOk
|
||||
return self.response_string
|
||||
@ -108,6 +115,7 @@ class baseQBQuery:
|
||||
self.listOfDict.filterKey = ["@statusSeverity"]
|
||||
self.statusSeverity = self.listOfDict.firstValue().get('@statusSeverity')
|
||||
self.listOfDict.filterKey = [self.retName]
|
||||
print(self.listOfDict.firstValue())
|
||||
if self.listOfDict.firstValue().get(self.retName,None)==None:
|
||||
return False
|
||||
|
||||
@ -116,7 +124,7 @@ class baseQBQuery:
|
||||
return True
|
||||
# isStatusOK=None
|
||||
|
||||
# for _ in self.find_listOfDict("FullName", ): ###berhasil
|
||||
# for _ in self.findKeyInDict("FullName", ): ###berhasil
|
||||
# print(f'{_ = }')
|
||||
# for _ in self.gen_dict_extract("@statusMessage", self.varDict):
|
||||
# print(_)
|
||||
@ -131,10 +139,10 @@ class baseQBQuery:
|
||||
# # print(f'{self.retName = }')
|
||||
# self.Rs = self.find_firstListOfDict(self.retName)[self.retName]
|
||||
# # self.Rs=self.returnRet(self.varDict)
|
||||
# # # print(self.find_listOfDict("FullName", )) ###test
|
||||
# # print(self.find_listOfDict("FullName", self.find_listOfDict("QBXMLMsgsRs1", ))) ###test
|
||||
# # # print(self.find_listOfDict("@statusMessage", )) ###test
|
||||
# # for _ in self.find_listOfDict("QBXMLMsgsRs",): ###trial blm berhasil
|
||||
# # # print(self.findKeyInDict("FullName", )) ###test
|
||||
# # print(self.findKeyInDict("FullName", self.findKeyInDict("QBXMLMsgsRs1", ))) ###test
|
||||
# # # print(self.findKeyInDict("@statusMessage", )) ###test
|
||||
# # for _ in self.findKeyInDict("QBXMLMsgsRs",): ###trial blm berhasil
|
||||
# # print(f'2{_ = }')
|
||||
# # print(f'{self.Rs = }')
|
||||
# # print(type(self.Rs))
|
||||
@ -158,6 +166,7 @@ class baseQBQuery:
|
||||
return None
|
||||
|
||||
def runCheck(self):
|
||||
# print("runCheck")
|
||||
if self.varDict:
|
||||
return True
|
||||
if self.response_string:
|
||||
@ -182,11 +191,11 @@ class baseQBQuery:
|
||||
|
||||
|
||||
def filter(self, key=None):
|
||||
# print(f'{key = }')
|
||||
print(f'{key = }')
|
||||
# print(f'{self.statusOk = }')
|
||||
if not self.runCheck():
|
||||
print("not runcheck")
|
||||
return self.ListOfDict(["abc"], self.varDict, self.retName, self.statusOk)
|
||||
return self.ListOfDict(["abc"], self.varDict, self.retName, self.includeRetElements_allowed, self.statusOk)
|
||||
return []
|
||||
if isinstance(key, str):
|
||||
key = [key]
|
||||
@ -196,12 +205,12 @@ class baseQBQuery:
|
||||
key = [x for x,y in key.items()]
|
||||
else:
|
||||
return []
|
||||
key = self.cleanIncludeRetElements(self.includeRetElements_allowed, key)
|
||||
key = cleanIncludeRetElements(self.includeRetElements_allowed, key)
|
||||
# print(f'f {key = }')
|
||||
if key:
|
||||
return self.ListOfDict(key, self.varDict, self.retName)
|
||||
return self.ListOfDict(key, self.varDict, self.retName, self.includeRetElements_allowed, self.statusOk)
|
||||
else:
|
||||
return self.ListOfDict(["abc"], self.varDict, self.retName)
|
||||
return self.ListOfDict(["abc"], self.varDict, self.retName, self.includeRetElements_allowed, self.statusOk)
|
||||
### dont use this way, better returning class because the value if you assign to variable, the valu will be the last filterKey inputed
|
||||
### if return class, every filterKey is an object, different from other filterKey
|
||||
self.listOfDict.varDict = self.varDict
|
||||
@ -213,7 +222,7 @@ class baseQBQuery:
|
||||
if not self.runCheck():
|
||||
return None
|
||||
# return self.ListOfDict(None, self.varDict, self.retName).firstValue()
|
||||
return self.ListOfDict(None, self.varDict, self.retName).firstValue()[self.retName]
|
||||
return self.ListOfDict(None, self.varDict, self.retName, self.includeRetElements_allowed, self.statusOk).firstValue()[self.retName]
|
||||
### dont use this way
|
||||
self.listOfDict.varDict = self.varDict
|
||||
self.listOfDict.filterKey = self.retName
|
||||
@ -223,7 +232,7 @@ class baseQBQuery:
|
||||
|
||||
|
||||
class ListOfDict:
|
||||
def __init__(self, key, var, retName, statusOk:bool = True) -> None:
|
||||
def __init__(self, key, var, retName, includeRetElements_allowed:list ,statusOk:bool = True) -> None:
|
||||
# print(f'{key =}, {var =}')
|
||||
# self.first = self.find_firstListOfDict(key)
|
||||
if key:
|
||||
@ -233,7 +242,9 @@ class baseQBQuery:
|
||||
# print(f"{self.filterKey = }")
|
||||
self.varDict = var
|
||||
self.statusOk = statusOk
|
||||
self._includeRetElements_allowed = includeRetElements_allowed
|
||||
# print("listofDict")
|
||||
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return str(self.all())
|
||||
@ -242,18 +253,31 @@ class baseQBQuery:
|
||||
self.filterKey=filterKey
|
||||
|
||||
|
||||
def dct(self, var:dict=None, dataRetList:list=None):
|
||||
for xdct in self.find_listOfDict(var, dataRetList):
|
||||
print(f'{xdct = }')
|
||||
_dct = [x[self.filterKey] for x in self.find_listOfDict(var, dataRetList)]
|
||||
def getValuesOf(self, key:str=None, var:dict=None, dataRetList:list=None) :
|
||||
if key==None:
|
||||
key = self.filterKey[0]
|
||||
elif isinstance(key, str):
|
||||
pass
|
||||
else:
|
||||
raise TypeError(f'{key=} should be string not {type(key)}')
|
||||
key = cleanIncludeRetElements(self._includeRetElements_allowed, key)
|
||||
if len(key)==0:
|
||||
key = self.filterKey[0]
|
||||
else:
|
||||
key = key[0]
|
||||
# print(f'getvaluesof {key = }')
|
||||
# for xdct in self.findKeyInDict(var, dataRetList):
|
||||
# print(f'{xdct = }', type(xdct), self.filterKey[0], key)
|
||||
_dct = [x[key] for x in self.findKeyInDict(var, dataRetList)]
|
||||
# print(_dct)
|
||||
return _dct
|
||||
|
||||
def all(self, var:dict=None, dataRetList:list=None):
|
||||
def all(self, var:dict=None, dataRetList:list=None) -> list:
|
||||
# print(f'{self.statusOk = }')
|
||||
if not self.statusOk:
|
||||
return []
|
||||
_lst = [x for x in self.find_listOfDict(var, dataRetList)]
|
||||
# _lst = [x[self.filterKey] for x in self.find_listOfDict(var, dataRetList)]
|
||||
_lst = [x for x in self.findKeyInDict(var, dataRetList)]
|
||||
# _lst = [x[self.filterKey] for x in self.findKeyInDict(var, dataRetList)]
|
||||
# if _lst:
|
||||
return _lst
|
||||
# else:
|
||||
@ -262,18 +286,18 @@ class baseQBQuery:
|
||||
def allOnlyValue(self, var:dict=None, dataRetList:list=None):
|
||||
if not self.statusOk:
|
||||
return []
|
||||
_lst = [x for x in self.find_listOfDict(var, dataRetList)]
|
||||
_lst = [x for x in self.findKeyInDict(var, dataRetList)]
|
||||
return _lst
|
||||
|
||||
def first(self, var:dict=None, dataRetList:list=None):
|
||||
def first(self, var:dict=None, dataRetList:list=None) -> dict:
|
||||
if not self.statusOk:
|
||||
return []
|
||||
return next(self.find_listOfDict( var, dataRetList), None)
|
||||
return {}
|
||||
return next(self.findKeyInDict( var, dataRetList), {})
|
||||
|
||||
def firstValue(self, var:dict=None, dataRetList:list=None):
|
||||
def firstValue(self, var:dict=None, dataRetList:list=None) ->dict:
|
||||
if not self.statusOk:
|
||||
print("firstValue statusOk is False")
|
||||
return []
|
||||
return {}
|
||||
# return self.first(var, dataRetList)[self.filterKey]
|
||||
_val=self.first(var, dataRetList)
|
||||
# print(f'{_val = }')
|
||||
@ -281,34 +305,34 @@ class baseQBQuery:
|
||||
# return _val[self.filterKey]
|
||||
return _val
|
||||
else:
|
||||
return []
|
||||
return {}
|
||||
|
||||
def last(self, var:dict=None, dataRetList:list=None):
|
||||
def last(self, var:dict=None, dataRetList:list=None) -> dict:
|
||||
if not self.statusOk:
|
||||
return []
|
||||
# *_, last = self.find_listOfDict( var, dataRetList)
|
||||
return {}
|
||||
# *_, last = self.findKeyInDict( var, dataRetList)
|
||||
_val= self.all(var, dataRetList)
|
||||
if _val:return _val[-1]
|
||||
else: return []
|
||||
else: return {}
|
||||
|
||||
def lastValue(self, var:dict=None, dataRetList:list=None):
|
||||
def lastValue(self, var:dict=None, dataRetList:list=None) -> dict:
|
||||
if not self.statusOk:
|
||||
return []
|
||||
return {}
|
||||
_val=self.last(var, dataRetList)
|
||||
# print(f"lastValue {_val =}")
|
||||
if _val:
|
||||
# return _val[self.filterKey]
|
||||
return _val
|
||||
else:
|
||||
return []
|
||||
return {}
|
||||
|
||||
def count(self, var:dict=None, dataRetList:list=None):
|
||||
def count(self, var:dict=None, dataRetList:list=None) -> int:
|
||||
if not self.statusOk:
|
||||
return 0
|
||||
# print(len(self.all()))
|
||||
return len(self.all())
|
||||
|
||||
# def find_listOfDict(self, var:dict=None, dataRetList:list=None, ):
|
||||
# def findKeyInDict(self, var:dict=None, dataRetList:list=None, ):
|
||||
# # print("genfinekeys")
|
||||
# if var==None:
|
||||
# var=self.varDict
|
||||
@ -318,7 +342,7 @@ class baseQBQuery:
|
||||
# if isinstance(var, list):
|
||||
# # print("list var")
|
||||
# for _ in var:
|
||||
# yield from self.find_listOfDict( _, )
|
||||
# yield from self.findKeyInDict( _, )
|
||||
# elif isinstance(var, dict):
|
||||
# # print("dict var")
|
||||
# if self.filterKey in var:
|
||||
@ -329,10 +353,10 @@ class baseQBQuery:
|
||||
# # print(f'dict else var={var}')
|
||||
# for _ in var:
|
||||
# # print(_)
|
||||
# yield from self.find_listOfDict(var[_], )
|
||||
# yield from self.findKeyInDict(var[_], )
|
||||
# return dataRetList
|
||||
|
||||
def find_listOfDict(self, var:dict=None, dataRetList:list=None, ):
|
||||
def findKeyInDict(self, var:dict=None, dataRetList:list=None, ):
|
||||
# print("genfinekeys")
|
||||
if var==None:
|
||||
var=self.varDict
|
||||
@ -342,7 +366,7 @@ class baseQBQuery:
|
||||
if isinstance(var, list):
|
||||
# print("list var")
|
||||
for _ in var:
|
||||
yield from self.find_listOfDict( _, )
|
||||
yield from self.findKeyInDict( _, )
|
||||
elif isinstance(var, dict):
|
||||
# print("dict var")
|
||||
found = False
|
||||
@ -362,20 +386,20 @@ class baseQBQuery:
|
||||
# print(f'dict else var={var}')
|
||||
for _ in var:
|
||||
# print(_)
|
||||
yield from self.find_listOfDict(var[_], )
|
||||
yield from self.findKeyInDict(var[_], )
|
||||
return dataRetList
|
||||
|
||||
|
||||
# def find_allListOfDict(self, key, var:dict=None, dataRetList:list=None):
|
||||
# return [x for x in self.find_listOfDict(key, var, dataRetList)]
|
||||
# return [x for x in self.findKeyInDict(key, var, dataRetList)]
|
||||
|
||||
# def find_firstListOfDictValue(self, key, var:dict=None, dataRetList:list=None):
|
||||
# return self.find_firstListOfDict(key, var, dataRetList)[key]
|
||||
|
||||
# def find_firstListOfDict(self, key, var:dict=None, dataRetList:list=None):
|
||||
# return next(self.find_listOfDict(key, var, dataRetList), None)
|
||||
# return next(self.findKeyInDict(key, var, dataRetList), None)
|
||||
|
||||
# def find_listOfDict(self, key, var:dict=None, dataRetList:list=None, ):
|
||||
# def findKeyInDict(self, key, var:dict=None, dataRetList:list=None, ):
|
||||
# # print("genfinekeys")
|
||||
# if var==None:
|
||||
# var=self.varDict
|
||||
@ -385,7 +409,7 @@ class baseQBQuery:
|
||||
# if isinstance(var, list):
|
||||
# # print("list var")
|
||||
# for _ in var:
|
||||
# yield from self.find_listOfDict(key, _, )
|
||||
# yield from self.findKeyInDict(key, _, )
|
||||
# elif isinstance(var, dict):
|
||||
# # print("dict var")
|
||||
# if key in var:
|
||||
@ -396,7 +420,7 @@ class baseQBQuery:
|
||||
# # print(f'dict else var={var}')
|
||||
# for _ in var:
|
||||
# # print(_)
|
||||
# yield from self.find_listOfDict(key, var[_], )
|
||||
# yield from self.findKeyInDict(key, var[_], )
|
||||
# return dataRetList
|
||||
|
||||
|
||||
|
||||
27
utils.py
Normal file
27
utils.py
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
from time import time
|
||||
|
||||
|
||||
def timing(f):
|
||||
# @wraps(f)
|
||||
def wrap(*args, **kw):
|
||||
ts = time()
|
||||
result = f(*args, **kw)
|
||||
te = time()
|
||||
print('func:%r args:[%r, %r] took: %2.6f sec' % \
|
||||
(f.__name__, args, kw, te-ts))
|
||||
return result
|
||||
return wrap
|
||||
|
||||
|
||||
def cleanIncludeRetElements(includeRetElements_allowed:list, includeRetElements:list):
|
||||
iREs = []
|
||||
# print(f'{includeRetElements_allowed = }\n{includeRetElements = }')
|
||||
if isinstance(includeRetElements, str): #if user put 1 str argument in IncludeRetElements, change it to list
|
||||
includeRetElements = [includeRetElements]
|
||||
for iRE in includeRetElements:
|
||||
for iRE_a in includeRetElements_allowed:
|
||||
if iRE.lower() == iRE_a.lower():
|
||||
iREs.append(iRE_a)
|
||||
break
|
||||
return iREs
|
||||
Loading…
Reference in New Issue
Block a user