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

View file

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