Files
fachschaften/articles/controller.py
2017-02-21 18:05:51 +01:00

82 lines
2.9 KiB
Python

from .model import Article
from .model import ArticleSchema
#import flask
from datetime import datetime
from sqlalchemy import func
from sqlalchemy import exc
import json
from src import clogger
from src.sections.model import Section
from src.organizations.model import Organization
from src.database import db_session, read_json
from src.controller import BaseController
#from src.organizations.controller import controller as org_controller
class ArtController(BaseController):
__myclass__=Article
__jsonid__='article'
def pagination_params(self,v):
try:
if v.has_key("per_page"):
pp=int(v["per_page"])
else:
pp=20
except ValueError:
pp=20
try:
if v.has_key("page"):
o=(int(v["page"])-1) *pp
else:
o=0
except ValueError:
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
p1=(pp,o)
return p1
def search(self,s):
return Article.query.filter(Article.title.like("%"+s+"%")).order_by(Article.published_date.desc()).limit(20).all()
def get_all(self):
return Article.query.order_by(Article.published_date.desc()).all()
def get_all_page(self,lim, off):
# try:
arts=Article.query.order_by(Article.published_date.desc()).limit(lim).offset(off).all()
# except exc.InvalidRequestError, e:
# clogger.error(e)
# db_session.rollback()
# arts=Article.query.order_by(Article.published_date.desc()).limit(lim).offset(off).all()
return arts
def get_section_page(self,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 get_organization_page(self,organization_id, lim, off):
sid=db_session.query(Section.id).filter(Section.organization_id==int(organization_id)).all()
sid=map(lambda a:a[0], sid)
articles=db_session.query(Article).filter(Article.section_id.in_(sid)).order_by(Article.published_date.desc()).limit(lim).offset(off).all()
return articles
#
# return Article.query.filter(Article.section_id==section_id).order_by(Article.published_date.desc()).limit(lim).offset(off).all()
def section_count(self,section_id):
return db_session.query(func.count(Article.id)).filter(Article.section_id==section_id).scalar()
def organization_count(self,organization_id):
sid=db_session.query(Section.id).filter(Section.organization_id==int(organization_id)).all()
sid=map(lambda a:a[0], sid)
return db_session.query(func.count(Article.id)).filter(Article.section_id.in_(sid)).scalar()
def count(self):
return db_session.query(func.count(Article.id)).scalar()
controller=ArtController()