epicyon/migrate.py

54 lines
1.7 KiB
Python
Raw Normal View History

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