From c0fcfd9fa7a6b607d051db9a59288e183424fde8 Mon Sep 17 00:00:00 2001 From: natalyatodorova Date: Tue, 24 Feb 2026 15:18:16 +0000 Subject: [PATCH 1/5] ODM-12652: reorder multipart request properties --- .../job/ImportAFileFromMultipartRequest.yaml | 16 ++++++++-------- .../job/ImportSignalRunFomMultipartRequest.yaml | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/openapi/v1/schemas/job/ImportAFileFromMultipartRequest.yaml b/openapi/v1/schemas/job/ImportAFileFromMultipartRequest.yaml index e4b4dce5..789866f3 100644 --- a/openapi/v1/schemas/job/ImportAFileFromMultipartRequest.yaml +++ b/openapi/v1/schemas/job/ImportAFileFromMultipartRequest.yaml @@ -1,12 +1,4 @@ properties: - metadata: - type: string - format: binary - description: The metadata file to be used as the original metadata for the created objects. The file must contain a single record describing the uploaded attachment. - data: - type: string - format: binary - description: A file to import as an attachment. The file will be associated with a study and will be searchable by its name and metadata. studyAccession: example: GSF334953 type: string @@ -15,6 +7,14 @@ properties: example: Proteomics type: string description: A mandatory parameter with the value from a limited set of values (see request description). + metadata: + type: string + format: binary + description: The metadata file to be used as the original metadata for the created objects. The file must contain a single record describing the uploaded attachment. + data: + type: string + format: binary + description: A file to import as an attachment. The file will be associated with a study and will be searchable by its name and metadata. required: - data - studyAccession diff --git a/openapi/v1/schemas/job/ImportSignalRunFomMultipartRequest.yaml b/openapi/v1/schemas/job/ImportSignalRunFomMultipartRequest.yaml index 43f4d419..48c648c8 100644 --- a/openapi/v1/schemas/job/ImportSignalRunFomMultipartRequest.yaml +++ b/openapi/v1/schemas/job/ImportSignalRunFomMultipartRequest.yaml @@ -3,18 +3,18 @@ properties: type: string example: GSF1234567 description: The ID (accession) of the study for organising files in the internal storage; linking to the target entity must be done through a separate endpoint. - metadata: - type: string - format: binary - data: - type: string - format: binary templateId: example: GSF334953 type: string previousVersion: example: GSF334953 type: string + metadata: + type: string + format: binary + data: + type: string + format: binary required: - studyId - data From babb4dfe4f7a94870a4130fb4513753516447d5c Mon Sep 17 00:00:00 2001 From: natalyatodorova Date: Wed, 25 Feb 2026 14:49:47 +0000 Subject: [PATCH 2/5] ODM-12652: rename multipart parameters, upd descriptions --- openapi/v1/job.yaml | 24 ++++++++-------- .../job/ImportAFileFromMultipartRequest.yaml | 6 ++-- .../job/ImportCellsFromMultipartRequest.yaml | 4 +-- ...pressionSignalRunFromMultipartRequest.yaml | 28 ++++++++++++++++--- .../ImportMetadataFromMultipartRequest.yaml | 4 +-- .../ImportSignalRunFomMultipartRequest.yaml | 6 ++-- 6 files changed, 46 insertions(+), 26 deletions(-) diff --git a/openapi/v1/job.yaml b/openapi/v1/job.yaml index ab6538e3..1d18ca30 100644 --- a/openapi/v1/job.yaml +++ b/openapi/v1/job.yaml @@ -412,7 +412,7 @@ paths: ## Metadata It is also possible to optionally supply the URL of a metadata file. This metadata will be used as the original metadata for the created objects. The file is expected to contain single record with metadata describing the uploaded signal file. - ## Metadata file format + ## Data file format * Format: Gene Cluster Text (GCT) and Tab-separated format (TSV), attribute names and record values are separated with tabs (`U+0009`), lines are separated with `CRLF` sequence (`U+000D U+000A`) * Extension: `.zip`, `.gz`, `.br`, `.lz4` are supported, treated as archives and get decompressed * Header: the first line is treated as table header that contains attribute names @@ -451,13 +451,13 @@ paths: /api/v1/jobs/import/expression/multipart: post: description: |- - ## Data - This operation necessitates the URL of a tabular data file, which must be either in TSV or GCT 1.2 format. Consult the user guide for a comprehensive understanding of the file content requirements. The endpoint is capable of handling uploads of any data type, which can be detailed in the parameters section, not only Gene Expression data. + ## File + This operation necessitates a tabular data file. Consult the user guide for a comprehensive understanding of the file content requirements. The endpoint is capable of handling uploads of any data type, which can be detailed in the parameters section, not only Gene Expression data. - ## Metadata - It is also possible to optionally supply the URL of a metadata file. This metadata will be used as the original metadata for the created objects. The file is expected to contain single record with metadata describing the uploaded signal file. - ## Metadata file format - * Format: Gene Cluster Text (GCT) and Tab-separated format (TSV), attribute names and record values are separated with tabs (`U+0009`), lines are separated with `CRLF` sequence (`U+000D U+000A`) + ## MetadataFile + It is also possible to optionally provide a metadata file. This metadata will be used as the original metadata for the created objects. The file is expected to contain single record with metadata describing the uploaded signal file. + ## File format + * Format: Tab-separated format (TSV), attribute names and record values are separated with tabs (`U+0009`), lines are separated with `CRLF` sequence (`U+000D U+000A`) * Extension: `.zip`, `.gz`, `.br`, `.lz4` are supported, treated as archives and get decompressed * Header: the first line is treated as table header that contains attribute names * Records: the second line contains the values for each of the attributes described in the header line. Values represent single string or list of strings. List values are separated using the "pipe" `|` (`U+007C`) separator. Values are trimmed of whitespace before parsing, and a literal `|` (`U+007C`) character may be escaped by repeating it twice. @@ -479,7 +479,7 @@ paths: security: - Access-token: [ ] - Genestack-API-Token: [ ] - summary: Import any tabular data from TSV or GCT files via multipart/form-data upload + summary: Import a TSV data file, optionally with a separate TSV metadata file via multipart/form-data upload tags: - Data import via direct file upload x-codegen-request-body-name: body @@ -540,7 +540,7 @@ paths: security: - Access-token: [ ] - Genestack-API-Token: [ ] - summary: Import variation data and metadata from VCF and TSV files via multipart/form-data upload + summary: Import a VCF for variation data, optionally with a separate TSV metadata file via multipart/form-data tags: - Data import via direct file upload x-codegen-request-body-name: body @@ -592,7 +592,7 @@ paths: /api/v1/jobs/import/flow-cytometry/multipart: post: description: |- - This operation necessitates the URL of a gated flow cytometry data file, which must be in FACS format. + This operation necessitates a gated flow cytometry data file, which must be in FACS format. Consult the user guide for a comprehensive understanding of the file content requirements. For flow cytometry data in FCS format use expression endpoint. @@ -621,7 +621,7 @@ paths: security: - Access-token: [ ] - Genestack-API-Token: [ ] - summary: Import flow-cytometry data and metadata from FACS and TSV files via multipart/form-data upload + summary: Import a FACS file for flow-cytometry data, optionally with a separate TSV metadata file via multipart/form-data upload tags: - Data import via direct file upload x-codegen-request-body-name: body @@ -716,7 +716,7 @@ paths: security: - Access-token: [ ] - Genestack-API-Token: [ ] - summary: Import file as an attachment via multipart/form-data upload + summary: Import file as an attachment, optionally with a separate TSV metadata file via multipart/form-data upload tags: - Data import via direct file upload x-codegen-request-body-name: body diff --git a/openapi/v1/schemas/job/ImportAFileFromMultipartRequest.yaml b/openapi/v1/schemas/job/ImportAFileFromMultipartRequest.yaml index 789866f3..4d184e6d 100644 --- a/openapi/v1/schemas/job/ImportAFileFromMultipartRequest.yaml +++ b/openapi/v1/schemas/job/ImportAFileFromMultipartRequest.yaml @@ -7,18 +7,18 @@ properties: example: Proteomics type: string description: A mandatory parameter with the value from a limited set of values (see request description). - metadata: + metadataFile: type: string format: binary description: The metadata file to be used as the original metadata for the created objects. The file must contain a single record describing the uploaded attachment. - data: + file: type: string format: binary description: A file to import as an attachment. The file will be associated with a study and will be searchable by its name and metadata. required: -- data - studyAccession - dataClass +- file type: object allOf: - $ref: "#/components/schemas/TransformationParametersForMultipartRequest" diff --git a/openapi/v1/schemas/job/ImportCellsFromMultipartRequest.yaml b/openapi/v1/schemas/job/ImportCellsFromMultipartRequest.yaml index 4e3f04e0..83f147e3 100644 --- a/openapi/v1/schemas/job/ImportCellsFromMultipartRequest.yaml +++ b/openapi/v1/schemas/job/ImportCellsFromMultipartRequest.yaml @@ -3,12 +3,12 @@ properties: type: string example: GSF1234567 description: The ID (accession) of the study for organising files in the internal storage; linking to the target entity must be done through a separate endpoint. - data: + file: type: string format: binary required: - studyId - - data + - file type: object allOf: - $ref: "#/components/schemas/TransformationParametersForMultipartRequest" diff --git a/openapi/v1/schemas/job/ImportExpressionSignalRunFromMultipartRequest.yaml b/openapi/v1/schemas/job/ImportExpressionSignalRunFromMultipartRequest.yaml index 564d94ca..b81042b3 100644 --- a/openapi/v1/schemas/job/ImportExpressionSignalRunFromMultipartRequest.yaml +++ b/openapi/v1/schemas/job/ImportExpressionSignalRunFromMultipartRequest.yaml @@ -1,6 +1,14 @@ -allOf: -- $ref: "#/components/schemas/ImportSignalRunFomMultipartRequest" properties: + studyId: + type: string + example: GSF1234567 + description: The ID (accession) of the study for organising files in the internal storage; linking to the target entity must be done through a separate endpoint. + templateId: + example: GSF334953 + type: string + previousVersion: + example: GSF334953 + type: string numberOfFeatureAttributes: description: Integer value that specifies the number of columns related to the feature in the uploaded data frame, and indicates the starting position of the @@ -28,7 +36,19 @@ properties: the allowance for multi-character separators.' example: ':' type: string + metadataFile: + type: string + format: binary + file: + type: string + format: binary +required: + - studyId + - file +type: object +allOf: + - $ref: "#/components/schemas/TransformationParametersForMultipartRequest" components: schemas: - ImportSignalRunFomMultipartRequest: - $ref: "./ImportSignalRunFomMultipartRequest.yaml" + TransformationParametersForMultipartRequest: + $ref: "./TransformationParametersForMultipartRequest.yaml" diff --git a/openapi/v1/schemas/job/ImportMetadataFromMultipartRequest.yaml b/openapi/v1/schemas/job/ImportMetadataFromMultipartRequest.yaml index a142f891..38891808 100644 --- a/openapi/v1/schemas/job/ImportMetadataFromMultipartRequest.yaml +++ b/openapi/v1/schemas/job/ImportMetadataFromMultipartRequest.yaml @@ -6,12 +6,12 @@ properties: templateId: example: GSF334953 type: string - metadata: + file: type: string format: binary required: - studyId - - metadata + - file type: object allOf: - $ref: "#/components/schemas/TransformationParametersForMultipartRequest" diff --git a/openapi/v1/schemas/job/ImportSignalRunFomMultipartRequest.yaml b/openapi/v1/schemas/job/ImportSignalRunFomMultipartRequest.yaml index 48c648c8..903de1a0 100644 --- a/openapi/v1/schemas/job/ImportSignalRunFomMultipartRequest.yaml +++ b/openapi/v1/schemas/job/ImportSignalRunFomMultipartRequest.yaml @@ -9,15 +9,15 @@ properties: previousVersion: example: GSF334953 type: string - metadata: + metadataFile: type: string format: binary - data: + file: type: string format: binary required: - studyId - - data + - file type: object allOf: - $ref: "#/components/schemas/TransformationParametersForMultipartRequest" From 3329ef94fa94c1c5a4685daac0b48c5d727ffb5d Mon Sep 17 00:00:00 2001 From: natalyatodorova Date: Wed, 25 Feb 2026 15:08:42 +0000 Subject: [PATCH 3/5] Fix deps issues in apt --- Earthfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Earthfile b/Earthfile index 0284882f..b676806a 100644 --- a/Earthfile +++ b/Earthfile @@ -80,7 +80,7 @@ r-api-client: # Gcc and other stuff for R source packages building RUN \ apt update && \ - apt install -y libssl-dev libcurl4-gnutls-dev curl && \ + apt install -y --allow-downgrades libssl-dev libcurl4-gnutls-dev curl libcurl4t64:amd64=8.18.0-2 libnghttp2-14:amd64=1.64.0-1.1+b1 && \ Rscript requirements.R COPY +build/generated generated From 22b26341a3514bc1c78f1cc8524767ae745c7dc6 Mon Sep 17 00:00:00 2001 From: natalyatodorova Date: Wed, 25 Feb 2026 18:41:20 +0000 Subject: [PATCH 4/5] ODM-12652: update descriptions after review --- openapi/v1/job.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openapi/v1/job.yaml b/openapi/v1/job.yaml index 1d18ca30..f3141a9a 100644 --- a/openapi/v1/job.yaml +++ b/openapi/v1/job.yaml @@ -479,7 +479,7 @@ paths: security: - Access-token: [ ] - Genestack-API-Token: [ ] - summary: Import a TSV data file, optionally with a separate TSV metadata file via multipart/form-data upload + summary: Import a TSV file containing any tabular data, optionally with a separate TSV metadata file via multipart/form-data upload tags: - Data import via direct file upload x-codegen-request-body-name: body @@ -540,7 +540,7 @@ paths: security: - Access-token: [ ] - Genestack-API-Token: [ ] - summary: Import a VCF for variation data, optionally with a separate TSV metadata file via multipart/form-data + summary: Import a VCF file containing variant data, optionally with a separate TSV metadata file via multipart/form-data tags: - Data import via direct file upload x-codegen-request-body-name: body @@ -621,7 +621,7 @@ paths: security: - Access-token: [ ] - Genestack-API-Token: [ ] - summary: Import a FACS file for flow-cytometry data, optionally with a separate TSV metadata file via multipart/form-data upload + summary: Import a FACS file containing flow-cytometry data, optionally with a separate TSV metadata file via multipart/form-data upload tags: - Data import via direct file upload x-codegen-request-body-name: body @@ -716,7 +716,7 @@ paths: security: - Access-token: [ ] - Genestack-API-Token: [ ] - summary: Import file as an attachment, optionally with a separate TSV metadata file via multipart/form-data upload + summary: Import a file as an attachment, optionally with a separate TSV metadata file via multipart/form-data upload tags: - Data import via direct file upload x-codegen-request-body-name: body From 7655e614962ccdae5f3bf4d422dd9c42861d1b78 Mon Sep 17 00:00:00 2001 From: natalyatodorova Date: Wed, 25 Feb 2026 20:28:54 +0000 Subject: [PATCH 5/5] ODM-12652: update descriptions after review2 --- openapi/v1/job.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/openapi/v1/job.yaml b/openapi/v1/job.yaml index f3141a9a..43e152c5 100644 --- a/openapi/v1/job.yaml +++ b/openapi/v1/job.yaml @@ -320,10 +320,6 @@ paths: - Allowed number of components per cell: **0** (absent) or **≥ 2**. - If exactly **1** PCA component is provided, the request is invalid. - At most **100** PCA components are stored; components beyond 100 are ignored. - - Notes: - - “Dimensions/components” refer to the length of the embedding vector for each cell. - - Ignoring excess dimensions/components does not cause an error; validation errors occur only when the number is exactly **1**. operationId: startImportCells parameters: - description: "Load duplicate data: the data from the link(s) has already been\ @@ -379,10 +375,6 @@ paths: - Allowed number of components per cell: **0** (absent) or **≥ 2**. - If exactly **1** PCA component is provided, the request is invalid. - At most **100** PCA components are stored; components beyond 100 are ignored. - - Notes: - - “Dimensions/components” refer to the length of the embedding vector for each cell. - - Ignoring excess dimensions/components does not cause an error; validation errors occur only when the number is exactly **1**. operationId: startImportCellsMultipart requestBody: content: