Skip to content

Adding variant track does not work #21

@tirohia

Description

@tirohia

Bug report

unable to add a variant track to an existing browser

Bug summary

Create browser in previous code block.
Create track dict for a variant, taking structure from here, though have converted all the field names to strings so as to form a legitimate dictionary.
Code block fails with :

TraitError: The 'tracks' trait of an IgvBrowser instance contains which expected <traitlets.traitlets.List object at 0x2aaae2818a90>, not the str 'The "type" trait is read-only.'.

from ipyigv import IgvBrowser as Browser, PUBLIC_GENOMES
from ipyigv.options import Track, ReferenceGenome

genomeToUse = ReferenceGenome(**PUBLIC_GENOMES.hg38)
browser = Browser(genome=genomeToUse)
browser


###################### New code block ####################

trackDict = {
  'type': "variant",
  'format': "vcf",
  'url': "https://s3.amazonaws.com/1000genomes/release/20130502/ALL.chr22.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz",
  'indexURL': "https://s3.amazonaws.com/1000genomes/release/20130502/ALL.chr22.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz.tbi",
  'name': "1KG variants (chr22)",
  'squishedCallHeight': 1,
  'expandedCallHeight': 4,
  'displayMode': "squished",
  'visibilityWindow': 1000
}

Actual outcome

---------------------------------------------------------------------------
TraitError                                Traceback (most recent call last)
<ipython-input-25-2f6618847406> in <module>
     11 }
     12 
---> 13 browser.add_track(trackDict)

~/.local/lib/python3.8/site-packages/ipyigv/ipyigv.py in add_track(self, track)
     72         # List subscript does not work for empty List, so handling this case manually.
     73         if len(self.tracks) == 0:
---> 74             self.tracks = [track]
     75         else:
     76             self.tracks = self.tracks[:] + [track]

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in __set__(self, obj, value)
    602             raise TraitError('The "%s" trait is read-only.' % self.name)
    603         else:
--> 604             self.set(obj, value)
    605 
    606     def _validate(self, obj, value):

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in set(self, obj, value)
    576 
    577     def set(self, obj, value):
--> 578         new_value = self._validate(obj, value)
    579         try:
    580             old_value = obj._trait_values[self.name]

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in _validate(self, obj, value)
    608             return value
    609         if hasattr(self, 'validate'):
--> 610             value = self.validate(obj, value)
    611         if obj._cross_validation_lock is False:
    612             value = self._cross_validate(obj, value)

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in validate(self, obj, value)
   2498             return value
   2499 
-> 2500         value = self.validate_elements(obj, value)
   2501 
   2502         return value

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in validate_elements(self, obj, value)
   2637             self.length_error(obj, value)
   2638 
-> 2639         return super(List, self).validate_elements(obj, value)
   2640 
   2641 

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in validate_elements(self, obj, value)
   2510                 v = self._trait._validate(obj, v)
   2511             except TraitError as error:
-> 2512                 self.error(obj, v, error)
   2513             else:
   2514                 validated.append(v)

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in error(self, obj, value, error, info)
    674                         "expected %s, not %s." % (self.name, chain,
    675                         error.args[1], describe("the", error.args[0])),)
--> 676             raise error
    677         else:
    678             # this trait caused an error

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in validate_elements(self, obj, value)
   2508         for v in value:
   2509             try:
-> 2510                 v = self._trait._validate(obj, v)
   2511             except TraitError as error:
   2512                 self.error(obj, v, error)

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in _validate(self, obj, value)
    608             return value
    609         if hasattr(self, 'validate'):
--> 610             value = self.validate(obj, value)
    611         if obj._cross_validation_lock is False:
    612             value = self._cross_validate(obj, value)

~/.local/lib/python3.8/site-packages/ipywidgets/widgets/trait_types.py in validate(self, obj, value)
    161     def validate(self, obj, value):
    162         if isinstance(value, dict):
--> 163             return super(InstanceDict, self).validate(obj, self.klass(**value))
    164         else:
    165             return super(InstanceDict, self).validate(obj, value)

~/.local/lib/python3.8/site-packages/ipywidgets/widgets/widget.py in __init__(self, **kwargs)
    410         """Public constructor"""
    411         self._model_id = kwargs.pop('model_id', None)
--> 412         super(Widget, self).__init__(**kwargs)
    413 
    414         Widget._call_widget_constructed(self)

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in __init__(self, *args, **kwargs)
   1075             for key, value in kwargs.items():
   1076                 if self.has_trait(key):
-> 1077                     setattr(self, key, value)
   1078                 else:
   1079                     # passthrough args that don't set traits to super

~/.local/lib/python3.8/site-packages/traitlets/traitlets.py in __set__(self, obj, value)
    600         """
    601         if self.read_only:
--> 602             raise TraitError('The "%s" trait is read-only.' % self.name)
    603         else:
    604             self.set(obj, value)

TraitError: The 'tracks' trait of an IgvBrowser instance contains  which expected <traitlets.traitlets.List object at 0x2aaae2818a90>, not the str 'The "type" trait is read-only.'.

Expected outcome

A track added to the browser

Version Info
jupyter lab 2.2.4
python 3.8.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions