1313# limitations under the License.
1414
1515# pylint: disable=too-many-ancestors
16- # type: ignore
1716
1817"""
1918The OpenTelemetry metrics API describes the classes used to generate
4645from logging import getLogger
4746from os import environ
4847from threading import Lock
49- from typing import List , Optional , Set , Tuple , cast
48+ from typing import List , Optional , Sequence , Set , Tuple , Union , cast
5049
5150from opentelemetry ._metrics .instrument import (
51+ CallbackT ,
5252 Counter ,
5353 Histogram ,
5454 NoOpCounter ,
6363 UpDownCounter ,
6464 _ProxyCounter ,
6565 _ProxyHistogram ,
66- _ProxyInstrument ,
6766 _ProxyObservableCounter ,
6867 _ProxyObservableGauge ,
6968 _ProxyObservableUpDownCounter ,
7877_logger = getLogger (__name__ )
7978
8079
80+ ProxyInstrumentT = Union [
81+ _ProxyCounter ,
82+ _ProxyHistogram ,
83+ _ProxyObservableCounter ,
84+ _ProxyObservableGauge ,
85+ _ProxyObservableUpDownCounter ,
86+ _ProxyUpDownCounter ,
87+ ]
88+
89+
8190class MeterProvider (ABC ):
8291 """
8392 MeterProvider is the entry point of the API. It provides access to `Meter` instances.
@@ -87,8 +96,8 @@ class MeterProvider(ABC):
8796 def get_meter (
8897 self ,
8998 name : str ,
90- version : str = None ,
91- schema_url : str = None ,
99+ version : Optional [ str ] = None ,
100+ schema_url : Optional [ str ] = None ,
92101 ) -> "Meter" :
93102 """Returns a `Meter` for use by the given instrumentation library.
94103
@@ -123,9 +132,9 @@ class NoOpMeterProvider(MeterProvider):
123132
124133 def get_meter (
125134 self ,
126- name ,
127- version = None ,
128- schema_url = None ,
135+ name : str ,
136+ version : Optional [ str ] = None ,
137+ schema_url : Optional [ str ] = None ,
129138 ) -> "Meter" :
130139 """Returns a NoOpMeter."""
131140 super ().get_meter (name , version = version , schema_url = schema_url )
@@ -140,9 +149,9 @@ def __init__(self) -> None:
140149
141150 def get_meter (
142151 self ,
143- name ,
144- version = None ,
145- schema_url = None ,
152+ name : str ,
153+ version : Optional [ str ] = None ,
154+ schema_url : Optional [ str ] = None ,
146155 ) -> "Meter" :
147156 with self ._lock :
148157 if self ._real_meter_provider is not None :
@@ -168,7 +177,12 @@ class Meter(ABC):
168177 used to produce measurements.
169178 """
170179
171- def __init__ (self , name : str , version : str = None , schema_url : str = None ):
180+ def __init__ (
181+ self ,
182+ name : str ,
183+ version : Optional [str ] = None ,
184+ schema_url : Optional [str ] = None ,
185+ ) -> None :
172186 super ().__init__ ()
173187 self ._name = name
174188 self ._version = version
@@ -177,21 +191,21 @@ def __init__(self, name: str, version: str = None, schema_url: str = None):
177191 self ._instrument_ids_lock = Lock ()
178192
179193 @property
180- def name (self ):
194+ def name (self ) -> str :
181195 """
182196 The name of the instrumenting module.
183197 """
184198 return self ._name
185199
186200 @property
187- def version (self ):
201+ def version (self ) -> Optional [ str ] :
188202 """
189203 The version string of the instrumenting library.
190204 """
191205 return self ._version
192206
193207 @property
194- def schema_url (self ):
208+ def schema_url (self ) -> Optional [ str ] :
195209 """
196210 Specifies the Schema URL of the emitted telemetry
197211 """
@@ -225,7 +239,10 @@ def _is_instrument_registered(
225239
226240 @abstractmethod
227241 def create_counter (
228- self , name : str , unit : str = "" , description : str = ""
242+ self ,
243+ name : str ,
244+ unit : str = "" ,
245+ description : str = "" ,
229246 ) -> Counter :
230247 """Creates a `Counter` instrument
231248
@@ -238,7 +255,10 @@ def create_counter(
238255
239256 @abstractmethod
240257 def create_up_down_counter (
241- self , name : str , unit : str = "" , description : str = ""
258+ self ,
259+ name : str ,
260+ unit : str = "" ,
261+ description : str = "" ,
242262 ) -> UpDownCounter :
243263 """Creates an `UpDownCounter` instrument
244264
@@ -251,7 +271,11 @@ def create_up_down_counter(
251271
252272 @abstractmethod
253273 def create_observable_counter (
254- self , name , callbacks = None , unit = "" , description = ""
274+ self ,
275+ name : str ,
276+ callbacks : Optional [Sequence [CallbackT ]] = None ,
277+ unit : str = "" ,
278+ description : str = "" ,
255279 ) -> ObservableCounter :
256280 """Creates an `ObservableCounter` instrument
257281
@@ -334,7 +358,12 @@ def cpu_time_callback(states_to_include: set[str]) -> Iterable[Iterable[Observat
334358 """
335359
336360 @abstractmethod
337- def create_histogram (self , name , unit = "" , description = "" ) -> Histogram :
361+ def create_histogram (
362+ self ,
363+ name : str ,
364+ unit : str = "" ,
365+ description : str = "" ,
366+ ) -> Histogram :
338367 """Creates a `opentelemetry._metrics.instrument.Histogram` instrument
339368
340369 Args:
@@ -346,7 +375,11 @@ def create_histogram(self, name, unit="", description="") -> Histogram:
346375
347376 @abstractmethod
348377 def create_observable_gauge (
349- self , name , callbacks = None , unit = "" , description = ""
378+ self ,
379+ name : str ,
380+ callbacks : Optional [Sequence [CallbackT ]] = None ,
381+ unit : str = "" ,
382+ description : str = "" ,
350383 ) -> ObservableGauge :
351384 """Creates an `ObservableGauge` instrument
352385
@@ -363,7 +396,11 @@ def create_observable_gauge(
363396
364397 @abstractmethod
365398 def create_observable_up_down_counter (
366- self , name , callbacks = None , unit = "" , description = ""
399+ self ,
400+ name : str ,
401+ callbacks : Optional [Sequence [CallbackT ]] = None ,
402+ unit : str = "" ,
403+ description : str = "" ,
367404 ) -> ObservableUpDownCounter :
368405 """Creates an `ObservableUpDownCounter` instrument
369406
@@ -382,13 +419,13 @@ def create_observable_up_down_counter(
382419class _ProxyMeter (Meter ):
383420 def __init__ (
384421 self ,
385- name ,
386- version = None ,
387- schema_url = None ,
388- ):
422+ name : str ,
423+ version : Optional [ str ] = None ,
424+ schema_url : Optional [ str ] = None ,
425+ ) -> None :
389426 super ().__init__ (name , version = version , schema_url = schema_url )
390427 self ._lock = Lock ()
391- self ._instruments : List [_ProxyInstrument ] = []
428+ self ._instruments : List [ProxyInstrumentT ] = []
392429 self ._real_meter : Optional [Meter ] = None
393430
394431 def on_set_meter_provider (self , meter_provider : MeterProvider ) -> None :
@@ -408,7 +445,12 @@ def on_set_meter_provider(self, meter_provider: MeterProvider) -> None:
408445 for instrument in self ._instruments :
409446 instrument .on_meter_set (real_meter )
410447
411- def create_counter (self , name , unit = "" , description = "" ) -> Counter :
448+ def create_counter (
449+ self ,
450+ name : str ,
451+ unit : str = "" ,
452+ description : str = "" ,
453+ ) -> Counter :
412454 with self ._lock :
413455 if self ._real_meter :
414456 return self ._real_meter .create_counter (name , unit , description )
@@ -417,7 +459,10 @@ def create_counter(self, name, unit="", description="") -> Counter:
417459 return proxy
418460
419461 def create_up_down_counter (
420- self , name , unit = "" , description = ""
462+ self ,
463+ name : str ,
464+ unit : str = "" ,
465+ description : str = "" ,
421466 ) -> UpDownCounter :
422467 with self ._lock :
423468 if self ._real_meter :
@@ -429,7 +474,11 @@ def create_up_down_counter(
429474 return proxy
430475
431476 def create_observable_counter (
432- self , name , callbacks = None , unit = "" , description = ""
477+ self ,
478+ name : str ,
479+ callbacks : Optional [Sequence [CallbackT ]] = None ,
480+ unit : str = "" ,
481+ description : str = "" ,
433482 ) -> ObservableCounter :
434483 with self ._lock :
435484 if self ._real_meter :
@@ -442,7 +491,12 @@ def create_observable_counter(
442491 self ._instruments .append (proxy )
443492 return proxy
444493
445- def create_histogram (self , name , unit = "" , description = "" ) -> Histogram :
494+ def create_histogram (
495+ self ,
496+ name : str ,
497+ unit : str = "" ,
498+ description : str = "" ,
499+ ) -> Histogram :
446500 with self ._lock :
447501 if self ._real_meter :
448502 return self ._real_meter .create_histogram (
@@ -453,7 +507,11 @@ def create_histogram(self, name, unit="", description="") -> Histogram:
453507 return proxy
454508
455509 def create_observable_gauge (
456- self , name , callbacks = None , unit = "" , description = ""
510+ self ,
511+ name : str ,
512+ callbacks : Optional [Sequence [CallbackT ]] = None ,
513+ unit : str = "" ,
514+ description : str = "" ,
457515 ) -> ObservableGauge :
458516 with self ._lock :
459517 if self ._real_meter :
@@ -467,7 +525,11 @@ def create_observable_gauge(
467525 return proxy
468526
469527 def create_observable_up_down_counter (
470- self , name , callbacks = None , unit = "" , description = ""
528+ self ,
529+ name : str ,
530+ callbacks : Optional [Sequence [CallbackT ]] = None ,
531+ unit : str = "" ,
532+ description : str = "" ,
471533 ) -> ObservableUpDownCounter :
472534 with self ._lock :
473535 if self ._real_meter :
@@ -490,7 +552,12 @@ class NoOpMeter(Meter):
490552 All operations are no-op.
491553 """
492554
493- def create_counter (self , name , unit = "" , description = "" ) -> Counter :
555+ def create_counter (
556+ self ,
557+ name : str ,
558+ unit : str = "" ,
559+ description : str = "" ,
560+ ) -> Counter :
494561 """Returns a no-op Counter."""
495562 super ().create_counter (name , unit = unit , description = description )
496563 if self ._is_instrument_registered (
@@ -507,7 +574,10 @@ def create_counter(self, name, unit="", description="") -> Counter:
507574 return NoOpCounter (name , unit = unit , description = description )
508575
509576 def create_up_down_counter (
510- self , name , unit = "" , description = ""
577+ self ,
578+ name : str ,
579+ unit : str = "" ,
580+ description : str = "" ,
511581 ) -> UpDownCounter :
512582 """Returns a no-op UpDownCounter."""
513583 super ().create_up_down_counter (
@@ -527,7 +597,11 @@ def create_up_down_counter(
527597 return NoOpUpDownCounter (name , unit = unit , description = description )
528598
529599 def create_observable_counter (
530- self , name , callbacks = None , unit = "" , description = ""
600+ self ,
601+ name : str ,
602+ callbacks : Optional [Sequence [CallbackT ]] = None ,
603+ unit : str = "" ,
604+ description : str = "" ,
531605 ) -> ObservableCounter :
532606 """Returns a no-op ObservableCounter."""
533607 super ().create_observable_counter (
@@ -551,7 +625,12 @@ def create_observable_counter(
551625 description = description ,
552626 )
553627
554- def create_histogram (self , name , unit = "" , description = "" ) -> Histogram :
628+ def create_histogram (
629+ self ,
630+ name : str ,
631+ unit : str = "" ,
632+ description : str = "" ,
633+ ) -> Histogram :
555634 """Returns a no-op Histogram."""
556635 super ().create_histogram (name , unit = unit , description = description )
557636 if self ._is_instrument_registered (
@@ -568,7 +647,11 @@ def create_histogram(self, name, unit="", description="") -> Histogram:
568647 return NoOpHistogram (name , unit = unit , description = description )
569648
570649 def create_observable_gauge (
571- self , name , callbacks = None , unit = "" , description = ""
650+ self ,
651+ name : str ,
652+ callbacks : Optional [Sequence [CallbackT ]] = None ,
653+ unit : str = "" ,
654+ description : str = "" ,
572655 ) -> ObservableGauge :
573656 """Returns a no-op ObservableGauge."""
574657 super ().create_observable_gauge (
@@ -593,7 +676,11 @@ def create_observable_gauge(
593676 )
594677
595678 def create_observable_up_down_counter (
596- self , name , callbacks = None , unit = "" , description = ""
679+ self ,
680+ name : str ,
681+ callbacks : Optional [Sequence [CallbackT ]] = None ,
682+ unit : str = "" ,
683+ description : str = "" ,
597684 ) -> ObservableUpDownCounter :
598685 """Returns a no-op ObservableUpDownCounter."""
599686 super ().create_observable_up_down_counter (
@@ -670,7 +757,7 @@ def get_meter_provider() -> MeterProvider:
670757 if OTEL_PYTHON_METER_PROVIDER not in environ .keys ():
671758 return _PROXY_METER_PROVIDER
672759
673- meter_provider : MeterProvider = _load_provider (
760+ meter_provider : MeterProvider = _load_provider ( # type: ignore
674761 OTEL_PYTHON_METER_PROVIDER , "meter_provider"
675762 )
676763 _set_meter_provider (meter_provider , log = False )
0 commit comments