mirror of https://gitlab.com/bashrc2/epicyon
Check for moved actors on daemon start
parent
0243c5579e
commit
8eeae6968b
|
@ -416,6 +416,7 @@ from qrcode import save_domain_qrcode
|
||||||
from importFollowing import run_import_following_watchdog
|
from importFollowing import run_import_following_watchdog
|
||||||
from maps import map_format_from_tagmaps_path
|
from maps import map_format_from_tagmaps_path
|
||||||
from relationships import get_moved_feed
|
from relationships import get_moved_feed
|
||||||
|
from relationships import update_moved_actors
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
@ -22077,6 +22078,8 @@ def run_daemon(max_hashtags: int,
|
||||||
print('Invalid domain: ' + domain)
|
print('Invalid domain: ' + domain)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
update_moved_actors(base_dir, debug)
|
||||||
|
|
||||||
if unit_test:
|
if unit_test:
|
||||||
server_address = (domain, proxy_port)
|
server_address = (domain, proxy_port)
|
||||||
pub_handler = partial(PubServerUnitTest)
|
pub_handler = partial(PubServerUnitTest)
|
||||||
|
|
112
relationships.py
112
relationships.py
|
@ -14,23 +14,27 @@ from utils import get_full_domain
|
||||||
from utils import local_actor_url
|
from utils import local_actor_url
|
||||||
from utils import remove_domain_port
|
from utils import remove_domain_port
|
||||||
from utils import remove_eol
|
from utils import remove_eol
|
||||||
|
from utils import is_account_dir
|
||||||
|
from utils import get_nickname_from_actor
|
||||||
|
from utils import get_domain_from_actor
|
||||||
|
from utils import load_json
|
||||||
|
|
||||||
|
|
||||||
def get_moved_accounts(base_dir: str, nickname: str, domain: str,
|
def get_moved_accounts(base_dir: str, nickname: str, domain: str,
|
||||||
filename: str = 'following.txt') -> {}:
|
filename: str = 'following.txt') -> {}:
|
||||||
"""returns a dict of moved accounts
|
"""returns a dict of moved accounts
|
||||||
"""
|
"""
|
||||||
refollow_filename = base_dir + '/accounts/actors_moved.txt'
|
moved_accounts_filename = base_dir + '/accounts/actors_moved.txt'
|
||||||
if not os.path.isfile(refollow_filename):
|
if not os.path.isfile(moved_accounts_filename):
|
||||||
return {}
|
return {}
|
||||||
refollow_str = ''
|
refollow_str = ''
|
||||||
try:
|
try:
|
||||||
with open(refollow_filename, 'r',
|
with open(moved_accounts_filename, 'r',
|
||||||
encoding='utf-8') as fp_refollow:
|
encoding='utf-8') as fp_refollow:
|
||||||
refollow_str = fp_refollow.read()
|
refollow_str = fp_refollow.read()
|
||||||
except OSError:
|
except OSError:
|
||||||
print('EX: get_moved_accounts unable to read ' +
|
print('EX: get_moved_accounts unable to read ' +
|
||||||
refollow_filename)
|
moved_accounts_filename)
|
||||||
refollow_list = refollow_str.split('\n')
|
refollow_list = refollow_str.split('\n')
|
||||||
refollow_dict = {}
|
refollow_dict = {}
|
||||||
for line in refollow_list:
|
for line in refollow_list:
|
||||||
|
@ -175,3 +179,103 @@ def get_moved_feed(base_dir: str, domain: str, port: int, path: str,
|
||||||
local_actor_url(http_prefix, nickname, domain) + \
|
local_actor_url(http_prefix, nickname, domain) + \
|
||||||
'/moved?page=' + str(last_page)
|
'/moved?page=' + str(last_page)
|
||||||
return following
|
return following
|
||||||
|
|
||||||
|
|
||||||
|
def update_moved_actors(base_dir: str, debug: bool) -> None:
|
||||||
|
"""Updates the file containing moved actors
|
||||||
|
"""
|
||||||
|
actors_cache_dir = base_dir + '/cache/actors'
|
||||||
|
if not os.path.isdir(actors_cache_dir):
|
||||||
|
if debug:
|
||||||
|
print('No cached actors')
|
||||||
|
return
|
||||||
|
|
||||||
|
if debug:
|
||||||
|
print('Updating moved actors')
|
||||||
|
actors_dict = {}
|
||||||
|
for _, _, files in os.walk(actors_cache_dir):
|
||||||
|
for actor_str in files:
|
||||||
|
if not actor_str.endswith('.json'):
|
||||||
|
continue
|
||||||
|
orig_str = actor_str
|
||||||
|
actor_str = actor_str.replace('.json', '').replace('#', '/')
|
||||||
|
nickname = get_nickname_from_actor(actor_str)
|
||||||
|
domain, port = get_domain_from_actor(actor_str)
|
||||||
|
domain_full = get_full_domain(domain, port)
|
||||||
|
handle = nickname + '@' + domain_full
|
||||||
|
actors_dict[handle] = orig_str
|
||||||
|
break
|
||||||
|
|
||||||
|
if debug:
|
||||||
|
if actors_dict:
|
||||||
|
print('Actors dict created')
|
||||||
|
else:
|
||||||
|
print('No cached actors found')
|
||||||
|
|
||||||
|
# get the handles to be checked for movedTo attribute
|
||||||
|
handles_to_check = []
|
||||||
|
for _, dirs, _ in os.walk(base_dir + '/accounts'):
|
||||||
|
for account in dirs:
|
||||||
|
if not is_account_dir(account):
|
||||||
|
continue
|
||||||
|
following_filename = base_dir + '/' + account + '/following.txt'
|
||||||
|
if not os.path.isfile(following_filename):
|
||||||
|
continue
|
||||||
|
following_str = ''
|
||||||
|
try:
|
||||||
|
with open(following_filename, 'r',
|
||||||
|
encoding='utf-8') as fp_foll:
|
||||||
|
following_str - fp_foll.read()
|
||||||
|
except OSError:
|
||||||
|
print('EX: update_moved_actors unable to read ' +
|
||||||
|
following_filename)
|
||||||
|
continue
|
||||||
|
following_list = following_str.split('\n')
|
||||||
|
for handle in following_list:
|
||||||
|
if handle not in handles_to_check:
|
||||||
|
handles_to_check.append(handle)
|
||||||
|
break
|
||||||
|
|
||||||
|
if debug:
|
||||||
|
if handles_to_check:
|
||||||
|
print('All accounts handles list generated')
|
||||||
|
else:
|
||||||
|
print('No accounts are following')
|
||||||
|
|
||||||
|
moved_str = ''
|
||||||
|
for handle in handles_to_check:
|
||||||
|
if not actors_dict.get(handle):
|
||||||
|
continue
|
||||||
|
actor_filename = base_dir + '/cache/actors/' + actors_dict[handle]
|
||||||
|
if not os.path.isfile(actor_filename):
|
||||||
|
continue
|
||||||
|
actor_json = load_json(actor_filename, 1, 1)
|
||||||
|
if not actor_json:
|
||||||
|
continue
|
||||||
|
if not actor_json.get('movedTo'):
|
||||||
|
continue
|
||||||
|
moved_str += handle + ' ' + actor_json['movedTo'] + '\n'
|
||||||
|
|
||||||
|
if debug:
|
||||||
|
if moved_str:
|
||||||
|
print('Moved accounts detected')
|
||||||
|
else:
|
||||||
|
print('No moved accounts detected')
|
||||||
|
|
||||||
|
moved_accounts_filename = base_dir + '/accounts/actors_moved.txt'
|
||||||
|
if not moved_str:
|
||||||
|
if os.path.isfile(moved_accounts_filename):
|
||||||
|
try:
|
||||||
|
os.remove(moved_accounts_filename)
|
||||||
|
except OSError:
|
||||||
|
print('EX: update_moved_actors unable to remove ' +
|
||||||
|
moved_accounts_filename)
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(moved_accounts_filename, 'w+',
|
||||||
|
encoding='utf-8') as fp_moved:
|
||||||
|
fp_moved.write(moved_str)
|
||||||
|
except OSError:
|
||||||
|
print('EX: update_moved_actors unable to save ' +
|
||||||
|
moved_accounts_filename)
|
||||||
|
|
Loading…
Reference in New Issue