mirror of
https://github.com/veops/cmdb.git
synced 2025-08-07 06:09:48 +08:00
Modify code organization
This commit is contained in:
45
cmdb-api/api/resource.py
Normal file
45
cmdb-api/api/resource.py
Normal file
@@ -0,0 +1,45 @@
|
||||
# -*- 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)
|
Reference in New Issue
Block a user