__filename__ = "migrate.py" __author__ = "Bob Mottram" __license__ = "AGPL3+" __version__ = "1.1.0" __maintainer__ = "Bob Mottram" __email__ = "bob@freedombone.net" __status__ = "Production" import os def migrateFollows(followFilename: str, oldHandle: str, newHandle: str) -> None: """Changes a handle within following or followers list """ if not os.path.isfile(followFilename): return if oldHandle not in open(followFilename).read(): return followData = None with open(followFilename, 'r') as followFile: followData = followFile.read() if not followData: return newFollowData = followData.replace(oldHandle, newHandle) if followData == newFollowData: return with open(followFilename, 'w') as followFile: followFile.write(newFollowData) def migrateAccount(baseDir: str, oldHandle: str, newHandle: str) -> None: """If a followed account changes then this modifies the following and followers lists for each account accordingly """ if oldHandle.startswith('@'): oldHandle = oldHandle[1:] if '@' not in oldHandle: return if newHandle.startswith('@'): newHandle = newHandle[1:] if '@' not in newHandle: return # update followers and following lists for each account for subdir, dirs, files in os.walk(baseDir + '/accounts'): for handle in dirs: if '@' in handle: accountDir = baseDir + '/accounts/' + handle followFilename = accountDir + '/following.txt' migrateFollows(followFilename, oldHandle, newHandle) followFilename = accountDir + '/followers.txt' migrateFollows(followFilename, oldHandle, newHandle)