from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text, ForeignKey from sqlalchemy.orm import relationship from datetime import datetime from src.database import Base,db_session from marshmallow import Schema, fields, post_load import json import flask #from src.articles import Article class Section(Base): __tablename__ = 'sections' id = Column(Integer, primary_key=True) url = Column(String(250)) crawlurl = Column(Integer) foreign_name = Column(String(250),unique=True) name=Column(String(250)) group = Column(String(250)) articles=relationship("Article", back_populates="section") def __json__(self): return SectionSchema().dump(self)[0] def __init__(self, url=None,fname=None): self.url=url self.foreign_name=fname def title(self): t=self.name if t == None or t.strip()=="": t=self.foreign_name return t @classmethod def deserialize(cls,data): a=Section() for c in Section.__table__.columns: if data.has_key(c.key): setattr(a, c.key,data[c.key]) return a @classmethod def find_or_create(cls, fname): s=Section.query.filter(Section.foreign_name==fname).first() if s is None: s=Section(fname) db_session.add(s) db_session.commit() s.foreign_name=fname db_session.add(s) db_session.commit() return s class FullSectionSchema(Schema): id=fields.Integer() url =fields.String() crawlurl =fields.Integer() #published_date=fields.DateTime() #date=fields.DateTime(allow_none=True) name=fields.String() foreign_name=fields.String() group=fields.String() @post_load def make_section(self, data): return Article.deserialize(data) class ArticleCompSchema(Schema): id=fields.Integer() # text=fields.String() title=fields.String() author=fields.String() sourcetype =fields.String() image =fields.String() url =fields.String() published_date=fields.DateTime() date=fields.DateTime() first_fetched=fields.DateTime() section_id=fields.Integer() #from src.articles.model import ArticleCompSchema class SectionSchema(Schema): id=fields.Integer() foreign_name=fields.String() name=fields.String() # articles=fields.Nested(ArticleCompSchema,many=True)