GeezerVison is showing github.com — Use `returns` in testing · Issue #235 · dry-python/classes
Use returns in testing #235DescriptionWe need to be sure that classes and returns can be used together and that typing works.
Plan:
- Install
returns as dev-dependency
- Create special
typesafety/test_integration/test_returns folder where we would test it
- In
pytest-mypy-plugins we would need to add returns_plugin to mypy settings
Activitysobolevn commented on Jun 20, 2021 thepabloaguilar commented on Oct 2, 2021 Could you say more about what those tests should be, please? sobolevn commented on Oct 2, 2021 We need to test:
Result.success_type and failure_type
Maybe with empty
IOResult
So, imagine that you want to dispatch some action based on the result/mayb type using classes. That's we basically need to cover for different types. thepabloaguilar commented on Oct 3, 2021 I got some errors with Result using the example from the docs:
from classes import typeclass
from returns.result import Result, Success, Failure
@typeclass
def result_to_str(instance) -> str:
"""This is a typeclass definition to convert Result container to str."""
@result_to_str.instance(Result.success_type)
def _result_to_str_success(instance: Result) -> str:
return str(instance.unwrap()) # will always receive `Success` types
@result_to_str.instance(Result.failure_type)
def _result_to_str_failure(instance: Result) -> str:
return str(instance.failure()) # will always receive `Failure` types
if __name__ == '__main__':
result_to_str(Success('test'))
result_to_str(Failure('test'))
mypy output:
ex.py:10: error: Instance "returns.result.Result[Any, Any]" does not match inferred type "Type[returns.result._Success[Any]]"
ex.py:16: error: Instance "returns.result.Result[Any, Any]" does not match inferred type "Type[returns.result._Failure[Any]]"
ex.py:23: error: Argument 1 to "result_to_str" has incompatible type "Result[str, Any]"; expected <nothing>
ex.py:24: error: Argument 1 to "result_to_str" has incompatible type "Result[Any, str]"; expected <nothing>
Found 4 errors in 1 file (checked 1 source file)
PS.: I'm using the returns plugin too thepabloaguilar commented on Oct 3, 2021 The same thing for Maybe 😢
from classes import typeclass
from returns.maybe import Maybe, Some, Nothing
@typeclass
def maybe_to_str(instance) -> str:
"""This is a typeclass definition to convert Maybe container to str."""
@maybe_to_str.instance(Maybe.success_type)
def _maybe_to_str(instance: Maybe) -> str:
return str(instance.unwrap()) # will always receive `Maybe` types
@maybe_to_str.instance(Maybe.failure_type)
def _nothing_to_str(instance: Maybe) -> str:
return str(instance) # will always receive `Nothing`
if __name__ == '__main__':
maybe_to_str(Some('test'))
maybe_to_str(Nothing)
mypy output:
ex.py:10: error: Instance "returns.maybe.Maybe[Any]" does not match inferred type "Type[returns.maybe._Some[Any]]"
ex.py:15: error: Instance "returns.maybe.Maybe[Any]" does not match inferred type "Type[returns.maybe._Nothing]"
ex.py:21: error: Argument 1 to "maybe_to_str" has incompatible type "Maybe[str]"; expected <nothing>
ex.py:22: error: Argument 1 to "maybe_to_str" has incompatible type "Maybe[NoReturn]"; expected <nothing>
Found 4 errors in 1 file (checked 1 source file)
sobolevn commented on Oct 3, 2021 thepabloaguilar commented on Oct 3, 2021 I can try, it's a problem with classes mypy plugin thepabloaguilar commented on Oct 4, 2021 How do you develop mypy plugin locally? I want to put some breakpoints 😄 sobolevn commented on Oct 4, 2021 Try --pdb option for mypy. I don't use debuggers, sorry.
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|