summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn L. Villalovos <john@sodarock.com>2022-10-03 21:29:54 -0700
committerNejc Habjan <nejc.habjan@siemens.com>2023-03-12 20:23:40 +0100
commitb476afe9928c6e844b86b56f9316ae1a1fe254f2 (patch)
tree8aa4e2743dacd661365d04bdfedf8477626d6fce
parent7a8a86278543a1419d07dd022196e4cb3db12d31 (diff)
downloadgitlab-jlvillal/logging.tar.gz
chore: add bare-minimum logging supportjlvillal/logging
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
-rw-r--r--gitlab/__init__.py1
-rw-r--r--gitlab/_logging.py31
-rw-r--r--gitlab/client.py5
-rw-r--r--tests/unit/test__logging.py24
4 files changed, 60 insertions, 1 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index e7aafda..889a52c 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -19,6 +19,7 @@
import warnings
from typing import Any
+import gitlab._logging
import gitlab.config # noqa: F401
from gitlab import utils as _utils
from gitlab._version import ( # noqa: F401
diff --git a/gitlab/_logging.py b/gitlab/_logging.py
new file mode 100644
index 0000000..207e874
--- /dev/null
+++ b/gitlab/_logging.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+"""
+The initialization of the logging module is intentionaly done here in the
+_logging.py module so that it will be initialized before any other of our
+python-gitlab modules are loaded. So if they do logging upon being loaded it
+will allow them to do it safely.
+"""
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import logging
+from typing import List
+
+__all__: List[str] = []
+
+# Using the `NullHandler` means that any log messages generated will not be
+# output unless the client application configures logging. For example by
+# calling `logging.basicConfig()`
+_module_root_logger_name = __name__.split(".", maxsplit=1)[0]
+logging.getLogger(_module_root_logger_name).addHandler(logging.NullHandler())
diff --git a/gitlab/client.py b/gitlab/client.py
index 94fb66a..3b1e49b 100644
--- a/gitlab/client.py
+++ b/gitlab/client.py
@@ -1,5 +1,6 @@
"""Wrapper for the GitLab API."""
+import logging
import os
import re
import time
@@ -14,6 +15,8 @@ import gitlab.const
import gitlab.exceptions
from gitlab import _backends, utils
+LOG = logging.getLogger(__name__)
+
REDIRECT_MSG = (
"python-gitlab detected a {status_code} ({reason!r}) redirection. You must update "
"your GitLab URL to the correct URL to avoid issues. The redirection was from: "
@@ -540,7 +543,6 @@ class Gitlab:
@staticmethod
def enable_debug() -> None:
- import logging
from http.client import HTTPConnection # noqa
HTTPConnection.debuglevel = 1
@@ -549,6 +551,7 @@ class Gitlab:
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
+ LOG.debug("Enabled debug mode for python-gitlab")
def _get_session_opts(self) -> Dict[str, Any]:
return {
diff --git a/tests/unit/test__logging.py b/tests/unit/test__logging.py
new file mode 100644
index 0000000..9248f86
--- /dev/null
+++ b/tests/unit/test__logging.py
@@ -0,0 +1,24 @@
+import logging
+
+import pytest
+
+from gitlab import _logging
+
+
+@pytest.fixture
+def LOG():
+ return logging.getLogger(_logging._module_root_logger_name)
+
+
+def test_module_root_logger_name():
+ assert _logging._module_root_logger_name == "gitlab"
+
+
+def test_module_name(LOG):
+ assert LOG.name == "gitlab"
+
+
+def test_logger_null_handler(LOG):
+ assert len(LOG.handlers) == 1
+ handler = LOG.handlers[0]
+ assert isinstance(handler, logging.NullHandler)