import copy

class DataTree(object):

    def __init__(self, data = {}, key = None, parent = None):
        self.content = copy.deepcopy(data)
        self.parent = parent
        self.key = key

    @staticmethod
    def _split(path):
        s = path.split('/')
        while s and not s[0]:
            del s[0]
        while s and not s[-1]:
            del s[-1]
        l = len(s)
        i = 0
        while i < l:
            if s[i].endswith('\\'):
                s[i] = s[i][:-1] + '/' + s[i+1]
                del s[i+1]
                l = l - 1
            i = i + 1
        return s
    
    def __setitem__(self, path, value):
        item = self.content
        _path = DataTree._split(path)
        for i in _path[:-1]:
            if not item.has_key(i):
                item[i] = DataTree( {}, i, self )
            item = item[i]
        item[_path[-1]] = value
        item[_path[-1]].parent = self
    
    def __getitem__(self, path):
        item = self.content
        _path = DataTree._split(path)
        for i in _path:
            item = item[i]
        return item
    
    def has_key(self, path):
        item = self.content
        _path = DataTree._split(path)
        for i in _path:
            if item.has_key(i):
                item = item[i]
            else:
                return False
        return True

    def items(self):
        return self.content.items()

    def keys(self):
        return self.content.keys()

    def values(self):
        return self.content.values()

    def __str__(self):
        return str(self.content)

