baltic icon indicating copy to clipboard operation
baltic copied to clipboard

loadJSON needs to be updated for the new nextstrain json format

Open sidneymbell opened this issue 4 years ago • 2 comments

sidneymbell avatar Aug 07 '20 22:08 sidneymbell

I have been using baltic 0.1.1 and if I use bt.loadJSON() as previously used in 0.1.0 I get an error regarding the metadata. For an example of when this happens: nx_tree = json.load(open(path, 'r')) tree = nx_tree['tree'] # tree data meta = nx_tree['meta'] # metadata json_translation={'absoluteTime':lambda k: k.traits['node_attrs']['num_date']['value'],'name':'name'} json_meta={'file':meta,'traitName':'region'} bt_tree=bt.loadJSON(tree,json_translation,json_meta) which results in the following error:

Traceback (most recent call last): File "C:/Users/28Cha/AppData/Roaming/JetBrains/PyCharmCE2020.2/scratches/scratch_7.py", line 39, in bt_tree=bt.loadJSON(tree,json_translation,json_meta) ## give loadJSON the name of the tree file, the translation dictionary and (optionally) the meta file File "C:\Users\28Cha\Documents\Python\venv\lib\site-packages\baltic\baltic.py", line 1288, in loadJSON json_meta=auspice_json['meta'] KeyError: 'meta'

If I run the bt_tree=bt.loadJSON(nx_tree,json_translation,json_meta) it runs, but becomes a tuple, which makes it hard to work with.

colejensen avatar Sep 07 '20 15:09 colejensen

Hi Cole,

I believe the issue you're having has to do with the outdated notebooks on here. Up until a few months ago auspice JSONs came in at least two parts - a meta and a tree file which were then merged into a single JSON file (v2 auspice JSON format). The loadJSON function assumes you're giving it the new v2 auspice JSON that includes both tree and meta parts in a single JSON and after parsing spits them out as separate entities (baltic tree object and meta dictionary, hence the tuple) because there's information in the meta part that wouldn't make sense as part of the baltic tree object. You can simply unpack these in your function call like this:

bt_tree,meta=bt.loadJSON(nx_tree,json_translation,json_meta)

evogytis avatar Sep 07 '20 17:09 evogytis