Skip to content

Commit

Permalink
Changed _inside_typing to clean _module_in_stack(module)!
Browse files Browse the repository at this point in the history
  • Loading branch information
Mandera committed Jun 2, 2023
1 parent 861ac19 commit 07e152f
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
10 changes: 5 additions & 5 deletions generalimport/dunders.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from typing import Type, List
import typing

from generalimport.generalimport_bottom import _inside_typing
from generalimport.generalimport_bottom import _module_in_stack
from generalimport.import_catcher import ErrorPars


class DynamicDunder:
""" Inherit to define a dynamic dunder.
All subclasses' triggers are tested for truthy before a MissingOptionalDependency is raised.
Returns result() of first triggered dynamic dunder. """
subclasses: List[Type["DynamicDunder"]] = []
subclasses: typing.List[typing.Type["DynamicDunder"]] = []

def __init_subclass__(cls, **kwargs):
cls.subclasses.append(cls)
Expand Down Expand Up @@ -75,7 +75,7 @@ def result(self): ...

class DynamicEQ(DynamicDunder):
def trigger(self):
return _inside_typing() and self.error_pars.caller == "__eq__" and bool(self.error_pars.args)
return _module_in_stack(module=typing) and self.error_pars.caller == "__eq__" and bool(self.error_pars.args)

def result(self):
other = self.error_pars.args[0]
Expand All @@ -84,7 +84,7 @@ def result(self):

class DynamicHash(DynamicDunder):
def trigger(self):
return _inside_typing() and self.error_pars.caller == "__hash__"
return _module_in_stack(module=typing) and self.error_pars.caller == "__hash__"

def result(self):
return id(self)
6 changes: 3 additions & 3 deletions generalimport/generalimport_bottom.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import importlib
import pkgutil
import sys
from inspect import getmodule
from pathlib import Path


Expand Down Expand Up @@ -81,11 +82,10 @@ def _get_previous_frame_filename(depth):
return filename
frame = frame.f_back

def _inside_typing():
def _module_in_stack(module):
frame = sys._getframe(0)
while frame:
filename = frame.f_code.co_filename.replace("\\", "/").lower()
if r"typing.py" in filename:
if getmodule(frame) is module:
return True
frame = frame.f_back
return False
Expand Down

0 comments on commit 07e152f

Please sign in to comment.