Пример #1
0
from flask import Blueprint, abort
from flask_restful import Api
from flasgger import swag_from

from app.views import BaseResource

from app.models.facility import FacilityModel
from app.models.account import CareWorkerModel

from app.docs.daughter.info import *

api = Api(Blueprint(__name__, __name__))
api.prefix = '/daughter/info'


@api.resource('/facility/<facility_code>')
class ShowParticularFacility(BaseResource):
    @swag_from(DAUGHTER_SHOW_FACILITY_INFO_GET)
    def get(self, facility_code):
        fac_info = FacilityModel.objects(facility_code=facility_code).first()

        if not fac_info:
            abort(400)

        def get_average_value(val):
            return round(val / fac_info.evaluation_count,
                         1) if fac_info.evaluation_cost != 0 else 0

        one_line_e = [e for e in fac_info.one_line_evaluation]

        return {
Пример #2
0
from datetime import datetime
from bson import ObjectId

from flask import Blueprint, Response, request
from flask_restful import Api

from app.views.v1 import BaseResource
from app.views.v1 import admin_only

from app.models.account import StudentModel
from app.models.point import PointHistoryModel

api = Api(Blueprint('admin-student-point-api', __name__))
api.prefix = '/admin/managing'


@api.resource('/student')
class StudentManaging(BaseResource):
    @admin_only
    def get(self):
        """
        학생 목록 조회
        """
        response = [{
            'id':
            student.id,
            'name':
            student.name,
            'number':
            student.number,
            'good_point':
Пример #3
0
from binascii import hexlify
from hashlib import pbkdf2_hmac
from uuid import UUID

from flask import Blueprint, current_app, request
from flask_jwt_extended import get_jwt_identity, jwt_refresh_token_required
from flask_restful import Api, abort

from app.views.v1 import BaseResource

from app.models.account import AdminModel
from app.models.token import AccessTokenModelV2, RefreshTokenModelV2

api = Api(Blueprint('admin-auth-api', __name__))
api.prefix = '/admin'


@api.resource('/auth')
class Auth(BaseResource):

    def post(self):
        """
        관리자 로그인
        """
        id = request.form['id']
        pw = request.form['pw']

        pw = hexlify(pbkdf2_hmac(
            hash_name='sha256',
            password=pw.encode(),
            salt=current_app.secret_key.encode(),
Пример #4
0
def register_endpoints(
    app: Flask,
    db: Database,
    user_manager: UserManager,
    project_manager: ProjectManager,
    notification_manager: NotificationManager,
):
    api = Api(app)

    # Inject resource dependencies with the `resource_class_args` kwarg.
    api.prefix = "/api"
    api.add_resource(AccountResource, "/user/account")
    api.add_resource(ProfileResource, "/user/profile")
    api.add_resource(UserInvite, "/user/<string:uid>/invite")
    api.add_resource(UserInviteList, "/user/invite/list")
    api.add_resource(OtherProfile,
                     "/user/<string:uid>/profile",
                     resource_class_args=[user_manager])
    api.add_resource(FavouriteProjects,
                     "/user/favourites",
                     resource_class_args=[db])
    api.add_resource(ProgrammingLanguages,
                     "/programming_languages",
                     resource_class_args=[db])
    api.add_resource(Auth, "/auth", resource_class_args=[user_manager])
    api.add_resource(LogOut,
                     "/auth/logout",
                     resource_class_args=[user_manager])
    api.add_resource(ForgotPassword,
                     "/forgot_password",
                     resource_class_args=[db])
    api.add_resource(ResetPassword,
                     "/reset_password/<string:token>",
                     resource_class_args=[db])
    api.add_resource(NewProject, "/project")
    api.add_resource(ProjectResource,
                     "/project/<string:project_id>",
                     resource_class_args=[project_manager])
    api.add_resource(ProjectJoin,
                     "/project/<string:project_id>/join",
                     resource_class_args=[project_manager])
    api.add_resource(ProjectLeave,
                     "/project/<string:project_id>/leave",
                     resource_class_args=[project_manager])
    api.add_resource(ProjectKick,
                     "/project/<string:project_id>/kick",
                     resource_class_args=[project_manager])
    api.add_resource(ProjectList,
                     "/project/list",
                     resource_class_args=[project_manager])
    api.add_resource(ProjectRequest,
                     "/project/<string:project_id>/request",
                     resource_class_args=[project_manager])
    api.add_resource(ProjectRequestList,
                     "/project/requests",
                     resource_class_args=[project_manager])
    api.add_resource(SearchProjects,
                     "/project/search",
                     resource_class_args=[project_manager])
    api.add_resource(CourseList, "/course_list", resource_class_args=[db])
    api.add_resource(UserList, "/user_list", resource_class_args=[db])
    api.add_resource(NotificationResource,
                     "/notify",
                     resource_class_args=[notification_manager])

    return api
Пример #5
0
from flask import Blueprint
from flask_restful import Api

blueprint = Blueprint('post', __name__)
api = Api(blueprint)
api.prefix = '/post'

from .post import ShowAllPostView, WritePostView, OnePostView
api.add_resource(ShowAllPostView, '')
api.add_resource(WritePostView, '/write')
api.add_resource(OnePostView, '/<obj_id>')

from .comment import CommentView
api.add_resource(CommentView, '/comment/<obj_id>')
Пример #6
0
from flask import Blueprint, Response, request
from flask_restful import Api
from flasgger import swag_from

from app.docs.v2.admin.post.preview import *
from app.models.account import AdminModel
from app.views.v2 import BaseResource, auth_required, json_required
from app.views.v2.admin.post import CATEGORY_MODEL_MAPPING

api = Api(Blueprint(__name__, __name__))
api.prefix = '/admin/post-preview/<category>'


@api.resource('')
class Preview(BaseResource):
    @auth_required(AdminModel)
    @json_required({'id': str})
    @swag_from(PREVIEW_PATCH)
    def patch(self, category):
        """
        게시글 프리뷰 설정
        """
        payload = request.json

        id = payload['id']

        if category.upper() not in CATEGORY_MODEL_MAPPING:
            raise self.ValidationError('Invalid category')

        if len(id) != 24:
            return Response('', 204)
Пример #7
0
        code = e.code
    return jsonify(error=str(e)), code


for ex in default_exceptions:
    app.register_error_handler(ex, handle_error)

app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get(
    "SQLALCHEMY_DATABASE_URI")
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = os.environ.get(
    "SQLALCHEMY_TRACK_MODIFICATIONS")
app.config['BUNDLE_ERRORS'] = os.environ.get("BUNDLE_ERRORS")

db = SQLAlchemy(app)
api_app = Api(app)
api_app.prefix = '/api'

from api.docs.resource import DocsResource

api_app.add_resource(DocsResource, '/docs', '/docs/<int:docs>')

if __name__ == '__main__':
    app.run()

# путь к папке где лежат наши шаблоны
# FORMS_FOLDER = os.path.join(app.root_path, "forms")
# DEBUG = os.environ.get("DEBUG")

# # вовзвращает список шаблонов
# @app.route('/api/form')
# def forms():
Пример #8
0
from flask import Blueprint
from flask_restful import Api
from flasgger import swag_from

from app.docs.v2.mixed.metadata.developers import *
from app.views.v2 import BaseResource

api = Api(Blueprint(__name__, __name__))
api.prefix = '/metadata'


@api.resource('/developer-info')
class DeveloperInfo(BaseResource):
    @swag_from(DEVELOPER_INFO_GET)
    def get(self):
        """
        개발자 정보 조회
        """
        return self.unicode_safe_json_dumps({
            'app': ['조성빈', '이병찬', '윤정현', '이성현'],
            'server': ['김성래', '조민규', '인상민'],
            'webFrontend': ['김지수', '김건', '서윤호', '김형규', '오인서', '윤효상'],
            'desktop': ['김경식', '정원태', '김동현', '이종현', '류근찬'],
            'design': ['윤여환', '김동규']
        })
Пример #9
0
from flasgger import swag_from
from flask import Blueprint, Response, request
from flask_restful import Api

from app.docs.sample import *
from app.views import BaseResource

from app.models import db
from app.models.model import UserModel, BeforeMenstruationSymptom, SymptomData


api = Api(Blueprint('sample_module', __name__))
api.prefix = '/sample'


@api.resource('')
class Sample(BaseResource):
    @swag_from(SAMPLE_GET)
    def get(self):
        return Response('', 200)

    def post(self):
        id = request.form['id']
        password = request.form['password']
        menstruation_period = request.form['mp']

        row = UserModel(id=str(id), password=str(password), menstruation_period=int(menstruation_period),
                        is_rhythm_contraception=True,
                        is_standard_contraception=False)
        db.session.add(row)
        db.session.commit()
Пример #10
0
from datetime import datetime

from flask import Blueprint, Response, abort, g, request, current_app
from flask_restful import Api
from flasgger import swag_from

from app.docs.v2.student.apply.extension import *
from app.models.account import StudentModel
from app.models.apply import ExtensionApply11Model, ExtensionApply12Model
from app.views.v2 import BaseResource, auth_required, json_required

from utils.extension_meta import APPLY_START, APPLY_END_11, APPLY_END_12, MAPS

api = Api(Blueprint(__name__, __name__))
api.prefix = '/student/apply/extension'


def can_apply(end_time):
    return APPLY_START < datetime.now().time() < end_time


def can_apply_11():
    return can_apply(APPLY_END_11)


def can_apply_12():
    return can_apply(APPLY_END_12)


def apply_extension(model, class_num, seat_num) -> bool:
    if model.objects(class_=class_num, seat=seat_num):
Пример #11
0
# -*- coding: utf-8 -*-
from flask import Flask
from flask_restful import Api

from app.models import create_tables
from app.views import TestView, AlbumListView, AlbumView, ClassificationListView

app = Flask(__name__)
app.config.from_object('config')

api = Api(app)

api.prefix = '/api/v1'
api.add_resource(TestView, '/test')
api.add_resource(AlbumListView, '/album')
api.add_resource(AlbumView, '/album/<album_id>')
api.add_resource(ClassificationListView, '/classification')

if __name__ == '__main__':
    create_tables()
    app.run(host='0.0.0.0', port=6999, use_reloader=False)
Пример #12
0
import random
import time

from flask import Blueprint, request, abort
from flask_restful import Api, Resource
from flask_jwt_extended import jwt_required, get_jwt_identity

from models.service.market import Market_Model
from models.service.order import Orderlist_Model
from models.user.user_model import User_Model

api = Api(Blueprint(__name__, __name__))
api.prefix = '/service'


@api.resource('/reservation')
class RegisterMarket(Resource):
    @jwt_required
    def get(self):
        res = []

        order_list = Orderlist_Model.objects(
            customer_id=get_jwt_identity()).all()

        for order in order_list:
            res.append({
                "order_id":
                order['order_uuid'],
                "order_time":
                order['order_time'],
                "market_name":
import socketio

from flask import Blueprint, request, abort
from flask_restful import Api, Resource
from flask_jwt_extended import jwt_required, get_jwt_identity

from stuffs import skin
from models.mirror import MirrorModel

api = Api(Blueprint(__name__, __name__))
api.prefix = '/mirror'


@api.resource('/stuff')
class RegisterCharManagement(Resource):
    @jwt_required
    def get(self):
        mirror = MirrorModel.objects(mirror_key=get_jwt_identity()).first()

        try:
            now_skin = mirror['skin']
        except:
            now_skin = None

        return {
            'name': mirror['name'],
            'stuff': mirror['stuff'],
            'exp': mirror['exp'],
            'level': mirror['level'],
            'money': mirror['money'],
            'now_skin': now_skin
Пример #14
0
from flask import Blueprint, request, Response, abort
from flask_restful import Api
from werkzeug.security import generate_password_hash
from flasgger import swag_from

from app.views import BaseResource, json_required

from app.models.account import DaughterModel

from app.docs.daughter.signup import DAUGHTER_SIGNUP_POST

api = Api(Blueprint(__name__, __name__))
api.prefix = '/daughter'


@api.resource('/signup')
class DaughterSignup(BaseResource):
    @swag_from(DAUGHTER_SIGNUP_POST)
    @json_required({
        'id': str,
        'pw': str,
        'phoneNumber': str,
        'name': str,
        'age': int,
    })
    def post(self):
        req = request.json
        id = req['id']

        if DaughterModel.objects(id=id).first():
            abort(409)
Пример #15
0
from flask import Blueprint, request, Response, abort, current_app
from flask_restful import Api
from flasgger import swag_from
from flask_jwt_extended import get_jwt_identity
from werkzeug.security import check_password_hash

from app.views import BaseResource, json_required, auth_required

from app.models.account import DaughterModel
from app.models.patient import *

from app.docs.daughter.my_page import *

api = Api(Blueprint(__name__, __name__))
api.prefix = '/daughter/my_page'

# @api.resource('')
# class MyPage(BaseResource):
#     @auth_required(DaughterModel)
#     def get(self):
#         daughter = DaughterModel.objects(id=get_jwt_identity()).first()
#
#         return self.unicode_safe_json_dumps({
#             'name': daughter.name
#         }, 200)


@api.resource('/account_info')
class ViewAccountInfo(BaseResource):
    @swag_from(DAUGHTER_VIEW_ACCOUNT_INFO_GET)
Пример #16
0
import time

from flask import Blueprint, request
from flask_restful import Api, Resource
from sqlalchemy import and_

from tenderloin.app.models.homework import HomeworkModel
from tenderloin.app.models.singlefiles import SinglefileModel
from tenderloin.app.models.user import UserModel

from tenderloin.app.services import jwt_checker, user_type_checker


api = Api(Blueprint(__name__, __name__))
api.prefix = "/tenderloin"


@api.resource("/admin/homework/personal")
class personal_homework(Resource):
    def get(self):
        type = user_type_checker(jwt_checker(request.headers["Authorization"][7:]))

        if not (type == 1 or type == 2):
            return {"message": "your not admin"}

        personal_homeworks = HomeworkModel.query.filter_by(homework_type=0).all()

        res = []

        for personal_homework in personal_homeworks:
            c_1, c_2, c_3, c_4 = [], [], [], []
Пример #17
0
from flask import Blueprint, request, Response, abort
from flask_restful import Api
from flask_jwt_extended import get_jwt_identity
from flasgger import swag_from

from app.views import BaseResource, json_required, auth_required

from app.models.account import CareWorkerModel, DaughterModel
from app.models.connect import RequestModel
from app.models.patient import PatientModel

from app.docs.careworker.patients import *

api = Api(Blueprint(__name__, __name__))
api.prefix = '/care'


@api.resource('/patients')
class ViewPatientsList(BaseResource):
    @swag_from(CARE_VIEW_PATIENTS_LIST_GET)
    @auth_required(CareWorkerModel)
    def get(self):
        c = CareWorkerModel.objects(id=get_jwt_identity()).first()
        reqs = RequestModel.objects(care_worker=c)
        patients = PatientModel.objects(care_worker=c)
        data = {
            'connectionRequests': [{
                'req_id': req.req_id,
                'requester_id': req.requester_id,
                'r_name': req.requester_name,
Пример #18
0
try:
    from secrets import token_hex
except ImportError:
    from os import urandom

    def token_hex(nbytes=None):
        return urandom(nbytes).hex()

# This is the rest controller, it controls every query/update done trough rest (everything in the /api/* site section)

# sqlalchemy session used to make query and updates
session = db.session  # type: Session


api = Api()
api.prefix = "/api"


secret_key = token_hex(32)
passw_serializer = JSONWebSignatureSerializer(secret_key)

site_image = image.ImageManager()


# ---------------- Utility methods ----------------
# Utility methods used to automate the creation and query of resources
# Every GET, POST and PUT can use an utility method that discovers which
# field to use/update, also checking foreign key constraints (that some databases
# could not check).
# These methods already handle cases such as resource not found and missing field
# and handle them accordingly (ex: source not found -> throw 404)
Пример #19
0
from flask import Response, abort, request
from flask_restful import Api
from flask_jwt_extended import create_access_token, create_refresh_token
from werkzeug.security import check_password_hash

from app.views import BaseResource, api_blueprint
from app.models.account import UserModel as User

api = Api(api_blueprint)
api.prefix = ''


@api.resource('/login')
class Login(BaseResource):
    def post(self):
        """
        로그인
        """
        payload = request.json

        id = payload['id']
        pw = payload['pw']

        users = User.select().where(User.id == id)

        user = users[0]

        if not user:
            abort(401)

        if not check_password_hash(user.pw_hashed, pw):
Пример #20
0
from flask import Blueprint, request, abort
from flask_restful import Api, Resource
from flask_jwt_extended import jwt_required, get_jwt_identity

from models.user.user_model import User_Model

api = Api(Blueprint(__name__, __name__))
api.prefix = '/user'


@api.resource('/point')
class PointManagement(Resource):
    @jwt_required
    def put(self):
        change_point = request.json['point']
        finder = User_Model.objects(id=get_jwt_identity()).first()

        finder.update(point=finder['point'] + change_point)

        return '', 201
Пример #21
0
from flask import Blueprint, Response
from flask_restful import Api
from flasgger import swag_from

from app.docs.v2.mixed.post.post import *
from app.views.v2 import BaseResource
from app.views.v2.admin.post import CATEGORY_MODEL_MAPPING

api = Api(Blueprint(__name__, __name__))
api.prefix = '/post/<category>'


@api.resource('')
class PostList(BaseResource):
    @swag_from(POST_LIST_GET)
    def get(self, category):
        """
        게시글 목록 조회
        """
        if category.upper() not in CATEGORY_MODEL_MAPPING:
            raise self.ValidationError('Invalid category')

        return [{
            'id': str(post.id),
            'writeTime': post.write_time.strftime('%Y-%m-%d'),
            'author': post.author,
            'title': post.title,
            'pinned': post.pinned
        } for post in CATEGORY_MODEL_MAPPING[category.upper()].objects]

Пример #22
0
from flask import Blueprint, Response, request
from flask_restful import Api
from flasgger import swag_from

from app.docs.v2.student.account.auth import *
from app.models.account import StudentModel
from app.models.token import AccessTokenModelV2, RefreshTokenModelV2
from app.views.v2 import BaseResource, json_required

api = Api(Blueprint(__name__, __name__))
api.prefix = '/student'


@api.resource('/auth')
class Auth(BaseResource):
    @json_required({'id': str, 'password': str})
    @swag_from(AUTH_POST)
    def post(self):
        """
        학생 로그인 
        """
        payload = request.json

        student = StudentModel.objects(id=payload['id'], pw=self.encrypt_password(payload['password'])).first()

        return ({
            'accessToken': AccessTokenModelV2.create_access_token(student, request.headers['USER-AGENT']),
            'refreshToken': RefreshTokenModelV2.create_refresh_token(student, request.headers['USER-AGENT'])
        }, 201) if student else Response('', 401)
Пример #23
0
from uuid import UUID

from flask import Blueprint, Response, abort, request
from flask_jwt_extended import create_access_token, get_jwt_identity, jwt_refresh_token_required
from flask_restful import Api
from flasgger import swag_from

from app.docs.jwt.refresh import *
from app.models.account import TokenModel, AccessTokenModel, RefreshTokenModel
from app.views import BaseResource

api = Api(Blueprint(__name__, __name__))
api.prefix = '/jwt'


@api.resource('/refresh')
class Refresh(BaseResource):
    @jwt_refresh_token_required
    @swag_from(REFRESH_GET)
    def get(self):
        try:
            token = RefreshTokenModel.objects(
                identity=UUID(get_jwt_identity())).first()

            if not token:
                abort(401)

            return {
                'accessToken':
                create_access_token(
                    TokenModel.generate_token(AccessTokenModel, token.owner,
Пример #24
0
from flask import Blueprint, Response, request
from flask_restful import Api

from app.views.v1 import BaseResource
from app.views.v1 import admin_only

from app.models.post import FAQModel, NoticeModel, RuleModel

api = Api(Blueprint('admin-preview-api', __name__))
api.prefix = '/admin/preview'


@api.resource('/faq')
class FAQPreviewManaging(BaseResource):
    @admin_only
    def post(self):
        """
        FAQ 프리뷰 설정
        """
        id = request.form.get('id')
        if len(id) != 24:
            return Response('', 204)

        faq = FAQModel.objects(id=id).first()
        if not faq:
            return Response('', 204)

        pinned_faq = FAQModel.objects(pinned=True).first()
        if pinned_faq:
            pinned_faq.update(pinned=False)
Пример #25
0
    return jsonify(error=str(e)), code


for ex in default_exceptions:
    app.register_error_handler(ex, handle_error)

app.config['SQLALCHEMY_DATABASE_URI'] = settings.SQLALCHEMY_DATABASE_URI
app.config[
    'SQLALCHEMY_TRACK_MODIFICATIONS'] = settings.SQLALCHEMY_TRACK_MODIFICATIONS
app.config['BUNDLE_ERRORS'] = settings.BUNDLE_ERRORS

db = SQLAlchemy(app)
# this import must be after db (cyclic imports)
#from endpoints.cure.resource import errors as CureErrors
api = Api(app)  #,errors=CureErrors)
api.prefix = '/api'

from endpoints.users.resource import UsersResource
from endpoints.todos.resource import TodosResource
from endpoints.bu.resource import BUResource
from endpoints.comp.resource import CompoundResource
from endpoints.cure.resource import CuredbResource

api.add_resource(UsersResource, '/users', '/users/<int:user_id>')
api.add_resource(TodosResource, '/todos', '/todos/<int:todo_id>')
api.add_resource(CompoundResource, '/compounds', '/compounds/<int:comp_id>')
api.add_resource(BUResource, '/bu', '/bu/<int:bu_id>')
api.add_resource(CuredbResource, '/cures', '/cures/<int:cure_id>')

if __name__ == '__main__':
    app.run()
Пример #26
0
from flask import Blueprint, g
from flask_restful import Api
from flasgger import swag_from

from app.docs.v2.student.account.info import *
from app.models.account import StudentModel
from app.models.apply import ExtensionApply11Model, ExtensionApply12Model, GoingoutApplyModel, StayApplyModel
from app.views.v2 import BaseResource, auth_required

api = Api(Blueprint(__name__, __name__))
api.prefix = '/student/info'


@api.resource('/apply')
class ApplyInfo(BaseResource):
    @swag_from(APPLY_INFO_GET)
    @auth_required(StudentModel)
    def get(self):
        """
        학생 신청 정보 확인
        """
        extension11 = ExtensionApply11Model.objects(student=g.user).first()
        extension12 = ExtensionApply12Model.objects(student=g.user).first()
        goingout = GoingoutApplyModel.objects(student=g.user).first()
        stay = StayApplyModel.objects(student=g.user).first()

        return {
            'extension11': {
                'classNum': extension11.class_,
                'seatNum': extension11.seat
            } if extension11 else None,
Пример #27
0
from flask import Blueprint, request
from flask_restful import Api, Resource

from app.views import json_required

api = Api(Blueprint('sample_api', __name__))
api.prefix = '/prefix'


@api.resource('/sample')
class Sample(Resource):
    @json_required('name', 'age')
    def post(self):
        return request.json
Пример #28
0
from flask import Blueprint
from flask_restful import Api

account_blueprint = Blueprint('account', __name__)
api = Api(account_blueprint)
api.prefix = '/account'

from .account import ShowMyProfileView
api.add_resource(ShowMyProfileView, '/profile')

from .auth import RegisterView, LoginView, GetRefreshTokenView
api.add_resource(RegisterView, '/register')
api.add_resource(LoginView, '/login')
api.add_resource(GetRefreshTokenView, '/refresh')

from .inform import ChangePWView, ChangeNicknameView
api.add_resource(ChangePWView, '/pw')
api.add_resource(ChangeNicknameView)

from .follow import FollowView
api.add_resource(FollowView, '/follow/<nickname>')
Пример #29
0
from datetime import datetime
from slacker import Slacker

from flask import Blueprint, Response, g, request, current_app
from flask_restful import Api
from flasgger import swag_from

from app.docs.v2.student.report.bug_report import *
from app.models.account import StudentModel
from app.views.v2 import BaseResource, auth_required, json_required

api = Api(Blueprint(__name__, __name__))
api.prefix = '/student/report'


@api.resource('/bug')
class BugReport(BaseResource):
    def __init__(self):
        self.slack_bot = Slacker(current_app.config['SLACK_BOT_TOKEN'])

        self.PLATFORM_TYPES = {
            1: 'Web',
            2: 'Android',
            3: 'iOS'
        }

        super(BugReport, self).__init__()

    @swag_from(BUG_REPORT_POST)
    @json_required({'platform': int, 'content': str})
    @auth_required(StudentModel)
Пример #30
0
from flask import Blueprint, request, Response, abort
from flask_restful import Api
from flasgger import swag_from

from app.views import BaseResource, json_required, auth_required

from app.models.account import CareWorkerModel, DaughterModel
from app.models.facility import FacilityModel

from app.docs.daughter.evaluate import *

api = Api(Blueprint(__name__, __name__))
api.prefix = '/daughter/evaluate'


@api.resource('/facility/<facility_code>')
class EvaluateMyFacility(BaseResource):
    @swag_from(DAUGHTER_EVALUATE_FACILITY_PATCH)
    @auth_required(DaughterModel)
    @json_required({
        'equipment': int,
        'meal': int,
        'schedule': int,
        'cost': int,
        'service': int,
        'overall': float
    })
    def patch(self, facility_code):
        target = FacilityModel.objects(facility_code=facility_code).first()

        if not target: