summaryrefslogtreecommitdiffstats
path: root/engine/src/valet/engine/db_connect/db_apis/mem_db.py
blob: c6fc32900cbd834cfdfe1cb155ccb76ca04dc3e9 (plain)
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#
# -------------------------------------------------------------------------
#   Copyright (c) 2019 AT&T Intellectual Property
#
#   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


class MemDB(object):

    def __init__(self, _config, _logger):
        self.logger = _logger

        self.keyspace = _config.get("keyspace")
        self.requests_table = _config.get("requests_table")
        self.results_table = _config.get("results_table")
        self.group_rules_table = _config.get("group_rules_table")
        self.groups_table = _config.get("groups_table")
        self.stacks_table = _config.get("stacks_table")
        self.resources_table = _config.get("resources_table")
        self.stack_id_map_table = _config.get("stack_id_map_table")

        self.requests = {}
        self.results = {}
        self.group_rules = {}
        self.groups = {}
        self.stacks = {}
        self.resources = {}
        self.stack_id_map = {}

    def read_all_rows(self, keyspace, table):
        rows = {"result": {}}

        if table == self.requests_table:
            for k, v in self.requests.items():
                rows["result"][k] = copy.deepcopy(v)
        elif table == self.results_table:
            for k, v in self.results.items():
                rows["result"][k] = copy.deepcopy(v)
        elif table == self.group_rules_table:
            for k, v in self.group_rules.items():
                rows["result"][k] = copy.deepcopy(v)
        elif table == self.groups_table:
            for k, v in self.groups.items():
                rows["result"][k] = copy.deepcopy(v)

        return rows

    def insert_atom(self, keyspace, table, data, name=None, value=None):
        if table == self.requests_table:
            self.requests[data['request_id']] = data
        elif table == self.results_table:
            self.results[data['request_id']] = data
        elif table == self.group_rules_table:
            self.group_rules[data['id']] = data
        elif table == self.groups_table:
            self.groups[data['id']] = data
        elif table == self.resources_table:
            self.resources[data['id']] = data
        elif table == self.stacks_table:
            self.stacks[data['id']] = data
        elif table == self.stack_id_map_table:
            self.stack_id_map[data['request_id']] = data

    def delete_atom(self, keyspace, table, pk_name, pk_value):
        if table == self.requests_table:
            if pk_value in self.requests.keys():
                del self.requests[pk_value]
        elif table == self.groups_table:
            if pk_value in self.groups.keys():
                del self.groups[pk_value]
        elif table == self.results_table:
            if pk_value in self.results.keys():
                del self.results[pk_value]

    def read_row(self, keyspace, table, pk_name, pk_value):
        row = {"result": {}}

        if table == self.requests_table:
            if pk_value in self.requests.keys():
                row["result"]["row 0"] = copy.deepcopy(self.requests[pk_value])
        elif table == self.results_table:
            if pk_value in self.results.keys():
                row["result"]["row 0"] = copy.deepcopy(self.results[pk_value])
        elif table == self.resources_table:
            if pk_value in self.resources.keys():
                row["result"]["row 0"] = copy.deepcopy(self.resources[pk_value])
        elif table == self.group_rules_table:
            if pk_value in self.group_rules.keys():
                row["result"]["row 0"] = copy.deepcopy(self.group_rules[pk_value])
        elif table == self.stack_id_map_table:
            if pk_value in self.stack_id_map.keys():
                row["result"]["row 0"] = copy.deepcopy(self.stack_id_map[pk_value])
        elif table == self.stacks_table:
            if pk_value in self.stacks.keys():
                row["result"]["row 0"] = copy.deepcopy(self.stacks[pk_value])

        return row

    def create_lock(self, _key):
        return "$x--0000000000"

    def delete_lock(self, _key):
        pass