PKpYJ%nningest_utils/__init__.py""" A few utils for operations common to ingestion tasks """ __version__ = "0.0.6" from ingest_utils.decorators import timeit, lazy_pprint, lazy_print, silence, mem, pandas_print from ingest_utils.pklr import pklr ingest_modules = [ 'timeit', 'lazy_pprint', 'lazy_print', 'silence', 'mem', 'pandas_print', 'pklr', 'ingest_modules' ] __all__ = ingest_modulesPKYJ@EQingest_utils/decorators.pydef timeit(method): """ Returns time of delta for function in seconds """ def timed(*args, **kw): ts = time.time() result = method(*args, **kw) te = time.time() delta = round((te - ts), 1) if delta > 1: t = ' '.join([str(delta), 's']) else: t = ' '.join([str(round((te - ts) * 1000, 1)), 'ms']) print('Function', method.__name__, 'time:', t) print() return round((te - ts), 2) return timed from memory_profiler import profile as mem from IPython.core import display as ICD def pandas_print(func): """ Helps make more printing in Pandas """ top5 = [] def wrapper(): print(top5) for f in func(): if isinlstance(f, dict): top5.append(f) continue elif isinstance(f, pd.core.frame.DataFrame) or isinstance( f, pd.core.series.Series): ICD.display(f) elif isinstance(f, tuple): print([x for x in f]) else: print(f) print(u'\n') t5 = pd.DataFrame(top5) if "Unique Values" in t5.columns: t5 = t5.sort_values( by="Unique Values", inplace=True, ascending=False) return wrapper(t5) return wrapper from io import StringIO from contextlib import redirect_stdout def silence(method): """ Silences print statements by directing to a return statement. Also returns anything returned by the function. Returns ("print buffer","return from original function") """ def wrapper(): with StringIO() as buf, redirect_stdout(buf): value = '' value = method() print('redirected', method.__name__) return buf.getvalue(), value return wrapper from pprint import pprint def lazy_pprint(func): ''' Pure sugar. Print to stdout with just yield ''' def wrapper(*args): for f in func(*args): pprint(f) return wrapper def lazy_print(func): ''' Pure sugar. Print to stdout with just yield ''' def wrapper(*args): for f in func(*args): print(f) return wrapperPKpZJq'22ingest_utils/pklr.pyimport pandas as pd import os class vinegar: def __init__(self, path=None, dtype=str, overwrite=False): self.path = path assert os.path.isfile(self.path), self.path +' is not a file' self.dtype = dtype self.overwrite = overwrite self.df = self.logic() def logic(self): ''' csv path input(s) --> returns a pickle ''' self.pkl = self.path.rsplit('.')[0] + '.pkl' # Return existing pickle if present and `overwrite` arg is false if os.path.isfile(self.pkl) and self.overwrite == False: print(self.pkl, "loaded from pickle") # Read csv into DataFrame and save pickle else: self.csv_pickle() return pd.read_pickle(self.pkl) def csv_pickle(self): csv = pd.read_csv(self.path, index_col=0, dtype=self.dtype, memory_map=True) csv = csv.reset_index(drop=False) csv.to_pickle(path=self.pkl) print( self.pkl, "saved to pickle",) def pklr(**args): return vinegar(**args).df PKdXJ!ingest_utils/dist/tmpaolhkjxk.whlPK!H|&Ub"ingest_utils-0.0.6.dist-info/WHEEL HM K-*ϳR03rOK-J,/RH,Q034 /, (-JLR()*M ILR(4KM̫#DPK!H4:*%ingest_utils-0.0.6.dist-info/METADATAuN@ D %[р\ 29'ȮWkN=(GpBYYZ HjWuK<40~$$hT%`x Ne2KGiʦxnk&ްnf>d&]7[<ΨSqlr=4)e9iM*cN`_}PK!Hi۩b##ingest_utils-0.0.6.dist-info/RECORDr0{% zH!"% >}gl/G,)Ƥ" cA_%Yyyly~ze:Squ/^yKEy#^uweu׿ǭe*jc#M \P\gPd H,$Zt/XŦL~XEѠFw!HjD7]QQX~HluD1/jmCsS 9y!i)fFe~y^HY/B !x6r~? qd۹WavfDu, U@iSq?fǒ[h{+~M%2&zfϭYt7xPKpYJ%nningest_utils/__init__.pyPKYJ@EQingest_utils/decorators.pyPKpZJq'22 ingest_utils/pklr.pyPKdXJ! ingest_utils/dist/tmpaolhkjxk.whlPK!H|&Ub"Iingest_utils-0.0.6.dist-info/WHEELPK!H4:*%ingest_utils-0.0.6.dist-info/METADATAPK!Hi۩b##ingest_utils-0.0.6.dist-info/RECORDPK