Skip to content
This repository was archived by the owner on Jan 24, 2018. It is now read-only.

Commit a8814a5

Browse files
committed
Make referencesets optional for variant sets
Allow nullity for referencesetid field in models Safely access the referenceset name in a few places
1 parent 0276ab0 commit a8814a5

File tree

3 files changed

+41
-21
lines changed

3 files changed

+41
-21
lines changed

ga4gh/server/cli/repomanager.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -275,16 +275,19 @@ def addVariantSet(self):
275275
variantSet.populateFromFile(dataUrls, indexFiles)
276276
# Get the reference set that is associated with the variant set.
277277
referenceSetName = self._args.referenceSetName
278-
if referenceSetName is None:
279-
# Try to find a reference set name from the VCF header.
280-
referenceSetName = variantSet.getVcfHeaderReferenceSetName()
281-
if referenceSetName is None:
282-
raise exceptions.RepoManagerException(
283-
"Cannot infer the ReferenceSet from the VCF header. Please "
284-
"specify the ReferenceSet to associate with this "
285-
"VariantSet using the --referenceSetName option")
286-
referenceSet = self._repo.getReferenceSetByName(referenceSetName)
287-
variantSet.setReferenceSet(referenceSet)
278+
referenceSet = None
279+
if referenceSetName is not None:
280+
referenceSet = self._repo.getReferenceSetByName(referenceSetName)
281+
elif variantSet.getVcfHeaderReferenceSetName() is not None:
282+
try:
283+
referenceSet = self._repo.getReferenceSetByName(
284+
variantSet.getVcfHeaderReferenceSetName())
285+
except exceptions.ReferenceSetNameNotFoundException as e:
286+
# It's a lucky shot to get a reference set by name using the
287+
# VCF header.
288+
pass
289+
if referenceSet is not None:
290+
variantSet.setReferenceSet(referenceSet)
288291
variantSet.setAttributes(json.loads(self._args.attributes))
289292
# Now check for annotations
290293
annotationSets = []

ga4gh/server/datarepo.py

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,13 @@ def printSummary(self):
221221
sep="\t")
222222
print("\tVariantSets:")
223223
for variantSet in dataset.getVariantSets():
224+
referenceSetName = ""
225+
if variantSet.getReferenceSet() is not None:
226+
referenceSetName = \
227+
variantSet.getReferenceSet().getLocalId()
224228
print(
225229
"\t", variantSet.getLocalId(),
226-
variantSet.getReferenceSet().getLocalId(),
230+
referenceSetName,
227231
variantSet.getId(),
228232
sep="\t")
229233
if variantSet.getNumVariantAnnotationSets() > 0:
@@ -235,17 +239,25 @@ def printSummary(self):
235239
vas.getOntology().getName(), sep="\t")
236240
print("\tFeatureSets:")
237241
for featureSet in dataset.getFeatureSets():
242+
referenceSetName = ""
243+
if featureSet.getReferenceSet() is not None:
244+
referenceSetName = \
245+
featureSet.getReferenceSet().getLocalId()
238246
print(
239247
"\t", featureSet.getLocalId(),
240-
featureSet.getReferenceSet().getLocalId(),
248+
referenceSetName,
241249
featureSet.getOntology().getName(),
242250
featureSet.getId(),
243251
sep="\t")
244252
print("\tContinuousSets:")
245253
for continuousSet in dataset.getContinuousSets():
254+
referenceSetName = ""
255+
if continuousSet.getReferenceSet() is not None:
256+
referenceSetName = \
257+
continuousSet.getReferenceSet().getLocalId()
246258
print(
247259
"\t", continuousSet.getLocalId(),
248-
continuousSet.getReferenceSet().getLocalId(),
260+
referenceSetName,
249261
continuousSet.getId(),
250262
sep="\t")
251263
print("\tPhenotypeAssociationSets:")
@@ -1016,11 +1028,14 @@ def insertVariantSet(self, variantSet):
10161028
[protocol.toJsonDict(metadata) for metadata in
10171029
variantSet.getMetadata()])
10181030
urlMapJson = json.dumps(variantSet.getReferenceToDataUrlIndexMap())
1031+
referenceSetId = None
1032+
if variantSet.getReferenceSet() is not None:
1033+
referenceSetId = variantSet.getReferenceSet().getId()
10191034
try:
10201035
m.Variantset.create(
10211036
id=variantSet.getId(),
10221037
datasetid=variantSet.getParentContainer().getId(),
1023-
referencesetid=variantSet.getReferenceSet().getId(),
1038+
referencesetid=referenceSetId,
10241039
name=variantSet.getLocalId(),
10251040
created=datetime.datetime.now(),
10261041
updated=datetime.datetime.now(),
@@ -1035,11 +1050,13 @@ def insertVariantSet(self, variantSet):
10351050
def _readVariantSetTable(self):
10361051
for variantSetRecord in m.Variantset.select():
10371052
dataset = self.getDataset(variantSetRecord.datasetid.id)
1038-
referenceSet = self.getReferenceSet(
1039-
variantSetRecord.referencesetid.id)
10401053
variantSet = variants.HtslibVariantSet(
10411054
dataset, variantSetRecord.name)
1042-
variantSet.setReferenceSet(referenceSet)
1055+
if variantSetRecord.referencesetid is not None:
1056+
referenceSet = self.getReferenceSet(
1057+
variantSetRecord.referencesetid.id)
1058+
variantSet.setReferenceSet(referenceSet)
1059+
10431060
variantSet.populateFromRow(variantSetRecord)
10441061
assert variantSet.getId() == variantSetRecord.id
10451062
# Insert the variantSet into the memory-based object model.

ga4gh/server/repo/models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class Variantset(BaseModel):
9494
metadata = pw.TextField(null=True)
9595
name = pw.TextField()
9696
referencesetid = pw.ForeignKeyField(
97-
db_column='referenceSetId', rel_model=Referenceset, to_field='id')
97+
db_column='referenceSetId', rel_model=Referenceset, to_field='id', null=True)
9898
updated = pw.TextField(null=True)
9999

100100
class Meta:
@@ -138,7 +138,7 @@ class Featureset(BaseModel):
138138
ontologyid = pw.ForeignKeyField(
139139
db_column='ontologyId', rel_model=Ontology, to_field='id')
140140
referencesetid = pw.ForeignKeyField(
141-
db_column='referenceSetId', rel_model=Referenceset, to_field='id')
141+
db_column='referenceSetId', rel_model=Referenceset, to_field='id', null=True)
142142
sourceuri = pw.TextField(
143143
db_column='sourceUri', null=True)
144144

@@ -157,7 +157,7 @@ class ContinuousSet(BaseModel):
157157
info = pw.TextField(null=True)
158158
name = pw.TextField()
159159
referencesetid = pw.ForeignKeyField(
160-
db_column='referenceSetId', rel_model=Referenceset, to_field='id')
160+
db_column='referenceSetId', rel_model=Referenceset, to_field='id', null=True)
161161
sourceuri = pw.TextField(
162162
db_column='sourceUri', null=True)
163163

@@ -270,7 +270,7 @@ class Rnaquantificationset(BaseModel):
270270
info = pw.TextField(null=True)
271271
name = pw.TextField()
272272
referencesetid = pw.ForeignKeyField(
273-
db_column='referenceSetId', rel_model=Referenceset, to_field='id')
273+
db_column='referenceSetId', rel_model=Referenceset, to_field='id', null=True)
274274

275275
class Meta:
276276
db_table = 'RnaQuantificationSet'

0 commit comments

Comments
 (0)