From 64416dcd90a44750f466c5952e20d1baededec27 Mon Sep 17 00:00:00 2001 From: Sudo-JHare Date: Tue, 13 May 2025 08:36:43 +1000 Subject: [PATCH] V2 addition of Spacey, sematic and string flags in initial search, with fallback to rapid fuzz. split into two modules, for easier handling, core and main added threading, and background schedular to refresh cache on 8 hour windows. also to load initial stale cache on startup and refresh in the background. --- Dockerfile | 8 +- README.md | 93 ++-- Search_Test_Cases_Summary.md | 121 +++++ Search_explanation.md | 156 +++++++ core.py | 585 +++++++++++++++++++++++ instance/fhir_igs.db | Bin 4096 -> 700416 bytes instance/fhir_igs.db-shm | Bin 32768 -> 32768 bytes instance/fhir_igs.db-wal | Bin 3749232 -> 4128272 bytes main.py | 876 +++++++++-------------------------- requirements.txt | 4 +- 10 files changed, 1159 insertions(+), 684 deletions(-) create mode 100644 Search_Test_Cases_Summary.md create mode 100644 Search_explanation.md create mode 100644 core.py diff --git a/Dockerfile b/Dockerfile index c10061f..f7e48cc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,7 @@ RUN pip install --no-cache-dir -r requirements.txt # Copy application code COPY main.py . +COPY core.py . # Create instance directory for SQLite RUN mkdir -p /app/instance @@ -21,5 +22,8 @@ RUN chmod -R 777 /app/instance ENV PORT=8000 EXPOSE $PORT -# Run the application -CMD ["python", "main.py"] \ No newline at end of file +# Set Uvicorn log level for debugging +ENV UVICORN_LOG_LEVEL=debug + +# Run the application using Uvicorn +CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port $PORT --log-level $UVICORN_LOG_LEVEL"] \ No newline at end of file diff --git a/README.md b/README.md index 40a4b4e..3e94080 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ IggyAPI is a FastAPI-based application designed to search, retrieve, and manage - [Prerequisites](#prerequisites) - [Installation](#installation) - [Running IggyAPI](#running-iggyapi) +- [Build the Docker Image](#build-the-docker-image) +- [Run the Docker Container](#run-the-docker-container) - [API Endpoints](#api-endpoints) - [Search Implementation Guides](#search-implementation-guides) - [List Profiles in an IG](#list-profiles-in-an-ig) @@ -17,9 +19,6 @@ IggyAPI is a FastAPI-based application designed to search, retrieve, and manage - [Get Refresh Status](#get-refresh-status) - [Force Cache Refresh](#force-cache-refresh) - [Response Samples](#response-samples) - - [Search Implementation Guides Response](#search-implementation-guides-response) - - [List Profiles Response](#list-profiles-response) - - [Get Profile Response](#get-profile-response) - [Testing IggyAPI](#testing-iggyapi) - [Implementation Details](#implementation-details) - [Contributing](#contributing) @@ -33,10 +32,10 @@ While IggyAPI is particularly focused on supporting AU Core profiles (e.g., `hl7 ## Features -- **Search IGs**: Query Implementation Guides using a search term with fuzzy matching. +- **Search IGs**: Query Implementation Guides using a search term with semantic or string similarity matching. - **List Profiles**: Retrieve a list of StructureDefinitions (profiles) within a specified IG, with optional version filtering. - **Fetch Profiles**: Obtain a specific StructureDefinition by IG and profile ID, with an option to exclude narrative content. -- **Cache Management**: Automatically syncs IG metadata from registries every 4 hours or on demand, with status reporting. +- **Cache Management**: Automatically syncs IG metadata from registries every 8 hours or on demand, with status reporting. - **Robust Error Handling**: Provides detailed error messages for invalid requests or unavailable resources. - **Swagger UI**: Offers an interactive API documentation interface at `/docs`. @@ -48,6 +47,8 @@ Before setting up IggyAPI, ensure you have the following installed: - **pip**: Python package manager for installing dependencies. - **SQLite**: Used for caching (included with Python). - **Git**: For cloning the repository (optional). +- **Docker**: Required for running IggyAPI in a container. +- **SpaCy Model**: IggyAPI uses SpaCy for advanced search functionality, requiring the `en_core_web_md` model for semantic similarity searches. An internet connection is required to fetch IG metadata from FHIR registries during the initial sync. @@ -59,13 +60,13 @@ An internet connection is required to fetch IG metadata from FHIR registries dur cd iggyapi ``` -2. **Create a Virtual Environment** (recommended): +2. **Create a Virtual Environment** (recommended for non-Docker setup): ```bash python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate ``` -3. **Install Dependencies**: +3. **Install Dependencies** (for non-Docker setup): IggyAPI requires several Python packages listed in `requirements.txt`. Install them using: ```bash pip install -r requirements.txt @@ -79,37 +80,27 @@ An internet connection is required to fetch IG metadata from FHIR registries dur sqlalchemy==2.0.35 tenacity==9.0.0 rapidfuzz==3.10.0 + spacy==3.7.6 + en-core-web-md @ https://github.com/explosion/spacy-models/releases/download/en_core_web_md-3.7.1/en_core_web_md-3.7.1-py3-none-any.whl ``` -4. **Verify Setup**: +4. **Verify Setup** (for non-Docker setup): Ensure all dependencies are installed by running: ```bash pip list ``` - Confirm that `fastapi`, `uvicorn`, `requests`, `sqlalchemy`, and other required packages are listed. + Confirm that `fastapi`, `uvicorn`, `requests`, `sqlalchemy`, `spacy`, and other required packages are listed. -##Build the Docker Image - -Ensure you are in the project directory where the Dockerfile is located. Build the Docker image using: -```bash - docker build -t iggyapi:latest . -``` -This creates an image named iggyapi with the latest tag. - -##Run the Docker Container - -Start a container from the built image, mapping port 8000 on your host to port 8000 in the container: -```bash - docker run -d -p 8000:8000 -e PORT=8000 -v C:/git/IggyApi/instance:/app/instance iggyapi:latest -``` -Verify the Container is Running:Check the status of the container: -docker ps - -You should see iggyapi-container listed as running. +5. **Verify SpaCy Model** (for non-Docker setup): + Confirm that the SpaCy model is installed by running: + ```bash + python -m spacy validate + ``` + You should see `en_core_web_md` listed as installed. If not, ensure the model was downloaded correctly via the `requirements.txt` installation. ## Running IggyAPI -1. **Start the Server**: +1. **Start the Server** (for non-Docker setup): Launch IggyAPI using `uvicorn`: ```bash uvicorn main:app --host 0.0.0.0 --port 8000 @@ -121,8 +112,33 @@ You should see iggyapi-container listed as running. - Open your browser and navigate to `http://localhost:8000/docs` to access the Swagger UI. - The Swagger UI provides an interactive interface to test IggyAPI’s endpoints. -3. **Initial Sync**: - On first run, IggyAPI will sync IG metadata from FHIR registries. This process may take a few minutes depending on your internet connection. Subsequent syncs occur every 4 hours or can be triggered manually via the `/refresh-cache` endpoint. +3. **Initial Sync and Scheduled Refreshes**: + On startup, IggyAPI will load any existing data from the database into memory, even if it’s older than 8 hours. If the data is older than 8 hours or missing, a background refresh will be triggered to fetch the latest IG metadata from FHIR registries. This process may take a few minutes depending on your internet connection. After the initial refresh, IggyAPI schedules automatic refreshes every 8 hours from the last refresh time (whether triggered at startup, in the background, or manually via the `/refresh-cache` endpoint). You can also trigger a manual refresh at any time using the `/refresh-cache` endpoint. + +## Build the Docker Image + +Ensure you are in the project directory where the `Dockerfile` is located. Build the Docker image using: +```bash +docker build -t iggyapi:latest . +``` +This creates an image named `iggyapi` with the `latest` tag. Optionally, you can add a `--name iggyapi-container` flag during the run step to name the container for easier reference. + +## Run the Docker Container + +Start a container from the built image, mapping port 8000 on your host to port 8000 in the container: +```bash +docker run -d -p 8000:8000 -e PORT=8000 -v C:/git/IggyApi/instance:/app/instance --name iggyapi-container iggyapi:latest +``` + +**Verify the Container is Running**: +Check the status of the container: +```bash +docker ps +``` +You should see `iggyapi-container` listed as running. + +**Initial Sync and Scheduled Refreshes**: +On startup, IggyAPI will load any existing data from the database into memory, even if it’s older than 8 hours. If the data is older than 8 hours or missing, a background refresh will be triggered to fetch the latest IG metadata from FHIR registries. This process may take a few minutes depending on your internet connection. After the initial refresh, IggyAPI schedules automatic refreshes every 8 hours from the last refresh time (whether triggered at startup, in the background, or manually via the `/refresh-cache` endpoint). You can also trigger a manual refresh at any time using the `/refresh-cache` endpoint. ## API Endpoints @@ -131,9 +147,12 @@ IggyAPI provides the following endpoints, all documented in the Swagger UI at `/ ### Search Implementation Guides - **Endpoint**: `GET /igs/search` -- **Query Parameter**: +- **Query Parameters**: - `query` (string, optional): A search term to filter IGs by name or author (e.g., `au core`). -- **Description**: Searches for FHIR Implementation Guides using fuzzy matching on package name and author. Returns a list of matching IGs with metadata such as version, FHIR version, and relevance score. + - `search_type` (string, optional, default: `semantic`): The type of search to perform. Options are: + - `semantic`: Uses SpaCy for semantic similarity, matching based on the meaning of the query and package metadata. If the semantic similarity is low, it falls back to rapidfuzz for string-based matching. + - `string`: Uses SpaCy for token-based string similarity, with a fallback to rapidfuzz for exact or near-exact string matching. +- **Description**: Searches for FHIR Implementation Guides using either semantic or string similarity matching. The search first filters packages by ensuring all words in the query are present in the package name or author, then applies the specified similarity search on the filtered results. Returns a list of matching IGs with metadata such as version, FHIR version, and relevance score. - **Response**: A JSON object containing a list of IGs, total count, and cache status. ### List Profiles in an IG @@ -167,7 +186,7 @@ IggyAPI provides the following endpoints, all documented in the Swagger UI at `/ ### Force Cache Refresh - **Endpoint**: `POST /refresh-cache` -- **Description**: Forces an immediate refresh of the IG metadata cache by re-syncing with FHIR registries. +- **Description**: Forces an immediate refresh of the IG metadata cache by re-syncing with FHIR registries. This also resets the scheduled refresh timer to 8 hours from the time of the manual refresh. - **Response**: A JSON object with the updated refresh status. ## Response Samples @@ -384,7 +403,7 @@ You can test IggyAPI using `curl`, Postman, or the Swagger UI. 1. **Search for IGs**: ```bash - curl -X GET "http://localhost:8000/igs/search?query=au%20core" -H "accept: application/json" + curl -X GET "http://localhost:8000/igs/search?query=au%20core&search_type=semantic" -H "accept: application/json" ``` Look for `hl7.fhir.au.core` in the response. @@ -428,13 +447,15 @@ You can test IggyAPI using `curl`, Postman, or the Swagger UI. - **Database**: Uses SQLite to cache IG metadata, with tables `cached_packages` and `registry_cache_info`. - **Caching**: - IG metadata is cached in memory and persisted to SQLite. - - The cache is refreshed every 4 hours or on demand via `/refresh-cache`. + - The cache is refreshed every 8 hours or on demand via `/refresh-cache`. - Profiles are cached in memory to reduce redundant downloads. +- **Search Functionality**: Uses SpaCy for semantic and string similarity matching, with rapidfuzz as a fallback for string searches. - **Narrative Stripping**: The `include_narrative` parameter in the `get_profile` endpoint removes the `text` element from StructureDefinitions when set to `false`. - **Dependencies**: - `requests` and `feedparser` for fetching IG metadata from registries. - `sqlalchemy` for database operations. - `rapidfuzz` for fuzzy search functionality. + - `spacy` for semantic and string similarity searches. - `tenacity` for retrying failed registry requests. - **Error Handling**: - Returns HTTP 400 for invalid input (e.g., malformed IG names). @@ -455,4 +476,4 @@ Please ensure your code follows PEP 8 style guidelines and includes appropriate ## License -IggyAPI is licensed under the MIT License. See the `LICENSE` file for details. +IggyAPI is licensed under the MIT License. See the `LICENSE` file for details. \ No newline at end of file diff --git a/Search_Test_Cases_Summary.md b/Search_Test_Cases_Summary.md new file mode 100644 index 0000000..f0bdb72 --- /dev/null +++ b/Search_Test_Cases_Summary.md @@ -0,0 +1,121 @@ +# IggyAPI Search Test Cases Summary + +This document summarizes the search test cases executed on IggyAPI, as captured in the logs from 2025-05-13. It analyzes the behavior of the `/igs/search` endpoint in `semantic` mode, focusing on the frequent fallback to RapidFuzz and the reasons behind SpaCy’s semantic similarity failures. + +## Test Case Overview + +The logs capture three search requests using `search_type=semantic`, with the following queries: "beda", "au core", and "core". Each search follows a two-step process: + +1. **Pre-filtering**: Filters packages based on the presence of query words in the `package_name` or `author` fields. +2. **Similarity Matching**: + - First attempts SpaCy semantic similarity (threshold: 0.3). + - If SpaCy fails or the similarity score is below the threshold, falls back to RapidFuzz string matching (threshold: 70). + +### Test Case 1: Query "beda" + +- **Timestamp**: 2025-05-13 08:01:43 +- **Pre-filtering**: + - Total packages: 1023 + - Filtered packages: 4 (where "beda" appears in `package_name` or `author`) + - Matching packages: `de.abda.eRezeptAbgabedaten`, `de.abda.eRezeptAbgabedatenBasis`, `de.abda.eRezeptAbgabedatenPKV`, `de.biv-ot.everordnungabgabedaten` +- **SpaCy Semantic Similarity**: + - Failed with warning: `[W008] Evaluating Doc.similarity based on empty vectors`. + - Likely cause: "beda" lacks a meaningful embedding in the `en_core_web_md` model, and the combined text (`package_name`, `description`, `author`) for these packages also lacks meaningful embeddings (e.g., empty `description`, technical `package_name` tokens like "abda"). +- **Fallback to RapidFuzz**: + - All 4 packages matched via RapidFuzz with a score of 100.0 (e.g., "beda" is a substring of "abda"). +- **Results**: + - Total matches: 4 + - SpaCy matches: 0 (0%) + - RapidFuzz matches: 4 (100%) + +### Test Case 2: Query "au core" + +- **Timestamp**: 2025-05-13 08:02:37 +- **Pre-filtering**: + - Total packages: 1023 + - Filtered packages: 1 (where both "au" and "core" appear in `package_name` or `author`) + - Matching package: `hl7.fhir.au.core` +- **SpaCy Semantic Similarity**: + - No semantic match logged, indicating the similarity score was below 0.3. + - Likely cause: "au" has a weak embedding, "core" is a common word, and the combined text ("hl7.fhir.au.core Martijn Harthoorn") includes noise from the `author` field. The `description` field is empty, providing no additional semantic context. +- **Fallback to RapidFuzz**: + - Matched via RapidFuzz with a score of 85.71 ("au core" matches "au.core" in the package name). +- **Results**: + - Total matches: 1 + - SpaCy matches: 0 (0%) + - RapidFuzz matches: 1 (100%) + +### Test Case 3: Query "core" + +- **Timestamp**: 2025-05-13 08:02:58 +- **Pre-filtering**: + - Total packages: 1023 + - Filtered packages: 77 (where "core" appears in `package_name` or `author`) + - Examples: `hl7.fhir.core`, `hl7.fhir.au.core`, `ch.fhir.ig.ch-core`, etc. +- **SpaCy Semantic Similarity**: + - Succeeded for 14 packages with similarity scores above 0.3: + - Examples: `ch.fhir.ig.ch-core` (0.6715787550273024), `tiga.health.clinical` (0.6912820366040198). + - Likely reason: These packages have non-empty `description` fields or `author` names providing semantic context (e.g., healthcare-related terms). + - Failed for 63 packages (similarity below 0.3). + - Likely cause: Empty `description` fields, technical `package_name` tokens (e.g., "hl7", "fhir"), and noise from `author` fields dilute similarity scores. +- **Fallback to RapidFuzz**: + - 63 packages matched via RapidFuzz with scores of 100.0 (e.g., `hl7.fhir.core`, `hl7.fhir.us.core`). + - "core" is a direct substring of these package names, making RapidFuzz highly effective. +- **Results**: + - Total matches: 77 + - SpaCy matches: 14 (18%) + - RapidFuzz matches: 63 (82%) + +## Overall Fallback Statistics + +- **Total Matches Across All Test Cases**: 82 (4 + 1 + 77) +- **SpaCy Matches**: 14 (all from "core" query) +- **RapidFuzz Matches**: 68 (4 from "beda", 1 from "au core", 63 from "core") +- **Fallback Rate**: 68/82 = 83% + +The app falls back to RapidFuzz for 83% of matches, indicating that SpaCy’s semantic similarity is not effective for most packages in these test cases. + +## Why the Frequent Fallback to RapidFuzz? + +The high fallback rate to RapidFuzz is due to several issues with SpaCy’s semantic similarity in the context of these searches: + +### 1. **Weak Embeddings for Technical Terms** +- **Issue**: Queries like "beda", "au", and "core" have weak or no embeddings in the `en_core_web_md` model: + - "beda" is likely an out-of-vocabulary token. + - "au" is a short token, possibly treated as a stop word. + - "core" is a common English word but doesn’t align strongly with tokenized package names (e.g., "hl7", "fhir", "core"). +- **Impact**: SpaCy cannot compute meaningful similarity scores, leading to fallbacks. + +### 2. **Empty or Sparse Package Descriptions** +- **Issue**: Many FHIR packages have empty `description` fields (e.g., `hl7.fhir.au.core` has no description). +- **Impact**: The combined text (`package_name`, `description`, `author`) lacks semantic content, reducing SpaCy’s ability to find meaningful matches. For example, "hl7.fhir.au.core Martijn Harthoorn" provides little semantic context beyond the package name. + +### 3. **Noise from Author Field** +- **Issue**: The `author` field (e.g., "Martijn Harthoorn") is included in the combined text for SpaCy similarity. +- **Impact**: Author names often add noise, diluting the semantic similarity between the query and the package’s core content (e.g., "au core" vs. "hl7.fhir.au.core Martijn Harthoorn"). + +### 4. **Tokenization of Package Names** +- **Issue**: SpaCy tokenizes package names like "hl7.fhir.au.core" into "hl7", "fhir", "au", "core". +- **Impact**: This splits the package name into parts, reducing the overall semantic alignment with the query (e.g., "au core" doesn’t match strongly with the tokenized form). + +### 5. **SpaCy Similarity Threshold (0.3)** +- **Issue**: The threshold for SpaCy semantic similarity is set to 0.3, which is relatively strict. +- **Impact**: Many packages have similarity scores just below 0.3 (e.g., possibly 0.25 for "au core" vs. "hl7.fhir.au.core"), forcing a fallback to RapidFuzz. + +### 6. **Empty Vectors Warning** +- **Issue**: For the query "beda", SpaCy raises a warning: `[W008] Evaluating Doc.similarity based on empty vectors`. +- **Impact**: SpaCy fails entirely when either the query or the target text lacks meaningful embeddings, leading to an immediate fallback to RapidFuzz. + +## Why RapidFuzz Succeeds + +- **Mechanism**: RapidFuzz uses the `partial_ratio` method, which computes a string similarity score (0 to 100) based on substring matches. +- **Effectiveness**: + - "beda" matches "abda" in package names with a score of 100.0. + - "au core" matches "au.core" with a score of 85.71. + - "core" matches package names like "hl7.fhir.core" with a score of 100.0. +- **Threshold**: The RapidFuzz threshold is 70, which is lenient and captures most substring matches. +- **No Dependency on Semantics**: RapidFuzz doesn’t rely on word embeddings or descriptive content, making it effective for technical queries and packages with sparse metadata. + +## Conclusion + +The IggyAPI search functionality in `semantic` mode falls back to RapidFuzz for 83% of matches due to SpaCy’s limitations with technical queries, sparse package metadata, and a strict similarity threshold. SpaCy struggles with weak embeddings for terms like "beda", "au", and "core", empty package descriptions, noise from author fields, tokenized package names, and a 0.3 similarity threshold. RapidFuzz succeeds where SpaCy fails by focusing on substring matches, ensuring that relevant results are returned despite SpaCy’s shortcomings. This analysis highlights the challenges of applying semantic similarity to technical FHIR data with limited descriptive content. \ No newline at end of file diff --git a/Search_explanation.md b/Search_explanation.md new file mode 100644 index 0000000..78bc7f8 --- /dev/null +++ b/Search_explanation.md @@ -0,0 +1,156 @@ +# Search Explanation for IggyAPI + +This document explains the two search modes available in IggyAPI's `/igs/search` endpoint: `semantic` and `string`. It details how each mode works, their strengths, and the types of queries each is best suited for, helping users choose the appropriate mode for their search needs. + +## Overview of the `/igs/search` Endpoint + +The `/igs/search` endpoint allows users to search for FHIR Implementation Guides (IGs) by providing a query string. The endpoint supports two search modes, specified via the `search_type` query parameter: + +- **`semantic` (default)**: Matches based on the meaning of the query and package metadata, with a fallback to string-based matching. +- **`string`**: Matches based on token similarity and exact/near-exact string matching. + +Both modes operate on a pre-filtered list of packages, where the query words must be present in the package name or author field. The search then applies the specified similarity matching to rank and return results. + +## Pre-filtering Step (Common to Both Modes) + +Before applying either search mode, IggyAPI filters the list of available packages to reduce the search space: + +- **How It Works**: + - The query is split into individual words (e.g., "au core" becomes `["au", "core"]`). + - Packages are included in the filtered list only if all query words are present in either the `package_name` or `author` field (case-insensitive). + - For example, the query "au core" will include packages like "hl7.fhir.au.core" because both "au" and "core" are substrings of the package name. + +- **Purpose**: + - This step ensures that only potentially relevant packages are passed to the similarity matching phase, improving performance by reducing the number of comparisons. + +## Semantic Search Mode (`search_type=semantic`) + +### How It Works + +- **Primary Matching (SpaCy Semantic Similarity)**: + - Uses SpaCy's `en_core_web_md` model to compute the semantic similarity between the query and a combined text of the package's `name`, `description`, and `author`. + - SpaCy processes both the query and the combined text into `Doc` objects, then uses word embeddings to calculate a similarity score (between 0 and 1) based on the meaning of the texts. + - A package is included in the results if the similarity score exceeds a threshold of `0.3`. + +- **Fallback (Rapidfuzz String Matching)**: + - If the semantic similarity score is below the threshold, the search falls back to rapidfuzz's `partial_ratio` method for string-based matching. + - `partial_ratio` computes a score (0 to 100) based on how closely the query matches substrings in the `name`, `description`, or `author` fields. + - A package is included if the rapidfuzz score exceeds `70`. + +- **Result Ranking**: + - Results are ranked by their similarity scores (semantic or rapidfuzz), with an adjustment factor applied based on the source of the match (e.g., matches in the `name` field are weighted higher). + +### Strengths + +- **Meaning-Based Matching**: + - Excels at finding packages that are conceptually similar to the query, even if the exact words differ. For example, a query like "healthcare standard" might match "hl7.fhir.core" because SpaCy understands the semantic relationship between "healthcare" and "fhir". +- **Context Awareness**: + - Takes into account the `description` and `author` fields, providing a broader context for matching. This can help when package names alone are not descriptive enough. +- **Robust Fallback**: + - The rapidfuzz fallback ensures that technical queries (e.g., "au core") that might fail semantic matching still return relevant results based on string similarity. + +### Best Suited For + +- **Conceptual Queries**: + - Queries where the user is looking for packages related to a concept or topic, rather than an exact name (e.g., "patient data" or "clinical standards"). +- **Natural Language Queries**: + - Longer or more descriptive queries where semantic understanding is beneficial (e.g., "Australian healthcare profiles"). +- **General Exploration**: + - When the user is exploring and might not know the exact package name but has a general idea of what they’re looking for. + +### Limitations + +- **Technical Queries**: + - May struggle with short, technical queries (e.g., "au core") if the semantic similarity score is too low, although the rapidfuzz fallback mitigates this. +- **Tokenization Issues**: + - SpaCy’s tokenization of package names (e.g., splitting "hl7.fhir.au.core" into "hl7", "fhir", "au", "core") can dilute the semantic match for queries that rely on specific terms. +- **Threshold Sensitivity**: + - The semantic similarity threshold (`0.3`) might still exclude some relevant matches if the query and package metadata are semantically distant, even with the fallback. + +## String Search Mode (`search_type=string`) + +### How It Works + +- **Primary Matching (SpaCy Token Similarity)**: + - Uses SpaCy to compute a token-based similarity score between the query and the combined text of the package’s `name`, `description`, and `author`. + - Unlike `semantic` mode, this focuses more on token overlap rather than deep semantic meaning, but still uses SpaCy’s similarity method. + - A package is included if the token similarity score exceeds a threshold of `0.7`. + +- **Fallback (Rapidfuzz String Matching)**: + - If the token similarity score is below the threshold, the search falls back to rapidfuzz’s `partial_ratio` method. + - `partial_ratio` computes a score (0 to 100) based on how closely the query matches substrings in the `name`, `description`, or `author` fields. + - A package is included if the rapidfuzz score exceeds `70`. + +- **Result Ranking**: + - Results are ranked by their similarity scores (token similarity or rapidfuzz), with an adjustment factor applied based on the source of the match (e.g., matches in the `name` field are weighted higher). + +### Strengths + +- **Exact and Near-Exact Matching**: + - Excels at finding packages where the query closely matches the package name or author, even with minor variations (e.g., "au core" matches "hl7.fhir.au.core"). +- **Technical Queries**: + - Performs well with short, technical queries that are likely to appear as substrings in package names (e.g., "au core", "fhir r4"). +- **Reliable Fallback**: + - The rapidfuzz fallback ensures that even if SpaCy’s token similarity fails, string-based matching will catch relevant results. + +### Best Suited For + +- **Exact Name Searches**: + - Queries where the user knows part of the package name or author and wants an exact or near-exact match (e.g., "au core", "hl7 fhir"). +- **Technical Queries**: + - Short queries that correspond to specific terms or abbreviations in package names (e.g., "r4", "us core"). +- **Precise Matching**: + - When the user prioritizes string similarity over conceptual similarity, ensuring that results closely match the query text. + +### Limitations + +- **Lack of Semantic Understanding**: + - Does not consider the meaning of the query, so it might miss conceptually related packages if the exact words differ (e.g., "healthcare standard" might not match "hl7.fhir.core" as well as in `semantic` mode). +- **Token Overlap Dependency**: + - The initial SpaCy token similarity might still fail for queries with low overlap, relying heavily on the rapidfuzz fallback. +- **Less Contextual**: + - While it considers `description` and `author`, it’s less effective at leveraging these fields for broader context compared to `semantic` mode. + +## Choosing the Right Search Mode + +- **Use `semantic` Mode When**: + - You’re searching for packages related to a concept or topic (e.g., "patient data", "clinical standards"). + - Your query is descriptive or in natural language (e.g., "Australian healthcare profiles"). + - You’re exploring and want to find packages that are conceptually similar, even if the exact words differ. + - Example: Searching for "healthcare standard" to find "hl7.fhir.core". + +- **Use `string` Mode When**: + - You know part of the package name or author and want an exact or near-exact match (e.g., "au core", "hl7 fhir"). + - Your query is short and technical, likely matching specific terms in package names (e.g., "r4", "us core"). + - You prioritize precise string matching over conceptual similarity. + - Example: Searching for "au core" to find "hl7.fhir.au.core". + +## Example Scenarios + +### Scenario 1: Searching for "au core" + +- **Semantic Mode**: + - SpaCy might compute a low semantic similarity score between "au core" and "hl7.fhir.au.core Martijn Harthoorn" due to tokenization and semantic distance. + - However, the rapidfuzz fallback will match "au core" to "hl7.fhir.au.core" with a high score (e.g., `85`), ensuring the package is included in the results. +- **String Mode**: + - SpaCy’s token similarity might also be low, but rapidfuzz will match "au core" to "hl7.fhir.au.core" with a high score, returning the package. +- **Best Mode**: `string`, as this is a technical query aiming for an exact match. However, `semantic` mode will now also work due to the rapidfuzz fallback. + +### Scenario 2: Searching for "healthcare standard" + +- **Semantic Mode**: + - SpaCy will compute a higher semantic similarity score between "healthcare standard" and "hl7.fhir.core Martijn Harthoorn" because of the conceptual alignment between "healthcare standard" and "fhir". + - The package is likely to exceed the `0.3` threshold and be included in the results. +- **String Mode**: + - SpaCy’s token similarity might be low because "healthcare standard" doesn’t directly overlap with "hl7.fhir.core". + - Rapdfuzz might also fail if the string match isn’t close enough, potentially excluding the package. +- **Best Mode**: `semantic`, as this query is conceptual and benefits from meaning-based matching. + +## Conclusion + +IggyAPI’s search functionality provides two complementary modes to cater to different user needs: + +- **`semantic` Mode**: Best for conceptual, descriptive, or exploratory searches where understanding the meaning of the query is key. It now includes a string-based fallback to handle technical queries better. +- **`string` Mode**: Best for precise, technical searches where the user knows part of the package name or author and wants an exact or near-exact match. + +By understanding the strengths of each mode, users can choose the most appropriate `search_type` for their query, ensuring optimal search results. \ No newline at end of file diff --git a/core.py b/core.py new file mode 100644 index 0000000..6e02b44 --- /dev/null +++ b/core.py @@ -0,0 +1,585 @@ +import feedparser +import requests +import json +import os +import logging +from sqlalchemy import create_engine, Column, String, Integer, JSON, DateTime, text +from sqlalchemy.orm import declarative_base, sessionmaker +from datetime import datetime, timedelta, timezone +from tenacity import retry, stop_after_attempt, wait_fixed +import re +import tarfile +import io +from collections import defaultdict +from typing import Optional + +# Configure logging +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + +# SQLite Database Setup with increased timeout +Base = declarative_base() +DATABASE_URL = "sqlite:///instance/fhir_igs.db?timeout=60" # Increase timeout to 60 seconds +os.makedirs("instance", exist_ok=True) +engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + +with engine.connect() as connection: + connection.execute(text("PRAGMA journal_mode=WAL;")) + connection.execute(text("PRAGMA busy_timeout=60000;")) + logger.info("Enabled WAL mode and set busy timeout for SQLite") + +# Database Models +class CachedPackage(Base): + __tablename__ = "cached_packages" + package_name = Column(String, primary_key=True) + version = Column(String) + latest_official_version = Column(String) + author = Column(String) + description = Column(String) + fhir_version = Column(String) + url = Column(String) + canonical = Column(String) + all_versions = Column(JSON) + dependencies = Column(JSON) + version_count = Column(Integer) + last_updated = Column(String) + latest_version = Column(String) + +class RegistryCacheInfo(Base): + __tablename__ = "registry_cache_info" + id = Column(Integer, primary_key=True) + last_fetch_timestamp = Column(DateTime(timezone=True), nullable=True) + +Base.metadata.create_all(bind=engine) + +# Global variables +refresh_status = { + "last_refresh": None, + "errors": [] +} + +app_config = { + "MANUAL_PACKAGE_CACHE": None, + "MANUAL_CACHE_TIMESTAMP": None, + "FETCH_IN_PROGRESS": False, + "PROFILE_CACHE": {} # Cache for profiles: {ig_name#version: [ProfileMetadata]} +} + +# Constants from FHIRFLARE +FHIR_REGISTRY_BASE_URL = "https://packages.fhir.org" + +def safe_parse_version(v_str): + """Parse version strings, handling FHIR-specific suffixes.""" + if not v_str or not isinstance(v_str, str): + return "0.0.0a0" + v_str_norm = v_str.lower() + base_part = v_str_norm.split('-', 1)[0] if '-' in v_str_norm else v_str_norm + suffix = v_str_norm.split('-', 1)[1] if '-' in v_str_norm else None + if re.match(r'^\d+(\.\d+)*$', base_part): + if suffix in ['dev', 'snapshot', 'ci-build', 'snapshot1', 'snapshot3', 'draft-final']: + return f"{base_part}a0" + elif suffix in ['draft', 'ballot', 'preview', 'ballot2']: + return f"{base_part}b0" + elif suffix and suffix.startswith('rc'): + return f"{base_part}rc{''.join(filter(str.isdigit, suffix)) or '0'}" + return base_part + return "0.0.0a0" + +def compare_versions(v1, v2): + """Compare two version strings, handling FHIR-specific formats.""" + v1_parts = v1.split('.') + v2_parts = v2.split('.') + for i in range(max(len(v1_parts), len(v2_parts))): + p1 = v1_parts[i] if i < len(v1_parts) else '0' + p2 = v2_parts[i] if i < len(v2_parts) else '0' + p1_num, p1_suffix = re.match(r'(\d+)([a-zA-Z0-9]*)$', p1).groups() if re.match(r'^\d+[a-zA-Z0-9]*$', p1) else (p1, '') + p2_num, p2_suffix = re.match(r'(\d+)([a-zA-Z0-9]*)$', p2).groups() if re.match(r'^\d+[a-zA-Z0-9]*$', p2) else (p2, '') + if int(p1_num) != int(p2_num): + return int(p1_num) > int(p2_num) + if p1_suffix != p2_suffix: + if not p1_suffix: + return True + if not p2_suffix: + return False + return p1_suffix > p2_suffix + return False + +def get_additional_registries(): + """Fetch additional FHIR IG registries from the master feed.""" + feed_registry_url = 'https://raw.githubusercontent.com/FHIR/ig-registry/master/package-feeds.json' + feeds = [] + try: + response = requests.get(feed_registry_url, timeout=15) + response.raise_for_status() + data = json.loads(response.text) + feeds = [{'name': feed['name'], 'url': feed['url']} for feed in data.get('feeds', []) if 'name' in feed and 'url' in feed and feed['url'].startswith(('http://', 'https://'))] + feeds = [feed for feed in feeds if feed['url'] != 'https://fhir.kl.dk/package-feed.xml'] + logger.info(f"Fetched {len(feeds)} registries from {feed_registry_url}") + except Exception as e: + logger.error(f"Failed to fetch registries: {str(e)}") + refresh_status["errors"].append(f"Failed to fetch registries from {feed_registry_url}: {str(e)}") + return feeds + +@retry(stop=stop_after_attempt(3), wait=wait_fixed(5)) +def fetch_feed(feed): + """Fetch and parse a single feed, handling both JSON and RSS/Atom.""" + logger.info(f"Fetching feed: {feed['name']} from {feed['url']}") + entries = [] + try: + response = requests.get(feed['url'], timeout=30) + response.raise_for_status() + content_type = response.headers.get('content-type', '').lower() + logger.debug(f"Response content-type: {content_type}, content: {response.text[:200]}") + + if 'application/json' in content_type or feed['url'].endswith('.json'): + try: + data = response.json() + packages = data.get('packages', data.get('entries', [])) + for pkg in packages: + if not isinstance(pkg, dict): + continue + versions = pkg.get('versions', []) + if versions: + entries.append(pkg) + else: + pkg['versions'] = [{"version": pkg.get('version', ''), "pubDate": pkg.get('pubDate', 'NA')}] + entries.append(pkg) + logger.info(f"Fetched {len(entries)} packages from JSON feed {feed['name']}") + except json.JSONDecodeError as e: + logger.error(f"JSON parse error for {feed['name']}: {str(e)}") + refresh_status["errors"].append(f"JSON parse error for {feed['name']} at {feed['url']}: {str(e)}") + raise + elif 'xml' in content_type or 'rss' in content_type or 'atom' in content_type or feed['url'].endswith(('.rss', '.atom', '.xml')) or 'text/plain' in content_type: + try: + feed_data = feedparser.parse(response.text) + if not feed_data.entries: + logger.warning(f"No entries found in feed {feed['name']}") + for entry in feed_data.entries: + title = entry.get('title', '') + pkg_name = '' + version = '' + if '#' in title: + pkg_name, version = title.split('#', 1) + else: + pkg_name = title + version = entry.get('version', '') + if not pkg_name: + pkg_name = entry.get('id', '') or entry.get('summary', '') + if not pkg_name: + continue + package = { + 'name': pkg_name, + 'version': version, + 'author': entry.get('author', 'NA'), + 'fhirVersion': entry.get('fhir_version', ['NA'])[0] or 'NA', + 'url': entry.get('link', 'unknown'), + 'canonical': entry.get('canonical', ''), + 'dependencies': entry.get('dependencies', []), + 'pubDate': entry.get('published', entry.get('pubdate', 'NA')), + 'registry': feed['url'], + 'versions': [{"version": version, "pubDate": entry.get('published', entry.get('pubdate', 'NA'))}] + } + entries.append(package) + logger.info(f"Fetched {len(entries)} entries from RSS/Atom feed {feed['name']}") + except Exception as e: + logger.error(f"RSS/Atom parse error for {feed['name']}: {str(e)}") + refresh_status["errors"].append(f"RSS/Atom parse error for {feed['name']} at {feed['url']}: {str(e)}") + raise + else: + logger.error(f"Unknown content type for {feed['name']}: {content_type}") + refresh_status["errors"].append(f"Unknown content type for {feed['name']} at {feed['url']}: {content_type}") + raise ValueError(f"Unknown content type: {content_type}") + + return entries + except requests.RequestException as e: + logger.error(f"Request error for {feed['name']}: {str(e)}") + refresh_status["errors"].append(f"Request error for {feed['name']} at {feed['url']}: {str(e)}") + raise + except Exception as e: + logger.error(f"Unexpected error for {feed['name']}: {str(e)}") + refresh_status["errors"].append(f"Unexpected error for {feed['name']} at {feed['url']}: {str(e)}") + raise + +def normalize_package_data(entries, registry_url): + """Normalize package data, grouping by name and aggregating versions.""" + logger.info("Starting normalization of package data") + packages_grouped = defaultdict(list) + skipped_raw_count = 0 + for entry in entries: + if not isinstance(entry, dict): + skipped_raw_count += 1 + logger.warning(f"Skipping raw package entry, not a dict: {entry}") + continue + raw_name = entry.get('name') or entry.get('title') or '' + if not isinstance(raw_name, str): + raw_name = str(raw_name) + name_part = raw_name.split('#', 1)[0].strip().lower() + if name_part: + packages_grouped[name_part].append(entry) + else: + if not entry.get('id'): + skipped_raw_count += 1 + logger.warning(f"Skipping raw package entry, no name or id: {entry}") + logger.info(f"Initial grouping: {len(packages_grouped)} unique package names found. Skipped {skipped_raw_count} raw entries.") + + normalized_list = [] + skipped_norm_count = 0 + total_entries_considered = 0 + + for name_key, entries in packages_grouped.items(): + total_entries_considered += len(entries) + latest_absolute_data = None + latest_official_data = None + latest_absolute_ver = "0.0.0a0" + latest_official_ver = "0.0.0a0" + all_versions = [] + package_name_display = name_key + + processed_versions = set() + for package_entry in entries: + versions_list = package_entry.get('versions', []) + for version_info in versions_list: + if isinstance(version_info, dict) and 'version' in version_info: + version_str = version_info.get('version', '') + if version_str and version_str not in processed_versions: + all_versions.append({ + "version": version_str, + "pubDate": version_info.get('pubDate', 'NA') + }) + processed_versions.add(version_str) + + processed_entries = [] + for package_entry in entries: + version_str = None + raw_name_entry = package_entry.get('name') or package_entry.get('title') or '' + if not isinstance(raw_name_entry, str): + raw_name_entry = str(raw_name_entry) + version_keys = ['version', 'latestVersion'] + for key in version_keys: + val = package_entry.get(key) + if isinstance(val, str) and val: + version_str = val.strip() + break + elif isinstance(val, list) and val and isinstance(val[0], str) and val[0]: + version_str = val[0].strip() + break + if not version_str and '#' in raw_name_entry: + parts = raw_name_entry.split('#', 1) + if len(parts) == 2 and parts[1]: + version_str = parts[1].strip() + + if not version_str: + logger.warning(f"Skipping entry for {raw_name_entry}: no valid version found. Entry: {package_entry}") + skipped_norm_count += 1 + continue + + version_str = version_str.strip() + current_display_name = str(raw_name_entry).split('#')[0].strip() + if current_display_name and current_display_name != name_key: + package_name_display = current_display_name + + entry_with_version = package_entry.copy() + entry_with_version['version'] = version_str + processed_entries.append(entry_with_version) + + try: + current_ver = safe_parse_version(version_str) + if latest_absolute_data is None or compare_versions(current_ver, latest_absolute_ver): + latest_absolute_ver = current_ver + latest_absolute_data = entry_with_version + + if re.match(r'^\d+\.\d+\.\d+(?:-[a-zA-Z0-9\.]+)?$', version_str): + if latest_official_data is None or compare_versions(current_ver, latest_official_ver): + latest_official_ver = current_ver + latest_official_data = entry_with_version + except Exception as comp_err: + logger.error(f"Error comparing version '{version_str}' for package '{package_name_display}': {comp_err}", exc_info=True) + + if latest_absolute_data: + final_absolute_version = latest_absolute_data.get('version', 'unknown') + final_official_version = latest_official_data.get('version') if latest_official_data else None + + author_raw = latest_absolute_data.get('author') or latest_absolute_data.get('publisher') or 'NA' + if isinstance(author_raw, dict): + author = author_raw.get('name', str(author_raw)) + elif not isinstance(author_raw, str): + author = str(author_raw) + else: + author = author_raw + + fhir_version_str = 'NA' + fhir_keys = ['fhirVersion', 'fhirVersions', 'fhir_version'] + for key in fhir_keys: + val = latest_absolute_data.get(key) + if isinstance(val, list) and val and isinstance(val[0], str): + fhir_version_str = val[0] + break + elif isinstance(val, str) and val: + fhir_version_str = val + break + + url_raw = latest_absolute_data.get('url') or latest_absolute_data.get('link') or 'unknown' + url = str(url_raw) if not isinstance(url_raw, str) else url_raw + canonical_raw = latest_absolute_data.get('canonical') or url + canonical = str(canonical_raw) if not isinstance(canonical_raw, str) else canonical_raw + + dependencies_raw = latest_absolute_data.get('dependencies', []) + dependencies = [] + if isinstance(dependencies_raw, dict): + dependencies = [{"name": str(dn), "version": str(dv)} for dn, dv in dependencies_raw.items()] + elif isinstance(dependencies_raw, list): + for dep in dependencies_raw: + if isinstance(dep, str): + if '@' in dep: + dep_name, dep_version = dep.split('@', 1) + dependencies.append({"name": dep_name, "version": dep_version}) + else: + dependencies.append({"name": dep, "version": "N/A"}) + elif isinstance(dep, dict) and 'name' in dep and 'version' in dep: + dependencies.append(dep) + + all_versions.sort(key=lambda x: x.get('pubDate', ''), reverse=True) + latest_version = final_official_version or final_absolute_version or 'N/A' + + normalized_entry = { + "package_name": package_name_display, + "version": final_absolute_version, + "latest_official_version": final_official_version, + "author": author.strip(), + "description": "", + "fhir_version": fhir_version_str.strip(), + "url": url.strip(), + "canonical": canonical.strip(), + "all_versions": all_versions, + "dependencies": dependencies, + "version_count": len(all_versions), + "last_updated": datetime.utcnow().isoformat(), + "latest_version": latest_version + } + normalized_list.append(normalized_entry) + if not final_official_version: + logger.warning(f"No official version found for package '{package_name_display}'. Versions: {[v['version'] for v in all_versions]}") + else: + logger.warning(f"No valid entries found to determine details for package name key '{name_key}'. Entries: {entries}") + skipped_norm_count += len(entries) + + logger.info(f"Normalization complete. Entries considered: {total_entries_considered}, Skipped during norm: {skipped_norm_count}, Unique Packages Found: {len(normalized_list)}") + normalized_list.sort(key=lambda x: x.get('package_name', '').lower()) + return normalized_list + +def cache_packages(normalized_packages, db_session): + """Cache normalized FHIR Implementation Guide packages in the CachedPackage database.""" + logger.info("Starting to cache packages") + try: + batch_size = 10 + for i in range(0, len(normalized_packages), batch_size): + batch = normalized_packages[i:i + batch_size] + logger.info(f"Processing batch {i//batch_size + 1} with {len(batch)} packages") + for package in batch: + existing = db_session.query(CachedPackage).filter_by(package_name=package['package_name']).first() + if existing: + existing.version = package['version'] + existing.latest_official_version = package['latest_official_version'] + existing.author = package['author'] + existing.description = package['description'] + existing.fhir_version = package['fhir_version'] + existing.url = package['url'] + existing.canonical = package['canonical'] + existing.all_versions = package['all_versions'] + existing.dependencies = package['dependencies'] + existing.version_count = package['version_count'] + existing.last_updated = package['last_updated'] + existing.latest_version = package['latest_version'] + else: + new_package = CachedPackage(**package) + db_session.add(new_package) + db_session.commit() + logger.info(f"Cached {len(batch)} packages in batch {i//batch_size + 1}") + logger.info(f"Successfully cached {len(normalized_packages)} packages in CachedPackage.") + except Exception as error: + db_session.rollback() + logger.error(f"Error caching packages: {error}") + refresh_status["errors"].append(f"Error caching packages: {str(error)}") + raise + logger.info("Finished caching packages") + +def should_sync_packages(db_session): + """Check if the database is empty or data is older than 4 hours.""" + logger.info("Checking if sync is needed") + try: + package_count = db_session.query(CachedPackage).count() + if package_count == 0: + logger.info("Database is empty, triggering sync") + return True + + latest_package = db_session.query(CachedPackage).order_by(CachedPackage.last_updated.desc()).first() + if not latest_package or not latest_package.last_updated: + logger.info("No valid last_updated timestamp, triggering sync") + return True + + try: + last_updated = datetime.fromisoformat(latest_package.last_updated.replace('Z', '+00:00')) + time_diff = datetime.utcnow() - last_updated + if time_diff.total_seconds() > 4 * 3600: + logger.info(f"Data is {time_diff.total_seconds()/3600:.2f} hours old, triggering sync") + return True + else: + logger.info(f"Data is {time_diff.total_seconds()/3600:.2f} hours old, using current dataset") + return False + except ValueError: + logger.warning("Invalid last_updated format, triggering sync") + return True + except Exception as e: + logger.error(f"Error checking sync status: {str(e)}") + return True + +def sync_packages(): + """Syndicate package metadata from RSS feeds and package registries.""" + logger.info("Starting RSS feed refresh") + global refresh_status, app_config + refresh_status["errors"] = [] + temp_packages = [] + app_config["FETCH_IN_PROGRESS"] = True + + db = SessionLocal() + try: + registries = get_additional_registries() + if not registries: + logger.error("No registries fetched. Cannot proceed with package syndication.") + refresh_status["errors"].append("No registries fetched. Syndication aborted.") + app_config["FETCH_IN_PROGRESS"] = False + return + + for feed in registries: + if not feed['url'].startswith(('http://', 'https://')): + logger.warning(f"Skipping invalid feed URL: {feed['url']}") + continue + try: + entries = fetch_feed(feed) + normalized_packages = normalize_package_data(entries, feed["url"]) + temp_packages.extend(normalized_packages) + except Exception as e: + logger.error(f"Failed to process feed {feed['name']}: {str(e)}") + refresh_status["errors"].append(f"Failed to process feed {feed['name']}: {str(e)}") + + now_ts = datetime.utcnow().isoformat() + app_config["MANUAL_PACKAGE_CACHE"] = temp_packages + app_config["MANUAL_CACHE_TIMESTAMP"] = now_ts + + logger.info("Updating database with fetched packages") + try: + db.query(CachedPackage).delete() + db.flush() + logger.info("Cleared existing data in cached_packages table") + cache_packages(temp_packages, db) + timestamp_info = db.query(RegistryCacheInfo).first() + if timestamp_info: + timestamp_info.last_fetch_timestamp = datetime.fromisoformat(now_ts.replace('Z', '+00:00')) + else: + timestamp_info = RegistryCacheInfo(last_fetch_timestamp=datetime.fromisoformat(now_ts.replace('Z', '+00:00'))) + db.add(timestamp_info) + db.commit() + refresh_status["last_refresh"] = now_ts + logger.info(f"Refreshed database with {len(temp_packages)} packages") + except Exception as e: + db.rollback() + logger.error(f"Failed to update database: {str(e)}") + refresh_status["errors"].append(f"Database update failed: {str(e)}") + raise + finally: + app_config["FETCH_IN_PROGRESS"] = False + db.close() + logger.info("Closed database session after sync") + logger.info("Finished syncing packages") + +def download_package(ig_name: str, version: str, package: dict) -> tuple[str, Optional[str]]: + """Download the .tgz file for the given IG and version, mimicking FHIRFLARE's import_package_and_dependencies.""" + # Create a temporary directory for downloads + download_dir = "instance/fhir_packages" + os.makedirs(download_dir, exist_ok=True) + tgz_filename = f"{ig_name}-{version}.tgz".replace('/', '_') + tgz_path = os.path.join(download_dir, tgz_filename) + + # Check if package already exists + if os.path.exists(tgz_path): + logger.info(f"Package {ig_name}#{version} already exists at {tgz_path}") + return tgz_path, None + + # Try canonical URL first (most reliable) + canonical_url = package.get('canonical') + if canonical_url and canonical_url.endswith(f"{version}/package.tgz"): + logger.info(f"Attempting to fetch package from canonical URL: {canonical_url}") + try: + response = requests.get(canonical_url, stream=True, timeout=30) + response.raise_for_status() + with open(tgz_path, 'wb') as f: + for chunk in response.iter_content(chunk_size=8192): + if chunk: + f.write(chunk) + logger.info(f"Successfully downloaded {ig_name}#{version} to {tgz_path} using canonical URL") + return tgz_path, None + except requests.RequestException as e: + error_msg = f"Failed to fetch package from canonical URL {canonical_url}: {str(e)}" + logger.warning(error_msg) + + # Try primary FHIR registry base URL (e.g., https://packages.fhir.org/hl7.fhir.au.core/1.1.0-preview/) + base_url = f"{FHIR_REGISTRY_BASE_URL}/{ig_name}/{version}/" + logger.info(f"Attempting to fetch package from FHIR registry base URL: {base_url}") + try: + response = requests.get(base_url, stream=True, timeout=30) + response.raise_for_status() + # Check if the response is a .tgz file + content_type = response.headers.get('Content-Type', '') + content_disposition = response.headers.get('Content-Disposition', '') + if 'application/x-tar' in content_type or content_disposition.endswith('.tgz') or base_url.endswith('.tgz'): + with open(tgz_path, 'wb') as f: + for chunk in response.iter_content(chunk_size=8192): + if chunk: + f.write(chunk) + logger.info(f"Successfully downloaded {ig_name}#{version} to {tgz_path} using FHIR registry base URL") + return tgz_path, None + else: + error_msg = f"FHIR registry base URL {base_url} did not return a .tgz file (Content-Type: {content_type})" + logger.warning(error_msg) + except requests.RequestException as e: + error_msg = f"Failed to fetch package from FHIR registry base URL {base_url}: {str(e)}" + logger.warning(error_msg) + + # Fallback: Try FHIR registry with explicit /package.tgz + tgz_url = f"{FHIR_REGISTRY_BASE_URL}/{ig_name}/{version}/package.tgz" + logger.info(f"Attempting to fetch package from FHIR registry explicit URL: {tgz_url}") + try: + response = requests.get(tgz_url, stream=True, timeout=30) + response.raise_for_status() + with open(tgz_path, 'wb') as f: + for chunk in response.iter_content(chunk_size=8192): + if chunk: + f.write(chunk) + logger.info(f"Successfully downloaded {ig_name}#{version} to {tgz_path} using FHIR registry explicit URL") + return tgz_path, None + except requests.RequestException as e: + error_msg = f"Failed to fetch package from FHIR registry explicit URL {tgz_url}: {str(e)}" + logger.warning(error_msg) + + # Fallback: Use registry URL (e.g., Simplifier) + registry_url = package.get('registry', 'https://packages.simplifier.net') + if registry_url.endswith('/rssfeed'): + registry_url = registry_url[:-8] + tgz_url = f"{registry_url}/{ig_name}/{version}/package.tgz" + logger.info(f"Attempting to fetch package from registry URL: {tgz_url}") + try: + response = requests.get(tgz_url, stream=True, timeout=30) + response.raise_for_status() + with open(tgz_path, 'wb') as f: + for chunk in response.iter_content(chunk_size=8192): + if chunk: + f.write(chunk) + logger.info(f"Successfully downloaded {ig_name}#{version} to {tgz_path} using registry URL") + return tgz_path, None + except requests.RequestException as e: + error_msg = f"Failed to fetch package from registry URL {tgz_url}: {str(e)}" + logger.error(error_msg) + return None, error_msg + + return None, "All download attempts failed." \ No newline at end of file diff --git a/instance/fhir_igs.db b/instance/fhir_igs.db index ca2e1dcd41b5e054a089494f52adf9e106e36be2..a36411de59efeab72dde9491c5c6273a6ebb433b 100644 GIT binary patch literal 700416 zcmeEv2YegHnJ;#iodjUov1!K*k}S)zg(WJR<3dr5mPpH@WJh*vWdSUK716W{P@-(d zAtljHbDGn8wUaoPOLFPS<#LyH$))#RU&2lnjQ66)#BD@NtetXfIu4pp>*YE+a$IkXMb_D@c2rx*6_o17Zo zcQCYj`@zr^T4r<4<`d@&odZ{0C7jB#HnOH=4waSkoRU=y*FQx^+guN+T~@tAMWvvI zZXVw^v1{Df!g*CUv{KQ2W;VKlmL4k2&T45*$sh7~MX6SDCB3my25r-|a>Ye!HmB)c z1gd(zv36Q1mWoz{g;om>rAyUf#U6+n{?&3u zsi>L8@8wZ|E_(FLF(8fTVQ8)qI|gpLO7LlDz%k=U9$x$*AW>rfHkqhCQir0h;gB%d zx@f|YbAPvgJ^i>L_^04+gTD&?Jow|__k-UGel_?7|0{!^4*qlS!@&;*-y3{~|HZ+# z1m6&RjsO1O%YrWmKHGm^@M*zQ!Fz%WK_gfQW`j!bw%~!_jls#_MDUv6a4;IYDsVKo zF?eb4g5Wtpf3Pzs1pXBG&%j3lzYP2|@Poj&0$&MyF7U~~2Lta3ygl&dz=MHT1zr+( zUf`L5rvy#}?hYIY%mviIp}@hwOkgUoGcX>wI*<$u1~vya1TGE?1o{KLfp-62{D1KO zhyNG;AN#-O|Azld{?GXT+5b=e5BT5Zf2;pZ{@3{*@GtrA^3VIr{=@!^{|^7-{rmiT z{5$;D`^WqVzwE!l>^?!j|8N920vrL307rl$z!BgGa0EC4|KB5U+43%6uyOf%+%I1q z!hO^77Th;4ljC&d^7*)5wR|4#Tb9qkJ-pnF`;E)ALMorS6ZgSW72Knz%DBf)&EXzD zmBD@Jl!E)nsVCt6vc<>Y{_4ebxR0LNi~DOA$xl0fH*RC6CUL*|)K=Udcj_A4uQ`># z{kl_O+^;{i8Tav1v`oA8)Va7%obuzo?Nlf3+fPwLcATW8*PSPi;J)jmiu(;G@4$V} z$=h+CI(ZxJ(-66e(>bQxZiqm z0QV=H4B~$KN$UC?Cp&OIbmDH@l@klNr%n`c&zzv|swYyoziNrvIeX#&?%5Oc#lt74 zcXKDM!##h3zFs&nhI{b@L0&!)$Nk8OLEQBd)RM{xYDx730k*V6Kps0mgK*~wYQtSi zPs07~rFq<+v_!qWXQ_ny@=_M}#U<+Rlb816eqw0~_mfK#xSv`Y!TsJP`pSJvME@yE zME{LTG{{d|qCP%#iCpKWFA=KGSiB4O`xmRYKWmY`^6bSt?$2GMuRO4r#{GGVhj4%X zB7O0Ni?`tZ;zjE9ixz2+U$D3X_m?bQkNe9Puf_ePi%HxU7G>Puw0Jr0uUNbQ_v4Fa zgNBSrK!x7*Ja0EC490861M}Q;15#R`L1ULd5f&bSL zfKz-;@P)WjMCSB=x`w4AVn&q+0>M!JgVfCA+>Fj@jd7c>UN2$b#e7+jQO zaTM3NxG0%`k_#w3<*~Rf#B~uaN@}2V5&9NoAcSyHY6X3F11?G^*@%l09w<%W3S5-d zawRTG_n?d$%3-(>7o|o}iUvhdD7k@BL+E?-4eAs1f!aaI9HY1>jpS-v6wjfw2ud-z z9@jXot+*y|QO?A6T$GNn6Bp(D+<c zd@8uAxQ^kv6W3k1?#A^bT=(F5GOk5jOSn$pI*IEPu6uDUM*VAyl5!cgk zJpj7NP!}WYzFU0i%Tra})Vq7o5^-^3f!}W4pufX+6T(83QCS0$^ z^%`8S#q~N|58`?~u7_~F0oQrB25?1iJqOorTsPx-BCcoR;(s^-90861M}Q;15#R`L z1ULd50geDi;88%p4;p>G@A>+E*8Ap7iAI+XSuZC6Nb!te0lul>)`Ieo$S zz`&qCc+WkH{r%nJ1GRhzJuatl$i}fkJ}yV(7`sg=dPO^24DG_-xl&0l#&eZQ*%%uf zv`@W|4Gl>e+N`GPa#5`edXO7rq|UhFZFjD>4ue=f7Fy3}t=|$_U#_OMAvc7|rb@*v zq3B3xx-=h(MWUmj=+IbXWGosF?VQ@b{_fjvyS*Oq*&mD1vqVH5PQ->2BaGfsPj4{H zP+3^;Muok`ZjT(2GsDBIb%tOJk0nP}1S6R+!C2SRe>DSRu@nEfm?V}$)=XI`(#a%7 zR8Ghdc6%hKI7kjMa;s++kIGJr7`@dn%rGK>D`GShW%QOV?Cu{nF_IP~PmFM!OkRC7 z5i$v$5k8Go&lnv{u$89M(6EWl`Ca`<6CGhu@Ic3sGwfw{dxY#`(K`cd95v4vn#j5`8AQIl2L7u%ZpcX5T!H*I&7QHjz8%NDEh6a|+N)mW<)a06Tq?Tr0 z%r^5LEnMm{bd4P2sCee6tSEd(B1sdK9n5u%V78H)^iQh>25M^`~1K0KDN zq*zlMlB;S1D8#IhY@&d%TTL6{V@b>ZaZ!lMBdcpe9A1(q4$MMXO&elk(P#?_tL#N& zEbfhDLIxMR+Q9t4NZjU!Bz(fLNMx+RI_vgw1cycb77ANPH#@4>$N`|j$?_3h~!>D$oP)BEqeU+R5J?{j*e+*|Cut#_(-u=lY& z|JL*Mo)7gr)bsS7O3!G|`ku%12;INw{&x3=yWiCP?C#^;bKM8KcXh|QFYa#d`eoOb zyWZ3FVApfH^sd{xws&3Cb$;icJAdB!rOx+uKG^w;&SRbF&Ko+Dofma>bo{F0n;jqP z_}h;AI~F<)b==sorDLG|zuSM-{@L~qwZFOj>FrNyzrB5T`*8cZc7NNi+rHiQv9`Ci zJ-=IA?=cq(xsAL{H^$H@$bcl#TSeBinHR3 zc#U|ac%CQ;KNG$x{G;%&aKB&(w+g%ZrH$C9A(x7Bxva~2Lip(UQrs@d85tCXm3%p; z2p@T@G;BY>_7Ldnuu&}(6n#PX@Ws+K)}vC6_K7&2{?oZqxc;<|Q{-~S5dP6!8m7_@ zoh@yuzl*~~)51RtNYQ!`1XWH|@|B$M!Nym^hFU2Le}9g&x%MiGbj=Vx;CQW+N74Hm zKOLrzgte^jUdM~<)9(pM6Los(K6O^rbtNBGC*V?7^A+KJjyjoKMi<^)N3@g+rwfMg zu6jv9lgo2i;hmRC;}%`BGqQn=GOAqG)qF|G2=AzOx$(L1cjm4d8ZE0_%isfVuYW+z zu|a%Wy@%8&45B=r5Z+pEtyL=gZT-bG`h-Cx9(c<|($&ghVLGp+4W(F7%}qzIv!F?(D8AL?UXK8XF(K4?#kGjWrXSYRN)Eq zdgCK-^KJA!lx0ivV6G}QdZp7<;icA_*^+Fi1~V^(mk{@)@`|ja)Vz#=7G6wjpHh`{ zMaE0$EhbG4Y*4{5tvU{~6<*+%E*4X%g09Kw;>x!WnWxX`3<>iW2&R2msv0X-; z7oN?&+VDa~6`mQ8E)|udhMa*6SrDF1y;CZ3wP>H1Yws-+o<{9c$|X6S0cje;`)J4! z*pg>;6zB!5Sjv~OILlTzheoCL#M+bgt@YAQyUC}w9bB| zSTcn38orPzrK{wfusXuI4PU^Mimnw^;W6u^?Phh_#l~8Nh*DLbSG9azDW+9n0}V85 znEgg3Q`Lm^HELF|ktqr5nhF&|2)PUOk}h0IgWO0JBD5e}LQ|!&6lW$^b)a*xn?_bC z3m3WHR?~S!!;HJo{dO9Y;<3$zdEtT@T2?QVVzJ6-oKMq=nv%vALN+Iad)Y`+kp_;D zi(nHrS0GuIZIH}IcJV3307b2!|>0FE-tbUlD=ZhP4eo=>}4%s zOUw#mB6@NU$r>e#ciE>f%^?-ay6_~{$#g-LtKb*f--ws*CYh~Jp~>Z#53)TW==oi> zN_d{BV(y^uPS$j*5)}%^NwhLDVB4Y!zQ*K2TaTtn3&H{$3woV)OhS5CF$3Wk8)*B1 zU3!$YpGq@0=2@wcnXfg)q)XIOqwU}+}L?3iEQ|T*I zA{=3Zlukpd*fNe(TA5IuR?w-8s?Y2{5N9X@Bx#H~H9a}8eJ>j%!fielzbPthV^wy| zY}2whN<1&`*fqINrmE5ewRIX#>_D|+Bvnbjl>JSd|1VZpk8uJIx0?;GAdwaGa6@ZSJWTm#6-&OQn{?=D~ghz2U-znfOOgJ5`@@X#XNi+i$LahsD^YN z0XLZ;EF<&c*9qCl>50ji$(y&cPl`V!rkLEdU7p-ODes+pd_nxSqh#An1@T+N*t_-& zPnUGE3K$C%OT;spA%1zIG(``0K;ov=@I)S)jB!voA*})8$S?sceu+c_-U<^ZgbOrC zWO>ND_lkc@ys~regh`h@H(5h`69Kt%d{21mRG1-Ofu?}PAikDn!On5{rYe{NgGmBO zd<~(ygZ|aqMIk0`#K6yWZRm_SC&H8QFv&~9GHutveVIn}>OGCYFa>s%F z2lj23F?ozi8nA(-jIy|!ROz;z2X2^eqi4!!&6AM|aK<;98JlK={ z9~FK^SWloid!aM;?U%O~v% zbW2H}GjgS}@HO`4#Es~MIspX`##k7+Pxhu zbA+4O*$p&2>9l1;%~tcK*8;vsmkNba(c~XUE>hM)?h@%bxI~!o)^wsNBuDT++c^GPQ%Z48+_>gpNon~^R!u?vikHzGqP{9{4NZ$@ z11WA4&COR-ED2%w=AbK?uSvF+h6$%9#PuXI@s@_T4l{Jj*(RbY42Cm+43%pVueC*4%5ZkC7X!9eY6CYbX^rVta)t5G&fE1GyN=_^LTDypL=K86%r z!!vl0W$~O1(xj_!E<8^*R#_oi9q@~1QwYFWaSl!cjSJ4LAppgG^6%WQkfm?U-Lpt> zxu3J?DF&~QW||(^N?k1~u#a%1b7H_6{j9}NX#ZT8F%FE~YCa5UJgY`UzgJW0uZexl zFwBX)B-$I=$DFeaY~D1PLt;;DU`$xqW2G`HcDtZa^)f|HiN$sG2-(hJSB)pkx~iTP zJ6&+#W#UL#t%@D40kIy1kHVIk&6keS%xT{u-PYJz`<=3BfvZKEvFYVDvW6PErj`|0 zdIo}%z*KVen;z1zna-Ffy4zk>M8Q%z_Ap?E!!5$^PQn-=%1Ndoe$Z)J!RE)0FzK_z zBR;YX8ydp+TND0Ln+zsCRE%Z_e_bKYCnuqGFsg+=SraESSD8cLH%;nmLHMIJOEOvoAwp&v)9Fk_z$N^_uAyZS1;HF3 zg)jWRv2=Xv`2HKG_l*m`v&2eDn-7;Tdgy#f&(MTWQurUf1jLH)TWgw{AwOnG{HN9I z2C?T5bbGDdHa>qAd(-4c@!^X5rt-{wG@AuWTjfMEIrEixw{l|7LMHISr8QhruTYcJGk&!h-lX z#&?N)7!WB59VOZSVQ0n%}2u#;a>>})6}DI7%>Ay@e$iZpw@J9e#$;t zD#+!WhWM6YdNxxFw%soL#G=9GOU$*PXfRM-Oi$25)b8K$_>3n^Jo3P0K;-Nee2 zyn3vH38R!%IGky#Pw?i8CT?Hq=5tYi<33aa1!5w7evoMak83%(IuH4j5x&aiIxE3aAtK)N z+x}E)UQOeC#qkOR3X}}ONR6+2nL&qh0nPbi7>W@_L|FI|>qf1-TtYzI2pdKL)8~tf z5na!OFR)VEe}z3pVSeGWY`WW}@M`nIXGodaj;`?O9$}yFUSZTHJ{D`+_lv(5KPJ3X zxJ`-)zYcyo_`cxtgLeiGAsgUw{N}#z1pY2?U*NXDo9#A-q81~zPtNUecSqm`Y!7`r}vMD0(_$P6}^kScl7S*jrE@2+tKse zo*(vny5}7|uR$ar-?O_X*)xDxz|XtC)cyYM*LUBGEP$K4C%WU^mvsH1>w8_F>UwY2 z8@rx~Xuus^d%CXd@^}8G^BbM-=zMkODMSPgbY9cBx$~UPwvJzPe7WO;9S?Qf*HP|x ze8=@2n>&K-zia)h_QAF{wY{jV(spaxNZXZd=ShE* zzAL?7daiU_7!^J*JyAR<9%gI(A>n;ukMK_6mBPKk5kOV{LmWun2Nv6yj$vw5Pl|sh z_V~KlYqn>N5Z&>kh+KuMMH~hRqo|@FB28?G^CF3vpc^RC2)2XRtw~UE#PU;DsIQh_ z0M%;^lPYd(SavRtC6I8X1T_TPi>--6pBHB{wY8i=#t`X*gtO}1!_f(AjVQnzLo7;+ zt=Z#+B0jEWs=63o^EYAXW5HicM5HtsDHf=-#H=$L67#@5gcEB}VYUcWDrn-+nmuG= zp-`@r3Su%W-A_2Wm^hJF8ko6(1srivX282ikB`65@l@sH{4>0Gl5f2NVGoU(epk z=+^Qj-g+JRbh8Kp%Q)aPRn^Io7hg?C%@)!{X2+8;ZY@>9V8Plt8B^jbNb|OQM|?R+ zQq%slq7358s2?a&^9vwRkQGQ(EO#LwqE!|sC_&ThrRGaG0v4G8W?#zqx^h@4&cmeu zXlUO{nqSK4Ww{KykA7*dre;bN@x^3>&1!N6%X}r&Gl|i6#22wg(2g|84O;ND*-U&P z=>=jTdXWO`w16kRfb7CC~R`zAuv0GT*0V5H(|RpHhaIjTI&FxwX%m{V)UD z;&YtEY+&*AFL)KleV_L#j`==E2C(^U!r<99VlvpunAh^uEAg4cee5N8%%!T1p%(A2 zbp}jy6xKV5VNiHRb2;QxRD61KdD(zSc^a9cCT*Ke20nBN%3?u$Dq}nhAaN@Di1-w; zpzQanb4>HF05ozkbT}=kDq?cteI#I---?O%dOwJY%Z=?Q=HUNiVK-%HeJCoPq8V?K zYj_Bj$|5{eP{orp8QB{)o1Lh2*q)5(lC0&$rCJLxwsP?}aV$JpRk*@tWEo$Ot8?h^ z!Yo?~7Z+&(gi*)Kg|v824Hr#KnPTfnwK2*WBc+0m*;uS$8C5M0$%-c4S*u4b zsOeSuK1l+Xy_e3UEypzs+>pZL`vem{^dX8dz-uQFQk%rS@6}imX;`(XeY}QZS_!9+ zJ*Jc2j40hgjnB;oFdo4b;;|ZHsaZuY(DY@Q53EfDe~q;7yJUT{a%62`$+udODSm_4 z8f2R9pKHyjJ=J5rkCS=rti!@yFnQUUvF~He)yf&)N1Lmmy=+;#Si*GjeWb=#NH?hF z)wuX%*6~a^E8_$Bjp^t(mcKC}kFYPKC@hj%AS7i75V1@I)Z=AcnK#A0SfU|RkJD0d z3_h?}WN%dAGefX3iJT`vs8$hv(&Sk+rB{)j38kA%iF51;R;F23txp5Xc`?JNzzc_x zWJ|JQiaY={hwKL{7J!BPEaG8w7&r|iWW^H+=~l0ZhiKgzPbpE84hAQ)Mn?Z23T9Od zwY~I@zTZKEZoQhQB6*Z8{fV~|R%#Xoi^bnrM4~XO#3!%^R=dm)t{D>BPr)NQcu^>8 z!VK$|^(LF9`^XkhZ@y8^A!08USQqT1&Ksewb*(h59yKTBEKTWJ%BS_ze54XXs{3ZB zI|@rs5womSC}MdJd+orpA?CV7?+qvD&df2IA)*?)@k2&>bIA;4XI%OR!x34Cp z(K4GmIGJ;K2w7%y$D(<35v8s2)oussyUTvTz?qF~r(2R7FJRRDPd`Sfh z=UQ>9=E;lO&G05Xe~oNqn*nE#G|H@#ZN#-WnBQ9UB1votq;Zn@q!u#tYXD%r!$3sH z9T;cC>lu>BjhhS4mDGGuE*7%|nP#|no!Ka)gdpb+xzb_9wLk?t#cN5pU|v^p8jNSe zDPTpz5Qnpmh8K#6>x!-1sP`|uKk5B+ z@4I_n(|dn!rT5m}iQaJUSv`N~`9aU8#IK2$h#wK(D!xQq67%Aen3PURIcZ9|QtA_b z*>+3YnAp~~Uid{@kMKF+9nvqPZ%Q8(9+2K5EJ!bEe+b$4h4$(8n2;8B3X%4UdfwXe zlAe2day>WoJg&V1tMp%M`-ip%+n(Mw-}OM(arpR?T~TEE|E2SXouBD^SLe&&dtkYogF`em;Zr|S9d(EW4`0|j;$S6_4IWAy8F8wkLg}&|4aL~+dmZiS@840 zx8nCV+!f4XFGDEs`@j#nKhpiiz=s151s(`IIiLi#2d)V8`G4vExc_1QGyR7DX8)M~ z;=bSYeUoJ|+|zfk`%w3F-IsNr)%C}&j{&0EACj`<&#^fMYaB}qdPV#P=1esf*R-Yh zL6Q!QRY-)2e@~-dDNbnSP zl7MS0Cs`7BkZbZdNC)N&ckTKqIM=WfTCf_i}& zA<$C74US=(@o`hM*U_7G4u#A{IphN2^zwUZcbpy@9D5< zg9y{-N`v)ZOQPdM10so~(9y2zLa!5GPmBgH$AX6p0*80aYqgM0#5pn z9wUXD%0&l$Xe(JyzOOh+k&Vv!eYRsHF)(cHT4A|zB}cc(e6-CGNd2TxJl*4jP;gVO z*B0`QSz@t67&PZDlCG)u2Vntd3WN-hg$(t2nfuqjm=D8PK4IxQ3mY70Q0>`_zTUxP zwtDyd;yfu@|B^n0gkD-WUgsROp@vZlIR}RxnWJ{84pS0*-?4+M;ppTUM zMy{YoCViybHx6==(SPiP($x*^Pc$Cufz111_cN2!`OQx(4jXWO9rP>~JI~48)`N4M z{UCeD=I+P1DAoFLPSXSH+h;qun?hKOyZfCTH_MT6(KxT-4POpAKR}PnZU>qkSYP%# zzZ|!}j9iLF$j$OzC*+QkOM0BZvS;SEyPe;*qyy$|SKkmjgtw-QAJGqvQ3C5D&)YC2 z&ylXGGXj;S^<579P?mwY#nuXqotH`zj@N66B4Os5?pQBPws>y;CZ_GQ`dgFIpuSC+ z*NSN^oYAXn!&sr3hw~|Z%As8F9u2uXKNO9K|Kj~99*v5hB;Tz@-KbQ=PdMbcft?17 zlK9UK38QBWcp``rsN%<+4-&GLF>8Fxp|=plNv9R@qYmLwq(ChB#vgGO+xhGtc8EN9 zMaK~kn%7h;mxye;W3B0PruY^A(NROIkodKhb;S=k1U75~g2?w9cPVL7-+wq7#Fh~8 zviL4rtJP(1&B5{g+@=KiYkL1_qbz7PCF~ijufzC$W?NNI$L!^rApO_c6LX~NANZ+_ zXd3H4Y@reDf4`#;lJ=vcNbt8Nb{P5BUq!x z@(pMJ@X$%^hnRR9R+xMnr5jstzEYvc2Qw75T_#OA-$I}Y8$&5Rf|LpKca=@JRb0lJ zA@ixSzO`v`S`T$)yw#(!etlExtXgF(#vwqc6vMFEu50ySdh1$;Y$K^)lSo&tX<0Fy zQ6JZ`qGDX#s$ve}eXLc*Ohq5PT)N2#q}3Xy6d7qnKcgNg47Z}6)-yw`DxyQjlC3H# z6+Ll@H163jgv<4c5qHa52sMv?y9Cj%-buQ z`h>t)F|1e0sWkRGHJCQkX!b0Xy25SJ)fz%eFZli@cg<8aKS%TFa(5eOx6{U+t})+9 z;dNryaBjt4sK={Vdm*^%tHs6%T1A@f3y|4qdbxFeaN#y!pBYyAVuJ)5cfGF8}sJQ6!D98YnjeKW9O@RFlpFYKu~?} zb*S+A3;NNF?>)Ajs#S)Qt^3~HR3(NypfcFq@V(37wu4;dSQrsD$_iBrzIWOx(I#jv zkphNyw0M&6{auSEao^kB&12MjZ*w?y)C2@TP348HkiNH4aI!vC33l!X3)w|;7ot9%OvcA8iXrhB8#jL_d)l?WenhhmOYdUYCw1(!FOoyE! zAXqrVS|B#c7v~J$-%wz&`E3kIIImQT>74J)PMZ{s%RxTTRxRJdjsZJ{RZggSD{OE0 zzKUNE(ilbpT=l15U-5INdz=tId%DMQ@iR_NGGvzFZfMz}A%1$Zbc;jSThSp)xFcx} z!FI%1RU_wcULc+kFwjcKu}NbA!zsAUCwgVpyGnUhRlTds8X4~gX(R1T3toN7tvgGZ zoZ{AxSX)IF8oI->N}lNc3VWP6QaI%K0C}NzxIcmwgxlSEsX%EEP``E({1e>jr=aEZ z+nNg1jB%^mI73qlCB2-(IG8bqFpQ3a?$+6FJ>Kn;)kAF{P%v(Bx4w|kZgx9^1+oVY zG`*Ql?{|ZV&}-F9)S*c-<0hmPkX*HIowU=zSXidTQ5cm4PMyKQ3JXU46H{(TbBY$uSJJb4 z+(6&~{g#$sgQ~Q>lm;E)`+Hk28CdbI`4#_Wmokw|^B>C@zOQ?f#(iIND-$D^rfgw5 z(&&3rlW=1vQvh0^fPK#yBT@Ff(bjmj5}@|z(0FgKHJ7Z}8xKFLrkk>l3~gH5V$r7rF<7O*G#NY=_n!INCaf z(S}8k_C4R-Z7ho+W6cVRnufIRdG1DQsdT~jfR$@!I>P8JEHLB|rWsxLrEFJZoYAVbYd?($EiG2@Y9OXSnr~ELF(Dz}taZ-E5 z_fPJjN>eHpWu23?={wO}lO99X_?DV#LLVFp=PJ;(sJZCI%l6BBPu?KyZV=M*l(d3V zl}uqVt15J&#yw88gLg0`SDD*`U@URRMP{e^q z*zuwoIEAGloC^bIUeD-vx|P(tPRq`4L2P7?J7V}$jrI>33l~e*IX+v>D6~6{&Je0B z9CODOXvH6?3XtLYv7>I)V-(6bm&MsQL(@}LcjIsz05%0!sYEnQDsJ5jxqxFznusa0 zy6)D5z`9H!p(E~quD#Wi<`T?5q+gcZ7#v|+u1fA`RQU)_HA{zQGfL6j^m1+iTjwxA zX}=aATqw93S@uhuu(?(wcpXcr~T^oE88zy6 zO!lnn{(bk?yWiXWVqvdvZP&}Xp5AqLm)f-}_^-iF1s@JRH~6IBZ17<4`rx`?Z{Vka zPY2!}cxE6U*c#a2|C9f7{?~Wk(|t$xR%8Kmcm2BSTV4Os^$w(mQ0x*RZRx7VO87O1 zh^`l~P=iDtI-NRxNEHcMVD# zJG$)Cc1(3(C#pyx$}hrPu``6FOKD9#uT~2Pu`^wYuU|qU44>7M406c{2m8szuG#21AvaO?5_zf>!C`*T$U&KCb zkcMxMG=cCe^8c_f$s6nYA|KN;~qC`p#8nh(TZ zv*BX9F$^3Igfp>_3|GqI;29*N{fej@t`?Dz!WMC%4pmym6aSs494@nMboAmciPh|X zXXx~tsK^{b%C4rP{tACh3ii)=~Oej90|aq$NhiN+`5_emUUb6DZdq ztRjAwhQa-)m_`gOr;Fd|kp@KMWNJn6o9rWInsQj94b6oDHlQJ`oO13f(P8l$tZfs_ zLXy>8X3Fx{m|ukfmepI3846KBxr5?YtzBhE$!Be@QM2-Pzd{~JAz#@~TEY5zFZx2- zC+cHb3&M!FsX;Of5_2MV&D0~3OcM(K%)sFx8(0dnde)gcbR4940Hd^p+ISQjkyuk| zafM$~eb}7Ed_kT!l(g@g)Ik(bzCHGAW5Z3x@O^_Sv(3n)VqwxTD#9j097%YXp(a)A zb}p53<#bdyNVC}asP110kEfnHpVGmP2p|=OTPS+b_>A--J7kk~3?ZrPR{CnGj6`N^ zB6arWSA;lP2&By?&{fB9EF}`QXf;R3dOU9s48kn6+Eu@%Q3REguiCQ^5E5sUKDVApqA=+3{IEE8#BaV_B z4lNjLB!lhRfd=fgSeiM)5=^^6j^hlGMlcs29H@|5uaZsK}hP-BJ52@4U_ll%a@OZcP2Qjy-5C(h<+7~%0-9Ukv zW-zaZ%1-4@OKruBC7Q zXj0lvbCkB7u_4c6-Ev+tq;b}JoVv$Kv43aoFitB~4`T};omqN4F;G!GRy}Sy7v^j5 zm9C>hR;{x*q-$wb6_JrKi|rf4PGLRf5 zZDM;dI3UPsC|T4j{ZvAd24pbw9YVl}9MG}t*dG&yKoxaRQWrTG6T z4(8wC2yg^A0vrL307rl$z!BgGa0EC490861M}Q;15#R`L1ULd50geDifFr;W;0SO8 zI0762jsQo1Bft^h2yg^A0vrL307rl$z!BgGa0EC490861M}Q;15#R`L1ULd50geDi zfFr;W;0SO8I0762jsQo1Bft^h2yg^A0vrL307rl$z!BgGa0EC490861M}Q;15#R`L z1ULd50geDifFr;W;0SO8I0762jsQo1Bft^h2yg^A0vrL307rl$z!BgGa0EC490861 zM}Q;15#R`L1ULd50geDifFr;W;0SO8I0762jsQo1Bft^h2yg^A0vrL307rl$z!BgG za0EC49088N|4jt^_;`o#3SZxsdd}_qcKapL-{Bwp&;JwzPM&>D|J55e4*G+O=PsUm z@~VDed}A&@EYIdNU9K8(Mw!=&X)Rn%S7LHRj)YT6K3{VDJf-Lr?Qk))3xDTICB2x) zRVrm;Y;drwr00~ZYRHCGDCf0VP1WV1S{ZEdfx*TvJQ_4^yL0`#svBCVxPC0OJ|aiu z$oegz_2p`6n^IA!>=re%B@`J6ZBx^sSR@t=MMuUWkum(Rb87$kySIcK6i~m3!v0)! zODG-*0R^HEw<$zgP-t!gqYz1iZcvIuArV3YBGIwfuqTB^j9i_WDiv90#>=cJ39Bi| z5tGpEx82?b`pIx48IH#G$6{lVk+DQX9*&MAqoa*7n4){Jd+A&-#enyi zWmJX$*4RhvkxP2w?!`R}@aRZrx-^fGi;jk( zLu1kCSTa!qT=WDy5gCcbSd&g&b9MjKCeodYo%il+iL_$Gh<(}ZQ36^qFyTP+jBvIq zyI}@B7tH&s>J~t2vv({M85)a#_q-vhzz!I;lx-NT4F{mlZ1{yV~oY)W0>&XS^`b-W;`b9-5eYlOSU4^tZrJd zt~cYYfo&4rjK}bG!C~r|X11{?K+m+dV4GMh!3dtZW^`3zFH_MOo3Y!Y!!;mz=3=i_ z*~v3r^ShOHv2=si>|Bf31Jig980m4hv}(n6-b}+r$eVxH%6-jKsfEf+JYuDrh~YfFkEFhnkG;S$`FJR_LrszF zgN`8GP3rrqXtaeA_nHq(hC<(2RxYfqmFakiubMegC2N^%t~#Aai}ui*Xp-q2;50WjbCm z!=zKQPvF;h(1ED$a*6uku|z^1N=8O33&G#>Enlbaa$nb79Y%YXbb;`Y@AAL{eTklL z;X&=s(mfOXQ>Gn!!QurT9*0`2DEV+ksVHIfSURT^vyYzV;X(ThJdl=DoO7%tPuF=7 za|7Z%G1gKgH*+%^Em*XsCj#!VELzJn#yELPkT)ZM!_RE(@N80T6hn)se49jKL_3#Tu|sR%g=GyVqU{-Q?P~`+QN(z z#cQ6vXJ}<;1fxC7&{@h|-!R;*=hve@yB^8hvg!6T*A27zOXaVl%7R zDNS00TFtDX;aGea?j@MuWXE;=H<~l+!o>?uUffEQl{4zGa5=9O!w5=7$?s#gM`w~b zh(ox6`kBl(4>IntK%ZSxk8x`Rwv8DGwBs8s{nciDGE+q;5#q2OonYEO>K$tFn!M&P z4ms?-#OPSGmCpfuT)k+;2z8y-V$MZIBIZb*yyM#bYs}#Gz~aEEYrqKJ!EG=Cvwba& zZ2bAr;|A01v_5gByx<_>=7i>PY~_V|k3wU=U4!B2LPp2HWL_Zwks4+mb~c^x3wrh#Iy=vM21EhLGt;echziI{sTvVBk>DD z|3*_UY+l^FcxivPOD|};ny!@eg|Jeos76JpU;?G5>X&yI1rN)_o5EUboBEobx79q1U}chZ>eS7*K8J$m%M zu-kc3(`-p5MrKg#5sq!zT#AXU#Tdr-nGGEC7+05}$V6D<$}_p7@MFAPQtFU9xXW0A zC3h@PoCpKT+@O{N>fws9HS6KJBV~%wxD_~PVyYGtu*PjIKGvK$Z-d!u`LY#LwW846 zhE^23-3TWBU1MQVh}h8}7XD8nTcR}%F)s=pae?}(jXM<0G}6#WWH`Z$_Sn)BxA#w) zYJbDxhSRBiM~KWLTU5{_I z()I~6nrQ*Er0i^ray4fT71VG^&mbv_F)F(~LNIF-2N|`s$dZh!t`jb=sbt0hYpX`J zNc|e85`5Jug^3j85)8wO9*eJ-GZY<7L|K!TZrRa4VY2bXix;1cjgM4SeW7vG8-IR; zu-AB)edJMK;AT3`;b?68O5D3@TQxD-NY>{QKH19V;pKl-2%J1?cg=`7wa#tCOPi?j^9xhQxlZ`d*3vD}skKW?j( zEFsS}uo<<=Hh5E5i(PA3#;sy@!?8qU$jnt+GH&SKZY~S-FZMUDG20q6te2`4t(ax~ zV7EucA#S>+tXvDbcvEolju&RF7SOznu9oA5b>*7zX|C!Zg^h7vtHqe%cywgg3o3{@#((66MMhX z_1R9f{T28J|HBdZzktAUaCy4_mVto_{K3TyiyQ6>_Y30#MJ-*?j?1$-O_z&#Sx?Ai zy)>)kwPH3~)iNr6P>qN@Do5CDn!TRLRVrm;Y;drwr00~ZYRHCGDCf0VO$8OTGPo+L zgN)*%Nb0sb*UziEp_Pj3$3p8F_4Qjq>&w;DHl?Cc*)3{jODLKQO(_eZSR|GRMH6F* z#8`AFv~z0z`n$J;Toi`oh>ODhs=6f<8x4(DvqT{tijES6M6v~ip%xU9q4BbAQizO< zB}c{*BP}Q-TTqCGcBm<<4e_zq@K`+Ff!^l`P-ntEOZwiqSn?j5zM25!D81J!&HBs21Yg^+dGoKMnL~E}nWKU1eV|?vTd14&1 zF^1erjzuD4i8{uf5J%#P*oXs}WodbL|8*wR7cO3SpC1#(1L|TvjLD*6uu(glQY%2% z@sBe`*rE*G(Lj3bz&T~h-b5)DVe;KuwlHyg8bXn%t+b(P(6v}i%r|unD%T_wb792vMQo@++C|1_ zBGmOor}s2SB!=P+hC9{1d_(_%jT=eg3@#3yI*4hov0362)Qpyfa4r>LRHaqJ7=;qE zTQ}7B^BK>F=1&YZ(p~$^Sb?B(jx>JC1vZ-`P{r2pCy2G7;geC%Ny3DT7X=t=^=SqZ zBRUrGW}t?qxW}E@Z1Jc)H^4xNu^0@Vh-Xt82)QTzer7hs8|FrAEP)nzn~x2IlCG{X zLf|_~Yht#7pCLpn3l2K3-J265@#shc-Juf~El>9EG#L>F%u>{w5%Wq)J(kWX#jFZL z%;vyYVX+>@ zNAw(@*hpk(sDW;b{QoXr!WZ~*?@zmb+xfYUhuXd(b)euhe@;y=@9Lj4jnZ=$&%O76 zw^6DU3e}=^oQW6466|)y!`Mj96d`LLz-AiGp`%$Ica53pP`M09OipiQ+Q9qnF*6Ab z+tM9#iU}Nh%v@@sfl!mUpjjS?+u{O*n7C-+9GQenE7ILJlOGed1Oufw{Jd7~CZps+ zhf#>ulxPB)bS#eMcuO4Us3sHNWMy)BnSl;BYiNvoR&O~Rkuqmbb7yD04cuOfYf1G{aG6NcaK4Z29P1uTPg++Aj zOzo!NWN8LDtnOJwZsH>rDu{%(scFkhgjW-Rednom8VEIUHe<+W10kr2q1F+DdT(7L zX>wBp{FtW}K|aPvti>!v*xJ=fMqT2&u2WKplNwk%&kbS zeL&q5oCDg}NH6#xm}({sO@xuLxc6jiAmkoUHVzJp7LgO!*xtr^10gqyv8f3Y$zm}K zXmSkJvE8DU0~(2rj3yfBCYLrYZ|~o3>Kx3_#eTTZ?$}_)s8nO}aV-^#M9r~e6wHx~ zu5lb3#LNMGqR_*DY@g#s>yQ{lRd^YrAz_Put{RGyE;Z-T=I-;v#RsJdq4DoQA&%;k)n7T%|5>hbtWef6LTF$SV% zT+xY5L~afWGHmL>ATSdPE85t&6sVW3F>U@>-9CoRABT_C%6DuIZJOhguyrq!PzeMk zy{!RQ6HVHxIY0~38jf(Q0By6rGbzMuLxN2z^ui9WVp4e<=dt)mG|2|(L}_`VKRGaP zBiut_Q8;-qW0PGo+qA4!QS$PRU6cFdnf(XiQR)D@P4AisZ7*i?N--0fELK##R91B* zg+P2|A+%pr3M;dW2YpN|d|*YMX<5_BG*J)pf`Ju{+Y*Qw2XN9_MAV}m=7s504TWw{ zSTqH2BM3Y^mh_Hhvq|Wh)TUaCIog0oa!XgUnQ2TTX}F;ckn9OW8EPg@o2OiejYcAn z3m|w(TizNBvmswtFqc*^q}$|i!%!=RHQ0!iL}lC_oxyITje!Q;)eLlVE%zWd&j@o? zj@TApgzN^)h@`hC9`%qd=A5bxa+De82sF1EWDK)wkWDrjwq*<20BZ_?W^X6ni%ps- zV1#MKz|$UMqv~n{V>DPxmi@$VK;SRgstwJHKPIczta0D~YaG1R3I`0TR~ryGN8}Sa}uEMUjHO7Ri-3-QAdm zs!n#Vlk`HVt_=~t8m3@j!?J{@M2NGW|E>6M z!i!Pp{bwn?e0~3Q0|V;-Ztr66(z(q2&lRmT+LAnXSk;T_;ZjvEDtTgbws;ZUwTFUj z`cY+J6~MNj#tgBQO}SQ$F{?WPW({;$2XwMulODpro}B$0*Q3T;0$2#xw%4 zz>MSQscV<74PH1fFz63vvsQjVCRdQPA|#<4VKge>)zrnCrcF6Y-Mcxx3{-H(t$+`|ZK)eCRO z6xK@9B5W%P-c~bFaPwa)3f_7t)=DpVAnC0eVWq6P7ZwFb1#it39T^^tGWJ+XEMF76 z@PZ3A`h%LbMCkw*OixVXTeOBJM`GrEA_u1~G*!~GN^xbo+^i1`LALmK}15xb4Vf~#TzxV5w1yKiVg($%sdJRQ#gKb+v)~^_ry;`5#Tc^E}gyn zxL|Z(Anp&|eYX`oQ0BGS1xt`7Wj&K7p#uXLw|%8_P7Q6-uq*)sAvA&2_>}`WP4t*d zUD4<*wy5XCmNmb*>OM ziANHcSqzGU%VXpcUuC+)rox?83R*Fv>f{PDRFHK>Z<`v|ej1vAnkXnMPc#o|t5du7 zmm1q))@(+`d;X2st|NQ`gm__zv`&C=OHSLnvK(MDCRJYnIgKro7-2a`(WTJxXmHbp z4Uk&*+_QKwtnm#~3%e$_%kv4#00*XKY6wkN>&F>Io2}+EN;R+KR#d_cdQ3W5R8|sb zEh{>qZD^O*ER4o%fSDlnsN6E%ftQg4I9oi{fMV- zhceqxSTOBdcnNYr(TYg;WEjO*h`!;+-Mc1dR%8kfY9?!#$hBlA6jAur|J&VmHeI%EdcA(h`1Q@(+Fd{MR>IWNf zL>DZd1{9LC)))1TE)a#G6)7P02}$BDi->|dF`>B)Kp_q|TVk2;Y6Aj-^3Med!Orh=Jh6RU+c_xYe>ehv^$0A5mxuZ%n2oy_#D8q%(3b47TD4+= zN~)wQm6E;yh0Jn6<>=ZY0jD7gy#uR&w{-P#qW@|$l-!Sn zXBJ8>7&4O8bR~^-FwLlF>2SW3)zYj2nXyX!r-Se$6)m(!%@vfDLrERzfb87)35BkYhxb?p%)dhc|7aNPPEV_tHifd7BEl zUXkHhRm@z@JO!O%;j*sIYwA(QKeoYT!m`^fdMTymS7a_X-9ZPf6_Inb%30fqnuD+x za0nAwi!f~O3e2RWcfifdw4SLVGa2SVjRIwgfp1recf{k-c*4=NrTOJp|54^tEKcA* zCj6#Kv~9{@iFp|${Z{m9x>D6uECk}8aQtUch@9Y}n#aZ|wOqjz!DL5E*$w#=r948- z`!r+aNb?zei;21w<0g-Qv~w_7uiS&kQkq8Vt61RvBo+ZIJF|rp9gdHTB$yP9AW#?W zA6>WZQZPRKXUdIyWj|soa>4w2uemRVec$qL05bcDRvxenr7x@)Rj_EeXqpf*QY-Sk zXQLVjc%a1yyCEZi0aM-#&m*S-Avy}r*ORxrMQuD0u@M zQXE5^9s<{~s5G8ekA=3DRum1*G*%aRX;sgO2~A?R<}p2$T9yV953s$!VWE4%5y!S6 z7LkfBZCV~AByO)GQP8lumYSCf)e3+pD+b%=Wri$w<6mm=pI)mUujDm~UT&=-bY)<} zp{f%(SDFj+%0D{9}#E#U=x6Z&q{&Y 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

