История изменений
Исправление router, (текущая версия) :
Пропускает словари и списки, но идею понял
Плюс похоже что питон очень любит рекурсию в структурах данных, пришлось ограничить максимальную глубину рекурсии. Потом добавлю запоминание адресов уже обработанных структур в дополнение к maxdepth
def obj2dict(obj,maxdepth):
obj_type = type(obj).__name__
result = {}
if maxdepth <= 0:
return obj
maxdepth -= 1
if ( obj_type == 'instance' ) :
for field, value in obj.__dict__.items():
result[field] = obj2dict(value, maxdepth)
elif ( obj_type == 'dict' ):
for field in obj.keys():
result[field] = obj2dict( obj[field], maxdepth )
elif ( obj_type == 'list' ):
result = [];
for item in obj:
result.append( obj2dict( item, maxdepth))
elif ( obj_type in [ 'NoneType', 'bool', 'str', 'int' ] ) :
result = obj
elif ( obj_type in ['classobj'] ):
result = str(obj)
else:
result = {
'type' : obj_type,
'str' : str(obj),
'addr' : hex(id(obj)),
}
return result
Исправление router, :
Пропускает словари и списки, но идею понял
Плюс похоже что питон очень любит рекурсию в структурах данных, пришлось ограничить максимальную глубину рекурсии. Потом добавлю запоминание адресов уже обработанных структур в дополнение к maxdepth
def obj2dict(obj,maxdepth):
obj_type = type(obj).__name__
result = {}
if maxdepth <= 0:
return obj
maxdepth -= 1
if ( obj_type == 'instance' ) :
for field, value in obj.__dict__.items():
result[field] = obj2dict(value, maxdepth)
elif ( obj_type == 'dict' ):
for field in obj.keys():
result[field] = obj2dict( obj[field], maxdepth )
elif ( obj_type == 'list' ):
result = [];
for item in obj:
result.append( obj2dict( item, maxdepth))
elif ( obj_type in [ 'NoneType', 'bool', 'str', 'int' ] ) :
result = obj
else:
result = {
'type' : obj_type,
'str' : str(obj),
'addr' : hex(id(obj)),
}
return result
Исходная версия router, :
Пропускает словари и списки, но идею понял
Плюс похоже что питон очень любит рекурсию в структурах данных, пришлось ограничить максимальную глубину рекурсии. Потом добавлю запоминание адресов уже обработанных структур в дополнение к maxdepth
def obj2dict(obj,maxdepth):
obj_type = type(obj).__name__
result = {}
if maxdepth <= 0:
return obj
maxdepth -= 1
if ( obj_type == 'instance' ) :
for field, value in obj.__dict__.items():
result[field] = obj2dict(value, maxdepth)
elif ( obj_type == 'dict' ):
for field in obj.keys():
result[field] = obj2dict( obj[field], maxdepth )
elif ( obj_type == 'list' ):
result = [];
for item in obj:
result.append( obj2dict( item, maxdepth))
elif ( obj_type in [ 'NoneType', 'bool' ] ) :
result = obj
else:
result = {
'type' : obj_type,
'str' : str(obj),
'addr' : hex(id(obj)),
}
return result