Skip to content

Commit a49826e

Browse files
committed
Merge pull request #1289 from geekerzp/python_log
[Python] Update python log
2 parents b8792b6 + e32272a commit a49826e

File tree

4 files changed

+175
-74
lines changed

4 files changed

+175
-74
lines changed

modules/swagger-codegen/src/main/resources/python/api_client.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ from .rest import ApiException
2525

2626
import os
2727
import re
28+
import sys
2829
import urllib
2930
import json
3031
import mimetypes

modules/swagger-codegen/src/main/resources/python/configuration.mustache

Lines changed: 84 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Copyright 2015 SmartBear Software
1515
See the License for the specific language governing permissions and
1616
limitations under the License.
1717

18-
ref: https://github.com/swagger-api/swagger-codegen
18+
ref: https://github.com/swagger-api/swagger-codegen
1919
"""
2020

2121
from __future__ import absolute_import
@@ -27,10 +27,11 @@ try:
2727
except ImportError:
2828
# for python3
2929
import http.client as httplib
30-
30+
3131
import sys
3232
import logging
3333

34+
from six import iteritems
3435

3536
def singleton(cls, *args, **kw):
3637
instances = {}
@@ -72,66 +73,113 @@ class Configuration(object):
7273
self.password = ""
7374

7475
# Logging Settings
75-
self.logging_format = '%(asctime)s %(levelname)s %(message)s'
76+
self.logger = {}
77+
self.logger["package_logger"] = logging.getLogger("{{packageName}}")
78+
self.logger["urllib3_logger"] = logging.getLogger("urllib3")
79+
# Log format
80+
self.logger_format = '%(asctime)s %(levelname)s %(message)s'
81+
# Log stream handler
82+
self.logger_stream_handler = None
83+
# Log file handler
84+
self.logger_file_handler = None
7685
# Debug file location
77-
self.__logging_file = None
86+
self.logger_file = None
7887
# Debug switch
79-
self.__debug = False
80-
self.init_logger()
88+
self.debug = False
8189

8290
# SSL/TLS verification
8391
# Set this to false to skip verifying SSL certificate when calling API from https server.
8492
self.verify_ssl = True
8593
# Set this to customize the certificate file to verify the peer.
8694
self.ssl_ca_cert = None
87-
88-
def init_logger(self):
95+
96+
@property
97+
def logger_file(self):
8998
"""
90-
Initializes logger settings.
99+
Gets the logger_file.
91100
"""
92-
self.logger = logging.getLogger()
93-
formatter = logging.Formatter(self.logging_format)
94-
stream_handler = logging.StreamHandler()
95-
stream_handler.setFormatter(formatter)
96-
self.logger.addHandler(stream_handler)
97-
if self.__debug:
98-
self.logger.setLevel(logging.DEBUG)
99-
else:
100-
self.logger.setLevel(logging.WARNING)
101-
if self.__logging_file:
102-
file_handler = logging.FileHandler(self.__logging_file)
103-
file_handler.setFormatter(formatter)
104-
self.logger.addFilter(file_handler)
101+
return self.__logger_file
105102

106-
@property
107-
def logging_file(self):
108-
return self.__logging_file
109-
110-
@logging_file.setter
111-
def logging_file(self, value):
112-
self.__logging_file = value
113-
if self.__logging_file:
114-
formater = logging.Formatter(self.logging_format)
115-
file_handler = logging.FileHandler(self.__logging_file)
116-
file_handler.setFormatter(formater)
117-
self.logger.addHandler(file_handler)
103+
@logger_file.setter
104+
def logger_file(self, value):
105+
"""
106+
Sets the logger_file.
107+
108+
If the logger_file is None, then add stream handler and remove file handler.
109+
Otherwise, add file handler and remove stream handler.
110+
111+
:param value: The logger_file path.
112+
:type: str
113+
"""
114+
self.__logger_file = value
115+
if self.__logger_file:
116+
# If set logging file,
117+
# then add file handler and remove stream handler.
118+
self.logger_file_handler = logging.FileHandler(self.__logger_file)
119+
self.logger_file_handler.setFormatter(self.logger_formatter)
120+
for _, logger in iteritems(self.logger):
121+
logger.addHandler(self.logger_file_handler)
122+
if self.logger_stream_handler:
123+
logger.removeHandler(self.logger_stream_handler)
124+
else:
125+
# If not set logging file,
126+
# then add stream handler and remove file handler.
127+
self.logger_stream_handler = logging.StreamHandler()
128+
self.logger_stream_handler.setFormatter(self.logger_formatter)
129+
for _, logger in iteritems(self.logger):
130+
logger.addHandler(self.logger_stream_handler)
131+
if self.logger_file_handler:
132+
logger.removeHandler(self.logger_file_handler)
118133

119134
@property
120135
def debug(self):
136+
"""
137+
Gets the debug status.
138+
"""
121139
return self.__debug
122140

123141
@debug.setter
124142
def debug(self, value):
143+
"""
144+
Sets the debug status.
145+
146+
:param value: The debug status, True or False.
147+
:type: bool
148+
"""
125149
self.__debug = value
126150
if self.__debug:
127151
# if debug status is True, turn on debug logging
128-
self.logger.setLevel(logging.DEBUG)
152+
for _, logger in iteritems(self.logger):
153+
logger.setLevel(logging.DEBUG)
129154
# turn on httplib debug
130155
httplib.HTTPConnection.debuglevel = 1
131156
else:
132157
# if debug status is False, turn off debug logging,
133158
# setting log level to default `logging.WARNING`
134-
self.logger.setLevel(logging.WARNING)
159+
for _, logger in iteritems(self.logger):
160+
logger.setLevel(logging.WARNING)
161+
# turn off httplib debug
162+
httplib.HTTPConnection.debuglevel = 0
163+
164+
@property
165+
def logger_format(self):
166+
"""
167+
Gets the logger_format.
168+
"""
169+
return self.__logger_format
170+
171+
@logger_format.setter
172+
def logger_format(self, value):
173+
"""
174+
Sets the logger_format.
175+
176+
The logger_formatter will be updated when sets logger_format.
177+
178+
:param value: The format string.
179+
:type: str
180+
"""
181+
self.__logger_format = value
182+
self.logger_formatter = logging.Formatter(self.__logger_format)
135183

136184
def get_api_key_with_prefix(self, identifier):
137185
"""

