Example #1
0
def _merge_item(d, key, value, overwrite=True, concat=False):
    if key in d:
        item = d.get(key, None)
        if type_util.is_dict(item) and type_util.is_dict(value):
            _merge_dict(item, value, overwrite=overwrite, concat=concat)
        elif concat and type_util.is_list(item) and type_util.is_list(value):
            item += value
        elif overwrite:
            d[key] = value
    else:
        d[key] = value
 def _get_by_keys(self, keys, default=None):
     parent, key, _ = keylist_util.get_item(self, keys)
     if type_util.is_dict(parent):
         return parent.get(key, default)
     elif type_util.is_list(parent):
         return parent[key]
     return default
 def _contains_by_keys(self, keys):
     parent, _, _ = keylist_util.get_item(self, keys)
     if type_util.is_dict(parent):
         return True
     elif type_util.is_list(parent):
         return True
     return False
 def _getitem_by_keys(self, keys):
     parent, key, _ = keylist_util.get_item(self, keys)
     if type_util.is_dict(parent):
         return parent[key]
     elif type_util.is_list(parent):
         return parent[key]
     raise KeyError
 def _getitem_by_keys(self, keys):
     parent, key, _ = keylist_util.get_item(self, keys)
     if type_util.is_dict(parent):
         return parent[key]
     elif type_util.is_list(parent):
         return parent[key]
     raise KeyError('Invalid keys: "{}"'.format(keys))
Example #6
0
def _get_item_key_and_value(item, key):
    if type_util.is_list(item):
        index = _get_index(key)
        if index is not None:
            return (index, item[index], )
    elif type_util.is_dict(item):
        return (key, item[key], )
    raise KeyError('Invalid key: "{}"'.format(key))
 def _pop_by_keys(self, keys, *args):
     parent, key, _ = keylist_util.get_item(self, keys)
     if type_util.is_dict(parent):
         return parent.pop(key, *args)
     elif type_util.is_list(parent):
         return parent.pop(key)
     if args:
         return args[0]
     raise KeyError
def _parse_list(val, separator=None):
    serializer = JSONSerializer()
    try:
        l = serializer.decode(val)
        if type_util.is_list(l):
            return l
    except Exception:
        if separator:
            l = list(val.split(separator))
            return l
    return None
Example #9
0
def groupby(items, key):
    if not type_util.is_list(items):
        raise ValueError('items should be a list of dicts.')
    items_grouped = {}
    for item in items:
        if not type_util.is_dict(item):
            raise ValueError('item should be a dict.')
        group = item.get(key)
        if group not in items_grouped:
            items_grouped[group] = []
        items_grouped[group].append(item.copy())
    return items_grouped
Example #10
0
 def _pop_by_keys(self, keys, *args):
     parent, key, _ = keylist_util.get_item(self, keys)
     if type_util.is_dict(parent):
         return parent.pop(key, *args)
     elif type_util.is_list(parent):
         return parent.pop(key)
     elif type_util.is_tuple(parent):
         # raise the standard TypeError
         del parent[key]
     if args:
         return args[0]
     raise KeyError('Invalid keys: "{}"'.format(keys))
def _parse_list(val, separator=None):
    if val.startswith('{') and val.endswith('}') or val.startswith(
            '[') and val.endswith(']'):
        try:
            serializer = JSONSerializer()
            l = serializer.decode(val)
            if type_util.is_list(l):
                return l
            return None
        except Exception:
            pass
    if separator:
        l = list(val.split(separator))
        return l
    return None
Example #12
0
 def _decode(s, format, **kwargs):
     try:
         content = io_util.read_content(s)
         # decode content using the given format
         data = io_util.decode(content, format, **kwargs)
         if type_util.is_dict(data):
             return data
         elif type_util.is_list(data):
             # force list to dict
             return {'values': data}
         else:
             raise ValueError(
                 'Invalid data type: {}, expected dict or list.'.format(
                     type(data)))
     except Exception as e:
         raise ValueError(
             'Invalid data or url or filepath argument: {}\n{}'.format(
                 s, e))
Example #13
0
def _get_keylist_for_value(value, parent_keys, indexes):
    if type_util.is_dict(value):
        return _get_keylist_for_dict(value, parent_keys, indexes)
    elif type_util.is_list(value) and indexes:
        return _get_keylist_for_list(value, parent_keys, indexes)
    return []