#29443: Unify registries in Django -------------------------------------+------------------------------------- Reporter: Johannes Hoppe | Owner: nobody Type: | Status: new Cleanup/optimization | Component: Utilities | Version: master Severity: Normal | Resolution: Keywords: plugin, registry, | Triage Stage: pattern, utils | Unreviewed Has patch: 0 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+-------------------------------------
Comment (by Johannes Hoppe): I also have tests for the example, but it's written in PyTest but it's a start: {{{ class Plugin: pass class TestRegistry: def test_init(self): reg = Registry() assert reg.unique is True assert reg.entry_type is None reg = Registry(entry_type=Plugin, unique=False) assert reg.unique is False assert reg.entry_type is Plugin with pytest.raises(TypeError) as e: Registry(entry_type=Plugin()) assert str(e.value) == '"entry_type" expects a class, but got an instance.' def test_iter(self): reg = Registry() assert reg._register is not reg.__iter__() for i in range(5): reg.register(i) for i, entry in enumerate(reg): reg.register(i + 5) assert entry < 5 def test_len(self): reg = Registry() assert not reg reg.register(1) assert len(reg) == 1 def test_clear(self): reg = Registry() reg.register(1) assert len(reg) == 1 reg.clear() assert not reg assert list(reg) == [] def test_register(self): reg = Registry() reg.register(1) assert reg._register == [1], "1 should be in registry" with pytest.raises(ValueError) as e: reg.register(1) assert str(e.value) == '"1" is already registered.' assert reg._register.count(1) == 1, "1 is only once in the registry" reg = Registry(entry_type=list) with pytest.raises(TypeError) as e: reg.register(entry={}) assert str(e.value) == '"entry" expects <class \'list\'>, but got {}' with pytest.raises(TypeError) as e: reg.register(entry=dict) assert str(e.value) == '"entry" expects <class \'list\'>, but got <class \'dict\'>' def test_unregister(self): reg = Registry() with pytest.raises(Exception) as e: reg.unregister(1) assert str(e.value) == '"1" is not registered.' assert not reg reg.register(1) assert len(reg) == 1 assert 1 in reg._register reg.unregister(1) assert not reg assert 1 not in reg._register reg = Registry(unique=False) reg.register(1) reg.register(2) reg.register(1) assert list(reg) == [1, 2, 1] reg.unregister(1) assert reg._register == [2] }}} -- Ticket URL: <https://code.djangoproject.com/ticket/29443#comment:3> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/067.66cda767d2c9b030d0924606410a1cf7%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.