mirror of https://github.com/veops/cmdb.git
74 lines
1.9 KiB
Python
74 lines
1.9 KiB
Python
# -*- coding:utf-8 -*-
|
|
|
|
|
|
import time
|
|
from functools import wraps
|
|
|
|
from flask import request
|
|
from flask import render_template
|
|
from flask import current_app
|
|
|
|
from lib.exception import InvalidUsageError
|
|
|
|
|
|
def templated(template=None):
|
|
def decorator(f):
|
|
@wraps(f)
|
|
def decorated_function(*args, **kwargs):
|
|
template_name = template
|
|
if template_name is None:
|
|
template_name = request.endpoint.replace('.', '/') + '.html'
|
|
ctx = f(*args, **kwargs)
|
|
if ctx is None:
|
|
ctx = {}
|
|
elif not isinstance(ctx, dict):
|
|
return ctx
|
|
return render_template(template_name, **ctx)
|
|
|
|
return decorated_function
|
|
|
|
return decorator
|
|
|
|
|
|
def argument_required1(*args_required):
|
|
from manage import InvalidUsageError
|
|
|
|
def decorator(f):
|
|
@wraps(f)
|
|
def decorated_function(*args, **kwargs):
|
|
for arg in args_required:
|
|
if request.values.get(arg, None) is None:
|
|
raise InvalidUsageError(
|
|
"argument {0} is required".format(arg), 400)
|
|
return f(*args, **kwargs)
|
|
|
|
return decorated_function
|
|
|
|
return decorator
|
|
|
|
|
|
class argument_required(object):
|
|
def __init__(self, *args):
|
|
self.args = args
|
|
|
|
def __enter__(self):
|
|
for arg in self.args:
|
|
if not request.values.get(arg):
|
|
raise InvalidUsageError(
|
|
"argument {0} is required".format(arg), status_code=400)
|
|
|
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
pass
|
|
|
|
|
|
def url_statistic(f):
|
|
@wraps(f)
|
|
def decorated_func(*args, **kwargs):
|
|
start = time.time()
|
|
r = f(*args, **kwargs)
|
|
spend = time.time() - start
|
|
url = request.path
|
|
current_app.logger.info(url)
|
|
current_app.logger.info(spend)
|
|
return r
|
|
return decorated_func |