Skip to main content

☀️ pyopenuv: A simple Python API for data from openuv.io

CI PyPI Version License Code Coverage Maintainability

Buy Me A Coffee

pyopenuv is a simple Python library for retrieving UV-related information from openuv.io.

Installation

pip install pyopenuv

Python Versions

pyopenuv is currently supported on:

  • Python 3.10
  • Python 3.11
  • Python 3.12

API Key

You can get an API key from the OpenUV console.

Usage

import asyncio

from pyopenuv import Client
from pyopenuv.errors import OpenUvError


async def main():
    client = Client(
        "<OPENUV_API_KEY>", "<LATITUDE>", "<LONGITUDE>", altitude="<ALTITUDE>"
    )

    try:
        # Get the current status of the OpenUV API:
        print(await client.api_status())
        # >>> True

        # Get current UV info:
        print(await client.uv_index())
        # >>> { "result": { ... } }

        # Get forecasted UV info:
        print(await client.uv_forecast())
        # >>> { "result": { ... } }

        # Get UV protection window:
        print(await client.uv_protection_window())
        # >>> { "result": { ... } }

        # Get API usage info/statistics:
        print(await client.api_statistics())
        # >>> { "result": { ... } }
    except OpenUvError as err:
        print(f"There was an error: {err}")


asyncio.run(main())

Checking API Status Before Requests

If you would prefer to not call api_status manually, you can configure the Client object to automatically check the status of the OpenUV API before executing any of the API methods—simply pass the check_status_before_request parameter:

import asyncio

from pyopenuv import Client
from pyopenuv.errors import ApiUnavailableError, OpenUvError


async def main():
    client = Client(
        "<OPENUV_API_KEY>",
        "<LATITUDE>",
        "<LONGITUDE>",
        altitude="<ALTITUDE>",
        check_status_before_request=True,
    )

    try:
        print(await client.uv_index())
    except ApiUnavailableError:
        print("The API is unavailable")
    except OpenUvError as err:
        print(f"There was an error: {err}")


asyncio.run(main())

Connection Pooling

By default, the library creates a new connection to OpenUV 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 aiohttp import ClientSession
from pyopenuv import Client
from pyopenuv.errors import OpenUvError


async def main():
    async with ClientSession() as session:
        client = Client(
            "<OPENUV_API_KEY>",
            "<LATITUDE>",
            "<LONGITUDE>",
            altitude="<ALTITUDE>",
            session=session,
        )

        try:
            print(await client.uv_index())
        except OpenUvError as err:
            print(f"There was an error: {err}")


asyncio.run(main())

Contributing

Thanks to all of our contributors so far!

  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 on a new branch.
  7. Write tests that cover your new functionality.
  8. Run tests and ensure 100% code coverage: poetry run pytest --cov pyopenuv tests
  9. Update README.md with any new documentation.
  10. Submit a pull request!

Metadata

Release files for pyopenuv 2023.12.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyopenuv 2023.12.0
File Size Uploaded
pyopenuv-2023.12.0.tar.gz 6.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyopenuv 2023.12.0
File Interpreter ABI Platform
pyopenuv-2023.12.0-py3-none-any.whl Python 3 none any Details

Total release size: 13.4 kB

Release files / pyopenuv-2023.12.0.tar.gz

Download URL pyopenuv-2023.12.0.tar.gz
Size 6.6 kB
Tags Source
SHA-256 checksum
How to use checksums
7648af6453ec336d86be719606ae40d9950093fe9f240017a26aa39d0f612d94
BLAKE2b-256 checksum
How to use checksums
fd0c608d18ba56b88b7a34dca1579e52e71d76a98a93ab34076ee501cc199f72
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.1 CPython/3.12.1 Linux/6.2.0-1018-azure

Release files / pyopenuv-2023.12.0-py3-none-any.whl

Download URL pyopenuv-2023.12.0-py3-none-any.whl
Size 6.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eedda9a2f6960392b52f4e3456d183f226457c4984983b36c0b65ab67e0dcd45
BLAKE2b-256 checksum
How to use checksums
1edb66b1557a0213ff0659a9d764e394c024415e9d7a22c85868a70f33af8254
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.7.1 CPython/3.12.1 Linux/6.2.0-1018-azure

Release history Release notifications | RSS feed

This release

2023.12.0 This release

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.1.0

2 release files

1.0.13

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page