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

uw-it-aca / bridge-sis-provisioner / 12309653263

13 Dec 2024 04:34AM UTC coverage: 95.504% (-0.2%) from 95.666%
12309653263

Pull #249

github

web-flow
Merge 9ad494553 into 5c432cbcf
Pull Request #249: Turn off Command Error, more readable email msg

24 of 39 new or added lines in 5 files covered. (61.54%)

19 existing lines in 3 files now uncovered.

2995 of 3136 relevant lines covered (95.5%)

0.96 hits per line

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

85.94
/sis_provisioner/management/commands/sync_accounts.py
1
# Copyright 2024 UW-IT, University of Washington
2
# SPDX-License-Identifier: Apache-2.0
3

4
import logging
1✔
5
from datetime import datetime
1✔
6
from django.core.mail import send_mail
1✔
7
from django.core.management.base import BaseCommand, CommandError
1✔
8
from sis_provisioner.dao import is_using_file_dao
1✔
9
from sis_provisioner.account_managers.gws_bridge import GwsBridgeLoader
1✔
10
from sis_provisioner.account_managers.acc_checker import UserAccountChecker
1✔
11
from sis_provisioner.account_managers.terminate import TerminateUser
1✔
12
from sis_provisioner.account_managers.bridge_checker import BridgeChecker
1✔
13
from sis_provisioner.account_managers.bridge_worker import BridgeWorker
1✔
14
from sis_provisioner.account_managers.pws_bridge import PwsBridgeLoader
1✔
15
from sis_provisioner.account_managers.hrp_bridge import HrpBridgeLoader
1✔
16
from sis_provisioner.account_managers.customgrp_bridge import CustomGroupLoader
1✔
17
from sis_provisioner.util.log import log_resp_time, Timer
1✔
18
from sis_provisioner.util.settings import get_cronjob_sender
1✔
19

20

21
logger = logging.getLogger(__name__)
1✔
22

23

24
class Command(BaseCommand):
1✔
25
    """
26
    Load users into Bridge
27
    """
28
    def add_arguments(self, parser):
1✔
29
        parser.add_argument('data-source',
1✔
30
                            choices=['gws', 'db-acc', 'delete',
31
                                     'bridge', 'hrp', 'pws', 'customg'])
32

33
    def handle(self, *args, **options):
1✔
34
        self.timer = Timer()
1✔
35
        logger.info("Start at {0}".format(datetime.now()))
1✔
36
        self.source = options['data-source']
1✔
37
        workr = BridgeWorker()
1✔
38
        if self.source == 'gws':
1✔
39
            self.loader = GwsBridgeLoader(workr)
1✔
40
        elif self.source == 'customg':
1✔
41
            self.loader = CustomGroupLoader(workr)
1✔
42
        elif self.source == 'db-acc':
1✔
43
            self.loader = UserAccountChecker(workr)
1✔
44
        elif self.source == 'delete':
1✔
45
            self.loader = TerminateUser(workr)
1✔
46
        elif self.source == 'bridge':
1✔
47
            self.loader = BridgeChecker(workr)
1✔
48
        elif self.source == 'pws':
1✔
49
            self.loader = PwsBridgeLoader(workr)
1✔
50
        elif self.source == 'hrp':
1✔
51
            self.loader = HrpBridgeLoader(workr)
1✔
52
        else:
UNCOV
53
            logger.info("Invalid data source, abort!")
×
UNCOV
54
            return
×
55
        try:
1✔
56
            self.loader.load()
1✔
57
            self.log_msg()
1✔
UNCOV
58
        except Exception as ex:
×
NEW
UNCOV
59
            self.send_msg({"Source": self.source, "Error": ex})
×
60
            # raise CommandError(ex)
61

62
    def log_msg(self):
1✔
63
        log_resp_time(logger, "Load users", self.timer)
1✔
64

65
        logger.info("Checked {0:d} users, source: {1}\n".format(
1✔
66
            self.loader.get_total_checked_users(), self.source))
67

68
        logger.info("{0:d} new users added\n".format(
1✔
69
            self.loader.get_new_user_count()))
70
        logger.info("{0:d} users changed netid\n".format(
1✔
71
            self.loader.get_netid_changed_count()))
72
        logger.info("{0:d} users deleted\n".format(
1✔
73
            self.loader.get_deleted_count()))
74
        logger.info("{0:d} users restored\n".format(
1✔
75
            self.loader.get_restored_count()))
76
        logger.info("{0:d} users updated\n".format(
1✔
77
            self.loader.get_updated_count()))
78

79
        if self.loader.has_error():
1✔
80
            self.send_msg({
1✔
81
                "Source": self.source,
82
                "Error": self.loader.get_error_report()
83
            })
84

85
    def send_msg(self, msg):
1✔
86
        logger.error(msg)
1✔
87
        if is_using_file_dao():
1✔
88
            return
1✔
NEW
UNCOV
89
        sender = get_cronjob_sender()
×
NEW
UNCOV
90
        try:
×
NEW
UNCOV
91
            send_mail(self.source, msg, sender, [sender])
×
NEW
UNCOV
92
        except Exception as ex:
×
NEW
UNCOV
93
            logger.error({"Source": self.source, "Error": ex})
×
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

© 2025 Coveralls, Inc