From efabac7fd5b524f3d0537d831b3e65adbcc2a310 Mon Sep 17 00:00:00 2001 From: chelsea Date: Sun, 12 Oct 2025 15:22:53 -0500 Subject: [PATCH] Fix community settings page 500 error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added comprehensive error handling for platform config loading - Added validation for collection_targets structure - Added defensive programming for community data processing - Added logging for debugging community list building - Prevents crashes when config files are missing or malformed 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- app.py | 68 +++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/app.py b/app.py index a0bc1c2..d897aaa 100644 --- a/app.py +++ b/app.py @@ -1398,30 +1398,58 @@ def settings_communities(): # Get available communities from platform config and collection targets available_communities = [] - - # Load platform configuration - platform_config = load_platform_config() - + + # Load platform configuration with error handling + try: + platform_config = load_platform_config() + if not platform_config: + platform_config = {"platforms": {}, "collection_targets": []} + except Exception as e: + logger.error(f"Error loading platform config: {e}") + platform_config = {"platforms": {}, "collection_targets": []} + # Get enabled communities from collection_targets (what's actually being crawled) enabled_communities = set() - for target in platform_config.get('collection_targets', []): - enabled_communities.add((target['platform'], target['community'])) + try: + for target in platform_config.get('collection_targets', []): + if 'platform' in target and 'community' in target: + enabled_communities.add((target['platform'], target['community'])) + except Exception as e: + logger.error(f"Error processing collection_targets: {e}") # Build community list from platform config for communities that are enabled - for platform_name, platform_info in platform_config.get('platforms', {}).items(): - for community_info in platform_info.get('communities', []): - # Only include communities that are in collection_targets - if (platform_name, community_info['id']) in enabled_communities: - available_communities.append({ - 'id': community_info['id'], - 'name': community_info['name'], - 'display_name': community_info.get('display_name', community_info['name']), - 'platform': platform_name, - 'icon': community_info.get('icon', platform_info.get('icon', '📄')), - 'description': community_info.get('description', '') - }) - - return render_template('settings_communities.html', + try: + for platform_name, platform_info in platform_config.get('platforms', {}).items(): + if not isinstance(platform_info, dict): + continue + communities = platform_info.get('communities', []) + if not isinstance(communities, list): + continue + + for community_info in communities: + try: + if not isinstance(community_info, dict): + continue + + # Only include communities that are in collection_targets + if (platform_name, community_info['id']) in enabled_communities: + available_communities.append({ + 'id': community_info['id'], + 'name': community_info['name'], + 'display_name': community_info.get('display_name', community_info['name']), + 'platform': platform_name, + 'icon': community_info.get('icon', platform_info.get('icon', '📄')), + 'description': community_info.get('description', '') + }) + except Exception as e: + logger.error(f"Error processing community {community_info}: {e}") + continue + except Exception as e: + logger.error(f"Error building community list: {e}") + + logger.info(f"Found {len(available_communities)} available communities") + + return render_template('settings_communities.html', user=current_user, available_communities=available_communities, selected_communities=selected_communities)