@@ -90,7 +90,6 @@ def __init__(self, targets: TargetsType, exclude_targets: Optional[TargetsType]
9090 self .filename_targets : Set = set ()
9191 self .targets : dict = self ._process_targets (targets )
9292 self .exclude_targets : dict = self ._process_targets (exclude_targets )
93- self .processed_targets : dict = self ._diff_targets ()
9493
9594 def _check_targets (
9695 self , targets : TargetsType , exclude_targets : Optional [TargetsType ]
@@ -330,7 +329,7 @@ def _parse_module_by_name(self, module_name: str, recursive: bool = True) -> dic
330329 # Add submodule structure to current module
331330 module_structure [submodule_name ] = submodule_structure
332331 except Exception as e :
333- log_warn (f"Failed to parse submodule { full_submodule_name } : { str (e )} " )
332+ log_warn (f"Failed to parse submodule ' { full_submodule_name } ' : { str (e )} " )
334333
335334 return module_structure
336335
@@ -415,86 +414,6 @@ def _flatten_module_structure(self, module_path: str, module_structure: dict, re
415414 submodule_path = f"{ module_path } .{ key } "
416415 self ._flatten_module_structure (submodule_path , value , result )
417416
418- def _diff_targets (self ) -> dict :
419- """Calculate effective targets by excluding specified patterns.
420-
421- Returns:
422- Filtered targets dictionary after applying exclusion rules
423- """
424- filtered_targets : dict = {}
425- for module_path , target_details in self .targets .items ():
426- exclude_details = self .exclude_targets .get (module_path , {})
427-
428- # Handle track_all exclusion at the module level
429- filtered_classes = self ._diff_level (target_details .get ('classes' , {}), exclude_details .get ('classes' , {}))
430-
431- # Calculate filtered target details
432- filtered_details = {
433- 'classes' : filtered_classes ,
434- 'functions' : list (set (target_details .get ('functions' , [])) - set (exclude_details .get ('functions' , []))),
435- 'globals' : list (set (target_details .get ('globals' , [])) - set (exclude_details .get ('globals' , []))),
436- }
437-
438- # Process nested submodules
439- for key , value in target_details .items ():
440- if key not in ['classes' , 'functions' , 'globals' ] and isinstance (value , dict ):
441- submodule_path = f"{ module_path } .{ key } "
442- submodule_exclude = exclude_details .get (key , {})
443- filtered_sub = self ._diff_level (value , submodule_exclude )
444- if filtered_sub :
445- filtered_details [key ] = filtered_sub
446-
447- # Flatten the module structure
448- self ._flatten_module_structure (module_path , filtered_details , filtered_targets )
449-
450- return filtered_targets
451-
452- def _diff_level (self , target : dict , exclude : dict ) -> dict :
453- """Recursively filter nested structures by exclusion rules.
454-
455- Args:
456- target: Original nested structure (dict of dicts)
457- exclude: Exclusion patterns to apply
458-
459- Returns:
460- dict: Filtered structure with empty containers preserved
461- """
462- diff = {}
463- for key , value in target .items ():
464- filtered = None
465-
466- if key in exclude :
467- if isinstance (value , dict ) and isinstance (exclude [key ], dict ):
468- # Handle class details with track_all flag
469- if (
470- 'track_all' in value
471- and value ['track_all' ]
472- and 'track_all' in exclude [key ]
473- and exclude [key ]['track_all' ]
474- ):
475- # If both are tracking all, exclude the entire class
476- filtered = None
477- else :
478- filtered = self ._diff_level (value , exclude [key ])
479- elif isinstance (value , list ) and isinstance (exclude [key ], list ):
480- filtered = list (set (value ) - set (exclude [key ])) # type: ignore
481- elif value != exclude [key ]:
482- filtered = value
483- else :
484- filtered = value
485-
486- if filtered is None :
487- # Skip this key entirely (excluded)
488- continue
489- elif isinstance (filtered , dict ):
490- diff [key ] = filtered
491- elif isinstance (filtered , list ):
492- diff [key ] = filtered if filtered else []
493- else :
494- diff [key ] = filtered
495-
496- return diff
497-
498417 def _process_assignment (self , node : ast .Assign , result : dict ):
499418 """Extract global variables from assignment AST nodes.
500419
@@ -506,7 +425,7 @@ def _process_assignment(self, node: ast.Assign, result: dict):
506425 node: AST assignment node to analyze
507426 result: dict to update with found globals
508427 """
509- if any (isinstance (parent , ast .ClassDef ) for parent in iter_parents (node )):
428+ if any (isinstance (parent , ( ast .ClassDef , ast . FunctionDef ) ) for parent in iter_parents (node )):
510429 return
511430
512431 for assign_target in node .targets :
@@ -517,14 +436,14 @@ def _process_assignment(self, node: ast.Assign, result: dict):
517436 if isinstance (element , ast .Name ):
518437 result ['globals' ].append (element .id )
519438
520- def get_processed_targets (self ) -> dict :
521- """Retrieve final monitoring targets after exclusion processing .
439+ def get_targets (self ) -> dict :
440+ """Retrieve targets.
522441
523442 Returns:
524- dict: Filtered dictionary containing:
525- - classes: Non-excluded class methods
526- - functions: Non-excluded functions
527- - globals: Non-excluded global variables
443+ dict: Target dictionary containing:
444+ - classes: Class methods
445+ - functions: Functions
446+ - globals: Global variables
528447
529448 Example:
530449 {
@@ -540,7 +459,7 @@ def get_processed_targets(self) -> dict:
540459 }
541460 }
542461 """
543- return self .processed_targets
462+ return self .targets
544463
545464 def get_exclude_targets (self ) -> dict :
546465 """Retrieve excluded targets.
@@ -588,12 +507,12 @@ def target_handler(o):
588507 return o .__dict__
589508 return str (o )
590509
591- if len (self .processed_targets ) > Constants .MAX_TARGETS_DISPLAY :
592- truncated_obj = {key : "..." for key in self .processed_targets .keys ()}
510+ if len (self .targets ) > Constants .MAX_TARGETS_DISPLAY :
511+ truncated_obj = {key : "..." for key in self .targets .keys ()}
593512 truncated_obj ["Warning: too many top-level keys, only showing values like" ] = "..."
594513 return json .dumps (truncated_obj , indent = indent , default = target_handler )
595514
596- return json .dumps (self .processed_targets , indent = indent , default = target_handler )
515+ return json .dumps (self .targets , indent = indent , default = target_handler )
597516
598517 def get_filename_targets (self ) -> Set :
599518 """Get monitored filesystem paths.
0 commit comments