From 2f43916d616f3d1ec9caeaa0fcee8e406c4511b4 Mon Sep 17 00:00:00 2001 From: Andreas Stephanides Date: Thu, 26 Jan 2017 16:11:25 +0100 Subject: [PATCH] article sections --- articles/controller.py | 24 ++++++++++++++++++++++++ articles/views.py | 22 +++++----------------- sections/model.py | 2 +- sections/views.py | 17 ++++++++++++++++- 4 files changed, 46 insertions(+), 19 deletions(-) diff --git a/articles/controller.py b/articles/controller.py index 3ec5bcc..1eeb213 100644 --- a/articles/controller.py +++ b/articles/controller.py @@ -6,6 +6,26 @@ import json from src.database import db_session, read_json +def pagination_params(v): + try: + if v.has_key("per_page"): + pp=int(v["per_page"]) + else: + pp=20 + if v.has_key("page"): + o=(int(v["page"])-1) *pp + else: + o=0 + except ValueError: + pp=20 + o=0 + if not (isinstance(pp,int) and pp>0 and pp<10000): + pp=20 + if not (isinstance(o,int) and o>=0 and o<100000): + o=0 + return (pp, o) + + def get_all(): return Article.query.order_by(Article.published_date.desc()).all() @@ -15,5 +35,9 @@ def search(s): def get_all_page(lim, off): return Article.query.order_by(Article.published_date.desc()).limit(lim).offset(off).all() + +def get_section_page(section_id, lim, off): + return Article.query.filter(Article.section_id==section_id).order_by(Article.published_date.desc()).limit(lim).offset(off).all() + def count(): return Article.query.count() diff --git a/articles/views.py b/articles/views.py index 1a93bba..829d575 100644 --- a/articles/views.py +++ b/articles/views.py @@ -21,23 +21,11 @@ import controller @article_pages.route(".json") def index(): v=request.values - try: - if v.has_key("per_page"): - pp=int(v["per_page"]) - else: - pp=20 - if v.has_key("page"): - o=(int(v["page"])-1) *pp - else: - o=0 - except ValueError: - pp=20 - o=0 - if not (isinstance(pp,int) and pp>0 and pp<10000): - pp=20 - if not (isinstance(o,int) and o>=0 and o<100000): - o=0 - articles=controller.get_all_page(pp,o) + pp,o=controller.pagination_params(v) # extract per_page and offset from params + if v.has_key("section_id"): + articles=controller.get_section_page(int(v["section_id"]),pp,o) + else: + articles=controller.get_all_page(pp,o) resp = jsonify(articles=articles) resp.headers['Pagination-Limit']=pp resp.headers['Pagination-Offset']=o diff --git a/sections/model.py b/sections/model.py index 3ceae1a..1f977d5 100644 --- a/sections/model.py +++ b/sections/model.py @@ -63,4 +63,4 @@ class SectionSchema(Schema): id=fields.Integer() foreign_name=fields.String() name=fields.String() - articles=fields.Nested(ArticleCompSchema,many=True) +# articles=fields.Nested(ArticleCompSchema,many=True) diff --git a/sections/views.py b/sections/views.py index 5354640..0f78ddd 100644 --- a/sections/views.py +++ b/sections/views.py @@ -6,7 +6,7 @@ from .model import SectionSchema from datetime import datetime import json from src import clogger - +import src.articles.controller as article_controller from src.database import db_session, read_json import flask @@ -38,3 +38,18 @@ def get(id): return jsonify(section=section) +@section_pages.route("//articles",methods=['GET']) +@section_pages.route("//articles.json",methods=['GET']) +def get_articles(id): + v=request.values + pp,o=article_controller.pagination_params(v) # extract per_page and offset from params + articles=controller.get_section_page(id,pp,o) + + resp = jsonify(articles=articles) + resp.headers['Pagination-Limit']=pp + resp.headers['Pagination-Offset']=o + resp.headers['Pagination-TotalCount']=controller.count() + return resp + + +