• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

atlanticwave-sdx / sdx-controller / 9530886246

15 Jun 2024 09:07PM UTC coverage: 52.322% (-0.1%) from 52.459%
9530886246

push

github

web-flow
Merge pull request #293 from atlanticwave-sdx/update-failure-handling

Update failure handling

301 of 551 branches covered (54.63%)

Branch coverage included in aggregate %.

8 of 17 new or added lines in 4 files covered. (47.06%)

1 existing line in 1 file now uncovered.

758 of 1473 relevant lines covered (51.46%)

2.06 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.89
/sdx_controller/utils/db_utils.py
1
import json
4✔
2
import logging
4✔
3
import os
4✔
4

5
import pymongo
4✔
6

7
COLLECTION_NAMES = ["topologies", "connections", "breakdowns", "domains", "links"]
4✔
8

9
pymongo_logger = logging.getLogger("pymongo")
4✔
10
pymongo_logger.setLevel(logging.INFO)
4✔
11

12

13
class DbUtils(object):
4✔
14
    def __init__(self):
4✔
15
        self.db_name = os.environ.get("DB_NAME")
4✔
16
        if self.db_name is None:
4✔
17
            raise Exception("DB_NAME environment variable is not set")
4✔
18

19
        # self.config_table_name = os.environ.get("DB_CONFIG_TABLE_NAME")
20
        # if self.config_table_name is None:
21
        #     raise Exception("DB_CONFIG_TABLE_NAME environ variable is not set")
22

23
        mongo_user = os.getenv("MONGO_USER") or "guest"
4✔
24
        mongo_pass = os.getenv("MONGO_PASS") or "guest"
4✔
25
        mongo_host = os.getenv("MONGO_HOST")
4✔
26
        mongo_port = os.getenv("MONGO_PORT")
4✔
27

28
        if mongo_host is None:
4✔
29
            raise Exception("MONGO_HOST environment variable is not set")
×
30

31
        if mongo_port is None:
4✔
32
            raise Exception("MONGO_PORT environment variable is not set")
×
33

34
        self.logger = logging.getLogger(__name__)
4✔
35
        self.logger.setLevel(logging.DEBUG)
4✔
36

37
        mongo_connstring = (
4✔
38
            f"mongodb://{mongo_user}:{mongo_pass}@{mongo_host}:{mongo_port}/"
39
        )
40

41
        # Log DB URI, without a password.
42
        self.logger.info(
4✔
43
            f"[DB] Using mongodb://{mongo_user}@{mongo_host}:{mongo_port}/"
44
        )
45

46
        self.mongo_client = pymongo.MongoClient(mongo_connstring)
4✔
47

48
    def initialize_db(self):
4✔
49
        self.logger.debug(f"Trying to load {self.db_name} from DB")
4✔
50

51
        if self.db_name not in self.mongo_client.list_database_names():
4✔
52
            self.logger.debug(f"No existing {self.db_name} from DB, creating table")
4✔
53
            self.sdxdb = self.mongo_client[self.db_name]
4✔
54
            self.logger.debug(f"DB {self.db_name} initialized")
4✔
55

56
        self.sdxdb = self.mongo_client[self.db_name]
4✔
57
        # config_col = self.sdxdb[self.config_table_name]
58
        for name in COLLECTION_NAMES:
4✔
59
            if name not in self.sdxdb.list_collection_names():
4✔
60
                self.sdxdb.create_collection(name)
4✔
61

62
        self.logger.debug(f"DB {self.db_name} initialized")
4✔
63

64
    def add_key_value_pair_to_db(self, collection, key, value):
4✔
65
        key = str(key)
4✔
66
        obj = self.read_from_db(collection, key)
4✔
67
        if obj is None:
4✔
68
            return self.sdxdb[collection].insert_one({key: value})
4✔
69

70
        query = {"_id": obj["_id"]}
4✔
71
        result = self.sdxdb[collection].replace_one(query, {key: value})
4✔
72
        return result
4✔
73

74
    def read_from_db(self, collection, key):
4✔
75
        key = str(key)
4✔
76
        return self.sdxdb[collection].find_one(
4✔
77
            {key: {"$exists": 1}, "deleted": {"$ne": True}}
78
        )
79

80
    def get_all_entries_in_collection(self, collection):
4✔
81
        db_collection = self.sdxdb[collection]
4✔
82
        # MongoDB has an ObjectId for each item, so need to exclude the ObjectIds
83
        all_entries = db_collection.find({"deleted": {"$ne": True}}, {"_id": 0})
4✔
84
        return all_entries
4✔
85

86
    def mark_deleted(self, collection, key):
4✔
87
        db_collection = self.sdxdb[collection]
4✔
88
        key = str(key)
4✔
89
        item_to_delete = self.read_from_db(collection, key)
4✔
90
        if item_to_delete is None:
4✔
91
            return False
×
92
        filter = {"_id": item_to_delete["_id"]}
4✔
93
        update = {"$set": {"deleted": True}}
4✔
94
        db_collection.update_one(filter, update)
4✔
95
        return True
4✔
96

97
    def delete_one_entry(self, collection, key):
4✔
NEW
98
        key = str(key)
×
NEW
99
        db_collection = self.sdxdb[collection]
×
NEW
100
        db_collection.delete_one({key: {"$exists": True}})
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc