config.py

DIRECTORY = "path/to/folder/with/wall/inscriptions"

wall.cgi

#!/bin/python3
import os
from config import DIRECTORY


print("20 text/gemini; charset=utf-8")

count = 32
inscriptions = os.listdir(DIRECTORY)
if not inscriptions:
    print("Тут пусто")
else:
    print(f"=> wall_full.cgi полная версия стены ({len(inscriptions)} записей)")
    print("=> statistic.cgi статистика стены")
    print(f"Последние {count} записи:\n")
for inscription in sorted(inscriptions)[-1 * count:]:
    with open(f'{DIRECTORY}/{inscription}') as f:
        print(f.read(), '\n')

print("=> write_something.cgi Написать что-нибудь")

wall_full.cgi

#!/bin/python3
import os
from config import DIRECTORY

# DIRECTORY = "cgi-bin/python/wall/inscriptions"

print("20 text/gemini; charset=utf-8")

inscriptions = os.listdir(DIRECTORY)
if not inscriptions:
    print("Тут пусто")
else:
    print("На стене написано:\n")
for inscription in sorted(inscriptions):
    with open(f'{DIRECTORY}/{inscription}') as f:
        print(f.read(), '\n')

print("=> write_something.cgi Написать что-нибудь")

write_something.cgi

#!/bin/python3

import os
import urllib.parse
import datetime
from config import DIRECTORY


query = os.environ.get("QUERY_STRING")

if not query:
    print("10 Enter something")
else:
    print("20 text/gemini")
    text = urllib.parse.unquote(query)
    formatted_text_counter = 0
    for i in text.split("\n"):
        if i.startswith("```"):
            formatted_text_counter += 1
    if formatted_text_counter % 2 != 0:
        text += "\n```"
    with open(
            f"{DIRECTORY}/{datetime.datetime.now()}",
            'w') as f:
        f.write(text)
    print(f"Вы написали:\n{text}\nи оставили свой след в истории этой стены\n"
          f"=> wall.cgi Вернуться обратно\n"
          f"(если ваша запись не видна, обновите страницу)")

statistic.cgi

#!/bin/python3
import os
from collections import Counter
from config import DIRECTORY


print("20 text/gemini; charset=utf-8")

inscriptions = os.listdir(DIRECTORY)

data = [i.split()[0] for i in sorted(inscriptions, reverse=True)]
counter = Counter(data)

for i in counter:
    print(i, "☀" * counter[i])