Comments (4)
Hi, thank you so much for your report!
The problem here is that the curses
function is not prepared to deal with modules. We would see exactly the same problem if you were trying to curse anything on os
for example.
Probably, raising a TypeError
saying that modules are not welcome would be enough, since you can still patch them without cursing them. Forbidden Fruit actually uses this technique to provide the hide_from_dir
parameter in the curse
function: https://github.com/clarete/forbiddenfruit/blob/master/forbiddenfruit/__init__.py#L64
What do you think?
from forbiddenfruit.
My preference would be for the simplest API possible, so a caller doesn't need different behavior to change a module's attributes or a class's. That is, to have curse()
check wether the given klass
is really a module, and if so, patching it the simpler way hide_from_dir
does. One-stop shopping!
from forbiddenfruit.
That makes a lot of sense and I have the tests! :)
from forbiddenfruit.
But how do we make sure this is done globally?
from forbiddenfruit.
Related Issues (20)
- test fails with py3.8 and pytest HOT 3
- str.__mod__ method is not patchable! HOT 1
- Unable to perfectly re-curse to __add__ HOT 2
- Cursing int with __iter__ fails with an error HOT 1
- Possible simplification of patchable_builtin() HOT 2
- Provide wheel packages? HOT 8
- Exceptions raised in cursed-in dunder methods are not raised to calling code
- Crash on Windows if dunder methods cursed into `ctypes.c_int` raises an exception
- Fix simple typo: infomation -> information HOT 1
- Replacing __hash__ returns a key error HOT 1
- Cursing dunder methods fails with: KeyError: '<method_to_curse>' HOT 5
- Patch for str __add__ not working
- object has no attribute '__dict__' HOT 1
- how to use reverse with existing attributes HOT 2
- MacOS errors monkeypatching `object`
- Undiagnosed crash (Windows 11, Python 3.10)
- How to make the additional function can be autocompleted in VS Code? HOT 1
- Add `pyproject.toml` or implement wheel-based distribution
- Unable to curse __call__
- __init_subclass__ seems to not be implemented as a cursable magic method
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 forbiddenfruit.