8000 Permit subclassing of MetricsHandler (#339) · rayandas/client_python@a50f3e4 · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit a50f3e4

Browse files
jeanralphavilesbrian-brazil
authored andcommitted
Permit subclassing of MetricsHandler (prometheus#339)
Changes MetricsHandler.factory from a staticmethod to a classmethod to be able to determine the correct subclass to return. This way if a user wants to extend the behavior of their MetricsHandler, they don't have to reimplement the factory() method. Signed-off-by: Jean-Ralph Aviles <jeanralph.aviles@gmail.com>
1 parent 1fbb1f3 commit a50f3e4

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

prometheus_client/exposition.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ def do_GET(self):
154154
def log_message(self, format, *args):
155155
"""Log nothing."""
156156

157-
@staticmethod
158-
def factory(registry):
157+
@classmethod
158+
def factory(cls, registry):
159159
"""Returns a dynamic MetricsHandler class tied
160160
to the passed registry.
161161
"""
@@ -164,8 +164,8 @@ def factory(registry):
164164

165165
# As we have unicode_literals, we need to create a str()
166166
# object for type().
167-
cls_name = str('MetricsHandler')
168-
MyMetricsHandler = type(cls_name, (MetricsHandler, object),
167+
cls_name = str(cls.__name__)
168+
MyMetricsHandler = type(cls_name, (cls, object),
169169
{"registry": registry})
170170
return MyMetricsHandler
171171

tests/test_exposition.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,12 @@ def test_metrics_handler(self):
296296
handler = MetricsHandler.factory(self.registry)
297297
self.assertEqual(handler.registry, self.registry)
298298

299+
def test_metrics_handler_subclassing(self):
300+
subclass = type(str('MetricsHandlerSubclass'), (MetricsHandler, object), {})
301+
handler = subclass.factory(self.registry)
302+
303+
self.assertTrue(issubclass(handler, (MetricsHandler, subclass)))
304+
299305

300306
if __name__ == '__main__':
301307
unittest.main()

0 commit comments

Comments
 (0)
0