Skip to content

Commit c6eb4c2

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 336ee21 commit c6eb4c2

File tree

4 files changed

+60
-1
lines changed

4 files changed

+60
-1
lines changed

gitlab/__init__.py

Lines changed: 1 addition & 0 deletions
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

Lines changed: 31 additions & 0 deletions
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

Lines changed: 4 additions & 1 deletion
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
@@ -16,6 +17,8 @@
1617
import gitlab.exceptions
1718
from gitlab import utils
1819

20+
LOG = logging.getLogger(__name__)
21+
1922
REDIRECT_MSG = (
2023
"python-gitlab detected a {status_code} ({reason!r}) redirection. You must update "
2124
"your GitLab URL to the correct URL to avoid issues. The redirection was from: "
@@ -522,7 +525,6 @@ def _set_auth_info(self) -> None:
522525

523526
@staticmethod
524527
def enable_debug() -> None:
525-
import logging
526528
from http.client import HTTPConnection # noqa
527529

528530
HTTPConnection.debuglevel = 1
@@ -531,6 +533,7 @@ def enable_debug() -> None:
531533
requests_log = logging.getLogger("requests.packages.urllib3")
532534
requests_log.setLevel(logging.DEBUG)
533535
requests_log.propagate = True
536+
LOG.debug("Enabled debug mode for python-gitlab")
534537

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

tests/unit/test__logging.py

Lines changed: 24 additions & 0 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy