Extract feed title from index.gmi if it exists and is world readable.

This commit is contained in:
Solderpunk 2020-03-17 13:09:51 +01:00
parent b5cc680fbc
commit 63f7622d4c
1 changed files with 28 additions and 16 deletions

View File

@ -8,6 +8,19 @@ import urllib.parse
from feedgen.feed import FeedGenerator
def is_world_readable(filename):
st = os.stat(filename)
return st.st_mode & stat.S_IROTH
def get_feed_title():
default = "Just another Gemini feed"
for extension in ("gmi", "gem", "gemini"):
filename = "index.{}".format(extension)
print(filename)
if os.path.exists(filename) and is_world_readable(filename):
return extract_first_heading(filename, default)
return default
def find_files():
files = []
for extension in ("gmi", "gem", "gemini"):
@ -15,12 +28,16 @@ def find_files():
index = "index.{}".format(extension)
if index in files:
files.remove(index)
world_readable = []
for filename in files:
st = os.stat(filename)
if st.st_mode & stat.S_IROTH:
world_readable.append(filename)
return world_readable
return [f for f in files if is_world_readable(f)]
def extract_first_heading(filename, default=""):
with open(filename) as fp:
for line in fp:
if line.startswith("#"):
while line[0] == "#":
line = line[1:]
return line.strip()
return default
def populate_entry_from_file(filename, base_url, entry):
url = urljoin(base_url, filename)
@ -29,15 +46,7 @@ def populate_entry_from_file(filename, base_url, entry):
updated = os.path.getctime(filename)
updated = datetime.datetime.fromtimestamp(updated, tz=datetime.timezone.utc)
entry.updated(updated)
with open(filename) as fp:
for line in fp:
if line.startswith("#"):
while line[0] == "#":
line = line[1:]
title = line.strip()
break
else:
title = filename
title = extract_first_heading(filename, filename)
entry.title(title)
def urljoin(base, url):
@ -51,6 +60,9 @@ def urljoin(base, url):
def main():
# Get default title from index page, if there is one
feed_title = get_feed_title()
# Parse arguments
parser = argparse.ArgumentParser(description='Generate an Atom feed for Gemini content.')
parser.add_argument('-a', '--author', dest='author', type=str,
@ -64,7 +76,7 @@ def main():
parser.add_argument('-s', '--subtitle', dest='subtitle', type=str,
help='feed subtitle')
parser.add_argument('-t', '--title', dest='title', type=str,
default="A Gemini feed", help='feed title')
default=feed_title, help='feed title')
args = parser.parse_args()
# Normalise base URL