Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AttributeError: 'OWM' object has no attribute 'weather_at_place'` #313

Closed
filiptronicek opened this issue May 31, 2020 · 19 comments
Closed

Comments

@filiptronicek
Copy link

GitHub actions returned this error code, after hundreds of successful runs.
Run python main.py Traceback (most recent call last): File "main.py", line 68, in <module> csvArrIn = getWeatherInfo(city) File "main.py", line 35, in getWeatherInfo obs = owm.weather_at_place(city+',CZ') AttributeError: 'OWM' object has no attribute 'weather_at_place'

@geofbaum
Copy link

@filiptronicek

From the short part of code that is visible in the error message it appears that you're missing a step to call 'weather_at_place' as it looks like you're trying to directly call it from owm.

Per the docs and altered to show your code usage the steps to call that attribute require calling weather_manager() before:

owm = OWM('your-api-key')
mgr = owm.weather_manager()
observation = mgr.weather_at_place(city+',CZ')

@filiptronicek
Copy link
Author

This is my function from my code:

def getWeatherInfo(city: str):
    owm = OWM(API_key)
    obs = owm.weather_at_place(city+',CZ')
    w = obs.get_weather()

@filiptronicek
Copy link
Author

I will try to use the weather_manager, but is this a new feature? It worked yesterday just fine.

@geofbaum
Copy link

Yes your code would have worked with the previous release of pyowm. And yes the weather_manager is a new feature in that it is the new way to call this now with the 3.0 Release of pyowm. It was released within the last 24hrs so if you're code in your github actions flow was just referencing the code here, that's now changed. You might want to just take a look at your code if you're referencing pyowm anywhere else in your workflow to make sure there aren't any other changes between the two releases that might cause an error.

Hopefully there's only a line or two to change on your side to get everything working with the new release.

@csparpa
Copy link
Owner

csparpa commented May 31, 2020

Hey @filiptronicek as per announcements and relative documentation PyOWM v3 is a major release and as such does not offer retrocompatibility with v2 library interface. yes, hopefully it will only take a few touches to your code to get everything sorted out

@csparpa
Copy link
Owner

csparpa commented May 31, 2020

By the way, lesson learned: never have your code depend upon libraries without checking that newer releases don't break it. this is easy done eg. with pip by ensuring that the next major release is never hit

@filiptronicek
Copy link
Author

@csparpa thanks for the advice. Makes sense.

@filiptronicek
Copy link
Author

@geofbaum is this code correct? Throws an error still

def getWeatherInfo(city: str):
    owm = OWM(API_key)
    mgr = owm.weather_manager()
    obs = mgr.weather_at_place(city+',CZ')
    w = obs.get_weather()

@csparpa
Copy link
Owner

csparpa commented May 31, 2020 via email

@filiptronicek
Copy link
Author

filiptronicek commented May 31, 2020

image
Doesn't seem that it would work.

@csparpa
Copy link
Owner

csparpa commented May 31, 2020 via email

@filiptronicek
Copy link
Author

Thanks, everything working again!

@anebz
Copy link

anebz commented Sep 17, 2020

@csparpa what is the v2 equivalent of weather_manager? I'm trying to deploy a code to Scrapinghub but I have to use an older version of it and when I try to deploy it, I get this error:

AttributeError: 'OWM25' object has no attribute 'weather_manager'`

@csparpa
Copy link
Owner

csparpa commented Sep 17, 2020 via email

@anebz
Copy link

anebz commented Sep 17, 2020

I don't follow, how does it change from the v3 version of my code?

from pyowm import OWM

owm = OWM('my-api')
mgr = owm.weather_manager()
observation = mgr.weather_at_place(...)

Do you mean this?

owm = OWM('my-api')
observation = owm.weather_at_place(...)

@csparpa
Copy link
Owner

csparpa commented Sep 17, 2020

@dothechuyen
Copy link

image
help me, pls!

@dothechuyen
Copy link

image

@Blackniku
Copy link

@dothechuyen
replace "get_weather()" with "weather"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants