File size: 6,375 Bytes
478fd8c ec04543 478fd8c 349ff65 478fd8c ec04543 478fd8c ec04543 478fd8c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
from pathlib import Path
import json
from queries import query_formularios, query_usuarios, get_macros_differences
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 == '[email protected]':
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):
# Create a list to store the macros differences
macros_differences_list = []
macros_differences_list_subir_macros = ["0 20 0 0 0 0 20 0"]
macros_differences_list_bajar_macros = ["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
# 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
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
# 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'))
# Query usuarios
dates_that_match = query_usuarios(user_data, dates_list_from_user, debug=False, limit_days=31)
if len(dates_that_match) > 0:
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)
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")
return macros_differences_list
|