Skip to content

Commit 4e579f3

Browse files
committed
fix(dna): deduplicate auth_decorators and improve logging detection
- Add deduplication for auth_decorators list - Add logging.getLogger() pattern detection - Add structlog detection - Improve log level detection (.info, .debug, etc) - Use _safe_read_file in logging pattern extraction
1 parent 1ae5fae commit 4e579f3

1 file changed

Lines changed: 27 additions & 21 deletions

File tree

backend/services/dna_extractor.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,7 @@ def _extract_auth_patterns(self, files: List[Path], repo_path: Path, framework:
498498
logger.debug(f"Error reading {file_path}: {e}")
499499

500500
pattern.middleware_used = list(set(pattern.middleware_used))
501+
pattern.auth_decorators = list(set(pattern.auth_decorators))
501502
pattern.ownership_checks = list(set(pattern.ownership_checks))
502503
return pattern
503504

@@ -646,27 +647,32 @@ def _extract_logging_patterns(self, files: List[Path]) -> LoggingPattern:
646647
if file_path.suffix != '.py':
647648
continue
648649

649-
try:
650-
content = file_path.read_text(encoding='utf-8', errors='ignore')
651-
652-
# Detect logger import
653-
if 'from services.observability import logger' in content:
654-
pattern.logger_import = 'from services.observability import logger'
655-
pattern.structured_logging = True
656-
elif 'import logging' in content:
657-
pattern.logger_import = 'import logging'
658-
659-
# Detect log levels
660-
for level in ['debug', 'info', 'warning', 'error', 'critical']:
661-
if f'logger.{level}' in content:
662-
log_levels.add(level)
663-
664-
# Detect metrics
665-
if 'metrics.increment' in content or 'metrics.gauge' in content:
666-
pattern.metrics_tracking = True
667-
668-
except Exception as e:
669-
logger.debug(f"Error reading {file_path}: {e}")
650+
content = self._safe_read_file(file_path)
651+
if not content:
652+
continue
653+
654+
# Detect logger import/setup
655+
if 'from services.observability import logger' in content:
656+
pattern.logger_import = 'from services.observability import logger'
657+
pattern.structured_logging = True
658+
elif 'logging.getLogger' in content:
659+
pattern.logger_import = 'logging.getLogger(__name__)'
660+
elif 'import logging' in content and not pattern.logger_import:
661+
pattern.logger_import = 'import logging'
662+
663+
# Detect log levels (both logger.X and logging.X)
664+
for level in ['debug', 'info', 'warning', 'error', 'critical']:
665+
if f'logger.{level}' in content or f'logging.{level}' in content or f'.{level}(' in content:
666+
log_levels.add(level)
667+
668+
# Detect metrics
669+
if 'metrics.increment' in content or 'metrics.gauge' in content:
670+
pattern.metrics_tracking = True
671+
672+
# Detect structlog
673+
if 'structlog' in content:
674+
pattern.structured_logging = True
675+
pattern.logger_import = 'structlog'
670676

671677
pattern.log_levels_used = list(log_levels)
672678
return pattern

0 commit comments

Comments
 (0)