Projet

Général

Profil

0001-management-add-a-LogToConsoleCommand-base-class-6271.patch

Paul Marillonnet, 05 août 2022 13:56

Télécharger (4,91 ko)

Voir les différences:

Subject: [PATCH 1/2] management: add a LogToConsoleCommand base class (#62710)

 src/authentic2/base_commands.py               | 64 +++++++++++++++++++
 .../management/commands/sync-ldap-users.py    | 48 ++------------
 2 files changed, 70 insertions(+), 42 deletions(-)
 create mode 100644 src/authentic2/base_commands.py
src/authentic2/base_commands.py
1
# authentic2 - versatile identity manager
2
# Copyright (C) 2010-2022 Entr'ouvert
3
#
4
# This program is free software: you can redistribute it and/or modify it
5
# under the terms of the GNU Affero General Public License as published
6
# by the Free Software Foundation, either version 3 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU Affero General Public License for more details.
13
#
14
# You should have received a copy of the GNU Affero General Public License
15
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16

  
17
import logging
18
import os
19
from contextlib import contextmanager
20

  
21
from django.core.management.base import BaseCommand
22

  
23

  
24
@contextmanager
25
def log_to_console(loggername, verbosity):
26
    if 'TERM' not in os.environ:
27
        yield
28
    else:
29
        handler = logging.StreamHandler()
30
        # add timestamp to messages
31
        formatter = logging.Formatter(fmt='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
32
        handler.setFormatter(formatter)
33

  
34
        if verbosity == 1:
35
            handler.setLevel(logging.ERROR)
36
        elif verbosity == 2:
37
            handler.setLevel(logging.INFO)
38
        elif verbosity == 3:
39
            handler.setLevel(logging.DEBUG)
40

  
41
        logger = logging.getLogger(loggername)
42
        initial_level = logger.level
43
        try:
44
            logger.propagate = False
45
            logger.setLevel(logging.DEBUG)
46
            logger.addHandler(handler)
47
            yield
48
        finally:
49
            logger.propagate = True
50
            logger.setLevel(initial_level)
51
            logger.removeHandler(handler)
52

  
53

  
54
class LogToConsoleCommand(BaseCommand):
55
    loggername = None
56

  
57
    def core_command(self, *args, **kwargs):
58
        raise NotImplementedError
59

  
60
    def handle(self, *args, **kwargs):
61
        verbosity = int(kwargs['verbosity'])
62

  
63
        with log_to_console(self.loggername, verbosity):
64
            self.core_command(*args, **kwargs)
src/authentic2/management/commands/sync-ldap-users.py
21 21
except ImportError:
22 22
    ldap = None
23 23

  
24
import logging
25
import os
26
from contextlib import contextmanager
27

  
28
from django.core.management.base import BaseCommand
29

  
30 24
from authentic2.backends.ldap_backend import LDAPBackend
25
from authentic2.base_commands import LogToConsoleCommand
31 26

  
32 27

  
33
@contextmanager
34
def log_ldap_to_console(verbosity):
35
    if 'TERM' not in os.environ:
36
        yield
37
    else:
38
        handler = logging.StreamHandler()
39
        # add timestamp to messages
40
        formatter = logging.Formatter(fmt='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
41
        handler.setFormatter(formatter)
42

  
43
        if verbosity == 1:
44
            handler.setLevel(logging.ERROR)
45
        elif verbosity == 2:
46
            handler.setLevel(logging.INFO)
47
        elif verbosity == 3:
48
            handler.setLevel(logging.DEBUG)
28
class Command(LogToConsoleCommand):
29
    loggername = 'authentic2.backends.ldap_backend'
49 30

  
50
        logger = logging.getLogger('authentic2.backends.ldap_backend')
51
        initial_level = logger.level
52
        try:
53
            logger.propagate = False
54
            logger.setLevel(logging.DEBUG)
55
            logger.addHandler(handler)
56
            yield
57
        finally:
58
            logger.propagate = True
59
            logger.setLevel(initial_level)
60
            logger.removeHandler(handler)
61

  
62

  
63
class Command(BaseCommand):
64 31
    def add_arguments(self, parser):
65 32
        parser.add_argument('--realm', help='Limit sync to this realm')
66 33

  
67
    def handle(self, *args, **kwargs):
68
        verbosity = int(kwargs['verbosity'])
69

  
70
        with log_ldap_to_console(verbosity):
71
            for dummy in LDAPBackend.get_users(realm=kwargs['realm']):
72
                continue
34
    def core_command(self, *args, **kwargs):
35
        for dummy in LDAPBackend.get_users(realm=kwargs['realm']):
36
            continue
73
-