Skip to content

Commit 6b68469

Browse files
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 50822f8 commit 6b68469

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-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

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

gitlab/client.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
"""Wrapper for the GitLab API."""
1818

19+
import logging
1920
import os
2021
import re
2122
import time
@@ -32,6 +33,8 @@
3233
import gitlab.exceptions
3334
from gitlab import utils
3435

36+
LOG = logging.getLogger(__name__)
37+
3538
REDIRECT_MSG = (
3639
"python-gitlab detected a {status_code} ({reason!r}) redirection. You must update "
3740
"your GitLab URL to the correct URL to avoid issues. The redirection was from: "
@@ -536,7 +539,6 @@ def _set_auth_info(self) -> None:
536539

537540
@staticmethod
538541
def enable_debug() -> None:
539-
import logging
540542
from http.client import HTTPConnection # noqa
541543

542544
HTTPConnection.debuglevel = 1
@@ -545,6 +547,7 @@ def enable_debug() -> None:
545547
requests_log = logging.getLogger("requests.packages.urllib3")
546548
requests_log.setLevel(logging.DEBUG)
547549
requests_log.propagate = True
550+
LOG.debug("Enabled debug mode for python-gitlab")
548551

549552
def _get_session_opts(self) -> Dict[str, Any]:
550553
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)