def cleanup():
    """Saves all the open databases to JSON so that the kernel can be shut down
    without losing in-memory collections.
    """
    failed = {}
    success = []
    for dbname, db in dbs.items():
        try:
            #Force the database save, even if the time hasn't elapsed yet.
            db.save(True)
            success.append(dbname)
        except: # pragma: no cover
            import sys, traceback
            xcls, xerr = sys.exc_info()[0:2]
            failed[dbname] = traceback.format_tb(sys.exc_info()[2])

    for sdb in success:
        if writeable:
            msg.okay("Project {0}.{1} saved successfully.".format(*sdb), 0)
    for fdb, tb in failed.items(): # pragma: no cover
        msg.err("Project {1}.{2} save failed:\n{0}".format(tb, *fdb),
                prefix=False)
def cleanup ( ) : failed = { } success = [ ] for dbname , db in dbs . items ( ) : try : db . save ( True ) success . append ( dbname ) except : import sys , traceback xcls , xerr = sys . exc_info ( ) [ 0 : 2 ] failed [ dbname ] = traceback . format_tb ( sys . exc_info ( ) [ 2 ] ) for sdb in success : if writeable : msg . okay ( "Project {0}.{1} saved successfully." . format ( * sdb ) , 0 ) for fdb , tb in failed . items ( ) : msg . err ( "Project {1}.{2} save failed:\n{0}" . format ( tb , * fdb ) , prefix = False )
Saves all the open databases to JSON so that the kernel can be shut down
    without losing in-memory collections.