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 forshinylive
projects easier. It may work withpyodide
in general, but that use case hasn't been tested. - For more information on Shinylive for Python see: https://shiny.posit.co/py/docs/shinylive.html
Install
- PyPI:
pip install pyfetch-mimic
- Vendoring:
- Copy
pyfetch_mimic.py
into your own project
- Copy
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 use case variations yet. It will be updated as need arises.
pyfetch examples
- These should all work with python
pyodide.http.pyfetch
andpyfetch_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 (verifes 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-0.0.4.tar.gz
(5.4 kB
view hashes)
Built Distribution
Close
Hashes for pyfetch_mimic-0.0.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c5271d70c09f5d9633d5848e05ac53400c2a31b95fb5b8aa9ca0dc0f8319d765 |
|
MD5 | 26afb70d65520b008e826e8c796cbcf7 |
|
BLAKE2b-256 | e2d9b11cc4742e10e4cace50d11798eb2c1f590e627891555e2b5ee819e7f77d |