Fix community settings page 500 error

- 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 <noreply@anthropic.com>
This commit is contained in:
chelsea
2025-10-12 15:22:53 -05:00
parent b438762758
commit efabac7fd5

32
app.py
View File

@@ -1399,17 +1399,38 @@ def settings_communities():
# Get available communities from platform config and collection targets # Get available communities from platform config and collection targets
available_communities = [] available_communities = []
# Load platform configuration # Load platform configuration with error handling
try:
platform_config = load_platform_config() 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) # Get enabled communities from collection_targets (what's actually being crawled)
enabled_communities = set() enabled_communities = set()
try:
for target in platform_config.get('collection_targets', []): for target in platform_config.get('collection_targets', []):
if 'platform' in target and 'community' in target:
enabled_communities.add((target['platform'], target['community'])) 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 # Build community list from platform config for communities that are enabled
try:
for platform_name, platform_info in platform_config.get('platforms', {}).items(): for platform_name, platform_info in platform_config.get('platforms', {}).items():
for community_info in platform_info.get('communities', []): 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 # Only include communities that are in collection_targets
if (platform_name, community_info['id']) in enabled_communities: if (platform_name, community_info['id']) in enabled_communities:
available_communities.append({ available_communities.append({
@@ -1420,6 +1441,13 @@ def settings_communities():
'icon': community_info.get('icon', platform_info.get('icon', '📄')), 'icon': community_info.get('icon', platform_info.get('icon', '📄')),
'description': community_info.get('description', '') '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', return render_template('settings_communities.html',
user=current_user, user=current_user,