Exemplo n.º 1
0
 def wrp_getter_cacher(ibs, rowid_list, **kwargs):
     """
     Wrapper function that caches rowid values in a dictionary
     """
     kwargs.pop('debug', False)
     kwargs_hash = (None if cfgkeys is None else ut.get_dict_hashid(
         [kwargs.get(key, None) for key in cfgkeys]))
     # There are 3 levels of caches
     # All caches for this table, caches for the this column, and caches for this kwargs configuration
     cache_ = ibs.table_cache[tblname][colname][kwargs_hash]
     # Load cached values for each rowid
     vals_list = [cache_.get(rowid, None) for rowid in rowid_list]
     # Mark rowids with cache misses
     ismiss_list = [val is None for val in vals_list]
     # END HACK
     if any(ismiss_list):
         handle_cache_misses(
             ibs,
             getter_func,
             rowid_list,
             ismiss_list,
             vals_list,
             cache_,
             kwargs,
         )
     return vals_list
Exemplo n.º 2
0
            def wrp_getter_cacher(ibs, rowid_list, **kwargs):
                """
                Wrapper function that caches rowid values in a dictionary
                """
                # HACK TAKE OUT GETTING DEBUG OUT OF KWARGS
                debug_ = kwargs.pop('debug', False)
                if cfgkeys is not None:
                    #kwargs_hash = ut.get_dict_hashid(ut.dict_take_list(kwargs, cfgkeys, None))
                    kwargs_hash = ut.get_dict_hashid(
                        [kwargs.get(key, None) for key in cfgkeys])
                    #ut.dict_take_list(kwargs, cfgkeys, None))
                else:
                    kwargs_hash = None
                #+----------------------------
                # There are 3 levels of caches
                #+----------------------------
                # All caches for this table
                #colscache_ = ibs.table_cache[tblname]
                ## All caches for the this column
                #kwargs_cache_ = colscache_[colname]
                ## All caches for this kwargs configuration
                #cache_ = kwargs_cache_[kwargs_hash]
                cache_ = ibs.table_cache[tblname][colname][kwargs_hash]
                #L____________________________

                # Load cached values for each rowid
                #vals_list = ut.dict_take_list(cache_, rowid_list, None)
                vals_list = [cache_.get(rowid, None) for rowid in rowid_list]
                # Mark rowids with cache misses
                ismiss_list = [val is None for val in vals_list]
                if debug or debug_:
                    debug_cache_hits(ismiss_list, rowid_list)
                    #print('[cache_getter] "debug_cache_hits" turned off')
                # HACK !!! DEBUG THESE GETTERS BY ASSERTING INFORMATION IN CACHE IS CORRECT
                if ASSERT_API_CACHE:
                    assert_cache_hits(ibs, ismiss_list, rowid_list,
                                      kwargs_hash, **kwargs)
                # END HACK
                if any(ismiss_list):
                    miss_indices = ut.list_where(ismiss_list)
                    miss_rowids = ut.compress(rowid_list, ismiss_list)
                    # call wrapped function
                    miss_vals = getter_func(ibs, miss_rowids, **kwargs)
                    # overwrite missed output
                    for index, val in zip(miss_indices, miss_vals):
                        vals_list[index] = val  # Output write
                    # cache save
                    for rowid, val in zip(miss_rowids, miss_vals):
                        cache_[rowid] = val  # Cache write
                return vals_list
Exemplo n.º 3
0
            def wrp_getter_cacher(ibs, rowid_list, **kwargs):
                """
                Wrapper function that caches rowid values in a dictionary
                """
                # HACK TAKE OUT GETTING DEBUG OUT OF KWARGS
                debug_ = kwargs.pop("debug", False)
                if cfgkeys is not None:
                    # kwargs_hash = ut.get_dict_hashid(ut.dict_take_list(kwargs, cfgkeys, None))
                    kwargs_hash = ut.get_dict_hashid([kwargs.get(key, None) for key in cfgkeys])
                    # ut.dict_take_list(kwargs, cfgkeys, None))
                else:
                    kwargs_hash = None
                # +----------------------------
                # There are 3 levels of caches
                # +----------------------------
                # All caches for this table
                # colscache_ = ibs.table_cache[tblname]
                ## All caches for the this column
                # kwargs_cache_ = colscache_[colname]
                ## All caches for this kwargs configuration
                # cache_ = kwargs_cache_[kwargs_hash]
                cache_ = ibs.table_cache[tblname][colname][kwargs_hash]
                # L____________________________

                # Load cached values for each rowid
                # vals_list = ut.dict_take_list(cache_, rowid_list, None)
                vals_list = [cache_.get(rowid, None) for rowid in rowid_list]
                # Mark rowids with cache misses
                ismiss_list = [val is None for val in vals_list]
                if debug or debug_:
                    debug_cache_hits(ismiss_list, rowid_list)
                    # print('[cache_getter] "debug_cache_hits" turned off')
                # HACK !!! DEBUG THESE GETTERS BY ASSERTING INFORMATION IN CACHE IS CORRECT
                if ASSERT_API_CACHE:
                    assert_cache_hits(ibs, ismiss_list, rowid_list, kwargs_hash, **kwargs)
                # END HACK
                if any(ismiss_list):
                    miss_indices = ut.list_where(ismiss_list)
                    miss_rowids = ut.compress(rowid_list, ismiss_list)
                    # call wrapped function
                    miss_vals = getter_func(ibs, miss_rowids, **kwargs)
                    # overwrite missed output
                    for index, val in zip(miss_indices, miss_vals):
                        vals_list[index] = val  # Output write
                    # cache save
                    for rowid, val in zip(miss_rowids, miss_vals):
                        cache_[rowid] = val  # Cache write
                return vals_list
Exemplo n.º 4
0
 def wrp_getter_cacher(ibs, rowid_list, **kwargs):
     """
     Wrapper function that caches rowid values in a dictionary
     """
     kwargs.pop("debug", False)
     kwargs_hash = (
         None if cfgkeys is None else ut.get_dict_hashid([kwargs.get(key, None) for key in cfgkeys])
     )
     # There are 3 levels of caches
     # All caches for this table, caches for the this column, and caches for this kwargs configuration
     cache_ = ibs.table_cache[tblname][colname][kwargs_hash]
     # Load cached values for each rowid
     vals_list = [cache_.get(rowid, None) for rowid in rowid_list]
     # Mark rowids with cache misses
     ismiss_list = [val is None for val in vals_list]
     # END HACK
     if any(ismiss_list):
         handle_cache_misses(ibs, getter_func, rowid_list, ismiss_list, vals_list, cache_, kwargs)
     return vals_list