Files
fachschaften/sections/model.py
2017-02-21 19:55:19 +01:00

111 lines
3.5 KiB
Python

from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.exc import IntegrityError, InvalidRequestError
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 OrganizationtypeCompSchema(Schema):
id =fields.Integer()
name=fields.String()
class OrganizationCompSchema(Schema):
id =fields.Integer()
name=fields.String()
organizationtype=fields.Nested(OrganizationtypeCompSchema)
class FullSectionSchema(Schema):
id=fields.Integer()
url =fields.String(allow_none=True )
crawlurl =fields.Integer(required=False,allow_none=True )
#published_date=fields.DateTime()
#date=fields.DateTime(allow_none=True)
name=fields.String(required=False,allow_none=True )
title=fields.String(dump_only=True)
foreign_name=fields.String()
group=fields.String(required=False,allow_none=True )
organization=fields.Nested(OrganizationCompSchema)
organization_id = fields.Integer()
updated_at = fields.DateTime()
created_at = fields.DateTime()
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))
organization_id=Column(Integer, ForeignKey('organizations.id'))
organization=relationship("Organization")
articles=relationship("Article", back_populates="section")
__schema__=FullSectionSchema
__whiteattrs__=["name", "organization_id", "url"]
__jsonattrs__ = ["name", "organization_id", "foreign_name", "title", "url", "name", "id", "organization.name", "organization.organizationtype.name", "updated_at"]
# def __json__(self):
# return SectionSchema().dump(self)[0]
def __init__(self, url=None,fname=None):
self.url=url
self.foreign_name=fname
# def dict(self):
# SectionSchema.dump(self)[0]
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=db_session.query(Section).filter(Section.foreign_name==fname).first()
if s is None:
s=Section(fname)
db_session.add(s)
try:
db_session.commit()
except (IntegrityError, InvalidRequestError),e:
db_session.rollback()
clogger.error(e)
s.foreign_name=fname
db_session.add(s)
db_session.commit()
return s
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)