samples/client/petstore/python/swagger_client/api_client.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import os
2727
import re
28+
import sys
2829
import urllib
2930
import json
3031
import mimetypes
@@ -180,16 +181,19 @@ def sanitize_for_serialization(self, obj):
180181
If obj is str, int, float, bool, return directly.
181182
If obj is datetime.datetime, datetime.date
182183
convert to string in iso8601 format.
183-
If obj is list, santize each element in the list.
184+
If obj is list, sanitize each element in the list.
184185
If obj is dict, return the dict.
185186
If obj is swagger model, return the properties dict.
186187
187188
:param obj: The data to serialize.
188189
:return: The serialized form of data.
189190
"""
191+
types = (str, int, float, bool, tuple)
192+
if sys.version_info < (3,0):
193+
types = types + (unicode,)
190194
if isinstance(obj, type(None)):
191195
return None
192-
elif isinstance(obj, (str, int, float, bool, tuple)):
196+
elif isinstance(obj, types):
193197
return obj
194198
elif isinstance(obj, list):
195199
return [self.sanitize_for_serialization(sub_obj)

samples/client/petstore/python/swagger_client/configuration.py

Lines changed: 84 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
See the License for the specific language governing permissions and
1616
limitations under the License.
1717
18-
ref: https://github.com/swagger-api/swagger-codegen
18+
ref: https://github.com/swagger-api/swagger-codegen
1919
"""
2020

2121
from __future__ import absolute_import
@@ -27,10 +27,11 @@
2727
except ImportError:
2828
# for python3
2929
import http.client as httplib
30-
30+
3131
import sys
3232
import logging
3333

34+
from six import iteritems
3435

3536
def singleton(cls, *args, **kw):
3637
instances = {}
@@ -72,66 +73,113 @@ def __init__(self):
7273
self.password = ""
7374

7475
# Logging Settings
75-
self.logging_format = '%(asctime)s %(levelname)s %(message)s'
76+
self.logger = {}
77+
self.logger["package_logger"] = logging.getLogger("swagger_client")
78+
self.logger["urllib3_logger"] = logging.getLogger("urllib3")
79+
# Log format
80+
self.logger_format = '%(asctime)s %(levelname)s %(message)s'
81+
# Log stream handler
82+
self.logger_stream_handler = None
83+
# Log file handler
84+
self.logger_file_handler = None
7685
# Debug file location
77-
self.__logging_file = None
86+
self.logger_file = None
7887
# Debug switch
79-
self.__debug = False
80-
self.init_logger()
88+
self.debug = False
8189

