from itertools import groupby
from calendar import timegm
def get_epoch_time(date):
utc_time = time.strptime(date, '%m/%d/%Y')
epoch_time = timegm(utc_time)
utc_time = time.strptime(date, '%m/%d/%Y %H:%M')
epoch_time = timegm(utc_time)
def process_response_doc(res_doc, keys):
for i in range(len(keys)):
if res_doc["dims_obj"][f'{i+1}']["wildcard"] == True:
elif keys[i] in (res_doc["dims_obj"][f'{i+1}']["fixed"]["plus"]):
score = score + pow(2, i)
elif keys[i] in (res_doc["dims_obj"][f'{i+1}']["fixed"]["minus"]):
if res_doc["dims_obj"][f'{i+1}']["ranges"]["plus"] and next((item for item in res_doc["dims_obj"][f'{i+1}']["ranges"]["plus"] if (item["s"] <= keys[i] and item["e"] >= keys[i]))):
score = score + pow(2, i)
elif res_doc["dims_obj"][f'{i+1}']["ranges"]["minus"] and next((item for item in res_doc["dims_obj"][f'{i+1}']["ranges"]["minus"] if (item["s"] <= keys[i] and item["e"] >= keys[i]))):
return next(g, True) and not next(g, False)
def query_redis_db(arg_dim, arg_date, arg_keys):
eff_date = get_epoch_time(arg_date)
keys_list = arg_keys.split(",")
respnse = execute("FT.SEARCH", 'dim_idx',
f'(@dim_id:[{arg_dim} {arg_dim}] @start_date:[-inf {eff_date}] @end_date:[{eff_date} inf])')
for i in range(1, len(respnse), 2):
res = json.loads(respnse[i+1][1])
bool_dim_match, score = process_response_doc(
if all_equal(bool_dim_match):
res["bool_dim_match"] = bool_dim_match
res["match_score"] = score
res["rds_key_id"] = respnse[i]
#res["duration"] = respnse.duration
ret = query_redis_db(arg_dim, arg_date, arg_keys)
wlist = sorted(ret, key=lambda d: d['match_score'])
gb.register(trigger="clal_test", mode="sync")