From 3ac6bade0ec7d22c308a34fbdca8985bd939da12 Mon Sep 17 00:00:00 2001 From: andis Date: Fri, 5 Feb 2021 18:41:28 +0000 Subject: [PATCH 1/3] etherpad refactoring start --- fet2020/documents/__init__.py | 1 + fet2020/documents/api.py | 98 +++++++++++++++------------------- fet2020/posts/models.py | 2 +- fet2020/tests/test_etherpad.py | 23 ++++++++ 4 files changed, 68 insertions(+), 56 deletions(-) create mode 100644 fet2020/tests/test_etherpad.py diff --git a/fet2020/documents/__init__.py b/fet2020/documents/__init__.py index e69de29b..c3fab2a5 100644 --- a/fet2020/documents/__init__.py +++ b/fet2020/documents/__init__.py @@ -0,0 +1 @@ +from .api import getPadHTML, setPadHTML, createPadifNotExists diff --git a/fet2020/documents/api.py b/fet2020/documents/api.py index cbb22b89..69971d9b 100644 --- a/fet2020/documents/api.py +++ b/fet2020/documents/api.py @@ -5,18 +5,29 @@ import urllib.parse from etherpad_lite import EtherpadLiteClient, EtherpadException +from contextlib import contextmanager + + import logging logger = logging.getLogger(__name__) SERVER_URL = settings.ETHERPAD_CLIENT["exturl"] +@contextmanager +def ignore_ep_exception(msg="", *exceptions): + try: + yield + except exceptions as e: + logger.error(msg) + logger.error("%s", e) + -def get_ep_client(): +def get_ep_client(groupName="fet"): epc = None group = None - try: + with ignore_ep_exception("Error connecting to Etherpad", Exception): with open(os.path.abspath(settings.ETHERPAD_CLIENT["apikey"]), "r") as f: apikey = f.read() apikey = apikey.rstrip() @@ -27,73 +38,52 @@ def get_ep_client(): base_url=urllib.parse.urljoin(settings.ETHERPAD_CLIENT["url"], "api"), api_version="1.2.14", ) - group = epc.createGroupIfNotExistsFor(groupMapper="fet") - except Exception as e: - logger.info("Can't get connection to Etherpad Server. Error: {}".format(e)) - raise e - return None, None + group = epc.createGroupIfNotExistsFor(groupMapper=groupName) return epc, group +@contextmanager +def ep_client(groupName="fet"): + epc, group = get_ep_client(groupName) + if not epc or not group: + yield None, None + else: + with ignore_ep_exception("EtherpadException!!", EtherpadException): + yield epc, group + def __checkPadExists(padID=None): if not padID: return False - epc, group = get_ep_client() - if not epc or not group: - return None - - try: - lists = epc.listAllPads() - except Exception as e: - raise e - else: - string = group["groupID"] + "$" + str(padID) - if string in lists["padIDs"]: + with ep_client() as (epc, group): + if not epc or not group: + return None + lists = epc.listPads(groupID=group["groupID"]) + if str(padID) in lists["padIDs"]: return True return False def createPadifNotExists(padID): - epc, group = get_ep_client() - if not epc: - logger.info("if not epc") - return None - - # Pad doesn't exist if not __checkPadExists(padID=padID): - try: + with ep_client() as (epc, group): + if not epc or not group: + return None epc.createGroupPad( - groupID=group["groupID"], padName=padID, text="helloworld" + groupID = group["groupID"], padName=padID, text="helloworld" ) - except EtherpadException as e: - logger.info("Can't create Pad '{}'. EtherpadException: {}".format(padID, e)) - return None - except Exception as e: - raise e - return None return padID def getPadHTML(padID): - epc, group = get_ep_client() - if not epc or not group: - return None - - try: - text = epc.getHTML(padID=group["groupID"] + "$" + padID)["html"] - except EtherpadException as e: - logger.info( - "Can't get HTML from padID '{}'. EtherpadException: {}".format(padID, e) - ) - return None - except Exception as e: - raise e - return None - + text = None + with ep_client() as (epc, group): + if not epc or not group: + return None + text = epc.getHTML(padID = group["groupID"] + "$" + padID)["html"] return text @@ -109,11 +99,9 @@ def setPadHTML(padID, html): def get_pad_link(padID): if padID is None: return "#" - - epc, group = get_ep_client() - if not epc or not group: - return "#" - - return urllib.parse.urljoin( - settings.ETHERPAD_CLIENT["exturl"], "p/" + group["groupID"] + "$" + str(padID) - ) + with ep_client() as (epc, group): + if not epc or not group: + return "#" + return urllib.parse.urljoin( + settings.ETHERPAD_CLIENT["exturl"], "p/" + group["groupID"] + "$" + str(padID) + ) diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index daf40877..7c27fd63 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -10,7 +10,7 @@ from django.utils import timezone from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ from taggit.managers import TaggableManager -from documents.api import getPadHTML, setPadHTML, createPadifNotExists +from documents import getPadHTML, setPadHTML, createPadifNotExists from .managers import ( PostManager, ArticleManager, diff --git a/fet2020/tests/test_etherpad.py b/fet2020/tests/test_etherpad.py new file mode 100644 index 00000000..dfcc1621 --- /dev/null +++ b/fet2020/tests/test_etherpad.py @@ -0,0 +1,23 @@ +import pytest +from django.urls import reverse +from django.core.validators import ValidationError +import datetime +from documents.api import ep_client, createPadifNotExists + + +class TestEtherpad: + def test(self): + with ep_client() as (epc, group): + if not epc: + return + pds = epc.listPads(groupID=str(group["groupID"])) + assert isinstance(pds, dict) + + def test_listpads(self): + pds = None + with ep_client() as (epc, group): + pds = epc.listPads(groupID=group["groupID"]) + assert isinstance(pds, dict) + + def test_padexists(self): + assert createPadifNotExists("sdf") From 77718d8f71a1cbdb0316bf2da3b6c99df04ee75c Mon Sep 17 00:00:00 2001 From: andis Date: Mon, 8 Feb 2021 17:31:47 +0000 Subject: [PATCH 2/3] settings etherpad exturl fix --- fet2020/fet2020/settings.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py index 48dc97a8..8eed5b81 100644 --- a/fet2020/fet2020/settings.py +++ b/fet2020/fet2020/settings.py @@ -12,7 +12,7 @@ env = environ.Env( MYSQL_PASSWORD=(str), HOST_NAME=(str, "localhost"), ETHERPAD_PORT=(str, "9001"), - ETHERPAD_HOST=(str, "etherpad2.2020.fet.at"), + ETHERPAD_HOST=(str, ""), ) # Prints and logs are written to console @@ -217,12 +217,16 @@ THUMBNAIL_ALIASES = { "portrait": {"size": (200, 300), "crop": False}, }, } +ETHERPAD_HOST = env("ETHERPAD_HOST").strip() +if not ETHERPAD_HOST or ETHERPAD_HOST=="": + ETHERPAD_HOST = urljoin("https://" + env("HOST_NAME"), "etherpad/") + # ETHERPAD CLIENT if DEBUG: ETHERPAD_CLIENT = { "url": "http://etherpad:" + env("ETHERPAD_PORT"), - "exturl": env("ETHERPAD_HOST"), + "exturl": ETHERPAD_HOST, "apikey": "/srv/etherpad/APIKEY.txt", } else: From 023ba7c3b68d975e00ee2c647a5026fd76457631 Mon Sep 17 00:00:00 2001 From: andis Date: Mon, 8 Feb 2021 18:01:54 +0000 Subject: [PATCH 3/3] komisches "None" in FET Sitzung --- fet2020/templates/posts/show.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fet2020/templates/posts/show.html b/fet2020/templates/posts/show.html index 7e3ca990..c319fc3d 100644 --- a/fet2020/templates/posts/show.html +++ b/fet2020/templates/posts/show.html @@ -67,7 +67,7 @@
{% endif %} - {% if post.body %} + {% if post.body and post.body != "None" %} {{ post.body|safe|add_internal_links|tags_to_url }}
{% endif %}