?v`}1tMsaJ1mZF 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 diff --git a/instance/fhir_igs.db-shm b/instance/fhir_igs.db-shm index f47102971603b58cd07c233c1534c228f289a092..056eb129d2fde7aa6ec928917e84f73101f34196 100644 GIT binary patch literal 32768 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 s@}Tz0Kej}v)+?WWJ!kB5`DQ#^8}eL%Vdje zmpyWoTrJnhO>&PsA*bal*_h##m7$taC+2>_9GXdzw2^kwNxDfNrxwv?9&h%3dW3$Y zOtMs}m>N-i>1Fzvl~EP(jvb$Vo5Q|~ugCb*v*}eX;0G^A{!?nt6Jq*sCWe#o&po~tHMuUg3ec-+)KpqHc`!=GI_ct@zq|T*XX&t*tM1%Y zx`c-UTu&6di0B^29;UAuVkVhc8R%wH zhZ@th1dferQA@`?JyYh%3P-Ku;Bm=bpw}Js!!vNbTuL|`@R}~BvyK&<4RAf-WRhc@ zF0Q9XQ(J#krR1Q;4r{ouU&~f}JX0};xwgk4W zC;4uEIKXw?K(+Z#r}2%+7MM%e2K{-MQ=RGDGBKOA)?dQy>9ni%IjLd}m~O$Zbk4Eu zsz6ti=n;N8&^6scb-12W1=&r$K)o97RHfsxr$g33f7`jA43tRBy}e%!#MGpt0QV-G SmDiXJ4y(1=LE}EGRsIjcYkwjD diff --git a/instance/fhir_igs.db-wal b/instance/fhir_igs.db-wal index 37fb4378def7bdc2614e861b07439fd15661f7bb..f6dfb4a79568929f16ce7f266de016721058368d 100644 GIT binary patch delta 448671 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 delta 366196 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 OWlcT5Q~zk}mj45 int(p2_num) - if p1_suffix != p2_suffix: - if not p1_suffix: - return True - if not p2_suffix: - return False - return p1_suffix > p2_suffix - return False - -def get_additional_registries(): - """Fetch additional FHIR IG registries from the master feed.""" - feed_registry_url = 'https://raw.githubusercontent.com/FHIR/ig-registry/master/package-feeds.json' - feeds = [] +async def background_cache_refresh(db): + """Run a cache refresh and update in-memory cache and database upon completion.""" + global last_refresh_time + logger.info("Starting background cache refresh") try: - response = requests.get(feed_registry_url, timeout=15) - response.raise_for_status() - data = json.loads(response.text) - feeds = [{'name': feed['name'], 'url': feed['url']} for feed in data.get('feeds', []) if 'name' in feed and 'url' in feed and feed['url'].startswith(('http://', 'https://'))] - feeds = [feed for feed in feeds if feed['url'] != 'https://fhir.kl.dk/package-feed.xml'] - logger.info(f"Fetched {len(feeds)} registries from {feed_registry_url}") + sync_packages() # This updates app_config["MANUAL_PACKAGE_CACHE"] and the database + last_refresh_time = datetime.utcnow() # Update the last refresh time + logger.info(f"Background cache refresh completed successfully at {last_refresh_time.isoformat()}") except Exception as e: - logger.error(f"Failed to fetch registries: {str(e)}") - refresh_status["errors"].append(f"Failed to fetch registries from {feed_registry_url}: {str(e)}") - return feeds - -@retry(stop=stop_after_attempt(3), wait=wait_fixed(5)) -def fetch_feed(feed): - """Fetch and parse a single feed, handling both JSON and RSS/Atom.""" - logger.info(f"Fetching feed: {feed['name']} from {feed['url']}") - entries = [] - try: - response = requests.get(feed['url'], timeout=30) - response.raise_for_status() - content_type = response.headers.get('content-type', '').lower() - logger.debug(f"Response content-type: {content_type}, content: {response.text[:200]}") - - if 'application/json' in content_type or feed['url'].endswith('.json'): - try: - data = response.json() - packages = data.get('packages', data.get('entries', [])) - for pkg in packages: - if not isinstance(pkg, dict): - continue - versions = pkg.get('versions', []) - if versions: - entries.append(pkg) - else: - pkg['versions'] = [{"version": pkg.get('version', ''), "pubDate": pkg.get('pubDate', 'NA')}] - entries.append(pkg) - logger.info(f"Fetched {len(entries)} packages from JSON feed {feed['name']}") - except json.JSONDecodeError as e: - logger.error(f"JSON parse error for {feed['name']}: {str(e)}") - refresh_status["errors"].append(f"JSON parse error for {feed['name']} at {feed['url']}: {str(e)}") - raise - elif 'xml' in content_type or 'rss' in content_type or 'atom' in content_type or feed['url'].endswith(('.rss', '.atom', '.xml')) or 'text/plain' in content_type: - try: - feed_data = feedparser.parse(response.text) - if not feed_data.entries: - logger.warning(f"No entries found in feed {feed['name']}") - for entry in feed_data.entries: - title = entry.get('title', '') - pkg_name = '' - version = '' - if '#' in title: - pkg_name, version = title.split('#', 1) - else: - pkg_name = title - version = entry.get('version', '') - if not pkg_name: - pkg_name = entry.get('id', '') or entry.get('summary', '') - if not pkg_name: - continue - package = { - 'name': pkg_name, - 'version': version, - 'author': entry.get('author', 'NA'), - 'fhirVersion': entry.get('fhir_version', ['NA'])[0] or 'NA', - 'url': entry.get('link', 'unknown'), - 'canonical': entry.get('canonical', ''), - 'dependencies': entry.get('dependencies', []), - 'pubDate': entry.get('published', entry.get('pubdate', 'NA')), - 'registry': feed['url'], - 'versions': [{"version": version, "pubDate": entry.get('published', entry.get('pubdate', 'NA'))}] - } - entries.append(package) - logger.info(f"Fetched {len(entries)} entries from RSS/Atom feed {feed['name']}") - except Exception as e: - logger.error(f"RSS/Atom parse error for {feed['name']}: {str(e)}") - refresh_status["errors"].append(f"RSS/Atom parse error for {feed['name']} at {feed['url']}: {str(e)}") - raise - else: - logger.error(f"Unknown content type for {feed['name']}: {content_type}") - refresh_status["errors"].append(f"Unknown content type for {feed['name']} at {feed['url']}: {content_type}") - raise ValueError(f"Unknown content type: {content_type}") - - return entries - except requests.RequestException as e: - logger.error(f"Request error for {feed['name']}: {str(e)}") - refresh_status["errors"].append(f"Request error for {feed['name']} at {feed['url']}: {str(e)}") - raise - except Exception as e: - logger.error(f"Unexpected error for {feed['name']}: {str(e)}") - refresh_status["errors"].append(f"Unexpected error for {feed['name']} at {feed['url']}: {str(e)}") - raise - -def normalize_package_data(entries, registry_url): - """Normalize package data, grouping by name and aggregating versions.""" - logger.info("Starting normalization of package data") - packages_grouped = defaultdict(list) - skipped_raw_count = 0 - for entry in entries: - if not isinstance(entry, dict): - skipped_raw_count += 1 - logger.warning(f"Skipping raw package entry, not a dict: {entry}") - continue - raw_name = entry.get('name') or entry.get('title') or '' - if not isinstance(raw_name, str): - raw_name = str(raw_name) - name_part = raw_name.split('#', 1)[0].strip().lower() - if name_part: - packages_grouped[name_part].append(entry) - else: - if not entry.get('id'): - skipped_raw_count += 1 - logger.warning(f"Skipping raw package entry, no name or id: {entry}") - logger.info(f"Initial grouping: {len(packages_grouped)} unique package names found. Skipped {skipped_raw_count} raw entries.") - - normalized_list = [] - skipped_norm_count = 0 - total_entries_considered = 0 - - for name_key, entries in packages_grouped.items(): - total_entries_considered += len(entries) - latest_absolute_data = None - latest_official_data = None - latest_absolute_ver = "0.0.0a0" - latest_official_ver = "0.0.0a0" - all_versions = [] - package_name_display = name_key - - processed_versions = set() - for package_entry in entries: - versions_list = package_entry.get('versions', []) - for version_info in versions_list: - if isinstance(version_info, dict) and 'version' in version_info: - version_str = version_info.get('version', '') - if version_str and version_str not in processed_versions: - all_versions.append({ - "version": version_str, - "pubDate": version_info.get('pubDate', 'NA') - }) - processed_versions.add(version_str) - - processed_entries = [] - for package_entry in entries: - version_str = None - raw_name_entry = package_entry.get('name') or package_entry.get('title') or '' - if not isinstance(raw_name_entry, str): - raw_name_entry = str(raw_name_entry) - version_keys = ['version', 'latestVersion'] - for key in version_keys: - val = package_entry.get(key) - if isinstance(val, str) and val: - version_str = val.strip() - break - elif isinstance(val, list) and val and isinstance(val[0], str) and val[0]: - version_str = val[0].strip() - break - if not version_str and '#' in raw_name_entry: - parts = raw_name_entry.split('#', 1) - if len(parts) == 2 and parts[1]: - version_str = parts[1].strip() - - if not version_str: - logger.warning(f"Skipping entry for {raw_name_entry}: no valid version found. Entry: {package_entry}") - skipped_norm_count += 1 - continue - - version_str = version_str.strip() - current_display_name = str(raw_name_entry).split('#')[0].strip() - if current_display_name and current_display_name != name_key: - package_name_display = current_display_name - - entry_with_version = package_entry.copy() - entry_with_version['version'] = version_str - processed_entries.append(entry_with_version) - - try: - current_ver = safe_parse_version(version_str) - if latest_absolute_data is None or compare_versions(current_ver, latest_absolute_ver): - latest_absolute_ver = current_ver - latest_absolute_data = entry_with_version - - if re.match(r'^\d+\.\d+\.\d+(?:-[a-zA-Z0-9\.]+)?$', version_str): - if latest_official_data is None or compare_versions(current_ver, latest_official_ver): - latest_official_ver = current_ver - latest_official_data = entry_with_version - except Exception as comp_err: - logger.error(f"Error comparing version '{version_str}' for package '{package_name_display}': {comp_err}", exc_info=True) - - if latest_absolute_data: - final_absolute_version = latest_absolute_data.get('version', 'unknown') - final_official_version = latest_official_data.get('version') if latest_official_data else None - - author_raw = latest_absolute_data.get('author') or latest_absolute_data.get('publisher') or 'NA' - if isinstance(author_raw, dict): - author = author_raw.get('name', str(author_raw)) - elif not isinstance(author_raw, str): - author = str(author_raw) - else: - author = author_raw - - fhir_version_str = 'NA' - fhir_keys = ['fhirVersion', 'fhirVersions', 'fhir_version'] - for key in fhir_keys: - val = latest_absolute_data.get(key) - if isinstance(val, list) and val and isinstance(val[0], str): - fhir_version_str = val[0] - break - elif isinstance(val, str) and val: - fhir_version_str = val - break - - url_raw = latest_absolute_data.get('url') or latest_absolute_data.get('link') or 'unknown' - url = str(url_raw) if not isinstance(url_raw, str) else url_raw - canonical_raw = latest_absolute_data.get('canonical') or url - canonical = str(canonical_raw) if not isinstance(canonical_raw, str) else canonical_raw - - dependencies_raw = latest_absolute_data.get('dependencies', []) - dependencies = [] - if isinstance(dependencies_raw, dict): - dependencies = [{"name": str(dn), "version": str(dv)} for dn, dv in dependencies_raw.items()] - elif isinstance(dependencies_raw, list): - for dep in dependencies_raw: - if isinstance(dep, str): - if '@' in dep: - dep_name, dep_version = dep.split('@', 1) - dependencies.append({"name": dep_name, "version": dep_version}) - else: - dependencies.append({"name": dep, "version": "N/A"}) - elif isinstance(dep, dict) and 'name' in dep and 'version' in dep: - dependencies.append(dep) - - all_versions.sort(key=lambda x: x.get('pubDate', ''), reverse=True) - latest_version = final_official_version or final_absolute_version or 'N/A' - - normalized_entry = { - "package_name": package_name_display, - "version": final_absolute_version, - "latest_official_version": final_official_version, - "author": author.strip(), - "description": "", - "fhir_version": fhir_version_str.strip(), - "url": url.strip(), - "canonical": canonical.strip(), - "all_versions": all_versions, - "dependencies": dependencies, - "version_count": len(all_versions), - "last_updated": datetime.utcnow().isoformat(), - "latest_version": latest_version - } - normalized_list.append(normalized_entry) - if not final_official_version: - logger.warning(f"No official version found for package '{package_name_display}'. Versions: {[v['version'] for v in all_versions]}") - else: - logger.warning(f"No valid entries found to determine details for package name key '{name_key}'. Entries: {entries}") - skipped_norm_count += len(entries) - - logger.info(f"Normalization complete. Entries considered: {total_entries_considered}, Skipped during norm: {skipped_norm_count}, Unique Packages Found: {len(normalized_list)}") - normalized_list.sort(key=lambda x: x.get('package_name', '').lower()) - return normalized_list - -def cache_packages(normalized_packages, db_session): - """Cache normalized FHIR Implementation Guide packages in the CachedPackage database.""" - logger.info("Starting to cache packages") - try: - batch_size = 10 - for i in range(0, len(normalized_packages), batch_size): - batch = normalized_packages[i:i + batch_size] - logger.info(f"Processing batch {i//batch_size + 1} with {len(batch)} packages") - for package in batch: - existing = db_session.query(CachedPackage).filter_by(package_name=package['package_name']).first() - if existing: - existing.version = package['version'] - existing.latest_official_version = package['latest_official_version'] - existing.author = package['author'] - existing.description = package['description'] - existing.fhir_version = package['fhir_version'] - existing.url = package['url'] - existing.canonical = package['canonical'] - existing.all_versions = package['all_versions'] - existing.dependencies = package['dependencies'] - existing.version_count = package['version_count'] - existing.last_updated = package['last_updated'] - existing.latest_version = package['latest_version'] - else: - new_package = CachedPackage(**package) - db_session.add(new_package) - db_session.commit() - logger.info(f"Cached {len(batch)} packages in batch {i//batch_size + 1}") - logger.info(f"Successfully cached {len(normalized_packages)} packages in CachedPackage.") - except Exception as error: - db_session.rollback() - logger.error(f"Error caching packages: {error}") - refresh_status["errors"].append(f"Error caching packages: {str(error)}") - raise - logger.info("Finished caching packages") - -def should_sync_packages(db_session): - """Check if the database is empty or data is older than 4 hours.""" - logger.info("Checking if sync is needed") - try: - package_count = db_session.query(CachedPackage).count() - if package_count == 0: - logger.info("Database is empty, triggering sync") - return True - - latest_package = db_session.query(CachedPackage).order_by(CachedPackage.last_updated.desc()).first() - if not latest_package or not latest_package.last_updated: - logger.info("No valid last_updated timestamp, triggering sync") - return True - - try: - last_updated = datetime.fromisoformat(latest_package.last_updated.replace('Z', '+00:00')) - time_diff = datetime.utcnow() - last_updated - if time_diff.total_seconds() > 4 * 3600: - logger.info(f"Data is {time_diff.total_seconds()/3600:.2f} hours old, triggering sync") - return True - else: - logger.info(f"Data is {time_diff.total_seconds()/3600:.2f} hours old, using current dataset") - return False - except ValueError: - logger.warning("Invalid last_updated format, triggering sync") - return True - except Exception as e: - logger.error(f"Error checking sync status: {str(e)}") - return True - -def sync_packages(): - """Syndicate package metadata from RSS feeds and package registries.""" - logger.info("Starting RSS feed refresh") - global refresh_status, app_config - refresh_status["errors"] = [] - temp_packages = [] - app_config["FETCH_IN_PROGRESS"] = True - - db = SessionLocal() - try: - registries = get_additional_registries() - if not registries: - logger.error("No registries fetched. Cannot proceed with package syndication.") - refresh_status["errors"].append("No registries fetched. Syndication aborted.") - app_config["FETCH_IN_PROGRESS"] = False - return - - for feed in registries: - if not feed['url'].startswith(('http://', 'https://')): - logger.warning(f"Skipping invalid feed URL: {feed['url']}") - continue - try: - entries = fetch_feed(feed) - normalized_packages = normalize_package_data(entries, feed["url"]) - temp_packages.extend(normalized_packages) - except Exception as e: - logger.error(f"Failed to process feed {feed['name']}: {str(e)}") - refresh_status["errors"].append(f"Failed to process feed {feed['name']}: {str(e)}") - - now_ts = datetime.utcnow().isoformat() - app_config["MANUAL_PACKAGE_CACHE"] = temp_packages - app_config["MANUAL_CACHE_TIMESTAMP"] = now_ts - - logger.info("Updating database with fetched packages") - try: - db.query(CachedPackage).delete() - db.flush() - logger.info("Cleared existing data in cached_packages table") - cache_packages(temp_packages, db) - timestamp_info = db.query(RegistryCacheInfo).first() - if timestamp_info: - timestamp_info.last_fetch_timestamp = datetime.fromisoformat(now_ts.replace('Z', '+00:00')) - else: - timestamp_info = RegistryCacheInfo(last_fetch_timestamp=datetime.fromisoformat(now_ts.replace('Z', '+00:00'))) - db.add(timestamp_info) - db.commit() - refresh_status["last_refresh"] = now_ts - logger.info(f"Refreshed database with {len(temp_packages)} packages") - except Exception as e: - db.rollback() - logger.error(f"Failed to update database: {str(e)}") - refresh_status["errors"].append(f"Database update failed: {str(e)}") - raise + logger.error(f"Background cache refresh failed: {str(e)}") + refresh_status["errors"].append(f"Background cache refresh failed: {str(e)}") finally: - app_config["FETCH_IN_PROGRESS"] = False db.close() - logger.info("Closed database session after sync") - logger.info("Finished syncing packages") + logger.info("Closed database session after background cache refresh") + +async def scheduled_cache_refresh(): + """Scheduler to run cache refresh every 8 hours after the last refresh.""" + global last_refresh_time + while True: + # Calculate time since last refresh + time_since_last_refresh = datetime.utcnow() - last_refresh_time + # Calculate how long to wait until the next 8-hour mark + wait_seconds = max(0, (8 * 3600 - time_since_last_refresh.total_seconds())) + logger.info(f"Next scheduled cache refresh in {wait_seconds / 3600:.2f} hours") + await asyncio.sleep(wait_seconds) + # Create a new database session for the refresh task + db = SessionLocal() + await background_cache_refresh(db) @asynccontextmanager async def lifespan(app: FastAPI): """Lifespan handler for FastAPI startup and shutdown.""" + logger.debug("Lifespan handler starting.") os.makedirs("instance", exist_ok=True) db = SessionLocal() try: db_path = "instance/fhir_igs.db" + # Always load existing data into memory on startup, regardless of age if os.path.exists(db_path) and os.path.getsize(db_path) > 0: - logger.info("Database file exists and has data. Checking if sync is needed...") - if should_sync_packages(db): - logger.info("Data is outdated or missing, triggering sync") - sync_packages() - else: - logger.info("Using existing dataset at startup") - cached_packages = db.query(CachedPackage).all() - normalized_packages = [] - for pkg in cached_packages: - pkg_data = { - "package_name": pkg.package_name, - "version": pkg.version, - "latest_official_version": pkg.latest_official_version, - "author": pkg.author, - "description": pkg.description, - "fhir_version": pkg.fhir_version, - "url": pkg.url, - "canonical": pkg.canonical, - "all_versions": pkg.all_versions, - "dependencies": pkg.dependencies, - "version_count": pkg.version_count, - "last_updated": pkg.last_updated, - "latest_version": pkg.latest_version - } - normalized_packages.append(pkg_data) - app_config["MANUAL_PACKAGE_CACHE"] = normalized_packages - db_timestamp_info = db.query(RegistryCacheInfo).first() - db_timestamp = db_timestamp_info.last_fetch_timestamp if db_timestamp_info else None - app_config["MANUAL_CACHE_TIMESTAMP"] = db_timestamp.isoformat() if db_timestamp else datetime.utcnow().isoformat() - logger.info(f"Loaded {len(normalized_packages)} packages into in-memory cache from database.") + logger.info("Database file exists and has data. Loading into memory...") + cached_packages = db.query(CachedPackage).all() + normalized_packages = [] + for pkg in cached_packages: + pkg_data = { + "package_name": pkg.package_name, + "version": pkg.version, + "latest_official_version": pkg.latest_official_version, + "author": pkg.author, + "description": pkg.description, + "fhir_version": pkg.fhir_version, + "url": pkg.url, + "canonical": pkg.canonical, + "all_versions": pkg.all_versions, + "dependencies": pkg.dependencies, + "version_count": pkg.version_count, + "last_updated": pkg.last_updated, + "latest_version": pkg.latest_version + } + normalized_packages.append(pkg_data) + app_config["MANUAL_PACKAGE_CACHE"] = normalized_packages + db_timestamp_info = db.query(RegistryCacheInfo).first() + db_timestamp = db_timestamp_info.last_fetch_timestamp if db_timestamp_info else None + app_config["MANUAL_CACHE_TIMESTAMP"] = db_timestamp.isoformat() if db_timestamp else datetime.utcnow().isoformat() + logger.info(f"Loaded {len(normalized_packages)} packages into in-memory cache from database.") else: - logger.info("Database file does not exist or is empty, triggering sync") - sync_packages() + logger.info("Database file does not exist or is empty, initializing empty cache") + app_config["MANUAL_PACKAGE_CACHE"] = [] + app_config["MANUAL_CACHE_TIMESTAMP"] = datetime.utcnow().isoformat() + + # Check if data is older than 8 hours or missing, and trigger a background refresh if needed + should_refresh = False + if app_config["MANUAL_PACKAGE_CACHE"]: + latest_package = db.query(CachedPackage).order_by(CachedPackage.last_updated.desc()).first() + if not latest_package or not latest_package.last_updated: + logger.info("No valid last_updated timestamp, triggering background refresh") + should_refresh = True + else: + try: + last_updated = datetime.fromisoformat(latest_package.last_updated.replace('Z', '+00:00')) + time_diff = datetime.utcnow() - last_updated + if time_diff.total_seconds() > 8 * 3600: # 8 hours + logger.info(f"Data is {time_diff.total_seconds()/3600:.2f} hours old, triggering background refresh") + should_refresh = True + else: + logger.info(f"Data is {time_diff.total_seconds()/3600:.2f} hours old, no background refresh needed") + except ValueError: + logger.warning("Invalid last_updated format, triggering background refresh") + should_refresh = True + else: + logger.info("No packages in cache, triggering background refresh") + should_refresh = True + + # Start background refresh if needed + if should_refresh: + # Create a new database session for the background task + background_db = SessionLocal() + asyncio.create_task(background_cache_refresh(background_db)) + + # Start the scheduler to run every 8 hours after the last refresh + asyncio.create_task(scheduled_cache_refresh()) + + logger.info("Lifespan startup completed, yielding control to FastAPI.") yield finally: db.close() @@ -587,11 +187,31 @@ async def lifespan(app: FastAPI): app.lifespan = lifespan @app.get("/igs/search", response_model=SearchResponse) -async def search_igs(query: str = ''): - """Search for IGs with embedded logic from FHIRFLARE's search_and_import and api_search_packages.""" - logger.info(f"Searching IGs with query: {query}") +async def search_igs(query: str = '', search_type: str = 'semantic'): + """ + Search for Implementation Guides (IGs) using the specified search type. + + Args: + query (str, optional): The search term to filter IGs by name or author (e.g., 'au core'). + search_type (str, optional): The type of search to perform. Options are: + - 'semantic': Uses SpaCy for semantic similarity (default). + - 'string': Uses SpaCy for token-based string similarity, with a fallback to rapidfuzz for exact/near-exact matches. + + Returns: + SearchResponse: A response containing a list of matching IGs, their metadata, and cache status. + + Raises: + HTTPException: If the search_type is invalid or an error occurs during search. + """ + logger.info(f"Searching IGs with query: {query}, search_type: {search_type}") db = SessionLocal() try: + # Validate search_type + valid_search_types = ['semantic', 'string'] + if search_type not in valid_search_types: + logger.error(f"Invalid search_type: {search_type}. Must be one of {valid_search_types}.") + raise HTTPException(status_code=400, detail=f"Invalid search_type: {search_type}. Must be one of {valid_search_types}.") + in_memory_packages = app_config["MANUAL_PACKAGE_CACHE"] in_memory_timestamp = app_config["MANUAL_CACHE_TIMESTAMP"] db_timestamp_info = db.query(RegistryCacheInfo).first() @@ -657,33 +277,81 @@ async def search_igs(query: str = ''): logger.info("Filtering packages based on query") if query: + # Split the query into individual words + query_words = query.lower().split() filtered_packages = [ pkg for pkg in normalized_packages if isinstance(pkg, dict) and ( - query.lower() in pkg.get('package_name', '').lower() or - query.lower() in pkg.get('author', '').lower() + all(word in pkg.get('package_name', '').lower() for word in query_words) or + all(word in pkg.get('author', '').lower() for word in query_words) ) ] - logger.debug(f"Filtered {len(normalized_packages)} cached packages down to {len(filtered_packages)} for term '{query}'") + logger.debug(f"Filtered {len(normalized_packages)} cached packages down to {len(filtered_packages)} for terms '{query_words}'") else: filtered_packages = normalized_packages logger.debug(f"No search term provided, using all {len(filtered_packages)} cached packages.") - logger.info("Starting fuzzy search") - search_data = [(pkg['package_name'], pkg, 'name') for pkg in filtered_packages] - search_data += [(pkg['description'], pkg, 'description') for pkg in filtered_packages if pkg['description']] - results = process.extract(query.lower(), [item[0].lower() for item in search_data], limit=100, scorer=fuzz.partial_ratio, score_cutoff=70) - logger.info(f"Fuzzy search completed with {len(results)} results") + logger.info(f"Starting search with search_type: {search_type}") + results = [] + query_doc = nlp(query.lower()) # Process the query with SpaCy + + if search_type == 'semantic': + # Semantic similarity search using SpaCy's word embeddings + for pkg in filtered_packages: + name = pkg['package_name'] + description = pkg['description'] if pkg['description'] else '' + author = pkg['author'] if pkg['author'] else '' + # Combine fields for a comprehensive semantic search + combined_text = f"{name} {description} {author}".lower() + doc = nlp(combined_text) + similarity = query_doc.similarity(doc) # Compute semantic similarity + if similarity > 0.3: # Lowered threshold for semantic similarity + logger.info(f"Semantic match: {name}, similarity: {similarity}") + results.append((name, pkg, 'combined', similarity)) + else: + # Fallback to rapidfuzz for exact/near-exact string matching + name_score = fuzz.partial_ratio(query.lower(), name.lower()) + desc_score = fuzz.partial_ratio(query.lower(), description.lower()) if description else 0 + author_score = fuzz.partial_ratio(query.lower(), author.lower()) if author else 0 + max_score = max(name_score, desc_score, author_score) + if max_score > 70: # Threshold for rapidfuzz + source = 'name' if max_score == name_score else ('description' if max_score == desc_score else 'author') + logger.info(f"Rapidfuzz fallback in semantic mode: {name}, source: {source}, score: {max_score}") + results.append((name, pkg, source, max_score / 100.0)) + else: + # String similarity search + # First try SpaCy's token-based similarity + for pkg in filtered_packages: + name = pkg['package_name'] + description = pkg['description'] if pkg['description'] else '' + author = pkg['author'] if pkg['author'] else '' + combined_text = f"{name} {description} {author}".lower() + doc = nlp(combined_text) + # Use token-based similarity for string matching + token_similarity = query_doc.similarity(doc) # Still using similarity but focusing on token overlap + if token_similarity > 0.7: # Higher threshold for token similarity + logger.info(f"SpaCy token match: {name}, similarity: {token_similarity}") + results.append((name, pkg, 'combined', token_similarity)) + else: + # Fallback to rapidfuzz for exact/near-exact string matching + name_score = fuzz.partial_ratio(query.lower(), name.lower()) + desc_score = fuzz.partial_ratio(query.lower(), description.lower()) if description else 0 + author_score = fuzz.partial_ratio(query.lower(), author.lower()) if author else 0 + max_score = max(name_score, desc_score, author_score) + if max_score > 70: # Threshold for rapidfuzz + source = 'name' if max_score == name_score else ('description' if max_score == desc_score else 'author') + logger.info(f"Rapidfuzz match: {name}, source: {source}, score: {max_score}") + results.append((name, pkg, source, max_score / 100.0)) + + logger.info(f"Search completed with {len(results)} results") logger.info("Building response packages") packages_to_display = [] seen_names = set() - for matched_text, score, index in results: - pkg = search_data[index][1] - source = search_data[index][2] + for matched_text, pkg, source, score in sorted(results, key=lambda x: x[3], reverse=True): if pkg['package_name'] not in seen_names: seen_names.add(pkg['package_name']) - adjusted_score = score * 1.5 if source == 'name' else score * 0.8 + adjusted_score = score * 1.5 if source in ['name', 'combined'] else score * 0.8 logger.info(f"Matched IG: {pkg['package_name']} (source: {source}, score: {score}, adjusted: {adjusted_score})") packages_to_display.append({ "id": pkg['package_name'], @@ -695,7 +363,7 @@ async def search_igs(query: str = ''): "Latest_Version": pkg['latest_version'], "version_count": pkg['version_count'], "all_versions": pkg['all_versions'] or [], - "relevance": adjusted_score / 100.0 + "relevance": adjusted_score }) packages_to_display.sort(key=lambda x: x['relevance'], reverse=True) @@ -714,97 +382,6 @@ async def search_igs(query: str = ''): db.close() logger.info("Closed database session after search") -def download_package(ig_name: str, version: str, package: Dict) -> tuple[str, Optional[str]]: - """Download the .tgz file for the given IG and version, mimicking FHIRFLARE's import_package_and_dependencies.""" - # Create a temporary directory for downloads - download_dir = "instance/fhir_packages" - os.makedirs(download_dir, exist_ok=True) - tgz_filename = f"{ig_name}-{version}.tgz".replace('/', '_') - tgz_path = os.path.join(download_dir, tgz_filename) - - # Check if package already exists - if os.path.exists(tgz_path): - logger.info(f"Package {ig_name}#{version} already exists at {tgz_path}") - return tgz_path, None - - # Try canonical URL first (most reliable) - canonical_url = package.get('canonical') - if canonical_url and canonical_url.endswith(f"{version}/package.tgz"): - logger.info(f"Attempting to fetch package from canonical URL: {canonical_url}") - try: - response = requests.get(canonical_url, stream=True, timeout=30) - response.raise_for_status() - with open(tgz_path, 'wb') as f: - for chunk in response.iter_content(chunk_size=8192): - if chunk: - f.write(chunk) - logger.info(f"Successfully downloaded {ig_name}#{version} to {tgz_path} using canonical URL") - return tgz_path, None - except requests.RequestException as e: - error_msg = f"Failed to fetch package from canonical URL {canonical_url}: {str(e)}" - logger.warning(error_msg) - - # Try primary FHIR registry base URL (e.g., https://packages.fhir.org/hl7.fhir.au.core/1.1.0-preview/) - base_url = f"{FHIR_REGISTRY_BASE_URL}/{ig_name}/{version}/" - logger.info(f"Attempting to fetch package from FHIR registry base URL: {base_url}") - try: - response = requests.get(base_url, stream=True, timeout=30) - response.raise_for_status() - # Check if the response is a .tgz file - content_type = response.headers.get('Content-Type', '') - content_disposition = response.headers.get('Content-Disposition', '') - if 'application/x-tar' in content_type or content_disposition.endswith('.tgz') or base_url.endswith('.tgz'): - with open(tgz_path, 'wb') as f: - for chunk in response.iter_content(chunk_size=8192): - if chunk: - f.write(chunk) - logger.info(f"Successfully downloaded {ig_name}#{version} to {tgz_path} using FHIR registry base URL") - return tgz_path, None - else: - error_msg = f"FHIR registry base URL {base_url} did not return a .tgz file (Content-Type: {content_type})" - logger.warning(error_msg) - except requests.RequestException as e: - error_msg = f"Failed to fetch package from FHIR registry base URL {base_url}: {str(e)}" - logger.warning(error_msg) - - # Fallback: Try FHIR registry with explicit /package.tgz - tgz_url = f"{FHIR_REGISTRY_BASE_URL}/{ig_name}/{version}/package.tgz" - logger.info(f"Attempting to fetch package from FHIR registry explicit URL: {tgz_url}") - try: - response = requests.get(tgz_url, stream=True, timeout=30) - response.raise_for_status() - with open(tgz_path, 'wb') as f: - for chunk in response.iter_content(chunk_size=8192): - if chunk: - f.write(chunk) - logger.info(f"Successfully downloaded {ig_name}#{version} to {tgz_path} using FHIR registry explicit URL") - return tgz_path, None - except requests.RequestException as e: - error_msg = f"Failed to fetch package from FHIR registry explicit URL {tgz_url}: {str(e)}" - logger.warning(error_msg) - - # Fallback: Use registry URL (e.g., Simplifier) - registry_url = package.get('registry', 'https://packages.simplifier.net') - if registry_url.endswith('/rssfeed'): - registry_url = registry_url[:-8] - tgz_url = f"{registry_url}/{ig_name}/{version}/package.tgz" - logger.info(f"Attempting to fetch package from registry URL: {tgz_url}") - try: - response = requests.get(tgz_url, stream=True, timeout=30) - response.raise_for_status() - with open(tgz_path, 'wb') as f: - for chunk in response.iter_content(chunk_size=8192): - if chunk: - f.write(chunk) - logger.info(f"Successfully downloaded {ig_name}#{version} to {tgz_path} using registry URL") - return tgz_path, None - except requests.RequestException as e: - error_msg = f"Failed to fetch package from registry URL {tgz_url}: {str(e)}" - logger.error(error_msg) - return None, error_msg - - return None, "All download attempts failed." - @app.get("/igs/{ig_id}/profiles", response_model=List[ProfileMetadata]) async def list_profiles(ig_id: str, version: Optional[str] = None): """List StructureDefinition profiles in the specified IG, optionally for a specific version.""" @@ -869,7 +446,7 @@ async def list_profiles(ig_id: str, version: Optional[str] = None): version = target_version logger.info(f"No version specified, using latest version: {target_version}") - # Download the package using updated logic + # Download the package tgz_path, error = download_package(ig_name, version, package) if not tgz_path: logger.error(f"Failed to download package for IG {ig_name} (version: {version}): {error}") @@ -996,6 +573,7 @@ async def get_profile(ig_id: str, profile_id: str, version: Optional[str] = None logger.error(f"IG {ig_name} not found in cached packages.") raise HTTPException(status_code=404, detail=f"IG '{ig_name}' not found.") + # Determine the version to fetch if version: target_version = None for ver_entry in package['all_versions']: @@ -1018,33 +596,40 @@ async def get_profile(ig_id: str, profile_id: str, version: Optional[str] = None raise HTTPException(status_code=404, detail=f"Package for IG '{ig_name}' (version: {version}) not found.") raise HTTPException(status_code=500, detail=f"Failed to fetch package: {error}") - # Extract the specific profile + # Extract the specific profile from the .tgz file + profile_resource = None try: with tarfile.open(tgz_path, mode="r:gz") as tar: for member in tar.getmembers(): - if member.name.endswith('.json'): + if member.name.endswith('.json') and 'StructureDefinition' in member.name: f = tar.extractfile(member) if f: resource = json.load(f) - if (resource.get("resourceType") == "StructureDefinition" and - (resource.get("name") == profile_id or resource.get("id") == profile_id or resource.get("url", "").endswith(profile_id))): - # Strip narrative if include_narrative is False - if not include_narrative: - if "text" in resource: - logger.info(f"Stripping narrative from profile {profile_id} for IG {ig_name} (version: {version})") - resource["text"] = None - logger.info(f"Successfully retrieved profile {profile_id} for IG {ig_name} (version: {version})") - return StructureDefinition(resource=resource) + if resource.get("resourceType") == "StructureDefinition": + resource_name = resource.get("name", "") + resource_url = resource.get("url", "") + if resource_name == profile_id or resource_url.endswith(profile_id): + profile_resource = resource + break + if not profile_resource: + logger.error(f"Profile {profile_id} not found in package for IG {ig_name} (version: {version})") + raise HTTPException(status_code=404, detail=f"Profile '{profile_id}' not found in IG '{ig_name}' (version: {version}).") except Exception as e: logger.error(f"Failed to extract profile {profile_id} from package for IG {ig_name} (version: {version}): {str(e)}") raise HTTPException(status_code=500, detail=f"Failed to extract profile: {str(e)}") - logger.error(f"Profile {profile_id} not found in package for IG {ig_name} (version: {version})") - raise HTTPException(status_code=404, detail=f"Profile '{profile_id}' not found in IG '{ig_name}' (version: {version}).") + # Strip narrative if requested + if not include_narrative: + logger.info(f"Stripping narrative from profile {profile_id}") + if "text" in profile_resource: + profile_resource["text"] = None + + logger.info(f"Successfully retrieved profile {profile_id} for IG {ig_name} (version: {version})") + return StructureDefinition(resource=profile_resource) @app.get("/status", response_model=RefreshStatus) async def get_refresh_status(): - """Return the status of the last refresh.""" + """Get the status of the last cache refresh.""" logger.info("Fetching refresh status") db = SessionLocal() try: @@ -1059,10 +644,13 @@ async def get_refresh_status(): logger.info("Closed database session after status check") @app.post("/refresh-cache", response_model=RefreshStatus) -async def refresh_cache(): - """Force a refresh of the package cache.""" - logger.info("Forcing cache refresh via API") +async def force_refresh_cache(): + """Force a refresh of the IG metadata cache.""" + global last_refresh_time + logger.info("Forcing cache refresh") sync_packages() + last_refresh_time = datetime.utcnow() # Update the last refresh time + logger.info(f"Manual cache refresh completed at {last_refresh_time.isoformat()}") db = SessionLocal() try: package_count = db.query(CachedPackage).count() @@ -1075,7 +663,5 @@ async def refresh_cache(): db.close() logger.info("Closed database session after cache refresh") -if __name__ == "__main__": - import uvicorn - port = int(os.getenv("PORT", 8000)) - uvicorn.run(app, host="0.0.0.0", port=port) \ No newline at end of file +# Log that the application is starting +logger.info("IggyAPI application starting up.") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 6325656..60b2a7d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,6 @@ pydantic==2.9.2 sqlalchemy==2.0.35 packaging==24.1 apscheduler==3.10.4 -tenacity==8.5.0 \ No newline at end of file +tenacity==8.5.0 +spacy==3.7.6 +en-core-web-md @ https://github.com/explosion/spacy-models/releases/download/en_core_web_md-3.7.1/en_core_web_md-3.7.1-py3-none-any.whl