mirror of https://github.com/veops/cmdb.git
51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
# -*- coding:utf-8 -*-
|
|
|
|
import os
|
|
import sys
|
|
from inspect import getmembers, 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"):
|
|
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)
|