Skip to main content

This is a module that mimics pyodide.http.pyfetch to enable simpler development by using one set of http calls for both local and pyodide executions.

Project description

pyfetch-mimic

  • This is a simple module that mimics pyodide.http.pyfetch to make local development for shinylive projects easier. It may work with pyodide in general, but that use case hasn't been tested.
  • For more information on Shinylive for Python, and general information on how to use additional third party libraries (like this one), see: https://shiny.posit.co/py/docs/shinylive.html

Install

  • PyPI: pip install pyfetch-mimic
  • Vendoring:
    • Copy pyfetch_mimic.py into your own project

How to use

  • Include the following conditional import statement at the beginning of the module that will use http.pyfetch:
    import sys
    if "pyodide" in sys.modules:
        from pyodide import http
    else:
        from pyfetch_mimic import http
    
  • Use http.pyfetch as usual
  • NOTE: This is a work in progress and does not support all pyodide.http.pyfetch functionality yet. I use this in my own production work, and the functionality that currently exists is simply the functionality that I need. If there is a need for additional functionality, please open an issue or pull request.

pyfetch examples

  • These should all work with python pyodide.http.pyfetch and pyfetch_mimic.http.pyfetch
# Download, save extracted file to local virtual fs
import sys
if "pyodide" in sys.modules:
    from pyodide import http
else:
    from pyfetch_mimic import http

async def sample():
    response = await http.pyfetch("https://some_url/myfiles.zip")
    await response.unpack_archive()
# Download text file to local virtual fs, load into pandas
import pandas as pd
import sys
if "pyodide" in sys.modules:
    from pyodide import http
else:
    from pyfetch_mimic import http

async def sample():    
    response = await http.pyfetch(url())
    with open("test.json", mode="wb") as file:
        file.write(await response.bytes())
    df = pd.read_json("test.json")
# Download text file into BytesIO memory buffer, load into pandas
from io import BytesIO
import sys
import pandas as pd
if "pyodide" in sys.modules:
    from pyodide import http
else:
    from pyfetch_mimic import http

async def sample():
    response = await http.pyfetch("<URL>")
    buf = BytesIO(await response.bytes())
    df = pd.read_json(buf)

Testing

Install Test Dependencies

  • pip install -e '.[tests]'

Run regular tests (verifies test endpoints and tests pyfetch-mimic)

  • activate venv: source .venv/bin/activate
  • start fastapi app: python3 src_test_webserver/main.py
  • run pytest: pytest -vv -x test

Run pyodide tests with pyfetch calls written identical to pyfetch-mimc

Manually

  • activate venv and start test fastapi app using step above
  • export shinylive app: shinylive export ./test/tests_shinylive ./src_test_webserver/shinyapps
  • open shinylive app in edit mode: http://localhost8000/apps/edit/
  • Click "Run tests"
  • If all function names at the bottom are followed by "passed", then everything should be ok

Using Robot Framework

  • activate venv
  • export shinylive app: shinylive export ./test/tests_shinylive ./src_test_webserver/shinyapps
  • run robot: robot test/robot_tests/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyfetch_mimic-2024.6.14.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyfetch_mimic-2024.6.14-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file pyfetch_mimic-2024.6.14.tar.gz.

File metadata

  • Download URL: pyfetch_mimic-2024.6.14.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.4

File hashes

Hashes for pyfetch_mimic-2024.6.14.tar.gz
Algorithm Hash digest
SHA256 50724d3b7757218547e6375f31eb5e9e1740580a21c00951abb55eaccecb1265
MD5 2178a7a2421cddf8c42786a69745117f
BLAKE2b-256 9802beebe3c3766ed3cff6094551921f077b51dcf2ac6bdc9f5df7dd15c79b89

See more details on using hashes here.

File details

Details for the file pyfetch_mimic-2024.6.14-py3-none-any.whl.

File metadata

File hashes

Hashes for pyfetch_mimic-2024.6.14-py3-none-any.whl
Algorithm Hash digest
SHA256 18b4357c2345b14af540bd79f21fab74025a794d89d0fd1fe8e80bf0fb94cc44
MD5 5774e14e0cb03884fd9fb8b2c52bbac8
BLAKE2b-256 b981f4e462d59809cb67ad5a8bcead0a351f163524eb749087ba0ceadf6ec239

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page