models/annonce_model.py F 19:0 insert - A (1) F 27:0 fetch_all - A (1) F 35:0 get - A (1) F 43:0 update - A (1) F 53:0 delete - A (1) C 10:0 AnnonceNotFoundError - A (1) models/audit_model.py F 4:0 insert - A (1) F 12:0 fetch_recent - A (1) models/evenement_model.py F 4:0 insert - A (1) F 12:0 fetch_all - A (1) F 20:0 get - A (1) F 28:0 delete - A (1) models/block_model.py F 12:0 _row_to_dict - A (3) F 24:0 fetch_all - A (2) F 33:0 insert - A (1) F 48:0 update_position - A (1) F 55:0 delete - A (1) models/fichier_model.py F 4:0 insert - A (1) F 12:0 fetch_all - A (1) F 20:0 get - A (1) F 28:0 delete - A (1) services/annonce_service.py F 19:0 _validate - B (6) F 39:0 update_annonce - A (2) F 49:0 delete_annonce - A (2) F 28:0 list_annonces - A (1) F 32:0 create_annonce - A (1) C 12:0 ValidationError - A (1) services/auth_service.py F 30:0 is_admin - A (3) F 78:0 client_ip - A (2) F 18:0 current_user - A (1) F 23:0 is_authenticated - A (1) F 45:0 require_login - A (1) F 57:0 require_admin - A (1) services/audit_service.py F 6:0 log - A (1) F 10:0 recent - A (1) services/fichier_service.py F 63:0 step3_check_mime - A (5) F 149:0 delete_fichier - A (5) F 48:0 step2_check_size - A (4) F 77:0 step4_check_extension - A (4) F 132:0 prepare_download - A (4) F 41:0 step1_check_presence - A (3) F 91:0 step6_save_to_disk - A (2) F 86:0 step5_generate_safe_name - A (1) F 105:0 step7_persist_metadata - A (1) F 109:0 step8_log_audit - A (1) F 113:0 handle_upload - A (1) F 128:0 list_fichiers - A (1) C 36:0 FileValidationError - A (1) services/block_service.py F 10:0 add_block - A (3) F 18:0 save_layout - A (2) F 6:0 list_blocks - A (1) F 24:0 delete_block - A (1) services/evenement_service.py F 24:0 create_evenement - A (4) F 13:0 _parse - A (2) F 36:0 delete_evenement - A (2) F 20:0 list_evenements - A (1) C 9:0 ValidationError - A (1) routes/fichiers.py F 36:0 download - A (3) F 51:0 delete - A (3) F 23:0 upload - A (2) F 11:0 _db - A (1) F 17:0 list_fichiers - A (1) routes/auth.py F 24:0 register_oauth - A (1) F 35:0 init_auth_routes - A (1) F 83:0 _get_db - A (1) routes/annonces.py F 39:0 update_annonce - A (4) F 24:0 create_annonce - A (3) F 56:0 delete_annonce - A (2) F 12:0 _db - A (1) F 18:0 list_annonces - A (1) routes/dashboard.py F 16:0 index - A (2) F 34:0 save_layout - A (2) F 41:0 add_block - A (2) F 51:0 delete_block - A (2) F 11:0 _db - A (1) F 23:0 api_is_admin - A (1) F 28:0 get_layout - A (1) routes/evenements.py F 23:0 create_evenement - A (3) F 38:0 delete_evenement - A (2) F 11:0 _db - A (1) F 17:0 list_evenements - A (1) app.py F 20:0 create_app - A (1) F 51:0 register_error_handlers - A (1) F 76:0 _wants_json - A (1) db.py C 25:0 Database - A (3) M 48:4 Database.cursor - A (3) M 68:4 Database.fetch_all - A (2) M 73:4 Database.fetch_one - A (2) M 78:4 Database.execute - A (2) F 85:0 init_db - A (1) M 28:4 Database.__init__ - A (1) M 35:4 Database._connect - A (1) 92 blocks (classes, functions, methods) analyzed. Average complexity: A (1.7173913043478262)