organizations&organizationtypes
This commit is contained in:
0
organizations/__init__.py
Normal file
0
organizations/__init__.py
Normal file
21
organizations/controller.py
Normal file
21
organizations/controller.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from src.controller import BaseController
|
||||
from model import Organization
|
||||
from src.models import Article, Section
|
||||
from src.database import db_session
|
||||
class OrgController(BaseController):
|
||||
__myclass__= Organization
|
||||
__jsonid__ = 'organization'
|
||||
def get_articles(self,id):
|
||||
sid=db_session.query(Section.id).filter(Section.organization_id==id).all()
|
||||
sid=map(lambda a:a[0], sid)
|
||||
articles=Article.query.filter(Article.section_id.in_(sid)).all()
|
||||
return articles
|
||||
|
||||
def get_by_key_articles(self,key):
|
||||
org=self.get_by_key(key)
|
||||
return self.get_articles(org.id)
|
||||
|
||||
def get_by_key(self,key):
|
||||
return Organization.query.filter(Organization.key==key).one()
|
||||
|
||||
controller=OrgController()
|
||||
65
organizations/model.py
Normal file
65
organizations/model.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text, ForeignKey, Index, TIMESTAMP
|
||||
from sqlalchemy.orm import relationship, validates
|
||||
from src.organizationtypes.model import Organizationtype
|
||||
from datetime import datetime
|
||||
from src.database import Base,db_session
|
||||
from marshmallow import Schema, fields, post_load, ValidationError
|
||||
from src import clogger
|
||||
import json
|
||||
import flask
|
||||
from src.models import Section
|
||||
import re
|
||||
|
||||
def validate_key(key):
|
||||
if re.search('[\s)(?*/&+?]+', key) is not None:
|
||||
raise ValidationError("Special Character not allowed")
|
||||
if key.strip()=="":
|
||||
raise ValidationError("No empty keys allowed")
|
||||
return key
|
||||
|
||||
class OrganizationtypeCompSchema(Schema):
|
||||
id =fields.Integer()
|
||||
name=fields.String()
|
||||
|
||||
class FullOrganizationSchema(Schema):
|
||||
id = fields.Integer()
|
||||
key=fields.String(validate=validate_key)
|
||||
url = fields.String()
|
||||
name = fields.String()
|
||||
image = fields.String()
|
||||
updated_at = fields.DateTime()
|
||||
created_at = fields.DateTime()
|
||||
# organizationtype_id = fields.Integer()
|
||||
organizationtype=fields.Nested(OrganizationtypeCompSchema)
|
||||
|
||||
class Organization(Base):
|
||||
__tablename__ = 'organizations'
|
||||
url = Column(String(250))
|
||||
name=Column(String(250),nullable=False)
|
||||
key=Column(String(250), unique=True, nullable=False)
|
||||
Index("key", "key")
|
||||
sections=relationship("Section", back_populates="organization")
|
||||
image=Column(String(250))
|
||||
organizationtype_id=Column(Integer, ForeignKey('organizationtypes.id'))
|
||||
organizationtype=relationship("Organizationtype")
|
||||
text = Column(Text)
|
||||
__schema__= FullOrganizationSchema
|
||||
__jsonid__= 'organization'
|
||||
__whiteattrs__= ["url", "name", "image","key", "organizationtype_id"]
|
||||
__jsonattrs__= ["id", "url", "name", "updated_at", "created_at", "image", "key","organizationtype.name","text" ] # None means all
|
||||
|
||||
@validates('key')
|
||||
def _validate_key(self,k, key):
|
||||
return validate_key(key)
|
||||
def __init__(self, data={}):
|
||||
self.update(data,False)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#class OrganizationSchema(Schema):
|
||||
# id = fields.Integer()
|
||||
# url = fields.String()
|
||||
# name = fields.String()
|
||||
# image = fields.String()
|
||||
73
organizations/views.py
Normal file
73
organizations/views.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from flask import Blueprint, jsonify, render_template, abort, redirect, url_for, request
|
||||
|
||||
organization_pages = Blueprint('organizations', __name__)
|
||||
from src.organizations.controller import controller
|
||||
|
||||
#from src.database import db_session, read_json
|
||||
#from .model import Organization #, OrganizationSchema
|
||||
#from datetime import datetime
|
||||
#import json
|
||||
#from src import clogger
|
||||
#import flask
|
||||
|
||||
|
||||
@organization_pages.route("/")
|
||||
@organization_pages.route("")
|
||||
@organization_pages.route(".json")
|
||||
def index():
|
||||
organizations=controller.get_all()
|
||||
return jsonify(organizations=organizations)
|
||||
|
||||
@organization_pages.route("/<int:id>",methods=['GET'])
|
||||
@organization_pages.route("/<int:id>.json",methods=['GET'])
|
||||
def get(id):
|
||||
organization=controller.get(id)
|
||||
return jsonify(organization=organization)
|
||||
|
||||
@organization_pages.route("/<string:key>",methods=['GET'])
|
||||
@organization_pages.route("/<string:key>.json",methods=['GET'])
|
||||
def get_by_key(key):
|
||||
organization=controller.get_by_key(key)
|
||||
return jsonify(organization=organization)
|
||||
|
||||
@organization_pages.route("/<string:key>/articles",methods=['GET'])
|
||||
@organization_pages.route("/<string:key>/articles.json",methods=['GET'])
|
||||
def get_articles_by_key(key):
|
||||
organization=controller.get_by_key(key)
|
||||
articles=controller.get_by_key_articles(key)
|
||||
return jsonify(organization=organization, articles=articles)
|
||||
|
||||
@organization_pages.route("/<int:id>/sections",methods=['GET'])
|
||||
@organization_pages.route("/<int:id>/sections.json",methods=['GET'])
|
||||
def get_sections(id):
|
||||
organization=Organization.query.get(id)
|
||||
sections=organization.sections
|
||||
return jsonify(organization=organization, sections=sections)
|
||||
|
||||
@organization_pages.route("/<int:id>/articles",methods=['GET'])
|
||||
@organization_pages.route("/<int:id>/articles.json",methods=['GET'])
|
||||
def get_articles(id):
|
||||
articles=controller.get_articles(id)
|
||||
organization=controller.get(id)
|
||||
return jsonify(organization=organization, articles=articles)
|
||||
|
||||
|
||||
@organization_pages.route("/<int:id>",methods=['PUT'])
|
||||
@organization_pages.route("/<int:id>.json",methods=['PUT'])
|
||||
def update(id):
|
||||
o,errors=controller.update(id,request)
|
||||
return jsonify(organization=o, errors=errors)
|
||||
|
||||
@organization_pages.route("/<int:id>",methods=['DELETE'])
|
||||
@organization_pages.route("/<int:id>.json",methods=['DELETE'])
|
||||
def delete(id):
|
||||
controller.delete(id)
|
||||
return jsonify()
|
||||
|
||||
|
||||
@organization_pages.route("/",methods=['POST'])
|
||||
@organization_pages.route("",methods=['POST'])
|
||||
@organization_pages.route(".json",methods=['POST'])
|
||||
def create():
|
||||
organization,errors=controller.create(request)
|
||||
return jsonify(organization=organization,errors=errors)
|
||||
Reference in New Issue
Block a user