Skip to content

Commit

Permalink
Fixing _do_prettify for PyPy
Browse files Browse the repository at this point in the history
  • Loading branch information
domdfcoding committed Sep 11, 2020
1 parent f4ff164 commit 7fadfee
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 61 deletions.
21 changes: 15 additions & 6 deletions domdf_python_tools/doctools.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

# stdlib
import builtins
import platform
from textwrap import dedent
from typing import Any, Callable, Dict, Optional, Sequence, Type, TypeVar, Union

Expand All @@ -47,6 +48,7 @@
]

F = TypeVar('F', bound=Callable[..., Any])
PYPY = platform.python_implementation() == "PyPy"


def deindent_string(string: Optional[str]) -> str:
Expand Down Expand Up @@ -311,15 +313,22 @@ def _do_prettify(obj: Type, base: Type, new_docstrings: Dict[str, str]):

for attr_name in new_docstrings:

if hasattr(obj, attr_name):
attribute = getattr(obj, attr_name)
if not hasattr(obj, attr_name):
continue

if not isinstance(attribute, (WrapperDescriptorType, MethodDescriptorType, MethodWrapperType)):
attribute = getattr(obj, attr_name)

doc: Optional[str] = getattr(obj, attr_name).__doc__
if not PYPY and isinstance(attribute, (WrapperDescriptorType, MethodDescriptorType, MethodWrapperType)):
continue

if doc in {None, getattr(base, attr_name).__doc__}:
getattr(obj, attr_name).__doc__ = new_docstrings[attr_name]
base_docstring: Optional[str] = None
if hasattr(base, attr_name):
base_docstring = getattr(base, attr_name).__doc__

doc: Optional[str] = getattr(obj, attr_name).__doc__

if doc in {None, base_docstring}:
getattr(obj, attr_name).__doc__ = new_docstrings[attr_name]


def prettify_docstrings(obj: Type) -> Type:
Expand Down
8 changes: 6 additions & 2 deletions domdf_python_tools/typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,14 @@
import pathlib
from decimal import Decimal
from json import JSONDecoder, JSONEncoder
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, Union, runtime_checkable
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple, Type, Union

# 3rd party
from typing_extensions import Protocol
from typing_extensions import Protocol, runtime_checkable

if TYPE_CHECKING:
# 3rd party
from pandas._typing import FrameOrSeries # type: ignore