8290
# SSL/TLS verification
8391
# Set this to false to skip verifying SSL certificate when calling API from https server.
8492
self.verify_ssl = True
8593
# Set this to customize the certificate file to verify the peer.
8694
self.ssl_ca_cert = None
87-
88-
def init_logger(self):
95+
96+
@property
97+
def logger_file(self):
8998
"""
90-
Initializes logger settings.
99+
Gets the logger_file.
91100
"""
92-
self.logger = logging.getLogger()
93-
formatter = logging.Formatter(self.logging_format)
94-
stream_handler = logging.StreamHandler()
95-
stream_handler.setFormatter(formatter)
96-
self.logger.addHandler(stream_handler)
97-
if self.__debug:
98-
self.logger.setLevel(logging.DEBUG)
99-
else:
100-
self.logger.setLevel(logging.WARNING)
101-
if self.__logging_file:
102-
file_handler = logging.FileHandler(self.__logging_file)
103-
file_handler.setFormatter(formatter)
104-
self.logger.addFilter(file_handler)
101+
return self.__logger_file
105102

106-
@property
107-
def logging_file(self):
108-
return self.__logging_file
109-
110-
@logging_file.setter
111-
def logging_file(self, value):
112-
self.__logging_file = value
113-
if self.__logging_file:
114-
formater = logging.Formatter(self.logging_format)
115-
file_handler = logging.FileHandler(self.__logging_file)
116-
file_handler.setFormatter(formater)
117-
self.logger.addHandler(file_handler)
103+
@logger_file.setter
104+
def logger_file(self, value):
105+
"""
106+
Sets the logger_file.
107+
108+
If the logger_file is None, then add stream handler and remove file handler.
109+
Otherwise, add file handler and remove stream handler.
110+
111+
:param value: The logger_file path.
112+
:type: str
113+
"""
114+
self.__logger_file = value
115+
if self.__logger_file:
116+
# If set logging file,
117+
# then add file handler and remove stream handler.
118+
self.logger_file_handler = logging.FileHandler(self.__logger_file)
119+
self.logger_file_handler.setFormatter(self.logger_formatter)
120+
for _, logger in iteritems(self.logger):
121+
logger.addHandler(self.logger_file_handler)
122+
if self.logger_stream_handler:
123+
logger.removeHandler(self.logger_stream_handler)
124+
else:
125+
# If not set logging file,
126+
# then add stream handler and remove file handler.
127+
self.logger_stream_handler = logging.StreamHandler()
128+
self.logger_stream_handler.setFormatter(self.logger_formatter)
129+
for _, logger in iteritems(self.logger):
130+
logger.addHandler(self.logger_stream_handler)
131+
if self.logger_file_handler:
132+
logger.removeHandler(self.logger_file_handler)
118133

119134
@property
120135
def debug(self):
136+
"""
137+
Gets the debug status.
138+
"""
121139
return self.__debug
122140

123141
@debug.setter
124142
def debug(self, value):
143+
"""
144+
Sets the debug status.
145+
146+
:param value: The debug status, True or False.
147+
:type: bool
148+
"""
125149
self.__debug = value
126150
if self.__debug:
127151
# if debug status is True, turn on debug logging
128-
self.logger.setLevel(logging.DEBUG)
152+
for _, logger in iteritems(self.logger):
153+
logger.setLevel(logging.DEBUG)
129154
# turn on httplib debug
130155
httplib.HTTPConnection.debuglevel = 1
131156
else:
132157
# if debug status is False, turn off debug logging,
133158
# setting log level to default `logging.WARNING`
134-
self.logger.setLevel(logging.WARNING)
159+
for _, logger in iteritems(self.logger):
160+
logger.setLevel(logging.WARNING)
161+
# turn off httplib debug
162+
httplib.HTTPConnection.debuglevel = 0
163+
164+
@property
165+
def logger_format(self):
166+
"""
167+
Gets the logger_format.
168+
"""
169+
return self.__logger_format
170+
171+
@logger_format.setter
172+
def logger_format(self, value):
173+
"""
174+
Sets the logger_format.
175+
176+
The logger_formatter will be updated when sets logger_format.
177+
178+
:param value: The format string.
179+
:type: str
180+
"""
181+
self.__logger_format = value
182+
self.logger_formatter = logging.Formatter(self.__logger_format)
135183

136184
def get_api_key_with_prefix(self, identifier):
137185
"""

0 commit comments

Comments
 (0)