enhancement: added modularity to converters

This commit is contained in:
Darks 2020-07-17 00:17:11 +02:00
parent 17c78204a6
commit 1ef055f629
Signed by: Darks
GPG Key ID: F61F10FA138E797C
3 changed files with 18 additions and 14 deletions

View File

@ -11,8 +11,7 @@ from app.models.thread import Thread
from app.models.comment import Comment
@app.route('/forum/<forum:f>/<topicpage:page>',
methods=['GET', 'POST'])
@app.route('/forum/<forum:f>/<topicpage:page>', methods=['GET', 'POST'])
def forum_topic(f, page):
t, page = page
@ -33,7 +32,8 @@ def forum_topic(f, page):
flash('Message envoyé', 'ok')
# Redirect to empty the form
return redirect(url_for('forum_topic', f=f, page=(t,"last")))
return redirect(url_for('forum_topic', f=f, page=(t,"fin"),
_anchor=c.id))
# Update views
t.views += 1

View File

@ -19,7 +19,7 @@
<ul>
{% for t in last_active_topics %}
<li>
<a href="{{ url_for('forum_topic', f=t.forum, page=(t,'last'))}}">{{ t.title }}</a>
<a href="{{ url_for('forum_topic', f=t.forum, page=(t,'fin'))}}">{{ t.title }}</a>
</li>
{% endfor %}
</ul>

View File

@ -39,11 +39,12 @@ class ForumConverter(BaseConverter):
def to_url(self, forum):
return forum.url[1:]
class TopicPageConverter(BaseConverter):
class PageConverter(BaseConverter):
# Matches integers for the topic number, then either nothing, a page
# number, a slug, or a page number followed by a slug
regex = r'(\d+)(?:/(\d+)|/last)(?:/[\w-]+)?'
regex = r'(\d+)(?:/(\d+)|/fin)(?:/[\w-]+)?'
object = None
def to_python(self, url):
tid, *args = url.split('/')
@ -51,7 +52,7 @@ class TopicPageConverter(BaseConverter):
if len(args) == 0:
page = 1
elif args[0] == "last":
elif args[0] == "fin":
page = -1
else:
# The argument is considered to be a slug if it's not "last" and it
@ -61,17 +62,20 @@ class TopicPageConverter(BaseConverter):
except ValueError:
page = 1
t = Topic.query.filter_by(id=tid).first()
t = self.object.query.filter_by(id=tid).first()
if t is None:
raise Exception(f"TopicConverter: no topic with id {url}")
raise Exception(f"BaseConverter: no object with id {url}")
return (t, page)
def to_url(self, topic_and_page):
t, page = topic_and_page
page = str(page) if page != -1 else "last"
slug = slugify(t.title)
return f'{t.id}/{page}/{slug}'
def to_url(self, object_and_page):
o, page = object_and_page
page = str(page) if page != -1 else "fin"
slug = slugify(o.title)
return f'{o.id}/{page}/{slug}'
class TopicPageConverter(PageConverter):
object = Topic
# Export only the converter classes
__all__ = "ForumConverter TopicPageConverter".split()