@@ -662,7 +662,12 @@ def wrapper(*args, **kwargs):
662662 if hasattr (result , 'empty' ): # DataFrame
663663 result_is_valid = not result .empty
664664 elif isinstance (result , dict ):
665- result_is_valid = bool (result )
665+ # For dict results, check if it's not an error result (count != -1)
666+ # Error results should not be cached
667+ if 'count' in result :
668+ result_is_valid = result .get ('count' , - 1 ) >= 0 # Don't cache errors (count=-1)
669+ else :
670+ result_is_valid = bool (result ) # For dicts without count field
666671 elif isinstance (result , (list , str )):
667672 result_is_valid = len (result ) > 0
668673 else :
@@ -675,27 +680,32 @@ def wrapper(*args, **kwargs):
675680 is_complete = (result and isinstance (result , dict ) and
676681 result .get ('Id' ) and result .get ('Name' ))
677682
678- # Additional validation when preview=True: queries must have valid results
683+ # Additional validation when preview=True: check if queries have results
684+ # We allow caching even if some queries failed (count=-1) as long as the core term_info is valid
685+ # This is because some query functions may not be implemented yet or may legitimately fail
679686 if is_complete :
680687 preview = kwargs .get ('preview' , True )
681688 if preview and 'Queries' in result and result ['Queries' ]:
682- # Check that all queries have valid counts and preview_results
689+ # Count how many queries have valid results vs errors
690+ valid_queries = 0
691+ failed_queries = 0
692+
683693 for query in result ['Queries' ]:
684- count = query .get ('count' , - 1 ) # Default to -1 if missing
694+ count = query .get ('count' , - 1 )
685695 preview_results = query .get ('preview_results' )
686696
687- # Don't cache if query has error count (-1 indicates failure )
688- # Note: count of 0 is valid - it means "no matches found"
689- if count < 0 :
690- is_complete = False
691- logger . warning ( f"Not caching result for { term_id } : query has error count { count } " )
692- break
693-
694- # Don't cache if preview_results is missing or malformed
695- if not isinstance ( preview_results , dict ) or not preview_results . get ( 'headers' ):
696- is_complete = False
697- logger . warning ( f"Not caching result for { term_id } : query has invalid preview_results" )
698- break
697+ # Count queries with valid results ( count >= 0 )
698+ if count >= 0 and isinstance ( preview_results , dict ):
699+ valid_queries += 1
700+ else :
701+ failed_queries += 1
702+
703+ # Only reject if ALL queries failed - at least one must succeed
704+ if valid_queries == 0 and failed_queries > 0 :
705+ is_complete = False
706+ logger . warning ( f"Not caching result for { term_id } : all { failed_queries } queries failed" )
707+ elif failed_queries > 0 :
708+ logger . debug ( f"Caching result for { term_id } with { valid_queries } valid queries ( { failed_queries } failed)" )
699709
700710 if is_complete :
701711 try :
0 commit comments