diff --git a/cao_sunyata/models/__init__.py b/cao_sunyata/models/__init__.py index 24773c2..7487b01 100644 --- a/cao_sunyata/models/__init__.py +++ b/cao_sunyata/models/__init__.py @@ -59,7 +59,7 @@ def includeme(config): config.include('pyramid_tm') # use pyramid_retry to retry a request when transient exceptions occur - config.include('pyramid_retry') + # config.include('pyramid_retry') session_factory = get_session_factory(get_engine(settings)) config.registry['dbsession_factory'] = session_factory diff --git a/cao_sunyata/models/entries.py b/cao_sunyata/models/entries.py index 9478d71..f897443 100644 --- a/cao_sunyata/models/entries.py +++ b/cao_sunyata/models/entries.py @@ -1,4 +1,6 @@ # -*- coding: utf8 -*- +from sqlalchemy import text + from .default import ( execute_query, ) @@ -16,23 +18,23 @@ def get_entries_by_topic(request, topic, tag): query = query + " AND tag = '{0}'".format(tag) query = query + " ORDER BY tag, title;" - results = request.dbsession.execute(query).fetchall() + results = request.dbsession.execute(text(query)).fetchall() return results def get_entries_related(request, _id): query = """SELECT *, strftime('%d/%m/%Y', edited) AS edit_date FROM entries_related WHERE id=:id;""" - results = request.dbsession.execute(query, {'id':_id}).fetchall() + results = request.dbsession.execute(text(query), {'id':_id}).fetchall() return results def get_entries_related_by_id(request, _id, id_related): query = """SELECT *, strftime('%d/%m/%Y', edited) AS edit_date FROM entries_related WHERE id=:id AND id_related=:id_related;""" - results = request.dbsession.execute(query, {'id':_id, 'id_related':id_related}).first() + results = request.dbsession.execute(text(query), {'id':_id, 'id_related':id_related}).first() return results def get_entries_by_id(request, _id): query = """SELECT *, strftime('%d/%m/%Y', created) AS create_date, strftime('%d/%m/%Y', edited) AS edit_date FROM entries WHERE id=:id;""" - results = request.dbsession.execute(query, {'id':_id}).first() + results = request.dbsession.execute(text(query), {'id':_id}).first() return results def get_entries_count_by_topic(request): @@ -41,7 +43,7 @@ def get_entries_count_by_topic(request): INNER JOIN topics ON entries.topic_id = topics.topic INNER JOIN tags ON entries.tag = tags.tag GROUP BY entries.tag ORDER BY entries.topic_id, entries.tag;""" - results = request.dbsession.execute(query,).fetchall() + results = request.dbsession.execute(text(query),).fetchall() return results def get_last_created(request): @@ -52,7 +54,7 @@ def get_last_created(request): query = query + " AND status='publié'" query = query + " ORDER BY created DESC LIMIT 15;" - results = request.dbsession.execute(query).fetchall() + results = request.dbsession.execute(text(query)).fetchall() return results def get_last_edited(request): @@ -63,36 +65,50 @@ def get_last_edited(request): query = query + " AND status='publié'" query = query + " ORDER BY edited DESC LIMIT 10;" - results = request.dbsession.execute(query).fetchall() + results = request.dbsession.execute(text(query)).fetchall() return results def get_activities(request): # gest the Activities section query = "SELECT * FROM entries WHERE topic_id = '_admin' AND title like 'Activities - column%' ORDER BY title;" - results = request.dbsession.execute(query,).all() + results = request.dbsession.execute(text(query)).all() return results +def get_entries_by_criteria(request, criteria): + search = "%{}%".format(criteria) + query = f"SELECT *, strftime('%d/%m/%Y', edited) AS edit_date FROM entries WHERE title like '{search}' or body like '{search}'" + if request.authenticated_userid == None: + # if user is anonym, display only published posts + query = query + " AND status='publié'" + else: + if request.authenticated_userid != 'admin': + # if user is not 'admin', hide admin posts + query = query + " AND tag != '_admin'" + query = query + " ORDER BY title;" + results = request.dbsession.execute(query).fetchall() + return results + def get_tags_byTopic(request, topic): # get tags query = "SELECT * FROM tags WHERE topic=:topic ORDER BY tag_name;" - results = request.dbsession.execute(query, {'topic':topic}).all() + results = request.dbsession.execute(text(query), {'topic':topic}).all() return results def get_tags_byId(request, id): query = "SELECT * FROM tags WHERE id=:id;" - results = request.dbsession.execute(query, {'id':id}).first() + results = request.dbsession.execute(text(query), {'id':id}).first() return results def get_topic_byTopic(request, id): # get the name of a given topic query = "SELECT * FROM topics WHERE topic=:topic;" - results = request.dbsession.execute(query, {'topic':id}).first() + results = request.dbsession.execute(text(query), {'topic':id}).first() return results def get_topics(request): # get all topics query = "SELECT * FROM topics ORDER BY topic_name;" - results = request.dbsession.execute(query, {'topic':id}).all() + results = request.dbsession.execute(text(query), {'topic':id}).all() return results def delete_entry(request, id): diff --git a/cao_sunyata/routes.py b/cao_sunyata/routes.py index 498416b..0d924d5 100644 --- a/cao_sunyata/routes.py +++ b/cao_sunyata/routes.py @@ -4,6 +4,7 @@ def includeme(config): config.add_route('blog', '/blog/{id:\d+}/{slug}') config.add_route('blog_copy', '/blog_copy/{topic}/{id}') config.add_route('blog_edit', '/blog_edit/{topic}/{id}') + config.add_route('blog_search', '/blog_search') config.add_route('contact', '/contact') config.add_route('images', '/images') config.add_route('image_edit', '/image_edit/{filename}') diff --git a/cao_sunyata/templates/blog_search.jinja2 b/cao_sunyata/templates/blog_search.jinja2 new file mode 100644 index 0000000..f6873fe --- /dev/null +++ b/cao_sunyata/templates/blog_search.jinja2 @@ -0,0 +1,52 @@ +{% extends "layout.jinja2" %} + + {% block content %} + +