Skip to content
This repository was archived by the owner on Jul 11, 2022. It is now read-only.

Commit 8eed0f7

Browse files
authored
Add types to config (#334)
* Add types to config Signed-off-by: Kai Mueller <[email protected]> * Fix metrics method Signed-off-by: Kai Mueller <[email protected]>
1 parent 264eb8a commit 8eed0f7

File tree

2 files changed

+60
-44
lines changed

2 files changed

+60
-44
lines changed

jaeger_client/config.py

Lines changed: 58 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,16 @@
1717
import logging
1818
import os
1919
import threading
20+
from typing import Any, Optional, Dict
2021

2122
import opentracing
2223
from opentracing.propagation import Format
24+
from opentracing.scope_manager import ScopeManager
2325
from . import Tracer
2426
from .local_agent_net import LocalAgentSender
25-
from .throttler import RemoteThrottler
27+
from .throttler import RemoteThrottler, Throttler
2628
from .reporter import (
29+
BaseReporter,
2730
Reporter,
2831
CompositeReporter,
2932
LoggingReporter,
@@ -84,8 +87,15 @@ class Config(object):
8487
_initialized = False
8588
_initialized_lock = threading.Lock()
8689

87-
def __init__(self, config, metrics=None, service_name=None, metrics_factory=None,
88-
validate=False, scope_manager=None):
90+
def __init__(
91+
self,
92+
config: dict,
93+
metrics: Optional[Metrics] = None,
94+
service_name: Optional[str] = None,
95+
metrics_factory: Optional[MetricsFactory] = None,
96+
validate: bool = False,
97+
scope_manager: Optional[ScopeManager] = None
98+
) -> None:
8999
"""
90100
:param metrics: an instance of Metrics class, or None. This parameter
91101
has been deprecated, please use metrics_factory instead.
@@ -138,42 +148,43 @@ def _validate_config(self, config):
138148
format(','.join(unexpected_config_keys)))
139149

140150
@property
141-
def service_name(self):
151+
def service_name(self) -> str:
142152
return self._service_name
143153

144154
@property
145-
def metrics(self):
146-
return self._metrics
155+
def metrics(self) -> None:
156+
"""Deprecated."""
157+
return None
147158

148159
@property
149-
def error_reporter(self):
160+
def error_reporter(self) -> ErrorReporter:
150161
return self._error_reporter
151162

152163
@property
153-
def enabled(self):
164+
def enabled(self) -> bool:
154165
return get_boolean(self.config.get('enabled', True), True)
155166

156167
@property
157-
def reporter_batch_size(self):
168+
def reporter_batch_size(self) -> int:
158169
return int(self.config.get('reporter_batch_size', 10))
159170

160171
@property
161-
def reporter_queue_size(self):
172+
def reporter_queue_size(self) -> int:
162173
return int(self.config.get('reporter_queue_size', 100))
163174

164175
@property
165-
def logging(self):
176+
def logging(self) -> bool:
166177
return get_boolean(self.config.get('logging', False), False)
167178

168179
@property
169-
def trace_id_header(self):
180+
def trace_id_header(self) -> str:
170181
"""
171182
:return: Returns the name of the HTTP header used to encode trace ID
172183
"""
173184
return self.config.get('trace_id_header', TRACE_ID_HEADER)
174185

175186
@property
176-
def generate_128bit_trace_id(self):
187+
def generate_128bit_trace_id(self) -> bool:
177188
"""
178189
:return: Returns boolean value to indicate if 128bit trace_id
179190
generation is enabled
@@ -183,15 +194,15 @@ def generate_128bit_trace_id(self):
183194
return os.getenv('JAEGER_TRACEID_128BIT') == 'true'
184195

185196
@property
186-
def baggage_header_prefix(self):
197+
def baggage_header_prefix(self) -> str:
187198
"""
188199
:return: Returns the prefix for HTTP headers used to record baggage
189200
items
190201
"""
191202
return self.config.get('baggage_header_prefix', BAGGAGE_HEADER_PREFIX)
192203

193204
@property
194-
def debug_id_header(self):
205+
def debug_id_header(self) -> str:
195206
"""
196207
:return: Returns the name of HTTP header or a TextMap carrier key
197208
which, if found in the carrier, forces the trace to be sampled as
@@ -202,23 +213,23 @@ def debug_id_header(self):
202213
return self.config.get('debug_id_header', DEBUG_ID_HEADER_KEY)
203214

204215
@property
205-
def max_tag_value_length(self):
216+
def max_tag_value_length(self) -> int:
206217
"""
207218
:return: Returns max allowed tag value length. Longer values will
208219
be truncated.
209220
"""
210221
return self.config.get('max_tag_value_length', MAX_TAG_VALUE_LENGTH)
211222

212223
@property
213-
def max_traceback_length(self):
224+
def max_traceback_length(self) -> int:
214225
"""
215226
:return: Returns max allowed traceback length when logging an error.
216227
Longer values will be truncated.
217228
"""
218229
return self.config.get('max_traceback_length', MAX_TRACEBACK_LENGTH)
219230

220231
@property
221-
def sampler(self):
232+
def sampler(self) -> Optional[Sampler]:
222233
sampler_config = self.config.get('sampler', {})
223234
if isinstance(sampler_config, Sampler):
224235
return sampler_config
@@ -237,68 +248,68 @@ def sampler(self):
237248
raise ValueError('Unknown sampler type %s' % sampler_type)
238249

239250
@property
240-
def sampling_refresh_interval(self):
251+
def sampling_refresh_interval(self) -> int:
241252
return self.config.get('sampling_refresh_interval',
242253
DEFAULT_SAMPLING_INTERVAL)
243254

244255
@property
245-
def reporter_flush_interval(self):
256+
def reporter_flush_interval(self) -> int:
246257
return self.config.get('reporter_flush_interval',
247258
DEFAULT_FLUSH_INTERVAL)
248259

249-
def local_agent_group(self):
260+
def local_agent_group(self) -> Optional[dict]:
250261
return self.config.get('local_agent', None)
251262

252263
@property
253-
def local_agent_enabled(self):
264+
def local_agent_enabled(self) -> bool:
254265
# noinspection PyBroadException
255266
try:
256-
return get_boolean(self.local_agent_group().get('enabled',
267+
return get_boolean(self.local_agent_group().get('enabled', # type:ignore
257268
LOCAL_AGENT_DEFAULT_ENABLED),
258269
LOCAL_AGENT_DEFAULT_ENABLED)
259270
except: # noqa: E722
260271
return LOCAL_AGENT_DEFAULT_ENABLED
261272

262273
@property
263-
def local_agent_sampling_port(self):
274+
def local_agent_sampling_port(self) -> int:
264275
# noinspection PyBroadException
265276
try:
266-
return int(self.local_agent_group()['sampling_port'])
277+
return int(self.local_agent_group()['sampling_port']) # type:ignore
267278
except: # noqa: E722
268279
return DEFAULT_SAMPLING_PORT
269280

270281
@property
271-
def local_agent_reporting_port(self):
282+
def local_agent_reporting_port(self) -> int:
272283
# noinspection PyBroadException
273284
try:
274-
return int(self.local_agent_group()['reporting_port'])
285+
return int(self.local_agent_group()['reporting_port']) # type:ignore
275286
except: # noqa: E722
276287
pass
277288

278289
try:
279-
return int(os.getenv('JAEGER_AGENT_PORT'))
290+
return int(os.getenv('JAEGER_AGENT_PORT')) # type:ignore
280291
except: # noqa: E722
281292
return DEFAULT_REPORTING_PORT
282293

283294
@property
284-
def local_agent_reporting_host(self):
295+
def local_agent_reporting_host(self) -> str:
285296
# noinspection PyBroadException
286297
try:
287-
return self.local_agent_group()['reporting_host']
298+
return self.local_agent_group()['reporting_host'] # type:ignore
288299
except: # noqa: E722
289300
pass
290301

291-
if os.getenv('JAEGER_AGENT_HOST') is not None:
292-
return os.getenv('JAEGER_AGENT_HOST')
302+
if 'JAEGER_AGENT_HOST' in os.environ:
303+
return os.environ['JAEGER_AGENT_HOST']
293304
else:
294305
return DEFAULT_REPORTING_HOST
295306

296307
@property
297-
def max_operations(self):
308+
def max_operations(self) -> Optional[Any]:
298309
return self.config.get('max_operations', None)
299310

300311
@property
301-
def tags(self):
312+
def tags(self) -> Dict[str, Any]:
302313
"""
303314
:return: Returns tags from config and `JAEGER_TAGS` environment variable
304315
to use as process-wide tracer tags
@@ -312,7 +323,7 @@ def tags(self):
312323
return tags
313324

314325
@property
315-
def propagation(self):
326+
def propagation(self) -> Dict[str, Any]:
316327
propagation = self.config.get('propagation')
317328
if propagation == 'b3':
318329
# replace the codec with a B3 enabled instance
@@ -321,11 +332,11 @@ def propagation(self):
321332
)}
322333
return {}
323334

