management: add a LogToConsoleCommand base class (#62710)
This commit is contained in:
parent
0848d1cb3b
commit
2aeb5bad51
|
@ -0,0 +1,64 @@
|
|||
# authentic2 - versatile identity manager
|
||||
# Copyright (C) 2010-2022 Entr'ouvert
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Affero General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import logging
|
||||
import os
|
||||
from contextlib import contextmanager
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
|
||||
@contextmanager
|
||||
def log_to_console(loggername, verbosity):
|
||||
if 'TERM' not in os.environ:
|
||||
yield
|
||||
else:
|
||||
handler = logging.StreamHandler()
|
||||
# add timestamp to messages
|
||||
formatter = logging.Formatter(fmt='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
||||
handler.setFormatter(formatter)
|
||||
|
||||
if verbosity == 1:
|
||||
handler.setLevel(logging.ERROR)
|
||||
elif verbosity == 2:
|
||||
handler.setLevel(logging.INFO)
|
||||
elif verbosity == 3:
|
||||
handler.setLevel(logging.DEBUG)
|
||||
|
||||
logger = logging.getLogger(loggername)
|
||||
initial_level = logger.level
|
||||
try:
|
||||
logger.propagate = False
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.addHandler(handler)
|
||||
yield
|
||||
finally:
|
||||
logger.propagate = True
|
||||
logger.setLevel(initial_level)
|
||||
logger.removeHandler(handler)
|
||||
|
||||
|
||||
class LogToConsoleCommand(BaseCommand):
|
||||
loggername = None
|
||||
|
||||
def core_command(self, *args, **kwargs):
|
||||
raise NotImplementedError
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
verbosity = int(kwargs['verbosity'])
|
||||
|
||||
with log_to_console(self.loggername, verbosity):
|
||||
self.core_command(*args, **kwargs)
|
|
@ -21,52 +21,16 @@ try:
|
|||
except ImportError:
|
||||
ldap = None
|
||||
|
||||
import logging
|
||||
import os
|
||||
from contextlib import contextmanager
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from authentic2.backends.ldap_backend import LDAPBackend
|
||||
from authentic2.base_commands import LogToConsoleCommand
|
||||
|
||||
|
||||
@contextmanager
|
||||
def log_ldap_to_console(verbosity):
|
||||
if 'TERM' not in os.environ:
|
||||
yield
|
||||
else:
|
||||
handler = logging.StreamHandler()
|
||||
# add timestamp to messages
|
||||
formatter = logging.Formatter(fmt='%(asctime)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
||||
handler.setFormatter(formatter)
|
||||
class Command(LogToConsoleCommand):
|
||||
loggername = 'authentic2.backends.ldap_backend'
|
||||
|
||||
if verbosity == 1:
|
||||
handler.setLevel(logging.ERROR)
|
||||
elif verbosity == 2:
|
||||
handler.setLevel(logging.INFO)
|
||||
elif verbosity == 3:
|
||||
handler.setLevel(logging.DEBUG)
|
||||
|
||||
logger = logging.getLogger('authentic2.backends.ldap_backend')
|
||||
initial_level = logger.level
|
||||
try:
|
||||
logger.propagate = False
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.addHandler(handler)
|
||||
yield
|
||||
finally:
|
||||
logger.propagate = True
|
||||
logger.setLevel(initial_level)
|
||||
logger.removeHandler(handler)
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument('--realm', help='Limit sync to this realm')
|
||||
|
||||
def handle(self, *args, **kwargs):
|
||||
verbosity = int(kwargs['verbosity'])
|
||||
|
||||
with log_ldap_to_console(verbosity):
|
||||
for dummy in LDAPBackend.get_users(realm=kwargs['realm']):
|
||||
continue
|
||||
def core_command(self, *args, **kwargs):
|
||||
for dummy in LDAPBackend.get_users(realm=kwargs['realm']):
|
||||
continue
|
||||
|
|
Loading…
Reference in New Issue