__all__ = [
"PathLike",
Expand Down
1 change: 0 additions & 1 deletion domdf_python_tools/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@
if TYPE_CHECKING:
# 3rd party
from pandas import DataFrame, Series # type: ignore
from pandas._typing import FrameOrSeries # type: ignore

__all__ = [
"pyversion",
Expand Down
105 changes: 53 additions & 52 deletions tests/test_doctools.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@

# this package
from domdf_python_tools import doctools
# TODO: test sphinxification of docstrings
from domdf_python_tools.doctools import (
base_int_docstrings, base_new_docstrings, container_docstrings, operator_docstrings, prettify_docstrings
)

# TODO: test sphinxification of docstrings


class Cafe:
"""
Expand Down Expand Up @@ -347,157 +348,157 @@ def demo_function():
@prettify_docstrings
class Klasse:

def __delattr__(self, **kwargs):
def __delattr__(self, **kwargs): # type: ignore
... # pragma: no cover

def __dir__(self):
def __dir__(self): # type: ignore
... # pragma: no cover

def __eq__(self, **kwargs):
def __eq__(self, **kwargs): # type: ignore
... # pragma: no cover

def __getattribute__(self, **kwargs):
def __getattribute__(self, **kwargs): # type: ignore
... # pragma: no cover

def __ge__(self):
def __ge__(self): # type: ignore
... # pragma: no cover

def __gt__(self):
def __gt__(self): # type: ignore
... # pragma: no cover

def __hash__(self):
def __hash__(self): # type: ignore
... # pragma: no cover

def __lt__(self):
def __lt__(self): # type: ignore
... # pragma: no cover

def __le__(self):
def __le__(self): # type: ignore
... # pragma: no cover

def __ne__(self, **kwargs):
def __ne__(self, **kwargs): # type: ignore
... # pragma: no cover

def __setattr__(self, **kwargs):
def __setattr__(self, **kwargs): # type: ignore
... # pragma: no cover

def __sizeof__(self):
def __sizeof__(self): # type: ignore
... # pragma: no cover

def __str__(self):
def __str__(self): # type: ignore
... # pragma: no cover

def __contains__(self):
def __contains__(self): # type: ignore
... # pragma: no cover

def __getitem__(self):
def __getitem__(self): # type: ignore
... # pragma: no cover

def __setitem__(self):
def __setitem__(self): # type: ignore
... # pragma: no cover

def __delitem__(self):
def __delitem__(self): # type: ignore
... # pragma: no cover

def __and__(self):
def __and__(self): # type: ignore
... # pragma: no cover

def __add__(self):
def __add__(self): # type: ignore
... # pragma: no cover

def __abs__(self):
def __abs__(self): # type: ignore
... # pragma: no cover

def __divmod__(self):
def __divmod__(self): # type: ignore
... # pragma: no cover

def __floordiv__(self):
def __floordiv__(self): # type: ignore
... # pragma: no cover

def __invert__(self):
def __invert__(self): # type: ignore
... # pragma: no cover

def __lshift__(self):
def __lshift__(self): # type: ignore
... # pragma: no cover

def __mod__(self):
def __mod__(self): # type: ignore
... # pragma: no cover

def __mul__(self):
def __mul__(self): # type: ignore
... # pragma: no cover

def __neg__(self):
def __neg__(self): # type: ignore
... # pragma: no cover

def __or__(self):
def __or__(self): # type: ignore
... # pragma: no cover

def __pos__(self):
def __pos__(self): # type: ignore
... # pragma: no cover

def __pow__(self):
def __pow__(self): # type: ignore
... # pragma: no cover

def __radd__(self):
def __radd__(self): # type: ignore
... # pragma: no cover

def __rand__(self):
def __rand__(self): # type: ignore
... # pragma: no cover

def __rdivmod__(self):
def __rdivmod__(self): # type: ignore
... # pragma: no cover

def __rfloordiv__(self):
def __rfloordiv__(self): # type: ignore
... # pragma: no cover

def __rlshift__(self):
def __rlshift__(self): # type: ignore
... # pragma: no cover

def __rmod__(self):
def __rmod__(self): # type: ignore
... # pragma: no cover

def __rmul__(self):
def __rmul__(self): # type: ignore
... # pragma: no cover

def __ror__(self):
def __ror__(self): # type: ignore
... # pragma: no cover

def __rpow__(self):
def __rpow__(self): # type: ignore
... # pragma: no cover

def __rrshift__(self):
def __rrshift__(self): # type: ignore
... # pragma: no cover

def __rshift__(self):
def __rshift__(self): # type: ignore
... # pragma: no cover

def __rsub__(self):
def __rsub__(self): # type: ignore
... # pragma: no cover

def __rtruediv__(self):
def __rtruediv__(self): # type: ignore
... # pragma: no cover

def __rxor__(self):
def __rxor__(self): # type: ignore
... # pragma: no cover

def __sub__(self):
def __sub__(self): # type: ignore
... # pragma: no cover

def __truediv__(self):
def __truediv__(self): # type: ignore
... # pragma: no cover

def __xor__(self):
def __xor__(self): # type: ignore
... # pragma: no cover

def __float__(self):
def __float__(self): # type: ignore
... # pragma: no cover

def __int__(self):
def __int__(self): # type: ignore
... # pragma: no cover

def __repr__(self):
def __repr__(self): # type: ignore
... # pragma: no cover

def __bool__(self):
def __bool__(self): # type: ignore
... # pragma: no cover


Expand Down

0 comments on commit 7fadfee

Please sign in to comment.