I’ve just released “Why naïve times are local times in Python”, explaining why it makes sense that the naïve datetime object stopped being abstract and started representing system local time as part of Python 3: https://blog.ganssle.io/articles/2022/04/naive-local-datetimes.html
Useful take-away: dt.astimezone(None)