Async weather API
This project represents sample of asynchronous weather REST API that is build using quart (flask compatible API) python web microframework based on Asyncio.
Tools
Usage
PYPI
Please run following script to obtain latest package from PYPI:
➜ pip install async-weather-api
Then please execute instructions below to launch game from your environment:
import weather
weather.run(key="your-secret-key", bind="0.0.0.0:5001", debug=False)
Running on https://0.0.0.0:5001 (CTRL + C to quit)
...
Note key
stands for API key from https://openweathermap.org
Docker image
Please run next command to start async weather api via docker:
docker run -it -p 3000:5001 vyahello/async-weather-api:0.5.0 weather run --bind 0.0.0.0:5001 --mode prod --key <secret-key>
Source code
To be able to run source code please execute command below:
➜ python -m weather run --bind 0.0.0.0:5001 --mode prod --key your-secret-key
Running on https://0.0.0.0:5001 (CTRL + C to quit)
...
Endpoints
- / - home page
➜ curl -X GET http://0.0.0.0:5001/
➜ curl -X GET http://0.0.0.0:5001/index
Response: html page - /api/weather/{city}/{state}/{country} - current weather event
➜ curl -X GET http://0.0.0.0:5001/api/events/London/GB/GreatBritain
Response: json object
{"city":"London","country":"GreatBritain","name":"Jeff the player","state":"GB"}
- /api/weather/{zip_code}/{country} - current weather in city
➜ curl -X GET http://0.0.0.0:5001/api/weather/97002/us
Response: json object
{"base":"stations","clouds":{"all":90},"cod":200,"coord":{"lat":45.23,"lon":-122.8},
...}
- /api/sun/{zip_code}/{country} - current sunset/sunrise in city
➜ curl -X GET http://0.0.0.0:5001/sun/weather/97002/us
Response: json object
{"astronomical_twilight_begin":"04:03:49 PM","astronomical_twilight_end":"04:29:50 AM",
...}
Development notes
CI/CD
Project has Travis CI integration using .travis.yml file thus code analysis (black
, mypy
, pydocstyle
, pylint
, flake8
) and unittests (pytest
) will be run automatically
after every made change to the repository.
To be able to run code analysis, please execute command below:
➜ ./analyse-code.sh
Also test-report.html
will be generated after unittests execution.
Other than that, a fresh versioned package will be delivered on PYPI after new tag is created using pythonpublish.yml file.
Release notes
- 0.5.0
- Add official docker image
- 0.4.2
- Add manifest package installer file
- 0.4.1
- Read requirements for PYPI build
- 0.4.0
- 0.3.0
- Introduce asynchronous approach
- 0.2.0
- Introduce synchronous approach
- 0.1.0
- Distribute initial project version
Meta
Author – Volodymyr Yahello
Distributed under the MIT
license. See LICENSE for more information.
You can reach out me at:
Contributing
- clone the repository
- configure Git for the first time after cloning with your
name
and email
pip install -r requirements.txt
to install all project dependenciespip install -r requirements-dev.txt
to install all development project dependencies