import sqlalchemy as sa import datetime #<- will be used to set default dates on models from sqlalchemy import or_ from paginate_sqlalchemy import SqlalchemyOrmPage #<- provides pagination from ..models.blog_record import BlogRecord, Topics, Tags from markdown2 import Markdown class BlogRecordService(object): @classmethod def by_topic(cls, request, topic): query = """SELECT entries.*, entries.slug, topics.topic_name, tags.tag_name FROM entries JOIN topics ON topics.topic = entries.topic_id JOIN tags ON tags.topic = entries.topic_id AND tags.tag = entries.tag WHERE entries.topic_id = :topic ORDER BY tags.tag, entries.title """ results = request.dbsession.execute(query, {'topic': topic}).fetchall() return results @classmethod def by_criteria(cls, request, criteria): search = "%{}%".format(criteria) query = request.dbsession.query(BlogRecord).filter(or_(BlogRecord.title.like(search), BlogRecord.body.like(search))).all() return query @classmethod def by_id(cls, request, _id): query = request.dbsession.query(BlogRecord) return query.get(_id) @classmethod def get_last_five(cls, request): # gest the last 5 items modified query = request.dbsession.query(BlogRecord.id, BlogRecord.title, BlogRecord.edited, Topics.topic_name).join(Topics, Topics.topic == BlogRecord.topic_id) query = query.order_by(sa.desc(BlogRecord.edited)).limit(5).all() return query @classmethod def get_tags_byTopic(cls, request, topic): # gest the last 5 items modified query = request.dbsession.query(Tags).filter(Tags.topic == topic) query = query.order_by(Tags.tag).all() return query @classmethod def get_topic_name(cls, request, id): # gest the last 5 items modified query = request.dbsession.query(Topics).filter(Topics.topic == id).first() return query.topic_name.upper() @classmethod def proc_after_create(cls, request, _id): entry = request.dbsession.query(BlogRecord).get(_id) # convertir mardown en HTML markdowner = Markdown() entry.body_html = markdowner.convert(entry.body) return @classmethod def proc_after_update(cls, request, _id): entry = request.dbsession.query(BlogRecord).get(_id) entry.edited = datetime.datetime.now() entry.title_url = entry.slug # convertir mardown en HTML markdowner = Markdown() entry.body_html = markdowner.convert(entry.body) return