Skip to content

Commit c6708c2

Browse files
committed
Enhance error handling in Owlery queries and update count logic in caching system
1 parent 172ba5a commit c6708c2

2 files changed

Lines changed: 25 additions & 20 deletions

File tree

src/vfbquery/solr_result_cache.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -617,16 +617,17 @@ def wrapper(*args, **kwargs):
617617
if is_valid and preview and 'Queries' in cached_result:
618618
logger.debug(f"Validating {len(cached_result['Queries'])} queries for {term_id}")
619619
for i, query in enumerate(cached_result['Queries']):
620-
count = query.get('count', 0)
620+
count = query.get('count', -1) # Default to -1 if missing
621621
preview_results = query.get('preview_results')
622622
headers = preview_results.get('headers', []) if isinstance(preview_results, dict) else []
623623

624624
logger.debug(f"Query {i}: count={count}, preview_results_type={type(preview_results)}, headers={headers}")
625625

626-
# Check if query has unrealistic count (0 or -1) which indicates failed execution
627-
if count <= 0:
626+
# Check if query has error count (-1) which indicates failed execution
627+
# Note: count of 0 is valid - it means "no matches found"
628+
if count < 0:
628629
is_valid = False
629-
logger.debug(f"Cached result has invalid query count {count} for {term_id}")
630+
logger.debug(f"Cached result has error query count {count} for {term_id}")
630631
break
631632
# Check if preview_results is missing or has empty headers when it should have data
632633
if not isinstance(preview_results, dict) or not headers:
@@ -672,13 +673,14 @@ def wrapper(*args, **kwargs):
672673
if preview and 'Queries' in result and result['Queries']:
673674
# Check that all queries have valid counts and preview_results
674675
for query in result['Queries']:
675-
count = query.get('count', -1)
676+
count = query.get('count', -1) # Default to -1 if missing
676677
preview_results = query.get('preview_results')
677678

678-
# Don't cache if query has invalid count (0 or -1)
679-
if count <= 0:
679+
# Don't cache if query has error count (-1 indicates failure)
680+
# Note: count of 0 is valid - it means "no matches found"
681+
if count < 0:
680682
is_complete = False
681-
logger.warning(f"Not caching result for {term_id}: query has invalid count {count}")
683+
logger.warning(f"Not caching result for {term_id}: query has error count {count}")
682684
break
683685

684686
# Don't cache if preview_results is missing or malformed

src/vfbquery/vfb_queries.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1961,15 +1961,20 @@ def _owlery_query_to_results(owl_query_string: str, short_form: str, return_data
19611961
"""
19621962
try:
19631963
# Step 1: Query Owlery for classes matching the OWL pattern
1964-
print(f"DEBUG: Executing Owlery query: {owl_query_string}")
1965-
print(f"DEBUG: Query parameters - short_form: {short_form}, query_by_label: {query_by_label}")
1966-
1964+
# Construct the full Owlery URL for debugging
1965+
owlery_base = "https://owl.virtualflybrain.org/kbs/vfb" # Default
19671966
try:
1968-
# Try to get the Owlery endpoint for debugging
1969-
owlery_endpoint = getattr(vc.vfb.oc, 'owlery', 'unknown')
1970-
print(f"DEBUG: Owlery endpoint: {owlery_endpoint}")
1967+
if hasattr(vc.vfb, 'oc') and hasattr(vc.vfb.oc, 'owlery_endpoint'):
1968+
owlery_base = vc.vfb.oc.owlery_endpoint.rstrip('/')
19711969
except Exception:
1972-
pass # Ignore if we can't get the endpoint
1970+
pass
1971+
1972+
# Construct the actual API call URL (what vfb_connect calls)
1973+
from urllib.parse import quote
1974+
query_encoded = quote(owl_query_string, safe='')
1975+
owlery_url = f"{owlery_base}/subclasses?object={query_encoded}"
1976+
1977+
print(f"DEBUG Owlery: {owlery_url}")
19731978

19741979
class_ids = vc.vfb.oc.get_subclasses(
19751980
query=owl_query_string,
@@ -2105,18 +2110,16 @@ def _owlery_query_to_results(owl_query_string: str, short_form: str, return_data
21052110
}
21062111

21072112
except Exception as e:
2108-
print(f"Error in Owlery query: {e}")
2109-
print(f"Failed query string: {owl_query_string}")
2110-
print(f"Failed query parameters - short_form: {short_form}, query_by_label: {query_by_label}, solr_field: {solr_field}")
2113+
print(f"ERROR Owlery query failed: {e}")
21112114
import traceback
21122115
traceback.print_exc()
2113-
# Return empty results
2116+
# Return error indication with count=-1
21142117
if return_dataframe:
21152118
return pd.DataFrame()
21162119
return {
21172120
"headers": _get_standard_query_headers() if not include_source else _get_neurons_part_here_headers(),
21182121
"rows": [],
2119-
"count": 0
2122+
"count": -1 # -1 indicates query error/failure
21202123
}
21212124

21222125

0 commit comments

Comments
 (0)