File: client.py

package info (click to toggle)
python-mistralclient 1%3A4.1.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,008 kB
  • sloc: python: 10,013; sh: 133; makefile: 23
file content (91 lines) | stat: -rw-r--r-- 3,612 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# Copyright 2014 - Mirantis, Inc.
# Copyright 2015 - StackStorm, Inc.
#
#    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 copy

from oslo_utils import importutils

from mistralclient.api import httpclient
from mistralclient.api.v2 import action_executions
from mistralclient.api.v2 import actions
from mistralclient.api.v2 import cron_triggers
from mistralclient.api.v2 import environments
from mistralclient.api.v2 import event_triggers
from mistralclient.api.v2 import executions
from mistralclient.api.v2 import members
from mistralclient.api.v2 import services
from mistralclient.api.v2 import tasks
from mistralclient.api.v2 import workbooks
from mistralclient.api.v2 import workflows
from mistralclient import auth


osprofiler_profiler = importutils.try_import("osprofiler.profiler")

_DEFAULT_MISTRAL_URL = "http://localhost:8989/v2"


class Client(object):

    def __init__(self, auth_type='keystone', **kwargs):
        # We get the session at this point, as some instances of session
        # objects might have mutexes that can't be deep-copied.
        session = kwargs.pop('session', None)
        req = copy.deepcopy(kwargs)
        mistral_url = req.get('mistral_url')
        profile = req.get('profile')

        if mistral_url and not isinstance(mistral_url, str):
            raise RuntimeError('Mistral url should be a string.')

        # If auth url was provided then we perform an authentication, otherwise
        # just ignore this step
        if req.get('auth_url') or req.get('target_auth_url'):
            auth_handler = auth.get_auth_handler(auth_type)
            auth_response = auth_handler.authenticate(req, session=session)
        else:
            auth_response = {}

        if session is None:
            # If the session was None and we're using keystone auth, it will be
            # created by the auth_handler.
            session = auth_response.pop('session', None)

        req.update(auth_response)

        mistral_url = auth_response.get('mistral_url') or mistral_url

        if not mistral_url:
            mistral_url = _DEFAULT_MISTRAL_URL

        if profile:
            osprofiler_profiler.init(profile)

        http_client = httpclient.HTTPClient(mistral_url, session=session,
                                            **req)

        # Create all resource managers.
        self.workbooks = workbooks.WorkbookManager(http_client)
        self.executions = executions.ExecutionManager(http_client)
        self.tasks = tasks.TaskManager(http_client)
        self.actions = actions.ActionManager(http_client)
        self.workflows = workflows.WorkflowManager(http_client)
        self.cron_triggers = cron_triggers.CronTriggerManager(http_client)
        self.event_triggers = event_triggers.EventTriggerManager(http_client)
        self.environments = environments.EnvironmentManager(http_client)
        self.action_executions = action_executions.ActionExecutionManager(
            http_client)
        self.services = services.ServiceManager(http_client)
        self.members = members.MemberManager(http_client)