Skip to content

bachya/pyiqvia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌻 pyiqvia: A clean, async-focused Python3 API for IQVIA™

CI PyPI Version License Code Coverage Maintainability

Buy Me A Coffee

pyiqvia is an async-focused Python3 library for allergen, asthma, and disease data from the IQVIAâ„¢ family of websites (such as Pollen.com, FluStar, and more).

Python Versions

pyiqvia is currently supported on:

  • Python 3.10
  • Python 3.11
  • Python 3.12

Installation

pip install pyiqvia

Usage

import asyncio

from aiohttp import ClientSession

from pyiqvia import Client


async def main() -> None:
    """Run!"""
    # Note that ZIP codes must be provided as strings:
    client = Client("80012")

    # Get current allergen information:
    await client.allergens.current()

    # Get more information on the current allergen outlook:
    await client.allergens.outlook()

    # Get extended forecast allergen information:
    await client.allergens.extended()

    # Get historic allergen information:
    await client.allergens.historic()

    # Get current asthma information:
    await client.asthma.current()

    # Get extended forecast asthma information:
    await client.asthma.extended()

    # Get historic asthma information:
    await client.asthma.historic()

    # Get current cold and flu information:
    await client.disease.current()

    # Get extended forecast cold and flu information:
    await client.disease.extended()

    # Get historic cold and flu information:
    await client.disease.historic()


asyncio.run(main())

Retries

By default, pyiqvia will retry appropriate errors 4 times (with an exponentially increasing delay in-between). This logic can be changed by passing a different value for request_retries to the Client constructor:

import asyncio

from pyiqvia import Client


async def main():
    client = Client("80012", request_retries=5)

    # ...


asyncio.run(main())

Connection Pooling

By default, the library creates a new connection to IQVIA 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 pyiqvia import Client


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

        # ...


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 pyiqvia tests
  9. Update README.md with any new documentation.
  10. Submit a pull request!