324-
def throttler_group(self):
335+
def throttler_group(self) -> Optional[Any]:
325336
return self.config.get('throttler', None)
326337

327338
@property
328-
def throttler_port(self):
339+
def throttler_port(self) -> Optional[int]:
329340
throttler_config = self.throttler_group()
330341
if throttler_config is None:
331342
return None
@@ -336,7 +347,7 @@ def throttler_port(self):
336347
return DEFAULT_THROTTLER_PORT
337348

338349
@property
339-
def throttler_refresh_interval(self):
350+
def throttler_refresh_interval(self) -> Optional[int]:
340351
throttler_config = self.throttler_group()
341352
if throttler_config is None:
342353
return None
@@ -347,11 +358,11 @@ def throttler_refresh_interval(self):
347358
return DEFAULT_THROTTLER_REFRESH_INTERVAL
348359

349360
@staticmethod
350-
def initialized():
361+
def initialized() -> bool:
351362
with Config._initialized_lock:
352363
return Config._initialized
353364

354-
def initialize_tracer(self, io_loop=None):
365+
def initialize_tracer(self, io_loop: Optional[Any] = None) -> Optional[Tracer]:
355366
"""
356367
Initialize Jaeger Tracer based on the passed `jaeger_client.Config`.
357368
Save it to `opentracing.tracer` global variable.
@@ -361,15 +372,15 @@ def initialize_tracer(self, io_loop=None):
361372
with Config._initialized_lock:
362373
if Config._initialized:
363374
logger.warning('Jaeger tracer already initialized, skipping')
364-
return
375+
return None
365376
Config._initialized = True
366377

367378
tracer = self.new_tracer(io_loop)
368379

369380
self._initialize_global_tracer(tracer=tracer)
370381
return tracer
371382

372-
def new_tracer(self, io_loop=None):
383+
def new_tracer(self, io_loop: Optional[Any] = None) -> Tracer:
373384
"""
374385
Create a new Jaeger Tracer based on the passed `jaeger_client.Config`.
375386
Does not set `opentracing.tracer` global variable.
@@ -387,7 +398,7 @@ def new_tracer(self, io_loop=None):
387398
max_operations=self.max_operations)
388399
logger.info('Using sampler %s', sampler)
389400

