Commit 6031524d authored by Robin Sonnabend's avatar Robin Sonnabend
Browse files

Pushing to etherpad

parent 9762468a
......@@ -4,7 +4,7 @@ from datetime import datetime, time, date, timedelta
import math
from shared import db
from utils import random_string, url_manager
from utils import random_string, url_manager, get_etherpad_url
from models.errors import DateNotMatchingException
import os
......@@ -128,10 +128,7 @@ class Protocol(db.Model):
identifier = self.get_identifier()
if identifier is None:
return ""
return config.ETHERPAD_URL + self.get_identifier()
def get_etherpad_source_link(self):
return self.get_etherpad_link() + "/export/txt"
return get_etherpad_url(self.get_identifier())
def has_nonplanned_tops(self):
return len([top for top in self.tops if not top.planned]) > 0
......
......@@ -3,15 +3,19 @@ amqp==2.1.4
appdirs==1.4.0
argh==0.26.2
billiard==3.5.0.2
blessings==1.6
blinker==1.4
bpython==0.16
celery==4.0.2
click==6.7
curtsies==0.2.11
Flask==0.12
Flask-Migrate==2.0.3
Flask-Script==2.0.5
Flask-SocketIO==2.8.4
Flask-SQLAlchemy==2.1
Flask-WTF==0.14.2
greenlet==0.4.12
itsdangerous==0.24
Jinja2==2.9.5
kombu==4.0.2
......@@ -20,6 +24,7 @@ MarkupSafe==0.23
packaging==16.8
pathtools==0.1.2
psycopg2==2.6.2
Pygments==2.2.0
pyldap==2.4.28
pyparsing==2.1.10
python-editor==1.0.3
......@@ -34,5 +39,6 @@ six==1.10.0
SQLAlchemy==1.1.5
vine==1.1.3
watchdog==0.8.3
wcwidth==0.1.7
Werkzeug==0.11.15
WTForms==2.1
......@@ -8,14 +8,13 @@ from flask_script import Manager, prompt
from flask_migrate import Migrate, MigrateCommand
#from flask_socketio import SocketIO
from celery import Celery
import requests
from io import StringIO, BytesIO
import os
from datetime import datetime
import config
from shared import db, date_filter, datetime_filter, date_filter_long, time_filter, ldap_manager, security_manager, current_user, check_login, login_required, group_required
from utils import is_past, mail_manager, url_manager, get_first_unused_int
from utils import is_past, mail_manager, url_manager, get_first_unused_int, set_etherpad_text, get_etherpad_text
from models.database import ProtocolType, Protocol, DefaultTOP, TOP, Document, Todo, Decision, MeetingReminder, Error
from views.forms import LoginForm, ProtocolTypeForm, DefaultTopForm, MeetingReminderForm, NewProtocolForm, DocumentUploadForm, KnownProtocolSourceUploadForm, NewProtocolSourceUploadForm, ProtocolForm, TopForm
from views.tables import ProtocolsTable, ProtocolTypesTable, ProtocolTypeTable, DefaultTOPsTable, MeetingRemindersTable, ErrorsTable, TodosTable, DocumentsTable
......@@ -351,9 +350,7 @@ def etherpull_protocol(protocol_id):
if protocol is None or not protocol.protocoltype.has_modify_right(user):
flash("Invalides Protokoll oder keine Berechtigung.", "alert-error")
return redirect(request.args.get("next") or url_for("index"))
source_req = requests.get(protocol.get_etherpad_source_link())
source = source_req.text
protocol.source = source
protocol.source = get_etherpad_text(protocol.get_identifier())
db.session.commit()
tasks.parse_protocol(protocol)
flash("Das Protokoll wird kompiliert.", "alert-success")
......@@ -435,6 +432,20 @@ def get_protocol_template(protocol_id):
file_like = BytesIO(protocol.get_template().encode("utf-8"))
return send_file(file_like, cache_timeout=1, as_attachment=True, attachment_filename="{}-template.txt".format(protocol.get_identifier()))
@app.route("/protocol/etherpush/<int:protocol_id>")
@login_required
def etherpush_protocol(protocol_id):
user = current_user()
protocol = Protocol.query.filter_by(id=protocol_id).first()
if protocol is None or not protocol.protocoltype.has_modify_right(user):
flash("Invalides Protokoll oder keine Berechtigung.", "alert-error")
return redirect(request.args.get("next") or url_for("index"))
if set_etherpad_text(protocol.get_identifier(), protocol.get_template()):
flash("Vorlage von {} in Etherpad hochgeladen.".format(protocol.get_identifier()), "alert-success")
else:
flash("Das Etherpad wurde bereits bearbeitet.", "alert-error")
return redirect(request.args.get("next") or url_for("show_protocol", protocol_id=protocol.id))
@app.route("/protocol/update/<int:protocol_id>", methods=["GET", "POST"])
@login_required
def update_protocol(protocol_id):
......
......@@ -111,9 +111,4 @@ def group_required(function, group):
return redirect(request.args.get("next") or url_for("index"))
return decorated_function
EMPTY_ETHERPAD = """Welcome to Etherpad!
This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!
Get involved with Etherpad at http://etherpad.org
"""
......@@ -18,7 +18,8 @@
{% endif %}
<a class="btn {% if protocol.is_done() %}btn-success{% else %}btn-default{% endif %}" href="{{url_for("update_protocol", protocol_id=protocol.id)}}">Protokoll editieren</a>
{% if not protocol.is_done() %}
<a class="btn btn-default" href="{{url_for("get_protocol_template", protocol_id=protocol.id)}}">Vorlage herunterladen</a>
<a class="btn btn-default" href="{{url_for("get_protocol_template", protocol_id=protocol.id)}}">Vorlage</a>
<a class="btn btn-primary" href="{{url_for("etherpush_protocol", protocol_id=protocol.id)}}">In Etherpad</a>
{% endif %}
<a class="btn btn-default" href="{{protocol.get_etherpad_link()}}" target="_blank">Etherpad</a>
<a class="btn btn-default" href="{{url_for("show_type", type_id=protocol.protocoltype.id)}}">Typ</a>
......
......@@ -7,6 +7,8 @@ import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from datetime import datetime, date, timedelta
import requests
from io import BytesIO
import config
......@@ -100,3 +102,25 @@ def get_first_unused_int(numbers):
if linear < given:
return linear
return highest + 1
def get_etherpad_url(pad):
return "{}/p/{}".format(config.ETHERPAD_URL, pad)
def get_etherpad_export_url(pad):
return "{}/p/{}/export/txt".format(config.ETHERPAD_URL, pad)
def get_etherpad_import_url(pad):
return "{}/p/{}/import".format(config.ETHERPAD_URL, pad)
def get_etherpad_text(pad):
req = requests.get("{}/p/{}/export/txt".format(config.ETHERPAD_URL, pad))
return req.text
def set_etherpad_text(pad, text, only_if_default=True):
if only_if_default:
current_text = get_etherpad_text(pad)
if current_text != config.EMPTY_ETHERPAD and len(current_text.strip()) > 0:
return False
file_like = BytesIO(text.encode("utf-8"))
files = {"file": file_like}
req = requests.post(get_etherpad_import_url(pad), files=files)
return req.status_code == 200
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment