Pretty good for a week and a half! I would recommend setting up a project using uv
and also adding type hints and check them with Pyright (NOT Mypy).
It's mostly ok, my immediate reaction is that it's unnecessary to put the whole program into a class. Python isn't Java. It's fine to write procedures at the top level.
Also as someone said, consider using enums, and also the new case statement as of Python 3.10. Type annotations also can make things clearer. I've been using mypy to check mine but there are some alternatives now that might be better.
There is not much error checking but that can be ok if you are the only user.
If the config file might be crafted maliciously, it can use escape codes for a terminal playback attack: https://www.cyberark.com/resources/threat-research-blog/dont-trust-this-title-abusing-terminal-emulators-with-ansi-escape-characters
Be careful of that.
Yes I realized that I put everything to two classes. It's too much. I'll make more classes for more attributes.
I didn't know enums until now and it's awesome. I will do some exercises about it.
Last thing is interesting. I need to read that. Thank you for suggestions.
There's no need to make more classes. You can move some of the code so it's not in any class.
You appear to be afraid of spaces. Everything is cramped together.
Just bc you don't have to put a space after colons or after equals and commas and whatnot doesn't mean you shouldn't
Don't be afraid of spaces.
They make it easier for you to read your code when you come back later
I revised the code. Added some spaces and comments for better readability. Hope it's better now.
Instead you should just use an autoformatter. Black is good. Ruff is probably good too but I don't have a lot of experience with it. YAPF is not good; don't use it.
Oops, sorry. I will revise the code and place spaces. Thanks for suggestion <3
Usually, you would use a formatter anyway - it's good to know the standard way but for day to day coding I just have a shortcut bound that runs ruff format
(you can even have it done automatically on file save).
I need to search formatters. Thank you for suggestion.
Ruff
Not the original commenter, but no need to apologise my friend. Nice work. Learning tip from me: give PEP 8 a read and save it for reference somewhere. It's the standard for how to format Python code, and future you will thank you for internalising it early on in your Python journey
Thank you I will read it.
I started to python one and half week ago. So I’m still beginner.
Nice work! Here are a few notes:
The WeatherApp
object has a mix of attributes with long-term (eg self.LOCATIONS
) and short-term (eg self.city
) relevance. Instance attributes introduced in places other than __init__
, which makes it non-trivial for a reader to quickly understand what the object contains. And, actually, self.{city,lat,lon}
are all only used from the add_city
method so they could/should be local variables instead of instance attributes (just remove the self.
from them).
There seem to maybe be some bugs around when things are lowercase and when not; for example checking if self.city.lower() in self.LOCATIONS
but then when writing there the non-lower self.ctiy
is used as the key to self.LOCATIONS
.
The code under if rep == "1"
and elif rep == "2"
is mostly duplicated, and there is no else
branch to cover if rep
is something other than 1 or 2.
It looks like the config only persists favorites so far (and not non-favorite cities which the user can add) which isn't obvious from the user interface.
Passing both location
and locations
into WeatherAPI
so that it can look up locations[location]
is unnecessary; it would be clearer to pass in the dict for the specific location. It would also be possible to avoid the need for LOWLOCATIONS
by adding a non-lowercase name
key to the per-location dictionaries that just have lat
and lon
right now, and then keeping LOCATIONS
keyed by the lowercase names.
HTH! happy hacking :)
That's very informative, I will rewrite the code with your suggestions. Thank you!
I am pretty new myself, but if you didn't know, here are some great free resources to help you.
These are looking awesome. Thank you for sharing this <3
No problem at all! I hope it helps :)
Too lazy to check the logic but if possible, consider using enums.
Yes I need to use enums. I realized it now.
Python
Welcome to the Python community on the programming.dev Lemmy instance!
📅 Events
Past
November 2023
- PyCon Ireland 2023, 11-12th
- PyData Tel Aviv 2023 14th
October 2023
- PyConES Canarias 2023, 6-8th
- DjangoCon US 2023, 16-20th (!django 💬)
July 2023
- PyDelhi Meetup, 2nd
- PyCon Israel, 4-5th
- DFW Pythoneers, 6th
- Django Girls Abraka, 6-7th
- SciPy 2023 10-16th, Austin
- IndyPy, 11th
- Leipzig Python User Group, 11th
- Austin Python, 12th
- EuroPython 2023, 17-23rd
- Austin Python: Evening of Coding, 18th
- PyHEP.dev 2023 - "Python in HEP" Developer's Workshop, 25th
August 2023
- PyLadies Dublin, 15th
- EuroSciPy 2023, 14-18th
September 2023
- PyData Amsterdam, 14-16th
- PyCon UK, 22nd - 25th
🐍 Python project:
- Python
- Documentation
- News & Blog
- Python Planet blog aggregator
💓 Python Community:
- #python IRC for general questions
- #python-dev IRC for CPython developers
- PySlackers Slack channel
- Python Discord server
- Python Weekly newsletters
- Mailing lists
- Forum
✨ Python Ecosystem:
🌌 Fediverse
Communities
- #python on Mastodon
- c/django on programming.dev
- c/pythorhead on lemmy.dbzer0.com
Projects
- Pythörhead: a Python library for interacting with Lemmy
- Plemmy: a Python package for accessing the Lemmy API
- pylemmy pylemmy enables simple access to Lemmy's API with Python
- mastodon.py, a Python wrapper for the Mastodon API