Skip to content

Commit b476afe

Browse files
JohnVillalovosnejch
authored andcommitted
chore: add bare-minimum logging support
Follow the Python documentation guidelines for "Configuring Logging for a Library" [1] Which is basically adding these two lines: import logging logging.getLogger(__name__).addHandler(logging.NullHandler()) Setup a very basic usage of logging in `gitlab/client.py` By using the NullHandler it means that by default any log messages output will not be displayed. It is up to the client application to do a `logging.basicConfig()` call to get log messages to display. [1] https://docs.python.org/3/howto/logging.html#configuring-logging-for-a-library Related: #2080
1 parent 7a8a862 commit b476afe

File tree

4 files changed

+60
-1
lines changed

4 files changed

+60
-1
lines changed

gitlab/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import warnings
2020
from typing import Any
2121

22+
import gitlab._logging
2223
import gitlab.config # noqa: F401
2324
from gitlab import utils as _utils
2425
from gitlab._version import ( # noqa: F401

gitlab/_logging.py

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
The initialization of the logging module is intentionaly done here in the
4+
_logging.py module so that it will be initialized before any other of our
5+
python-gitlab modules are loaded. So if they do logging upon being loaded it
6+
will allow them to do it safely.
7+
"""
8+
9+
# This program is free software: you can redistribute it and/or modify
10+
# it under the terms of the GNU Lesser General Public License as published by
11+
# the Free Software Foundation, either version 3 of the License, or
12+
# (at your option) any later version.
13+
#
14+
# This program is distributed in the hope that it will be useful,
15+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+
# GNU Lesser General Public License for more details.
18+
#
19+
# You should have received a copy of the GNU Lesser General Public License
20+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
21+
22+
import logging
23+
from typing import List
24+
25+
__all__: List[str] = []
26+
27+
# Using the `NullHandler` means that any log messages generated will not be
28+
# output unless the client application configures logging. For example by
29+
# calling `logging.basicConfig()`
30+
_module_root_logger_name = __name__.split(".", maxsplit=1)[0]
31+
logging.getLogger(_module_root_logger_name).addHandler(logging.NullHandler())

gitlab/client.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""Wrapper for the GitLab API."""
22

3+
import logging
34
import os
45
import re
56
import time
@@ -14,6 +15,8 @@
1415
import gitlab.exceptions
1516
from gitlab import _backends, utils
1617

18+
LOG = logging.getLogger(__name__)
19+
1720
REDIRECT_MSG = (
1821
"python-gitlab detected a {status_code} ({reason!r}) redirection. You must update "
1922
"your GitLab URL to the correct URL to avoid issues. The redirection was from: "
@@ -540,7 +543,6 @@ def _set_auth_info(self) -> None:
540543

541544
@staticmethod
542545
def enable_debug() -> None:
543-
import logging
544546
from http.client import HTTPConnection # noqa
545547

546548
HTTPConnection.debuglevel = 1
@@ -549,6 +551,7 @@ def enable_debug() -> None:
549551
requests_log = logging.getLogger("requests.packages.urllib3")
550552
requests_log.setLevel(logging.DEBUG)
551553
requests_log.propagate = True
554+
LOG.debug("Enabled debug mode for python-gitlab")
552555

553556
def _get_session_opts(self) -> Dict[str, Any]:
554557
return {

tests/unit/test__logging.py

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import logging
2+
3+
import pytest
4+
5+
from gitlab import _logging
6+
7+
8+
@pytest.fixture
9+
def LOG():
10+
return logging.getLogger(_logging._module_root_logger_name)
11+
12+
13+
def test_module_root_logger_name():
14+
assert _logging._module_root_logger_name == "gitlab"
15+
16+
17+
def test_module_name(LOG):
18+
assert LOG.name == "gitlab"
19+
20+
21+
def test_logger_null_handler(LOG):
22+
assert len(LOG.handlers) == 1
23+
handler = LOG.handlers[0]
24+
assert isinstance(handler, logging.NullHandler)

0 commit comments

Comments
 (0)