390-
reporter = Reporter(
401+
reporter: BaseReporter = Reporter(
391402
channel=channel,
392403
queue_capacity=self.reporter_queue_size,
393404
batch_size=self.reporter_batch_size,
@@ -399,6 +410,7 @@ def new_tracer(self, io_loop=None):
399410
if self.logging:
400411
reporter = CompositeReporter(reporter, LoggingReporter(logger))
401412

413+
throttler: Optional[Throttler]
402414
if not self.throttler_group() is None:
403415
throttler = RemoteThrottler(
404416
channel,
@@ -416,7 +428,9 @@ def new_tracer(self, io_loop=None):
416428
throttler=throttler,
417429
)
418430

419-
def create_tracer(self, reporter, sampler, throttler=None):
431+
def create_tracer(
432+
self, reporter: BaseReporter, sampler: Sampler, throttler: Optional[Throttler] = None
433+
) -> Tracer:
420434
return Tracer(
421435
service_name=self.service_name,
422436
reporter=reporter,

setup.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ python_version = 3.7
2828
warn_unused_configs = True
2929
warn_redundant_casts = True
3030
warn_unused_ignores = True
31+
pretty = True
32+
show_error_codes = True
3133

3234
[mypy-six.*,tornado.*,opentracing.*,thrift.*,threadloop.*,prometheus_client.*]
3335
ignore_missing_imports = True

0 commit comments

Comments
 (0)