qinling-dashboard/qinling_dashboard/api/qinling.py

185 lines
5.2 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import json
from django.conf import settings
from horizon.utils.memoized import memoized
from openstack_dashboard.api import base
from openstack_dashboard.contrib.developer.profiler import api as profiler
from qinlingclient import client as qinling_client
@memoized
def qinlingclient(request, password=None):
api_version = "1"
insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
cacert = getattr(settings, 'OPENSTACK_SSL_CACERT', None)
endpoint = base.url_for(request, 'function-engine')
kwargs = {
'token': request.user.token.id,
'insecure': insecure,
'ca_file': cacert,
'username': request.user.username,
'password': password
}
client = qinling_client.Client(api_version, endpoint, **kwargs)
return client
@profiler.trace
def runtimes_list(request):
return qinlingclient(request).runtimes.list()
@profiler.trace
def runtime_get(request, runtime_id):
return qinlingclient(request).runtimes.get(runtime_id)
def runtime_create(request, **params):
resource = qinlingclient(request).runtimes.create(**params)
return resource
def set_code(datum):
if isinstance(datum.code, str):
code_dict = json.loads(datum.code)
setattr(datum, "code", code_dict)
@profiler.trace
def functions_list(request, with_version=False):
functions = qinlingclient(request).functions.list()
for f in functions:
set_code(f)
if with_version:
for f in functions:
function_id = f.id
my_versions = \
qinlingclient(request).function_versions.list(function_id)
setattr(f, 'versions', my_versions)
return functions
@profiler.trace
def function_get(request, function_id):
function = qinlingclient(request).functions.get(function_id)
set_code(function)
return function
@profiler.trace
def function_create(request, **params):
resource = qinlingclient(request).functions.create(**params)
return resource
@profiler.trace
def function_update(request, function_id, **params):
resource = qinlingclient(request).functions.update(function_id, **params)
return resource
@profiler.trace
def function_delete(request, function_id):
qinlingclient(request).functions.delete(function_id)
@profiler.trace
def function_download(request, function_id):
function = qinlingclient(request).functions.get(function_id,
download=True)
return function
def set_result(datum):
if isinstance(datum.result, str):
result_dict = json.loads(datum.result)
setattr(datum, "result", result_dict)
@profiler.trace
def executions_list(request, function_id=None):
executions = qinlingclient(request).function_executions.list()
for e in executions:
set_result(e)
if function_id:
executions = [e for e in executions
if e.function_id == function_id]
return executions
@profiler.trace
def execution_get(request, execution_id):
execution = qinlingclient(request).function_executions.get(execution_id)
set_result(execution)
return execution
@profiler.trace
def execution_create(request, function_id, version=0,
sync=True, input=None):
execution = qinlingclient(request).function_executions.\
create(function_id, version, sync, input)
return execution
@profiler.trace
def execution_delete(request, execution_id):
qinlingclient(request).function_executions.delete(execution_id)
@profiler.trace
def execution_log_get(request, execution_id):
try:
jr = qinlingclient(request).\
function_executions.http_client.json_request
resp, body = jr('/v1/executions/%s/log' % execution_id, 'GET')
raw_logs = resp._content
except Exception:
raw_logs = ""
return raw_logs
@profiler.trace
def versions_list(request, function_id):
versions = qinlingclient(request).function_versions.list(function_id)
return versions
@profiler.trace
def version_get(request, function_id, version_number):
version = qinlingclient(request).function_versions.get(function_id,
version_number)
return version
@profiler.trace
def version_create(request, function_id, description=""):
version = qinlingclient(request).function_versions.create(function_id,
description)
return version
@profiler.trace
def version_delete(request, function_id, version_number):
qinlingclient(request).function_versions.delete(function_id,
version_number)