A handler can only be registered once

This commit is contained in:
2026-01-05 19:53:52 +01:00
parent 618e21e012
commit 662d47ac21
4 changed files with 37 additions and 13 deletions

View File

@@ -350,3 +350,4 @@ See LICENSE file for details.
## Version History
* 0.1.0 - Initial release
* 0.2.0 - Added custom reference handlers
* 0.2.1 - A handler can only be registered once

View File

@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "mydbengine"
version = "0.2.0"
version = "0.2.1"
description = "A lightweight, git-inspired database engine that maintains complete history of all modifications"
readme = "README.md"
requires-python = ">=3.8"

View File

@@ -89,7 +89,7 @@ class DateHandler(BaseInlineHandler):
class Handlers:
def __init__(self, handlers_):
self.handlers = handlers_
self.handlers = handlers_ or []
def get_handler(self, obj):
if has_tag(obj, TAG_SPECIAL):
@@ -102,7 +102,14 @@ class Handlers:
return None
def register_handler(self, handler):
for h in self.handlers:
if type(h) == type(handler):
return # won't register twice the same handler
self.handlers.append(handler)
def unregister_handler(self, handler):
self.handlers = [h for h in self.handlers if type(h) != type(handler)]
handlers = Handlers([DateHandler()])

16
tests/test_handlers.py Normal file
View File

@@ -0,0 +1,16 @@
from dbengine.handlers import BaseHandler, handlers
class DummyHandler(BaseHandler):
pass
def test_i_can_register_only_once():
handlers.register_handler(DummyHandler())
count = len(handlers.handlers)
handlers.register_handler(DummyHandler()) # second time is skipped as the class is already registered
assert count == len(handlers.handlers)
handlers.unregister_handler(DummyHandler()) # clean the handlers list
assert len(handlers.handlers) == count - 1