# -*- coding:utf-8 -*- import os import sys from inspect import getmembers from inspect import isclass import six from flask import jsonify from flask import send_file from flask_restful import Resource from api.lib.perm.auth import auth_required class APIView(Resource): method_decorators = [auth_required] def __init__(self): super(APIView, self).__init__() @staticmethod def jsonify(*args, **kwargs): return jsonify(*args, **kwargs) @staticmethod def send_file(*args, **kwargs): return send_file(*args, **kwargs) API_PACKAGE = os.path.abspath(os.path.dirname(__file__)) def register_resources(resource_path, rest_api): for root, _, files in os.walk(os.path.join(resource_path)): for filename in files: if not filename.startswith("_") and filename.endswith("py"): if root not in sys.path: sys.path.insert(1, root) view = __import__(os.path.splitext(filename)[0]) resource_list = [o[0] for o in getmembers(view) if isclass(o[1]) and issubclass(o[1], Resource)] resource_list = [i for i in resource_list if i != "APIView"] for resource_cls_name in resource_list: resource_cls = getattr(view, resource_cls_name) if not hasattr(resource_cls, "url_prefix"): resource_cls.url_prefix = ("",) if isinstance(resource_cls.url_prefix, six.string_types): resource_cls.url_prefix = (resource_cls.url_prefix,) rest_api.add_resource(resource_cls, *resource_cls.url_prefix)