Comments (9)
Same issue here: importing freezegun has uncool side effects. Given the usage as decorator or context manager, this was fully unexpected to me. Can I help fix this?
from freezegun.
The reason freezegun mocks on import is to accomodate those that do from datetime import datetime
before freezegun is activated. If you can find a good workaround, I'll be happy to pull it in.
from freezegun.
Hm, if someone imports datetime from datetime before the first import of freezegun (e.g. a web app that imports models on startup and the models import datetime, but freezegun is only imported after, in app.tests), it won’t work anyway, will it? IOW, recommended form of import becomes “import datetime” everywhere, and then import-time monkey-patching is not necessary. My own code would need changes as I always import classes from datetime, but I wouldn’t mind doing that if it allowed me to use freezegun instead of tedious mock.patch + datetime.
from freezegun.
Sorry, my comment was unclear. What works now is if someone imports freezegun, then does from datetime import datetime
and then uses the decorator.
When freezegun first started, it didn't do any of this patching on import, but then I got a bunch of complaints. The issue is that people can't always control how third-party software imports datetime.
Sorry that this all kinda sucks. It's my least favorite thing about this library. We could do something like
import freezegun
freezegun.dont_patch()
and have dont_patch revert the patching.
That seems pretty gross to me though. Another idea is to have a different branch that works the old way.
from freezegun.
It's only marginally less gross, but there could also be two different import paths:
from freezegun import freeze_time # doesn't patch on import
from freezegun.clobbering import freeze_time # patches on import
from freezegun.
I am not sure that we can find a satisfactory solution. The problem in my case is that I need to control the return value of datetime.now in one module but without overriding the datetime type, as another module is for example checking types to know how to convert objects to JSON. These constraints seem at odds with what freezegun users want (according to the complaints you described earlier). I think I’ll have to write a shortcut function like patch_datetime('module', 'wanted time') using the regular mock module.
from freezegun.
This should be fixed in the newest version.
from freezegun.
Great news! Thank you for considering our use cases.
from freezegun.
Just to be completely clear (in case people find this issue in the future), Freezegun will not work directly with Pandas, but Freezegun now only mocks datetime when it is activated allowing use of Freezegun in non-Panda tests.
from freezegun.
Related Issues (20)
- Timezone America/Sao_Paulo triggers recursion errors in tests. HOT 3
- Maintenance plans HOT 3
- 1.3.0: `freezegun/__init__.py` is missing new version number HOT 1
- [Discussion] about freezing asyncio HOT 7
- ``PermissionError: [Errno 1] Operation not permitted`` appears when upgrading to ``1.3.0`` HOT 7
- Freezegun doesn't mock pointers to date functions HOT 1
- Tag for 1.2.2 is missing HOT 1
- Python 3.12: Deprecation warnings related to datetime.datetime.utcfromtimestamp HOT 2
- Time is not freezed when using `uvloop` event loop
- unsupported operand type(s) for +: 'FakeDatetime' and 'FakeDatetime'
- Datetime and Time packages do not have the same behavior when being frozen HOT 4
- timezone free datetime.datetime.fromtimestamp returns original datetime.datetime HOT 1
- Adding a return value to tick()
- Could have some problem with Django with TIME_ZONE setting
- Test regressions on Python 3.13.0b1 HOT 2
- `FakeDatetime`'s `timestamp()` is not consistent with `datetime().timestamp()` HOT 1
- consider overriding == on FakeDatetimeMeta HOT 2
- Freeze time doesn't work with FastAPI + pydantic V2 HOT 2
- [Bug] `tz_offset` shifts `datetime` which is instantiated with `tz` argument
- Possible to patch user-defined functions?
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 freezegun.