pyowm - my first open source project
DESCRIPTION
Tech talk about setting up an open source project given at Italian Developers in London meetup (Oct 1st, 2014) http://www.meetup.com/Italian-Developers-in-London/events/205107652/TRANSCRIPT
![Page 1: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/1.jpg)
PYOWMMY FIRST OPEN SOURCE
PROJECT
CLAUDIO SPARPAGLIONE
@CSPARPA
![Page 2: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/2.jpg)
THE BIRTH OF PYOWM
Once upon a time ...
1.I need to use weather data in my own Python app
2.Open Weather Map web API? Wow!
3.There are no Python clients for this web API... Damn!
4.Ok, I’ll build one!
![Page 3: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/3.jpg)
THERE’S ALWAYS A FIRST TIME
• PyOWM (Sep 2013) is my first open source project ever
• Why such an effort?– pay the open source community back for its outstanding gifts
– will to learn something new– meet fellow devs– gain exposure in the community
![Page 4: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/4.jpg)
WHAT IS OPEN WEATHER MAP?
• openweathermap.org is a free weather data provider website + API
• Weather data is retrieved from global meteo services and from 40000+ community meteostations
• Light JSON/XML API, suitable for mobile apps and web widgets
![Page 5: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/5.jpg)
WHAT DATA CAN I GET FROM IT?
• Data samples:– weather status, temperature, wind speed & direction, clouds coverage, humidity, rain & snow amount, ...
• Context:– historic/current/forecast weather data on locations or lat-lon
• OGC-compliant WMS layers
![Page 6: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/6.jpg)
WHAT IS PYOWM?
• Python client wrapper around the OWM web API (v2.5)
• It allows easy OWM weather data consumption to both:
1. humans (via high-level abstractions and a human-friendly interface)
2. machines (via a simple OO API)
![Page 7: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/7.jpg)
HOW TO INSTALL
• From the Python Package Index– Use pip :
• Supported platforms:– Python 2.7 and 3.2+– No deps required
pip install pyowm
• Current release: 2.0.0• MIT license
![Page 8: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/8.jpg)
SHOW ME SOME CODE!from pyowm import OWM, timeutilsowm = OWM()
# Current wind and temp in Londonobs = owm.weather_at_place('London,uk')w = obs.get_weather()print w.get_wind(), w.get_temperature('celsius')
# Will it be sunny tomorrow in Milan?f = owm.daily_forecast("Milan,it")print f.will_be_sunny_at(timeutils.tomorrow())
# Current weather in cities around Rio de Janeiro# (lat 22.57 S, lon 43.12 W)print owm.weather_around_coords(-22.57, -43.12)
![Page 9: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/9.jpg)
ALL FEATURES (1/2)# Retrieve current weatherowm.weather_at_place('London,uk')owm.weather_at_coords(-22.57, -43.12)owm.weather_at_places('London', searchtype='accurate', \ limit=3)owm.weather_around_coords(-22.57, -43.12, limit=2)
# Retrieve weather forecastowm.three_hours_forecast('London,uk')owm.daily_forecast('London,uk')
# Retrieve weather historyowm.weather_history_at_place('London,uk', \ '2013-09-13 16:46:40+00', '2013-09-13 19:16:40+00')h = owm.station_tick_history(39276)
![Page 10: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/10.jpg)
ALL FEATURES (2/2)# Human-friendly utilities (subset)f.will_have_rain()f.will_have_fog()f.when_sun()f.when_snow()f.will_be_sunny_at(timeutils.tomorrow())f.will_be_cloudy_at(timeutils.next_three_hours())f.most_hot()f.most_windy()
# Historic weather data seriesh.temperature_series(unit='kelvin')h.rain_series()
# Dump all objects to JSON or XMLobs.to_JSON()w.to_XML()
![Page 11: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/11.jpg)
PROJECT STRUCTURE
• Code modules:– abstract classes– basic cache implementation– common utilities– object model for OWM web API
2.5 wrapping
• Test modules:– unit tests for each class– functional tests (integration
against the real API)
PYOWM├───pyowm │ ├───abstractions │ ├───caches │ ├───commons │ ├───exceptions │ ├───utils │ └───webapi25└───tests ├───functional │ └───webapi25 └───unit ├───caches ├───commons ├───utils └───webapi25
![Page 12: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/12.jpg)
WHAT DO YOU NEED TO STARTAN OPEN SOURCE PROJECT?
• Cooperate– collaborative platform for code and information sharing
– distributed revision control tool
• Strive for quality– documentation– testing– issue tracker
• Automatise repetitive tasks• Ship quickly to as many as possible
![Page 13: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/13.jpg)
• Project platform and SCM:– GitHub (code, wiki, issues)– Git
• Testing:– pyUnit for all testing– continous integration using Travis-CI– code coverage check with coveralls.io
PROJECT SETUP AND TOOLS (1/2)
![Page 14: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/14.jpg)
PROJECT SETUP AND TOOLS (2/2)
• Documentation:– continuous integration with Sphinx & readthedocs
• Distribution tools:– PyPI to store .eggs, source tarballs and Win installers
![Page 15: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/15.jpg)
THE MAJOR DEEDS
• OWM web API has pitfalls:– poorly documented– doesn’t rely on HTTP status codes!– different JSON payloads for same conceptual data entities
• No code contributors• Little time!
![Page 16: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/16.jpg)
ACHIEVEMENTS
• Learned a lot of tech things and so became a better programmer
• New followers on social networks• Got new issues reported• PyOWM quite downloaded from PyPI (~ 500/week)
• I’m now giving it a talk!
![Page 17: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/17.jpg)
THE NEXT CHALLENGES
• Workflow: use @nvie’s branching• Testing:– test platform compatibility using tox– check code coverage– increase code coverage (now 89%)
• Stronger community involvement on– bug tracking– code reviews
• Support for next OWM API version?
![Page 18: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/18.jpg)
CHECK IT OUT!
•https://github.com/csparpa/pyowm
at = "@"me = "csparpa"
# E-mailprint "".join([me, at, "gmail.com"])# Twitterprint "".join([at, me])
• And get in touch!
![Page 19: PyOWM - my first open source project](https://reader034.vdocument.in/reader034/viewer/2022042521/559454641a28ab85118b4580/html5/thumbnails/19.jpg)
THANKS! - QUESTIONS?