Skip to content

Commit

Permalink
feat: adjust to ClinVar API change (Nov 2022) (#47) (#48)
Browse files Browse the repository at this point in the history
  • Loading branch information
holtgrewe committed Nov 29, 2022
1 parent 0c7e0f9 commit 0e4fb50
Show file tree
Hide file tree
Showing 8 changed files with 109 additions and 124 deletions.
25 changes: 15 additions & 10 deletions clinvar_api/models/sub_payload.py
Expand Up @@ -261,11 +261,16 @@ def to_msg(self) -> msg.SubmissionCitation:

@attrs.define(frozen=True)
class SubmissionAssertionCriteria:
citation: SubmissionCitation
method: str
db: typing.Optional[CitationDb] = None
id: typing.Optional[str] = None
url: typing.Optional[str] = None

def to_msg(self) -> msg.SubmissionAssertionCriteria:
return msg.SubmissionAssertionCriteria(citation=self.citation.to_msg(), method=self.method)
return msg.SubmissionAssertionCriteria(
db=self.db,
id=self.id,
url=self.url,
)


@attrs.define(frozen=True)
Expand Down Expand Up @@ -376,8 +381,6 @@ class SubmissionClinvarSubmission:
condition_set: SubmissionConditionSet
observed_in: typing.List[SubmissionObservedIn]
record_status: RecordStatus
release_status: ReleaseStatus
assertion_criteria: typing.Optional[SubmissionAssertionCriteria] = None
clinvar_accession: typing.Optional[str] = None
compound_heterozygote_set: typing.Optional[SubmissionCompoundHeterozygoteSet] = None
diplotype_set: typing.Optional[SubmissionDiplotypeSet] = None
Expand All @@ -392,9 +395,6 @@ class SubmissionClinvarSubmission:
variant_set: typing.Optional[SubmissionVariantSet] = None

def to_msg(self) -> msg.SubmissionClinvarSubmission:
assertion_criteria = None
if self.assertion_criteria:
assertion_criteria = self.assertion_criteria.to_msg()
compound_heterozygote_set = None
if self.compound_heterozygote_set:
compound_heterozygote_set = self.compound_heterozygote_set.to_msg()
Expand All @@ -421,8 +421,6 @@ def to_msg(self) -> msg.SubmissionClinvarSubmission:
conditionSet=self.condition_set.to_msg(),
observedIn=[msg_observed_in.to_msg() for msg_observed_in in self.observed_in],
recordStatus=self.record_status,
releaseStatus=self.release_status,
assertionCriteria=assertion_criteria,
clinvarAccession=self.clinvar_accession,
compoundHeterozygoteSet=compound_heterozygote_set,
diplotypeSet=diplotype_set,
Expand All @@ -438,12 +436,17 @@ def to_msg(self) -> msg.SubmissionClinvarSubmission:

@attrs.define(frozen=True)
class SubmissionContainer:
assertion_criteria: typing.Optional[SubmissionAssertionCriteria] = None
behalf_org_id: typing.Optional[int] = None
clinvar_deletion: typing.Optional[SubmissionClinvarDeletion] = None
clinvar_submission: typing.Optional[typing.List[SubmissionClinvarSubmission]] = None
clinvar_submission_release_status: typing.Optional[ReleaseStatus] = None
submission_name: typing.Optional[str] = None

def to_msg(self) -> msg.SubmissionContainer:
assertion_criteria = None
if self.assertion_criteria:
assertion_criteria = self.assertion_criteria.to_msg()
clinvar_deletion = None
if self.clinvar_deletion:
clinvar_deletion = self.clinvar_deletion.to_msg()
Expand All @@ -453,8 +456,10 @@ def to_msg(self) -> msg.SubmissionContainer:
msg_submission.to_msg() for msg_submission in self.clinvar_submission
]
return msg.SubmissionContainer(
assertionCriteria=assertion_criteria,
behalfOrgID=self.behalf_org_id,
clinvarDeletion=clinvar_deletion,
clinvarSubmission=clinvar_submission,
clinvarSubmissionReleaseStatus=self.clinvar_submission_release_status,
submissionName=self.submission_name,
)
9 changes: 5 additions & 4 deletions clinvar_api/msg/sub_payload.py
Expand Up @@ -302,8 +302,9 @@ class SubmissionCitation:

@attrs.define(frozen=True)
class SubmissionAssertionCriteria:
citation: SubmissionCitation
method: str
db: typing.Optional[CitationDb] = None
id: typing.Optional[str] = None
url: typing.Optional[str] = None


