mirror of
https://github.com/pyscript/pyscript.git
synced 2025-12-19 18:27:29 -05:00
* Remove duplicate LICENSE. * Remove un-userd pyscript.sw directory and its content. * Remove ReadTheDocs settings (unused). * Remove un-used pyproject.toml * Remove now unused CHANGELOG. Changes now tracked via release notes on GitHub. * Updated / cleaned release page template and associated GH actions. * Update prettierignore to remove un-needed refs. * Move troubleshooting into correct README. * Add reason for the index.html * Rename the "pyscript.core" directory to "core". * Update PR template because CHANGELOG is no longer used. * Codespell configuration in pyproject.toml. * Update pyscript.core -> core in .githubignore * Remove test-results/.last-run.json. This should be ignored by git. * Pin nodejs version. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
70 lines
2.6 KiB
JavaScript
70 lines
2.6 KiB
JavaScript
import { FetchError, ErrorCode } from "./exceptions.js";
|
|
|
|
/**
|
|
* @param {Response} response
|
|
* @returns
|
|
*/
|
|
export const getText = (response) => response.text();
|
|
|
|
/**
|
|
* This is a fetch wrapper that handles any non 200 responses and throws a
|
|
* FetchError with the right ErrorCode. This is useful because our FetchError
|
|
* will automatically create an alert banner.
|
|
*
|
|
* @param {string} url - URL to fetch
|
|
* @param {Request} [options] - options to pass to fetch
|
|
* @returns {Promise<Response>}
|
|
*/
|
|
export async function robustFetch(url, options) {
|
|
let response;
|
|
|
|
// Note: We need to wrap fetch into a try/catch block because fetch
|
|
// throws a TypeError if the URL is invalid such as http://blah.blah
|
|
try {
|
|
response = await fetch(url, options);
|
|
} catch (err) {
|
|
const error = err;
|
|
let errMsg;
|
|
if (url.startsWith("http")) {
|
|
errMsg =
|
|
`Fetching from URL ${url} failed with error ` +
|
|
`'${error.message}'. Are your filename and path correct?`;
|
|
} else {
|
|
errMsg = `Polyscript: Access to local files
|
|
(using [[fetch]] configurations in <py-config>)
|
|
is not available when directly opening a HTML file;
|
|
you must use a webserver to serve the additional files.
|
|
See <a style="text-decoration: underline;" href="https://github.com/pyscript/pyscript/issues/257#issuecomment-1119595062">this reference</a>
|
|
on starting a simple webserver with Python.
|
|
`;
|
|
}
|
|
throw new FetchError(ErrorCode.FETCH_ERROR, errMsg);
|
|
}
|
|
|
|
// Note that response.ok is true for 200-299 responses
|
|
if (!response.ok) {
|
|
const errorMsg = `Fetching from URL ${url} failed with error ${response.status} (${response.statusText}). Are your filename and path correct?`;
|
|
switch (response.status) {
|
|
case 404:
|
|
throw new FetchError(ErrorCode.FETCH_NOT_FOUND_ERROR, errorMsg);
|
|
case 401:
|
|
throw new FetchError(
|
|
ErrorCode.FETCH_UNAUTHORIZED_ERROR,
|
|
errorMsg,
|
|
);
|
|
case 403:
|
|
throw new FetchError(ErrorCode.FETCH_FORBIDDEN_ERROR, errorMsg);
|
|
case 500:
|
|
throw new FetchError(ErrorCode.FETCH_SERVER_ERROR, errorMsg);
|
|
case 503:
|
|
throw new FetchError(
|
|
ErrorCode.FETCH_UNAVAILABLE_ERROR,
|
|
errorMsg,
|
|
);
|
|
default:
|
|
throw new FetchError(ErrorCode.FETCH_ERROR, errorMsg);
|
|
}
|
|
}
|
|
return response;
|
|
}
|