11#!/usr/bin/env python3
22import yaml
3- # import logging
43import argparse
54import os
65import sys
@@ -52,13 +51,29 @@ def __call__(self, parser, namespace, values, option_string=None):
5251
5352# Parser stuff
5453def isRemoteDataset (cfg_dataset , name ):
54+ """Given a dataset file configuration and a dataset name, return True
55+ if the dataset is remote and False otherwise.
56+ """
5557 remote_info = cfg_dataset [name ]
5658 if isinstance (remote_info , list ):
57- for prop in (e ['url' ] for e in remote_info if isinstance (e , dict ) and 'url' in e ):
59+ merged = {}
60+ for d in remote_info :
61+ if isinstance (d , dict ):
62+ merged = merge_two_dicts (merged , d )
63+
64+ # A remote dataset needs to define an url and a local dir
65+ if 'url' in merged and 'local_dir' in merged :
5866 return True
5967 return False
6068
6169
70+ def merge_two_dicts (x , y ):
71+ """Given two dictionaries, merge them into a new dict as a shallow copy."""
72+ z = x .copy ()
73+ z .update (y )
74+ return z
75+
76+
6277# transform remote dataset info in dictionary
6378def getRemoteDataset (cfg_dataset , name ):
6479 remote_dataset = {}
@@ -72,8 +87,11 @@ def getRemoteDataset(cfg_dataset, name):
7287
7388 # at this point, subsets is a list of dicts
7489 # we want it to be a dictionary
75- remote_dataset ['subsets' ] = \
76- reduce (lambda a , b : dict (a , ** b ), remote_dataset ['subsets' ])
90+ if 'subsets' in remote_dataset :
91+ remote_dataset ['subsets' ] = \
92+ reduce (lambda a , b : dict (a , ** b ), remote_dataset ['subsets' ])
93+ else :
94+ remote_dataset ['subsets' ] = {}
7795
7896 return remote_dataset
7997
0 commit comments