@attrs.define(frozen=True)
Expand Down Expand Up @@ -357,8 +358,6 @@ class SubmissionClinvarSubmission:
conditionSet: SubmissionConditionSet
observedIn: typing.List[SubmissionObservedIn]
recordStatus: RecordStatus
releaseStatus: ReleaseStatus
assertionCriteria: typing.Optional[SubmissionAssertionCriteria] = None
clinvarAccession: typing.Optional[str] = None
compoundHeterozygoteSet: typing.Optional[SubmissionCompoundHeterozygoteSet] = None
diplotypeSet: typing.Optional[SubmissionDiplotypeSet] = None
Expand All @@ -377,7 +376,9 @@ class SubmissionClinvarSubmission:
class SubmissionContainer:
"""Representation of the container for a submission."""

assertionCriteria: typing.Optional[SubmissionAssertionCriteria] = None
behalfOrgID: typing.Optional[int] = None
clinvarDeletion: typing.Optional[SubmissionClinvarDeletion] = None
clinvarSubmission: typing.Optional[typing.List[SubmissionClinvarSubmission]] = None
clinvarSubmissionReleaseStatus: typing.Optional[ReleaseStatus] = None
submissionName: typing.Optional[str] = None
114 changes: 51 additions & 63 deletions clinvar_api/schemas/submission_schema.json
Expand Up @@ -2,6 +2,49 @@
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"assertionCriteria": {
"type": "object",
"description": "\"Assertion criteria\" refers to documentation of the criteria that your organization uses to classify variants. It can be provided as a database identifier, like a PubMed ID, or a file that is submitted to ClinVar, but not both. Only one document may be provided for assertion criteria. These fields are equivalent to the \"Assertion method citation\" column in the spreadsheet. Note that only one single assertion criteria (a citation or an electronic document) may be provided for a submission. This assertion criteria will be applied to all interpretations in the submission. For assertion criteria submitted as a database identifier, an assertion criteria name will be calculated based on the citation details. For assertion criteria submitted as a file, you may provide an assertion criteria name during file upload on your Organization page in Submission Portal.",
"properties": {
"db": {
"type": "string",
"enum": [
"PubMed",
"DOI",
"pmc"
]
},
"id": {
"type": "string",
"errors": {
"pattern": "The identifier value is considered an invalid citation. Please provide only one identifier as the citation for your assertion criteria."
},
"pattern": "^[^;]+$"
},
"url": {
"type": "string",
"description": " The URL for a file that you have already submitted to ClinVar as assertion criteria. If you need to find this URL or if you need to submit new assertion criteria, please go to the \"View/add assertion criteria files\" tab on your Organization page in Submission Portal.",
"errors": {
"pattern": "The URL for assertion criteria must be the URL provided by ClinVar. If you need to find this URL or if you need to submit new assertion criteria, Please go to the \"View/add assertion criteria files\" tab on your Organization page in Submission Portal."
},
"pattern": "^https://[qd]?submit.ncbi.nlm.nih.gov/(api/2.0/files|ft/byid)/.*"
}
},
"additionalProperties": false,
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"db",
"id"
]
}
]
},
"behalfOrgID": {
"type": "integer",
"description": "Optional. When submitting on behalf of another organization, this specifies the other organization's ID",
Expand Down Expand Up @@ -53,66 +96,11 @@
"description": "Submissions to ClinVar are considered 'variant-level' (not case-level or patient-specific), because they are focused on the variant or set of variants that was interpreted. One of variantSet, haplotypeSet, haplotypeSingleVariantSet, phaseUnknownSet, distinctChromosomesSet, diplotypeSet, compoundHeterozygoteSet is required to define the variant or set of variants that was interpreted.",
"required": [
"recordStatus",
"releaseStatus",
"clinicalSignificance",
"observedIn",
"conditionSet"
],
"properties": {
"assertionCriteria": {
"type": "object",
"required": [
"method",
"citation"
],
"properties": {
"citation": {
"type": "object",
"description": "\"Assertion criteria\" refers to documentation of the criteria that your organization uses to classify variants. It can be provided as a database identifier, like a PubMed ID, or a file that is submitted to ClinVar, but not both. Only one document may be provided for assertion criteria. These fields are equivalent to the \"Assertion method citation\" column in the spreadsheet.",
"properties": {
"db": {
"type": "string",
"enum": [
"PubMed",
"BookShelf",
"DOI",
"pmc"
]
},
"id": {
"type": "string"
},
"url": {
"type": "string",
"description": "The URL for a file that you have already submitted to ClinVar as assertion criteria.",
"errors": {
"pattern": "The URL for assertion criteria must be the URL provided by ClinVar. Contact clinvar@ncbi.nlm.nih.gov if you need to find this URL or if you need to submit new assertion criteria."
},
"pattern": "^https://[qd]?submit.ncbi.nlm.nih.gov/ft/byid/.*"
}
},
"additionalProperties": false,
"oneOf": [
{
"required": [
"url"
]
},
{
"required": [
"db",
"id"
]
}
]
},
"method": {
"type": "string",
"description": "A name for your assertion criteria is required. We'll use the file name if a file is cited so the submitter does not need to provide a separate name. The submitter must provide a name if a database identifier is cited. This field is equivalent to the \"Assertion method\" column in the spreadsheet."
}
},
"additionalProperties": false
},
"clinicalSignificance": {
"type": "object",
"description": "Clinical significance",
Expand Down Expand Up @@ -424,14 +412,6 @@
"update"
]
},
"releaseStatus": {
"type": "string",
"description": "\"hold until published\" allows a temporary hold on data being presented publicly. If no value is provided, the default is public.",
"enum": [
"public",
"hold until published"
]
},
"variantSet": {
"$ref": "#/definitions/variantSetType"
}
Expand Down Expand Up @@ -511,6 +491,14 @@
}
}
},
"clinvarSubmissionReleaseStatus": {
"type": "string",
"description": "\"hold until published\" allows a temporary hold on submission data being presented publicly. If no value is provided, the default is public.",
"enum": [
"public",
"hold until published"
]
},
"submissionName": {
"type": "string",
"description": "Optional. The name for this submission. If not provided, it will be the submission id."
Expand Down
2 changes: 1 addition & 1 deletion clinvar_this/batches.py
Expand Up @@ -192,7 +192,7 @@ def submit(config: config.Config, name: str, *, use_testing: bool = False, dry_r
)
logger.info(
(
"The next step is to run ``clinvar-this submission retrieve %s`` and wait until you get a "
"The next step is to run ``clinvar-this batch retrieve %s`` and wait until you get a "
"final success or error response"
),
name,
Expand Down
22 changes: 9 additions & 13 deletions clinvar_this/io/tsv.py
Expand Up @@ -22,7 +22,6 @@
ReleaseStatus,
SubmissionAssertionCriteria,
SubmissionChromosomeCoordinates,
SubmissionCitation,
SubmissionClinicalSignificance,
SubmissionClinvarSubmission,
SubmissionCondition,
Expand Down Expand Up @@ -260,6 +259,14 @@ def record_condition(record: TsvRecord):
release_status = batch_metadata.release_status or BATCH_METADATA_DEFAULTS["release_status"]

return SubmissionContainer(
assertion_criteria=SubmissionAssertionCriteria(
# The following should come from the profile, cf.
#
# https://github.com/bihealth/clinvar-this/issues/36
db=CitationDb.PUBMED,
id="25741868",
),
clinvar_submission_release_status=release_status,
clinvar_submission=[
SubmissionClinvarSubmission(
local_id=str(_uuid4_if_falsy()),
Expand All @@ -277,17 +284,6 @@ def record_condition(record: TsvRecord):
mode_of_inheritance=record.inheritance,
),
record_status=RecordStatus.NOVEL,
release_status=release_status,
assertion_criteria=SubmissionAssertionCriteria(
# The following should come from the profile, cf.
#
# https://github.com/bihealth/clinvar-this/issues/36
citation=SubmissionCitation(
db=CitationDb.PUBMED,
id="25741868",
),
method="ACMG Assertion Criteria",
),
variant_set=SubmissionVariantSet(
variant=[
SubmissionVariant(
Expand All @@ -304,7 +300,7 @@ def record_condition(record: TsvRecord):
),
)
for record in tsv_records
]
],
)


Expand Down
4 changes: 2 additions & 2 deletions tests/clinvar_api/conftest.py
Expand Up @@ -481,6 +481,7 @@ def data_summary_response_error_all():
@pytest.fixture
def data_submission_snv():
return {
"clinvarSubmissionReleaseStatus": "hold until published",
"clinvarSubmission": [
{
"assertionCriteria": {
Expand Down Expand Up @@ -546,7 +547,6 @@ def data_submission_snv():
}
],
"recordStatus": "novel",
"releaseStatus": "hold until published",
"variantSet": {
"variant": [
{
Expand All @@ -562,5 +562,5 @@ def data_submission_snv():
]
},
}
]
],
}

0 comments on commit 0e4fb50

Please sign in to comment.