in bots/sdlc-slackbot/sdlc_slackbot/bot.py [0:0]
def update_resources():
while True:
time.sleep(monitor_thread_sleep_seconds)
try:
for assessment in Assessment.select():
logger.info(f"checking {assessment.project_name} for updates")
assessment_params = model_to_dict(assessment)
new_params = assessment_params.copy()
changed = False
previous_content = ""
for resource in assessment.resources:
new_content = asyncio.run(fetch_content(resource.url))
if resource.content_hash != hash_content(new_content):
# just save previous content in memory temporarily
previous_content = resource.content
resource.content = new_content
new_params[resource.url] = new_content
changed = True
if not changed:
continue
old_context = model_params_to_str(assessment_params)
new_context = model_params_to_str(new_params)
context = {
"previous_context": previous_content,
"previous_decision": {
"risk": assessment.risk,
"confidence": assessment.confidence,
"justification": assessment.justification,
},
"new_context": new_content,
}
context_json = json.dumps(context, indent=2)
new_response = ask_ai(config.base_prompt + config.update_prompt, context_json)
resource.content_hash = hash_content(new_content)
resource.save()
if new_response["outcome"] == "unchanged":
continue
normalized_response = normalize_response(new_response)
clean_response = clean_normalized_response(normalized_response)
for item in clean_response:
assessment.update(**item).execute()
asyncio.run(send_update_notification(assessment_params, new_response))
except Exception as e:
logger.error(f"error: {e} updating resources")
traceback.print_exc()