from pathlib import Path import json from queries import query_formularios, query_usuarios, get_macros_differences, get_days_between_dates formularios_weight_difference_path = 'anonymized_formularios_weight_difference' usuarios_macros_difference_path = 'usuarios_macros_difference' # Find users dates that match the query def find_user_dates_matches(query, debug=False): # Create a dictionary to store the matches matches_dict = {} # Get the query values query_cumplimiento_entrenamiento = None query_cumplimiento_dieta = None query_compromiso = None query_esfuerzo_dieta = None query_objetivo = None for query_item in query: query_item_key = list(query_item.keys())[0] query_item_value = query_item[query_item_key]['value'] if query_item_key == 'cumplimientoEntrenamiento': query_cumplimiento_entrenamiento = query_item_value elif query_item_key == 'cumplimientoDieta': query_cumplimiento_dieta = query_item_value elif query_item_key == 'compromiso': query_compromiso = query_item_value elif query_item_key == 'esfuerzoParaCumplirDieta': query_esfuerzo_dieta = query_item_value elif query_item_key == 'objetivo': query_objetivo = query_item_value # If cumplimiento entrenamiento or cumplimiento dieta is mal, then return empty dict if query_cumplimiento_entrenamiento == 'mal' or query_cumplimiento_dieta == 'mal': print("[find_user_dates_matches] Cumplimiento entrenamiento or cumplimiento dieta is \"mal\"") return matches_dict # If query_esfuerzo_dieta is costo subir macros, then return subir macros dict if query_esfuerzo_dieta == 'costo subir macros': print("[find_user_dates_matches] query_esfuerzo_dieta is \"costo subir macros\"") subir_macros_dict = {} subir_macros_dict['costo subir macros'] = [] return subir_macros_dict # If query_esfuerzo_dieta is costo bajar macros, then return bajar macros dict elif query_esfuerzo_dieta == 'costo bajar macros': print("[find_user_dates_matches] query_esfuerzo_dieta is \"costo bajar macros\"") bajar_macros_dict = {} bajar_macros_dict['costo bajar macros'] = [] return bajar_macros_dict # Get all the files in the formularios_path files = Path(formularios_weight_difference_path).glob('*.json') files = list(files) files.sort() # Iterate over the user data for i, file in enumerate(files): with open(file, 'r') as f: data = json.load(f) if file.name == 'xxx@gmail.com.json': dates = query_formularios(data, query, debug=True, file_name=file.name) else: dates = query_formularios(data, query, debug=debug) if len(dates) > 0: file_name = file.name matches_dict[file_name] = dates if debug: if i > 0: print("") print(f"{file_name} has {len(dates)} dates that match the query:") for date in dates: print(f"\t{date}") for query_item in query: key = list(query_item.keys())[0] data_value = data[date][key] query_value = query_item[key]['value'] operator = query_item[key]['operator'] if type(data_value) == int or type(data_value) == float: data_value = f"{data_value:.2f}" if operator == 'in' or operator == 'contains': print(f"\t\t{key} data: \"{data_value}\", query: \"{query_value}\"") else: print(f"\t\t{key} data: \"{data_value}\" \"{operator}\" query: \"{query_value}\"") return matches_dict def find_macros_that_match_dates_of_users(matches_dict, debug=False): limit_days = 11 # Create a list to store the macros differences macros_differences_dict = {} macros_differences_list = [] macros_differences_list_subir_macros = ["0 20 0 0 0 0 20 0"] macros_differences_dict_subir_macros = { "costo subir macros": { "date_of_match": "1990-01-01", "date_of_macros_asignation": "1990-01-02", "days_between_match_and_macros_asignation": 1, "macros_difference": "0 20 0 0 0 0 20 0" } } macros_differences_list_bajar_macros = ["0 -20 0 0 0 0 -20 0"] macros_differences_dict_bajar_macros = { "costo bajar macros": { "date_of_match": "1990-01-01", "date_of_macros_asignation": "1990-01-02", "days_between_match_and_macros_asignation": 1, "macros_difference": "0 -20 0 0 0 0 -20 0" } } # If matches_dict is empty, then return empty list if len(matches_dict) == 0: print("[find_macros_that_match_dates_of_users] matches_dict is empty") return macros_differences_list, macros_differences_dict # If matches_dict is costo subir macros, then return empty list if list(matches_dict.keys())[0] == 'costo subir macros': print("[find_macros_that_match_dates_of_users] matches_dict is \"costo subir macros\"") return macros_differences_list_subir_macros, macros_differences_dict_subir_macros elif list(matches_dict.keys())[0] == 'costo bajar macros': print("[find_macros_that_match_dates_of_users] matches_dict is \"costo bajar macros\"") return macros_differences_list_bajar_macros, macros_differences_dict_bajar_macros # Iterate over the matches dictionary for match_user in matches_dict: if debug: print(f"match_user: {match_user}") # Get dates list dates_list_from_user = matches_dict[match_user] # Get user data user_data = usuarios_macros_difference_path + '/' + match_user # Check if user data exists if not Path(user_data).exists(): if debug: print(f"User data not found: {user_data}") continue # Load user data user_data = json.load(open(user_data, 'r')) # Get dates that match and macros differences dates dates_that_match, macros_differences_dates = query_usuarios(user_data, dates_list_from_user, debug=False, limit_days=limit_days) # If there are dates that match if len(dates_that_match) > 0: # Iterate over the dates that match for i, date_of_match in enumerate(dates_that_match): if debug: print(f"\tdates that match: {dates_that_match}") # Get macros differences macros_differences = get_macros_differences(user_data, dates_that_match) if type(macros_differences) == list: if len(macros_differences) > 0: for macros_difference in macros_differences: macros_differences_list.append(macros_difference) days_between = get_days_between_dates(macros_differences_dates[i], date_of_match) match_dict = { "date_of_match": date_of_match, "date_of_macros_asignation": macros_differences_dates[i], "days_between_match_and_macros_asignation": days_between, "macros_difference": macros_difference } macros_differences_dict[match_user] = match_dict if debug: print(f"\tmacros_differences: {macros_difference}") if debug: print("") else: macros_differences_list.append(macros_differences) if debug: print(f"\tmacros_differences: {macros_differences}\n") match_dict = { "date_of_macros_asignation": dates_that_match[0], "macros_difference": macros_differences } macros_differences_dict[match_user] = match_dict return macros_differences_list, macros_differences_dict