Add check for owner class in Item

This commit is contained in:
Boger 2020-03-28 18:47:42 +03:00
parent 45cfa5b3c9
commit 4298406bd2
2 changed files with 10 additions and 4 deletions

View file

@ -13,6 +13,7 @@ Example:
>>> print(MyHelper.all())
<<< ['barItem', 'bazItem', 'fooItem', 'lorem']
"""
import inspect
from typing import (
Any,
Callable,
@ -152,9 +153,9 @@ class _BaseItem:
if not name.isupper():
raise NameError("Name for helper item must be in uppercase!")
if not self._value:
# TODO: а если не имеет?
if hasattr(owner, "mode"):
self._value = HelperMode.apply(name, getattr(owner, "mode"))
if not inspect.isclass(owner) or not issubclass(owner, Helper):
raise RuntimeError("Instances of Item can be used only as Helper attributes")
self._value = HelperMode.apply(name, owner.mode)
class Item(_BaseItem):
@ -224,7 +225,7 @@ class OrderedHelperMeta(type):
return cast(OrderedHelperMeta, cls)
class OrderedHelper(metaclass=OrderedHelperMeta):
class OrderedHelper(Helper, metaclass=OrderedHelperMeta):
mode = ""
@classmethod

View file

@ -40,6 +40,11 @@ class TestHelper:
class MyHelper(Helper):
kaboom = Item()
def test_not_a_helper_subclass(self):
with pytest.raises(RuntimeError):
class NotAHelperSubclass:
A = Item()
class TestHelperMode:
def test_helper_mode_all(self):