@@ -27,15 +27,11 @@ class Transform(param.Parameterized):
2727
2828 _hash = param .Integer (doc = 'Hash of current transform state' )
2929
30- _cache = param .ClassSelector (default = None , class_ = Cache )
30+ _cache = param .ClassSelector (default = Cache () , class_ = Cache )
3131
3232 def __init__ (self , ** params ):
3333 super ().__init__ (** params )
3434
35- def get (self ):
36- """method called to get the dataframe"""
37- return None
38-
3935 # perhaps htey should all be private to prevent namespace collision with filter options
4036 @property
4137 def source_hash (self ):
@@ -113,9 +109,18 @@ class AppTransform(Transform):
113109
114110 source = param .ClassSelector (class_ = Transform )
115111
112+ def transform (self ):
113+ """get source data, apply transform, return result"""
114+ return self .source .get ()
115+
116116 def get (self ):
117- df = self .source .get ()
118- return df
117+ """method called to get the dataframe"""
118+ if self .hash in self ._cache :
119+ return self ._cache [self .hash ]
120+ else :
121+ data = self .transform ()
122+ self ._cache [self .hash ] = data
123+ return data
119124
120125 @param .depends ('source.updated' , watch = True )
121126 def update (self ):
@@ -197,20 +202,15 @@ def redraw(self):
197202
198203 self .redrawn = True
199204
200- #todo cache df?
201- def get (self ):
205+ def transform (self ):
202206 df = self .source .get ()
203207 if df is None :
204208 return df
205- else :
206- kwargs = self .pd_kwargs
207- # drop level bugged? https://github.com/pandas-dev/pandas/issues/6507
208- df = df .xs (** kwargs )
209- # if self.drop_level and self.axis == 1 and df.columns.nlevels > 1:
210- # df.columns = df.columns.droplevel()
211- # elif self.drop_level and self.axis == 0:
212- # df.index = df.index.droplevel()
213- return df
209+
210+ kwargs = self .pd_kwargs
211+ # drop level bugged? https://github.com/pandas-dev/pandas/issues/6507
212+ df = df .xs (** kwargs )
213+ return df
214214
215215 def _selector_changed (self , * events ):
216216 #this sends multiple updated events as it triggers changes in other selectors
@@ -332,7 +332,7 @@ class RectangleLayoutTransform(AppTransform):
332332 step = param .Integer (5 , bounds = (1 , None ), doc = "Step size used for finding 'wrap' when its not specified" )
333333 margin = param .Integer (4 , doc = "Margin space to keep between peptides when finding 'wrap'" )
334334
335- def get (self ):
335+ def transform (self ):
336336 df = self .source .get ()
337337 if df is None :
338338 return None
@@ -378,7 +378,7 @@ def __init__(self, **params):
378378 self .kwargs = {k : v for k , v in params .items () if k not in self .param }
379379 super ().__init__ (** {k : v for k , v in params .items () if k in self .param })
380380
381- def get (self ):
381+ def transform (self ):
382382 df = self .source .get ()
383383 if df is None :
384384 return df
@@ -408,7 +408,7 @@ def __init__(self, **params):
408408 self .kwargs = {k : v for k , v in params .items () if k not in self .param }
409409 super ().__init__ (** params )
410410
411- def get (self ):
411+ def transform (self ):
412412 df = self .source .get ()
413413 if df is None :
414414 return None
@@ -440,7 +440,7 @@ class RescaleTransform(GenericTransform):
440440
441441 scale_factor = param .Number (1. )
442442
443- def get (self ): # todo perhaps some kind of decorator that returns nonealwasy?
443+ def transform (self ): # todo perhaps some kind of decorator that returns nonealwasy?
444444 df = self .source .get ()
445445 if df is None :
446446 return None
@@ -506,7 +506,7 @@ class SampleTransform(AppTransform):
506506
507507 axis = param .Number (0 , inclusive_bounds = (0 , 1 ))
508508
509- def get (self ):
509+ def transform (self ):
510510 df = self .source .get ()
511511 if df is None :
512512 return None
@@ -549,7 +549,7 @@ class PipeTransform(AppTransform):
549549
550550 pipe = param .List () # list of dicts
551551
552- def get (self ):
552+ def transform (self ):
553553 df = self .source .get ()
554554 if df is None :
555555 return None
0 commit comments