mirror of https://gitlab.com/bashrc2/epicyon
Add exception for file read
parent
b93b8e43f0
commit
ace9f84d9a
261
schedule.py
261
schedule.py
|
@ -44,139 +44,148 @@ def _update_post_schedule(base_dir: str, handle: str, httpd,
|
|||
index_lines = []
|
||||
delete_schedule_post = False
|
||||
nickname = handle.split('@')[0]
|
||||
with open(schedule_index_filename, 'r', encoding='utf-8') as fp_sched:
|
||||
for line in fp_sched:
|
||||
if ' ' not in line:
|
||||
continue
|
||||
date_str = line.split(' ')[0]
|
||||
if 'T' not in date_str:
|
||||
continue
|
||||
post_id1 = line.split(' ', 1)[1]
|
||||
post_id = remove_eol(post_id1)
|
||||
post_filename = schedule_dir + post_id + '.json'
|
||||
if delete_schedule_post:
|
||||
# delete extraneous scheduled posts
|
||||
if os.path.isfile(post_filename):
|
||||
shared_items_federated_domains = httpd.shared_items_federated_domains
|
||||
shared_item_federation_tokens = httpd.shared_item_federation_tokens
|
||||
try:
|
||||
with open(schedule_index_filename, 'r', encoding='utf-8') as fp_sched:
|
||||
for line in fp_sched:
|
||||
if ' ' not in line:
|
||||
continue
|
||||
date_str = line.split(' ')[0]
|
||||
if 'T' not in date_str:
|
||||
continue
|
||||
post_id1 = line.split(' ', 1)[1]
|
||||
post_id = remove_eol(post_id1)
|
||||
post_filename = schedule_dir + post_id + '.json'
|
||||
if delete_schedule_post:
|
||||
# delete extraneous scheduled posts
|
||||
if os.path.isfile(post_filename):
|
||||
try:
|
||||
os.remove(post_filename)
|
||||
except OSError:
|
||||
print('EX: ' +
|
||||
'_update_post_schedule unable to delete ' +
|
||||
str(post_filename))
|
||||
continue
|
||||
# create the new index file
|
||||
index_lines.append(line)
|
||||
# convert string date to int
|
||||
post_time = \
|
||||
date_from_string_format(date_str, ["%Y-%m-%dT%H:%M:%S%z"])
|
||||
post_time = post_time.replace(tzinfo=None)
|
||||
post_days_since_epoch = \
|
||||
(post_time - date_epoch()).days
|
||||
if days_since_epoch < post_days_since_epoch:
|
||||
continue
|
||||
if days_since_epoch == post_days_since_epoch:
|
||||
if curr_time.time().hour < post_time.time().hour:
|
||||
continue
|
||||
if curr_time.time().minute < post_time.time().minute:
|
||||
continue
|
||||
if not os.path.isfile(post_filename):
|
||||
print('WARN: schedule missing post_filename=' +
|
||||
post_filename)
|
||||
index_lines.remove(line)
|
||||
continue
|
||||
# load post
|
||||
post_json_object = load_json(post_filename)
|
||||
if not post_json_object:
|
||||
print('WARN: schedule json not loaded')
|
||||
index_lines.remove(line)
|
||||
continue
|
||||
|
||||
# set the published time
|
||||
# If this is not recent then http checks on the receiving side
|
||||
# will reject it
|
||||
_, published = get_status_number()
|
||||
if post_json_object.get('published'):
|
||||
post_json_object['published'] = published
|
||||
if has_object_dict(post_json_object):
|
||||
if post_json_object['object'].get('published'):
|
||||
post_json_object['published'] = published
|
||||
|
||||
print('Sending scheduled post ' + post_id)
|
||||
|
||||
if nickname:
|
||||
httpd.post_to_nickname = nickname
|
||||
|
||||
# create session if needed
|
||||
curr_session = httpd.session
|
||||
curr_proxy_type = httpd.proxy_type
|
||||
if not curr_session:
|
||||
curr_session = create_session(httpd.proxy_type)
|
||||
httpd.session = curr_session
|
||||
if not curr_session:
|
||||
continue
|
||||
|
||||
if not post_message_to_outbox(curr_session,
|
||||
httpd.translate,
|
||||
post_json_object, nickname,
|
||||
httpd, base_dir,
|
||||
httpd.http_prefix,
|
||||
httpd.domain,
|
||||
httpd.domain_full,
|
||||
httpd.onion_domain,
|
||||
httpd.i2p_domain,
|
||||
httpd.port,
|
||||
httpd.recent_posts_cache,
|
||||
httpd.followers_threads,
|
||||
httpd.federation_list,
|
||||
httpd.send_threads,
|
||||
httpd.postLog,
|
||||
httpd.cached_webfingers,
|
||||
httpd.person_cache,
|
||||
httpd.allow_deletion,
|
||||
curr_proxy_type,
|
||||
httpd.project_version,
|
||||
httpd.debug,
|
||||
httpd.yt_replace_domain,
|
||||
httpd.twitter_replacement_domain,
|
||||
httpd.show_published_date_only,
|
||||
httpd.allow_local_network_access,
|
||||
httpd.city,
|
||||
httpd.system_language,
|
||||
shared_items_federated_domains,
|
||||
shared_item_federation_tokens,
|
||||
httpd.low_bandwidth,
|
||||
httpd.signing_priv_key_pem,
|
||||
httpd.peertube_instances,
|
||||
httpd.theme_name,
|
||||
httpd.max_like_count,
|
||||
httpd.max_recent_posts,
|
||||
httpd.cw_lists,
|
||||
httpd.lists_enabled,
|
||||
httpd.content_license_url,
|
||||
httpd.dogwhistles,
|
||||
httpd.min_images_for_accounts,
|
||||
httpd.buy_sites,
|
||||
httpd.sites_unavailable,
|
||||
httpd.max_recent_books,
|
||||
httpd.books_cache,
|
||||
httpd.max_cached_readers,
|
||||
httpd.auto_cw_cache,
|
||||
httpd.block_federated):
|
||||
index_lines.remove(line)
|
||||
try:
|
||||
os.remove(post_filename)
|
||||
except OSError:
|
||||
print('EX: _update_post_schedule unable to delete ' +
|
||||
str(post_filename))
|
||||
continue
|
||||
# create the new index file
|
||||
index_lines.append(line)
|
||||
# convert string date to int
|
||||
post_time = \
|
||||
date_from_string_format(date_str, ["%Y-%m-%dT%H:%M:%S%z"])
|
||||
post_time = post_time.replace(tzinfo=None)
|
||||
post_days_since_epoch = \
|
||||
(post_time - date_epoch()).days
|
||||
if days_since_epoch < post_days_since_epoch:
|
||||
continue
|
||||
if days_since_epoch == post_days_since_epoch:
|
||||
if curr_time.time().hour < post_time.time().hour:
|
||||
continue
|
||||
if curr_time.time().minute < post_time.time().minute:
|
||||
continue
|
||||
if not os.path.isfile(post_filename):
|
||||
print('WARN: schedule missing post_filename=' + post_filename)
|
||||
|
||||
# move to the outbox
|
||||
outbox_post_filename = \
|
||||
post_filename.replace('/scheduled/', '/outbox/')
|
||||
os.rename(post_filename, outbox_post_filename)
|
||||
|
||||
print('Scheduled post sent ' + post_id)
|
||||
|
||||
index_lines.remove(line)
|
||||
continue
|
||||
# load post
|
||||
post_json_object = load_json(post_filename)
|
||||
if not post_json_object:
|
||||
print('WARN: schedule json not loaded')
|
||||
index_lines.remove(line)
|
||||
continue
|
||||
|
||||
# set the published time
|
||||
# If this is not recent then http checks on the receiving side
|
||||
# will reject it
|
||||
_, published = get_status_number()
|
||||
if post_json_object.get('published'):
|
||||
post_json_object['published'] = published
|
||||
if has_object_dict(post_json_object):
|
||||
if post_json_object['object'].get('published'):
|
||||
post_json_object['published'] = published
|
||||
|
||||
print('Sending scheduled post ' + post_id)
|
||||
|
||||
if nickname:
|
||||
httpd.post_to_nickname = nickname
|
||||
|
||||
# create session if needed
|
||||
curr_session = httpd.session
|
||||
curr_proxy_type = httpd.proxy_type
|
||||
if not curr_session:
|
||||
curr_session = create_session(httpd.proxy_type)
|
||||
httpd.session = curr_session
|
||||
if not curr_session:
|
||||
continue
|
||||
|
||||
if not post_message_to_outbox(curr_session,
|
||||
httpd.translate,
|
||||
post_json_object, nickname,
|
||||
httpd, base_dir,
|
||||
httpd.http_prefix,
|
||||
httpd.domain,
|
||||
httpd.domain_full,
|
||||
httpd.onion_domain,
|
||||
httpd.i2p_domain,
|
||||
httpd.port,
|
||||
httpd.recent_posts_cache,
|
||||
httpd.followers_threads,
|
||||
httpd.federation_list,
|
||||
httpd.send_threads,
|
||||
httpd.postLog,
|
||||
httpd.cached_webfingers,
|
||||
httpd.person_cache,
|
||||
httpd.allow_deletion,
|
||||
curr_proxy_type,
|
||||
httpd.project_version,
|
||||
httpd.debug,
|
||||
httpd.yt_replace_domain,
|
||||
httpd.twitter_replacement_domain,
|
||||
httpd.show_published_date_only,
|
||||
httpd.allow_local_network_access,
|
||||
httpd.city, httpd.system_language,
|
||||
httpd.shared_items_federated_domains,
|
||||
httpd.shared_item_federation_tokens,
|
||||
httpd.low_bandwidth,
|
||||
httpd.signing_priv_key_pem,
|
||||
httpd.peertube_instances,
|
||||
httpd.theme_name,
|
||||
httpd.max_like_count,
|
||||
httpd.max_recent_posts,
|
||||
httpd.cw_lists,
|
||||
httpd.lists_enabled,
|
||||
httpd.content_license_url,
|
||||
httpd.dogwhistles,
|
||||
httpd.min_images_for_accounts,
|
||||
httpd.buy_sites,
|
||||
httpd.sites_unavailable,
|
||||
httpd.max_recent_books,
|
||||
httpd.books_cache,
|
||||
httpd.max_cached_readers,
|
||||
httpd.auto_cw_cache,
|
||||
httpd.block_federated):
|
||||
index_lines.remove(line)
|
||||
try:
|
||||
os.remove(post_filename)
|
||||
except OSError:
|
||||
print('EX: _update_post_schedule unable to delete ' +
|
||||
str(post_filename))
|
||||
continue
|
||||
|
||||
# move to the outbox
|
||||
outbox_post_filename = \
|
||||
post_filename.replace('/scheduled/', '/outbox/')
|
||||
os.rename(post_filename, outbox_post_filename)
|
||||
|
||||
print('Scheduled post sent ' + post_id)
|
||||
|
||||
index_lines.remove(line)
|
||||
if len(index_lines) > max_scheduled_posts:
|
||||
delete_schedule_post = True
|
||||
if len(index_lines) > max_scheduled_posts:
|
||||
delete_schedule_post = True
|
||||
except OSError as exc:
|
||||
print('EX: _update_post_schedule unable to read ' +
|
||||
schedule_index_filename + ' ' + str(exc))
|
||||
|
||||
# write the new schedule index file
|
||||
schedule_index_file = \
|
||||
|
|
Loading…
Reference in New Issue