Comments (5)
Thanks for spotting this issue. You're more than welcome to help out, my current priority is on fixing Python 3.7 support.
Some things to keep in mind:
- For Python 2.7, we convert stubfiles to a 2.7 parsable form, i.e. using type comments and
pass
instead of...
. These are potentially stored with .pyi2 suffix to avoid conflicts with Python 3 stubfiles in the same folder. See https://github.com/Stewori/pytypes#python-27-compliant-stubfiles. - In some situations (something with running module initialization code in a module involving forward references in stubfiles) certain checks must be delayed until module import is finished. In that case, pytypes monkeypatches
builtins.__import__
for detecting end of module import. (This shall be turned into an import hook, but that's still a todo.) Just pointing this out, hope it does not interfere with your approach. The monkeypatch is only applied if such a situation really comes up. Also seepytypes.import_hook_enabled
for controlling this behavior. - Currently pytypes also works with Jython. Keeping this compatibility valid can be tricky. I hope we can find a solution without breaking this support.
pytypes.stubfile_manager
applies a bit more magic than just loading the stubfile. When classes are used as types or type parameters it assures that not the class objects from the stubfile are used but instead the corresponding class objects from the actual module. It was tricky to get this right for nested classes, which lead to somewhat complicated code in stubfile_manager.py. It might take additional consideration to integrate your approach with this mechanism. See e.g.stubfile_manager._match_stub_type
orstubfile_manager._match_classes
.
I cannot tell right now if any of these notes applies to your approach (e.g. I never tried to use contextlib in Jython, maybe it just works). It's just things that might have to be considered. Good luck and feel free to ask for advice on pytypes internals etc if required!
from pytypes.
I hope my comments did not scare you away. Please feel free to go on with a PR, even if it wouldn't consider all the points above right out of the box. We can fix these things together step by step (as far as necessary at all).
from pytypes.
@Stewori did not scare me away but me realize my current implementation has conceptional problems. E.g. does not handle forward references at all...
from pytypes.
Note that pytypes has a mechanism to handle forward references: type_util.resolve_fw_decl
which takes a module name as (optional) parameter, denoting a module where it looks for declarations of referenced variables. I'm not sure right now if it works with a stub file as module, but if not we should add it there.
from pytypes.
I gave this a good thought and decide to do this instead at mypy level 😃
from pytypes.
Related Issues (20)
- Utility to validate stubfile signatures against .py implementations HOT 4
- pytypes is_of_type: counter-intuitive result on semi-primitive types like list and dict HOT 5
- is_of_type does not work as expected with Annotated[Generic[T], ...] HOT 1
- Some differences between Python 3.6 and 3.8 HOT 3
- New release HOT 1
- please improve error messages when functions decorated with @typechecked are called with incorrect types
- pytypes breaks @autoreload in a somewhat dangerous way HOT 8
- `is_subtype` fails with `List[TypeVar]`
- Infer return type of generic functions based on input
- Support Python 3.10 HOT 7
- @typechecked fails to correctly parse functions with PEP 3102
- Incorrect collections imports in type_util.py HOT 1
- VSCode incorrect decorated func hint HOT 7
- AttributeError: 'NoneType' object has no attribute '__bound__' HOT 5
- Partially-annotated functions with default parameter values result in errors. HOT 12
- Error in @typechecked with List[Dict[str, str]] HOT 1
- Remove backports.typing usage
- _check_caller_type can be broken by removing a blank line in typechecker_testhelper_py3.py
- typechecked(string) should have more consistent return type HOT 1
- Python 3.8 Compatibility HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pytypes.