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

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
@@ -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

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