# -*- coding:utf-8 -*- import os import sys from inspect import getmembers, isclass import six from flask import jsonify 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) API_PACKAGE = "api" 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"): module_path = os.path.join(API_PACKAGE, root[root.index("views"):]) if module_path not in sys.path: sys.path.insert(1, module_path) 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)