From 87f67c99cc0e7bc0d5bafd5beacc798073d7ea58 Mon Sep 17 00:00:00 2001 From: Leona Nedeljkovic Date: Tue, 28 Oct 2025 09:20:37 +0100 Subject: [PATCH 1/4] ODM-12816: Add exQuey and exFilter to /omics/cells endpoint --- openapi/v1/integrationCurator.yaml | 57 ++++++++++++++++++++++++++++++ openapi/v1/integrationUser.yaml | 57 ++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) diff --git a/openapi/v1/integrationCurator.yaml b/openapi/v1/integrationCurator.yaml index c072f3ff..c57e695d 100644 --- a/openapi/v1/integrationCurator.yaml +++ b/openapi/v1/integrationCurator.yaml @@ -4508,6 +4508,63 @@ paths: name: cellQuery schema: type: string + - description: "Search for objects linked to expression data and originally\ + \ uploaded in TSV or GCT format via data query, e.g., `feature=ENSG00000230368,ENSG00000188976\ + \ value>=1.50`\n For the case when the original data is represented by multiple\ + \ attributes per feature scenarios, extended filtering syntax is as follows:\ + \ \n1. By feature attribute value for numeric and string attributes: `feature.NAME=1007_s_at`\ + \ or `feature.\"Average Mz\"=2.218`. As in the case of sample metadata queries,\ + \ single words can be supplied as is; otherwise, use speech marks (`\"`)\ + \ to quote queries that include whitespace. \n2. It is possible to specify\ + \ a set of possible values, separated by comma: `feature.NAME=1007_s_at,121_at`.\ + \ \n3. Utilize range filters to search numeric attributes. Apply `<` (less\ + \ than), `>` (greater than), and `=` (equal to) symbols to specify the desired\ + \ ranges as follows: \n`feature.Name_1 > 3`: Select all rows where the feature\ + \ attribute Name_1 values are greater than 3. \n`feature.Name_2 >= 6`: Select\ + \ all rows where the feature attribute Name_2 values are greater than or\ + \ equal to 6. \n`-3 < feature.Name_3 < 3`: Select all rows where the feature\ + \ attribute Name_3 values lie within the interval between -3 and 3. \n4.\ + \ Use substring search to get the records where the attribute field contains\ + \ the provided substring: `feature.attribute1 =~ \"some text\"`. \n5. The\ + \ first column for each original data file is identified as feature accession\ + \ (typically, it contains gene or protein names, accession IDs, etc.). Searching\ + \ by such feature accession would significantly outperform more complex\ + \ queries by combining the other feature attributes. To enable such a search,\ + \ use `feature` without any attribute extension, e.g., `feature=ENSG00000230368,ENSG00000188976`.\n\ + \ \nThe `value` keyword can be used to select rows where the sample (library\ + \ or preparation) measurements has values from a certain range. Examples:\ + \ `value = 3`, `value > 3`, `-3 < value < 3`. When the original data contains\ + \ multiple measurements for a single item, such as a sample (library or\ + \ preparation), use the measurement name to specify the exact column type,\ + \ e.g.: \n1. `value.intensity = 3`: Selects all rows where the measurement\ + \ attribute intensity equals 3. \n `value.intensity != 2,null`: Select all\ + \ rows where the measurement attribute intensity is not equal 2 and is not\ + \ an empty value. \n`value.p_value > 3`: Selects all rows where the measurement\ + \ attribute 'p_value' values are greater than 3. \n`-3 < value.FC < 3`:\ + \ Selects all rows where the measurement attribute 'FC' values lie within\ + \ the interval between -3 and 3.\n \n2. Note: The `MinValue` keyword has\ + \ been deprecated and should be replaced with the aforementioned comparisons.\n\ + \ \nCombine multiple filters for different feature attributes and measurements\ + \ using `AND` (`&&`), `OR` (`||`), `NOT` (`!`) logical operators and parentheses: \n\ + * `NOT feature.Name_1=A`: Select all rows where Name_1 is not A. \n* `feature.Name_1!=A,B,C`:\ + \ Select all rows where Name_1 is not A, B, or C. \n* `feature.Name_1=A\ + \ AND feature.Name_2=B`: Select all rows where Name_1 is A and Name_2 is\ + \ B. \n* `feature.Name_1=A && feature.Name_2=B`: Equivalent to the example\ + \ above. \n* `feature.Name_1=A OR feature.Name_2=B`: Select all rows where\ + \ Name_1 is A or Name_2 is B. \n* `feature.Name_1=A || feature.Name_2=B`:\ + \ Equivalent to the example above. \n* `feature.Name_1=A AND (feature.Name_2=B\ + \ OR value>=1.0)`: Select all rows where Name_1 is A and either Name_2 is\ + \ B or minimal possible measurement value is 1.0." + in: query + name: exQuery + schema: + type: string + - description: "Filter by expression metadata (key-value metadata pair(s)).\ + \ E.g. `\"Genome Version\"=hg19-BROAD`." + in: query + name: exFilter + schema: + type: string - description: The page tag to resume results from (see paging above). in: query name: cursor diff --git a/openapi/v1/integrationUser.yaml b/openapi/v1/integrationUser.yaml index 033ae61f..5b82eee7 100644 --- a/openapi/v1/integrationUser.yaml +++ b/openapi/v1/integrationUser.yaml @@ -2955,6 +2955,63 @@ paths: name: cellQuery schema: type: string + - description: "Search for objects linked to expression data and originally\ + \ uploaded in TSV or GCT format via data query, e.g., `feature=ENSG00000230368,ENSG00000188976\ + \ value>=1.50`\n For the case when the original data is represented by multiple\ + \ attributes per feature scenarios, extended filtering syntax is as follows:\ + \ \n1. By feature attribute value for numeric and string attributes: `feature.NAME=1007_s_at`\ + \ or `feature.\"Average Mz\"=2.218`. As in the case of sample metadata queries,\ + \ single words can be supplied as is; otherwise, use speech marks (`\"`)\ + \ to quote queries that include whitespace. \n2. It is possible to specify\ + \ a set of possible values, separated by comma: `feature.NAME=1007_s_at,121_at`.\ + \ \n3. Utilize range filters to search numeric attributes. Apply `<` (less\ + \ than), `>` (greater than), and `=` (equal to) symbols to specify the desired\ + \ ranges as follows: \n`feature.Name_1 > 3`: Select all rows where the feature\ + \ attribute Name_1 values are greater than 3. \n`feature.Name_2 >= 6`: Select\ + \ all rows where the feature attribute Name_2 values are greater than or\ + \ equal to 6. \n`-3 < feature.Name_3 < 3`: Select all rows where the feature\ + \ attribute Name_3 values lie within the interval between -3 and 3. \n4.\ + \ Use substring search to get the records where the attribute field contains\ + \ the provided substring: `feature.attribute1 =~ \"some text\"`. \n5. The\ + \ first column for each original data file is identified as feature accession\ + \ (typically, it contains gene or protein names, accession IDs, etc.). Searching\ + \ by such feature accession would significantly outperform more complex\ + \ queries by combining the other feature attributes. To enable such a search,\ + \ use `feature` without any attribute extension, e.g., `feature=ENSG00000230368,ENSG00000188976`.\n\ + \ \nThe `value` keyword can be used to select rows where the sample (library\ + \ or preparation) measurements has values from a certain range. Examples:\ + \ `value = 3`, `value > 3`, `-3 < value < 3`. When the original data contains\ + \ multiple measurements for a single item, such as a sample (library or\ + \ preparation), use the measurement name to specify the exact column type,\ + \ e.g.: \n1. `value.intensity = 3`: Selects all rows where the measurement\ + \ attribute intensity equals 3. \n `value.intensity != 2,null`: Select all\ + \ rows where the measurement attribute intensity is not equal 2 and is not\ + \ an empty value. \n`value.p_value > 3`: Selects all rows where the measurement\ + \ attribute 'p_value' values are greater than 3. \n`-3 < value.FC < 3`:\ + \ Selects all rows where the measurement attribute 'FC' values lie within\ + \ the interval between -3 and 3.\n \n2. Note: The `MinValue` keyword has\ + \ been deprecated and should be replaced with the aforementioned comparisons.\n\ + \ \nCombine multiple filters for different feature attributes and measurements\ + \ using `AND` (`&&`), `OR` (`||`), `NOT` (`!`) logical operators and parentheses: \n\ + * `NOT feature.Name_1=A`: Select all rows where Name_1 is not A. \n* `feature.Name_1!=A,B,C`:\ + \ Select all rows where Name_1 is not A, B, or C. \n* `feature.Name_1=A\ + \ AND feature.Name_2=B`: Select all rows where Name_1 is A and Name_2 is\ + \ B. \n* `feature.Name_1=A && feature.Name_2=B`: Equivalent to the example\ + \ above. \n* `feature.Name_1=A OR feature.Name_2=B`: Select all rows where\ + \ Name_1 is A or Name_2 is B. \n* `feature.Name_1=A || feature.Name_2=B`:\ + \ Equivalent to the example above. \n* `feature.Name_1=A AND (feature.Name_2=B\ + \ OR value>=1.0)`: Select all rows where Name_1 is A and either Name_2 is\ + \ B or minimal possible measurement value is 1.0." + in: query + name: exQuery + schema: + type: string + - description: "Filter by expression metadata (key-value metadata pair(s)).\ + \ E.g. `\"Genome Version\"=hg19-BROAD`." + in: query + name: exFilter + schema: + type: string - description: The page tag to resume results from (see paging above). in: query name: cursor From 1c4c90d3a909614600d47e045cbbe5efbf877c19 Mon Sep 17 00:00:00 2001 From: Leona Nedeljkovic Date: Tue, 28 Oct 2025 10:11:45 +0100 Subject: [PATCH 2/4] ODM-12816: Remove libcurl4t64 --- Earthfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Earthfile b/Earthfile index 08980a08..4ded0b2d 100644 --- a/Earthfile +++ b/Earthfile @@ -84,7 +84,7 @@ r-api-client: RUN \ apt update && \ apt-get install -y \ - libssl-dev libcurl4-gnutls-dev curl libcurl4t64:amd64=8.16.0-4 --allow-downgrades && \ + libssl-dev libcurl4-gnutls-dev curl && \ Rscript requirements.R COPY +build/generated generated From 9c8e571baa04b196e0870d63fdd572225790573b Mon Sep 17 00:00:00 2001 From: Leona Nedeljkovic Date: Wed, 29 Oct 2025 09:10:44 +0100 Subject: [PATCH 3/4] ODM-12816: revert changes --- Earthfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Earthfile b/Earthfile index 4ded0b2d..08980a08 100644 --- a/Earthfile +++ b/Earthfile @@ -84,7 +84,7 @@ r-api-client: RUN \ apt update && \ apt-get install -y \ - libssl-dev libcurl4-gnutls-dev curl && \ + libssl-dev libcurl4-gnutls-dev curl libcurl4t64:amd64=8.16.0-4 --allow-downgrades && \ Rscript requirements.R COPY +build/generated generated From 785d6403bb5b22f721efc2f9e7cff33dd6962fe7 Mon Sep 17 00:00:00 2001 From: Leona Nedeljkovic Date: Mon, 10 Nov 2025 14:02:56 +0100 Subject: [PATCH 4/4] ODM-12816: Update exQuery description --- openapi/v1/integrationCurator.yaml | 20 +++++--------------- openapi/v1/integrationUser.yaml | 20 +++++--------------- 2 files changed, 10 insertions(+), 30 deletions(-) diff --git a/openapi/v1/integrationCurator.yaml b/openapi/v1/integrationCurator.yaml index 90e2d234..a28d37a9 100644 --- a/openapi/v1/integrationCurator.yaml +++ b/openapi/v1/integrationCurator.yaml @@ -4509,8 +4509,8 @@ paths: name: cellQuery schema: type: string - - description: "Search for objects linked to expression data and originally\ - \ uploaded in TSV or GCT format via data query, e.g., `feature=ENSG00000230368,ENSG00000188976\ + - description: "Search for objects linked to cell expression data and originally\ + \ uploaded in TSV format via data query, e.g., `feature=ENSG00000230368,ENSG00000188976\ \ value>=1.50`\n For the case when the original data is represented by multiple\ \ attributes per feature scenarios, extended filtering syntax is as follows:\ \ \n1. By feature attribute value for numeric and string attributes: `feature.NAME=1007_s_at`\ @@ -4532,19 +4532,9 @@ paths: \ by such feature accession would significantly outperform more complex\ \ queries by combining the other feature attributes. To enable such a search,\ \ use `feature` without any attribute extension, e.g., `feature=ENSG00000230368,ENSG00000188976`.\n\ - \ \nThe `value` keyword can be used to select rows where the sample (library\ - \ or preparation) measurements has values from a certain range. Examples:\ - \ `value = 3`, `value > 3`, `-3 < value < 3`. When the original data contains\ - \ multiple measurements for a single item, such as a sample (library or\ - \ preparation), use the measurement name to specify the exact column type,\ - \ e.g.: \n1. `value.intensity = 3`: Selects all rows where the measurement\ - \ attribute intensity equals 3. \n `value.intensity != 2,null`: Select all\ - \ rows where the measurement attribute intensity is not equal 2 and is not\ - \ an empty value. \n`value.p_value > 3`: Selects all rows where the measurement\ - \ attribute 'p_value' values are greater than 3. \n`-3 < value.FC < 3`:\ - \ Selects all rows where the measurement attribute 'FC' values lie within\ - \ the interval between -3 and 3.\n \n2. Note: The `MinValue` keyword has\ - \ been deprecated and should be replaced with the aforementioned comparisons.\n\ + \ \nThe `value` keyword can be used to select rows where the cell + \ measurements has values from a certain range. Examples:\ + \ `value = 3`, `value > 3`, `-3 < value < 3`.\n \ \nCombine multiple filters for different feature attributes and measurements\ \ using `AND` (`&&`), `OR` (`||`), `NOT` (`!`) logical operators and parentheses: \n\ * `NOT feature.Name_1=A`: Select all rows where Name_1 is not A. \n* `feature.Name_1!=A,B,C`:\ diff --git a/openapi/v1/integrationUser.yaml b/openapi/v1/integrationUser.yaml index 394920e4..7e861b23 100644 --- a/openapi/v1/integrationUser.yaml +++ b/openapi/v1/integrationUser.yaml @@ -2956,8 +2956,8 @@ paths: name: cellQuery schema: type: string - - description: "Search for objects linked to expression data and originally\ - \ uploaded in TSV or GCT format via data query, e.g., `feature=ENSG00000230368,ENSG00000188976\ + - description: "Search for objects linked to cell expression data and originally\ + \ uploaded in TSV format via data query, e.g., `feature=ENSG00000230368,ENSG00000188976\ \ value>=1.50`\n For the case when the original data is represented by multiple\ \ attributes per feature scenarios, extended filtering syntax is as follows:\ \ \n1. By feature attribute value for numeric and string attributes: `feature.NAME=1007_s_at`\ @@ -2979,19 +2979,9 @@ paths: \ by such feature accession would significantly outperform more complex\ \ queries by combining the other feature attributes. To enable such a search,\ \ use `feature` without any attribute extension, e.g., `feature=ENSG00000230368,ENSG00000188976`.\n\ - \ \nThe `value` keyword can be used to select rows where the sample (library\ - \ or preparation) measurements has values from a certain range. Examples:\ - \ `value = 3`, `value > 3`, `-3 < value < 3`. When the original data contains\ - \ multiple measurements for a single item, such as a sample (library or\ - \ preparation), use the measurement name to specify the exact column type,\ - \ e.g.: \n1. `value.intensity = 3`: Selects all rows where the measurement\ - \ attribute intensity equals 3. \n `value.intensity != 2,null`: Select all\ - \ rows where the measurement attribute intensity is not equal 2 and is not\ - \ an empty value. \n`value.p_value > 3`: Selects all rows where the measurement\ - \ attribute 'p_value' values are greater than 3. \n`-3 < value.FC < 3`:\ - \ Selects all rows where the measurement attribute 'FC' values lie within\ - \ the interval between -3 and 3.\n \n2. Note: The `MinValue` keyword has\ - \ been deprecated and should be replaced with the aforementioned comparisons.\n\ + \ \nThe `value` keyword can be used to select rows where the cell + \ measurements has values from a certain range. Examples:\ + \ `value = 3`, `value > 3`, `-3 < value < 3`.\n \ \nCombine multiple filters for different feature attributes and measurements\ \ using `AND` (`&&`), `OR` (`||`), `NOT` (`!`) logical operators and parentheses: \n\ * `NOT feature.Name_1=A`: Select all rows where Name_1 is not A. \n* `feature.Name_1!=A,B,C`:\