PK!bD||carve/__init__.pyfrom .__version__ import __version__ # noqa from .carve import treemap, mapkey, mapval, remove, on_key, remove_empty, flow PK!94carve/__version__.py__version__ = "0.2.1"PK!77<<carve/carve.py# todo: # add table / proof / fuzzy testing incl. benchmarks # add docs # add helper functions as premade lambda funcs (test for nulls, etc) # showcase composing a mapper func from cytoolz import itemmap, map, keyfilter, identity, reduce def xform(key, tree, mapfn, path): if not key: return tree (xkey, xtree) = mapfn(key, tree, path) if key: return (xkey, xtree) return xtree def on_key(key, f): return lambda k, v, p: f(k, v, p) if (key in p) else (k, v) def remove_empty(k, v, p): return (None, None) if not v else (k, v) def mapkey(f): return lambda k, v, p: (f(k, v, p), v) def mapval(f): return lambda k, v, p: (k, f(k, v, p)) def remove(f): return lambda k, v, p: (None, None) if f(k, v, p) else (k, v) def flow(*args): return lambda k, v, p: reduce( lambda tup, f: (*f(tup[0], tup[1], tup[2]), tup[2]), args, (k, v, p) )[0:2] def treemap(tree, mapfn, key=None, path=()): res = tree if isinstance(tree, dict): res = keyfilter( identity, itemmap( lambda item: treemap(item[1], mapfn, item[0], path + (item[0],)), tree ), ) elif isinstance(tree, list): res = list(map(lambda t: treemap(t, mapfn, None, path), tree)) return xform(key, res, mapfn, path) PK!M={{carve/curried.pyfrom .carve import treemap as _treemap_noncurried def treemap(fn): return lambda tree: _treemap_noncurried(tree, fn) PK!H WXcarve-0.2.1.dist-info/WHEEL A н#Z."jm)Afb~ڠO68oF04UhoAf f4=4h0k::wXPK!H r carve-0.2.1.dist-info/METADATAVn6ϧ8UTd.݄%hX$l5-[%#)'Z7;d{Rr.ü|C%w|++a;{Nx9ܬ^L2u6 7]{)^ U*%3C0W.nk\Do 3mZEI}i ?*YVf|dܸH(-ُ]+SJQ[L{鼕PxZpp«FpQ[Q_sk\ 6!᧳CڨE/2jax|qh)8rG珔GK|h-j%J7';[A)SݝIM6Id&$yma+PyjoܘaYkؓ˸R𞒙-?$esscZMS sA4Z Q\[5x]JF9-J6miuh"^[:8Q]{U1I`C:jJt/{|L@a ;;DN6 ڂ[Q,q;JhC+2Bq B+t7([ C3AI(DRX,:_v7)sPO/a? :՚00#`)iH O!/*PDdSe\rFӆR\9ivW$dr铜@R%0+(I(X[t$ ~S-E{y*Ză0S ޞorGs{3ndJZ~ ahT)]@~Zm@EZNCEk  g2O4P*@wRPOqbA| =<5ؐ)*=kui00=EsE`{0GCJԡ8OIYwJ =9YglH tkL|ְJoy&?^G>E5X' }~V55|FߠeAKj >|CдTmyHȩOSFo!ޕVAB<(K_s~]ˈY딱1=PBsKI]z 4Rx[O|Jw!n lO} /z#}2(^'!˓܍G5Du|*jPK!H Rcarve-0.2.1.dist-info/RECORDuϹr@>})(+ OL3o~*NWb8 /I&`t|PؕgÝ9SF]kF" h{Tn֨6G)뷻Ul5,$]UBaz{5 S}BS1ubm W fmRi8S_E%h̹q J] oNh^ɦ1PPuHK(?f̌!<$nv- z܉Eޅʻ6?Q-):nU$((fjܚKtfhVа[9 PK!bD||carve/__init__.pyPK!94carve/__version__.pyPK!77<<carve/carve.pyPK!M={{Zcarve/curried.pyPK!H WXcarve-0.2.1.dist-info/WHEELPK!H r carve-0.2.1.dist-info/METADATAPK!H R carve-0.2.1.dist-info/RECORDPK