Skip to content
This repository has been archived by the owner on May 21, 2020. It is now read-only.
/ aiowwlln Public archive

⚡️A simple, asyncio-driven Python3 wrapper for the WWLLN (World Wide Lightning Location Network)

License

Notifications You must be signed in to change notification settings

bachya/aiowwlln

Repository files navigation

⚡️ aiowwlln: A simple Python3 wrapper for WWLLN

CI PyPi Version License codecov Maintainability Say Thanks

ARCHIVAL ANNOUNCEMENT

As of 2020-05-21, WWLLN no longer provides this data source and this project is archived.


aiowwlln is a simple, asyncio-driven Python library for retrieving information on lightning strikes from the World Wide Lightning Location Network (WWLLNN).

NOTE: This library is built on an unofficial API; therefore, it may stop working at any time.

Installation

pip install aiowwlln

Python Versions

aiowwlln is currently supported on:

  • Python 3.6
  • Python 3.7
  • Python 3.8

Usage

import asyncio
from datetime import datetime

from aiohttp import ClientSession

from aiowwlln import Client


async def main() -> None:
    """Run!"""
    client = aiowwlln.Client()

    # Create a client and get all strike data – by default, data is cached for
    # 60 seconds (be a responsible data citizen!):
    client = Client(session)
    await client.dump()

    # If you want to increase the cache to 24 hours, go for it:
    client = Client(session, cache_seconds=60*60*24)
    await client.dump()

    # Get strike data within a 50 km radius around a set of coordinates (note that
    # the cache still applies):
    await client.within_radius(
        56.1621538, 92.2333561, 50, unit="metric"
    )

    # Get strike data within a 10 mile radius around a set of coordinates (note that
    # the cache still applies):
    await client.within_radius(
        56.1621538, 92.2333561, 10, unit="imperial"
    )

    # Get strike data within a 50 km radius around a set of coordinates _and_
    # within the last 10 minutes:
    await client.within_radius(
        56.1621538, 92.2333561, 50, unit="metric", window=timedelta(minutes=10)
    )


asyncio.run(main())

By default, the library creates a new connection to the WWLLN with each coroutine. If you are calling a large number of coroutines (or merely want to squeeze out every second of runtime savings possible), an aiohttp ClientSession can be used for connection pooling:

import asyncio
from datetime import datetime

from aiohttp import ClientSession

from aiowwlln import Client


async def main() -> None:
    """Run!"""
    async with ClientSession() as session:
        client = aiowwlln.Client(session=session)

        # ...


asyncio.run(main())

Contributing

  1. Check for open features/bugs or initiate a discussion on one.
  2. Fork the repository.
  3. (optional, but highly recommended) Create a virtual environment: python3 -m venv .venv
  4. (optional, but highly recommended) Enter the virtual environment: source ./.venv/bin/activate
  5. Install the dev environment: script/setup
  6. Code your new feature or bug fix.
  7. Write tests that cover your new functionality.
  8. Run tests and ensure 100% code coverage: script/test
  9. Update README.md with any new documentation.
  10. Add yourself to AUTHORS.md.
  11. Submit a pull request!

About

⚡️A simple, asyncio-driven Python3 wrapper for the WWLLN (World Wide Lightning Location Network)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published