func-to-web 2.7.0__tar.gz → 2.7.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {func_to_web-2.7.0/src/func_to_web.egg-info → func_to_web-2.7.2}/PKG-INFO +48 -12
- {func_to_web-2.7.0 → func_to_web-2.7.2}/README.md +47 -11
- {func_to_web-2.7.0 → func_to_web-2.7.2}/pyproject.toml +5 -1
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/config.py +1 -1
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/sdk.js +17 -1
- {func_to_web-2.7.0 → func_to_web-2.7.2/src/func_to_web.egg-info}/PKG-INFO +48 -12
- {func_to_web-2.7.0 → func_to_web-2.7.2}/LICENSE +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/setup.cfg +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/__init__.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/models/__init__.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/models/file_defaults.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/models/function.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/models/functions.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/models/return_parser.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/models/submit_defaults.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/outputs/__init__.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/outputs/download.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/outputs/form.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/outputs/image.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/outputs/table.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/outputs/text.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/py.typed +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/emit.js +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/icons/alert.svg +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/icons/check.svg +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/icons/clock.svg +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/icons/copy.svg +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/icons/download.svg +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/output.js +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/page.css +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/page.js +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/static/upload.js +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/templates/__init__.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/templates/doc.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/templates/index.html +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/templates/index.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/templates/page.html +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/templates/page.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/templates/theme.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/__init__.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/execution.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/messages.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/pending.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/print_capture.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/references.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/returned_files.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/router.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/run.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/stream.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web/web/upload.py +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web.egg-info/SOURCES.txt +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web.egg-info/dependency_links.txt +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web.egg-info/requires.txt +0 -0
- {func_to_web-2.7.0 → func_to_web-2.7.2}/src/func_to_web.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: func-to-web
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.2
|
|
4
4
|
Summary: Expose typed Python functions as web interfaces.
|
|
5
5
|
Author: Beltrán Offerrall
|
|
6
6
|
License: MIT License
|
|
@@ -61,7 +61,7 @@ Provides-Extra: test-browser
|
|
|
61
61
|
Requires-Dist: playwright; extra == "test-browser"
|
|
62
62
|
Dynamic: license-file
|
|
63
63
|
|
|
64
|
-
# FuncToWeb
|
|
64
|
+
# FuncToWeb
|
|
65
65
|
|
|
66
66
|
[](https://pypi.org/project/func-to-web/)
|
|
67
67
|
[](https://pypi.org/project/func-to-web/)
|
|
@@ -447,7 +447,7 @@ upload no execution ever uses expires; what your code received stays.
|
|
|
447
447
|
## Examples
|
|
448
448
|
|
|
449
449
|
The examples are probably the best way to learn the library.
|
|
450
|
-
[`examples/`](examples
|
|
450
|
+
[`examples/`](docs/examples.md) contains 81 runnable programs in 11 folders.
|
|
451
451
|
Each file teaches **a single capability**: you can read it in one sitting and
|
|
452
452
|
run it as it is. Alongside them, [`examples/project/`](examples/project/) holds
|
|
453
453
|
mini-apps, where several capabilities are combined into one small application.
|
|
@@ -539,13 +539,13 @@ mini-app with the dict swapped for a store.
|
|
|
539
539
|
|
|
540
540
|
Those three libraries are the whole stack: nested forms, recursive validation,
|
|
541
541
|
streaming, the file lifecycle and the published contract are all inside these
|
|
542
|
-
lines (v2.
|
|
542
|
+
lines (v2.7.1, `.py`/`.js`/`.css` under `src/`).
|
|
543
543
|
|
|
544
544
|
```text
|
|
545
545
|
pytypehint 2,740 lines types, validation, defaults
|
|
546
|
-
pytypehintweb 9,
|
|
547
|
-
FuncToWeb 5,
|
|
548
|
-
total ~17,
|
|
546
|
+
pytypehintweb 9,499 lines plan, widgets, transport (includes the JS/CSS)
|
|
547
|
+
FuncToWeb 5,306 lines routes, execution, storage, /doc
|
|
548
|
+
total ~17,500 lines
|
|
549
549
|
```
|
|
550
550
|
|
|
551
551
|
Each layer can be read on its own: pytypehint is under 3,000 lines of pure
|
|
@@ -578,16 +578,52 @@ func-to-web && pip freeze` in an empty virtualenv prints exactly this.
|
|
|
578
578
|
|
|
579
579
|
## Documentation
|
|
580
580
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
581
|
+
The technical reference, organized by what you want to do. For hands-on use,
|
|
582
|
+
see [Examples](docs/examples.md), one capability per file.
|
|
583
|
+
|
|
584
|
+
### Start here
|
|
585
|
+
|
|
586
|
+
- [Getting started](docs/getting-started.md): install, write your first function and run it.
|
|
587
|
+
- [Examples](docs/examples.md): the runnable examples and mini-apps, how to run them, and what each folder teaches.
|
|
588
|
+
- [`run()`](docs/run.md): the standalone application and the space index.
|
|
589
|
+
- [`app_of()`](docs/router.md): mounting the application in an existing FastAPI host application.
|
|
590
|
+
|
|
591
|
+
### Inputs and forms
|
|
592
|
+
|
|
593
|
+
- [Types and validation](docs/types.md): constraints, dataclasses, lists, unions, optionals and defaults.
|
|
594
|
+
- [Prefill and hidden parameters](docs/prefill.md): open a form with initial values, from Python or from the URL.
|
|
595
|
+
- [Files](docs/files.md): uploads, reusable file references, and which layer applies each limit.
|
|
596
|
+
- [`WebFunction`](docs/web-function.md): the name, description and slug of a function; prepared spaces.
|
|
597
|
+
|
|
598
|
+
### Execution and results
|
|
599
|
+
|
|
600
|
+
- [Execution over HTTP](docs/http.md): `/invoke`, the request body, the envelope and the status codes.
|
|
601
|
+
- [Streaming](docs/streaming.md): `/invoke-stream`, SSE events and `print()` capture.
|
|
602
|
+
- [Outputs](docs/outputs.md): text, images, tables and downloads with `Download`.
|
|
603
|
+
- [`OpenForm`](docs/open-form.md): open another function's form with the return value as prefill.
|
|
604
|
+
|
|
605
|
+
### Integration
|
|
606
|
+
|
|
607
|
+
- [`/doc`](docs/api-docs.md): the published contract that a client or an agent consumes.
|
|
608
|
+
- [`sdk.js`](docs/sdk.md): the helpers that call a space from your own frontend, and how to embed a function's page in another site.
|
|
609
|
+
- [Static assets](docs/static-assets.md): `/static`, the icons, the theme and how they are cached.
|
|
610
|
+
- [Security](docs/security.md): what FuncToWeb covers and what belongs to the host application.
|
|
611
|
+
|
|
612
|
+
### Internals
|
|
613
|
+
|
|
614
|
+
- [Architecture](docs/architecture.md): the layers and what each one solves.
|
|
615
|
+
- [Limitations](docs/limitations.md): the known limits, in a single list.
|
|
616
|
+
|
|
617
|
+
### Design notes
|
|
618
|
+
|
|
619
|
+
The pages above say what each thing is: the signature, the values, the errors and one example. The reasoning behind each of those decisions lives apart, in [`design/`](docs/design/index.md) — for whoever contributes to FuncToWeb, and for the curious. Nothing there is needed in order to use the library.
|
|
584
620
|
|
|
585
621
|
## Status
|
|
586
622
|
|
|
587
|
-
**FuncToWeb
|
|
623
|
+
**FuncToWeb is stable, used daily and actively maintained.**
|
|
588
624
|
|
|
589
625
|
The public API is the one described in
|
|
590
|
-
[
|
|
626
|
+
[documentation](#documentation), and the known limitations are listed in
|
|
591
627
|
[limitations.md](docs/limitations.md).
|
|
592
628
|
|
|
593
629
|
## License
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# FuncToWeb
|
|
1
|
+
# FuncToWeb
|
|
2
2
|
|
|
3
3
|
[](https://pypi.org/project/func-to-web/)
|
|
4
4
|
[](https://pypi.org/project/func-to-web/)
|
|
@@ -384,7 +384,7 @@ upload no execution ever uses expires; what your code received stays.
|
|
|
384
384
|
## Examples
|
|
385
385
|
|
|
386
386
|
The examples are probably the best way to learn the library.
|
|
387
|
-
[`examples/`](examples
|
|
387
|
+
[`examples/`](docs/examples.md) contains 81 runnable programs in 11 folders.
|
|
388
388
|
Each file teaches **a single capability**: you can read it in one sitting and
|
|
389
389
|
run it as it is. Alongside them, [`examples/project/`](examples/project/) holds
|
|
390
390
|
mini-apps, where several capabilities are combined into one small application.
|
|
@@ -476,13 +476,13 @@ mini-app with the dict swapped for a store.
|
|
|
476
476
|
|
|
477
477
|
Those three libraries are the whole stack: nested forms, recursive validation,
|
|
478
478
|
streaming, the file lifecycle and the published contract are all inside these
|
|
479
|
-
lines (v2.
|
|
479
|
+
lines (v2.7.1, `.py`/`.js`/`.css` under `src/`).
|
|
480
480
|
|
|
481
481
|
```text
|
|
482
482
|
pytypehint 2,740 lines types, validation, defaults
|
|
483
|
-
pytypehintweb 9,
|
|
484
|
-
FuncToWeb 5,
|
|
485
|
-
total ~17,
|
|
483
|
+
pytypehintweb 9,499 lines plan, widgets, transport (includes the JS/CSS)
|
|
484
|
+
FuncToWeb 5,306 lines routes, execution, storage, /doc
|
|
485
|
+
total ~17,500 lines
|
|
486
486
|
```
|
|
487
487
|
|
|
488
488
|
Each layer can be read on its own: pytypehint is under 3,000 lines of pure
|
|
@@ -515,16 +515,52 @@ func-to-web && pip freeze` in an empty virtualenv prints exactly this.
|
|
|
515
515
|
|
|
516
516
|
## Documentation
|
|
517
517
|
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
518
|
+
The technical reference, organized by what you want to do. For hands-on use,
|
|
519
|
+
see [Examples](docs/examples.md), one capability per file.
|
|
520
|
+
|
|
521
|
+
### Start here
|
|
522
|
+
|
|
523
|
+
- [Getting started](docs/getting-started.md): install, write your first function and run it.
|
|
524
|
+
- [Examples](docs/examples.md): the runnable examples and mini-apps, how to run them, and what each folder teaches.
|
|
525
|
+
- [`run()`](docs/run.md): the standalone application and the space index.
|
|
526
|
+
- [`app_of()`](docs/router.md): mounting the application in an existing FastAPI host application.
|
|
527
|
+
|
|
528
|
+
### Inputs and forms
|
|
529
|
+
|
|
530
|
+
- [Types and validation](docs/types.md): constraints, dataclasses, lists, unions, optionals and defaults.
|
|
531
|
+
- [Prefill and hidden parameters](docs/prefill.md): open a form with initial values, from Python or from the URL.
|
|
532
|
+
- [Files](docs/files.md): uploads, reusable file references, and which layer applies each limit.
|
|
533
|
+
- [`WebFunction`](docs/web-function.md): the name, description and slug of a function; prepared spaces.
|
|
534
|
+
|
|
535
|
+
### Execution and results
|
|
536
|
+
|
|
537
|
+
- [Execution over HTTP](docs/http.md): `/invoke`, the request body, the envelope and the status codes.
|
|
538
|
+
- [Streaming](docs/streaming.md): `/invoke-stream`, SSE events and `print()` capture.
|
|
539
|
+
- [Outputs](docs/outputs.md): text, images, tables and downloads with `Download`.
|
|
540
|
+
- [`OpenForm`](docs/open-form.md): open another function's form with the return value as prefill.
|
|
541
|
+
|
|
542
|
+
### Integration
|
|
543
|
+
|
|
544
|
+
- [`/doc`](docs/api-docs.md): the published contract that a client or an agent consumes.
|
|
545
|
+
- [`sdk.js`](docs/sdk.md): the helpers that call a space from your own frontend, and how to embed a function's page in another site.
|
|
546
|
+
- [Static assets](docs/static-assets.md): `/static`, the icons, the theme and how they are cached.
|
|
547
|
+
- [Security](docs/security.md): what FuncToWeb covers and what belongs to the host application.
|
|
548
|
+
|
|
549
|
+
### Internals
|
|
550
|
+
|
|
551
|
+
- [Architecture](docs/architecture.md): the layers and what each one solves.
|
|
552
|
+
- [Limitations](docs/limitations.md): the known limits, in a single list.
|
|
553
|
+
|
|
554
|
+
### Design notes
|
|
555
|
+
|
|
556
|
+
The pages above say what each thing is: the signature, the values, the errors and one example. The reasoning behind each of those decisions lives apart, in [`design/`](docs/design/index.md) — for whoever contributes to FuncToWeb, and for the curious. Nothing there is needed in order to use the library.
|
|
521
557
|
|
|
522
558
|
## Status
|
|
523
559
|
|
|
524
|
-
**FuncToWeb
|
|
560
|
+
**FuncToWeb is stable, used daily and actively maintained.**
|
|
525
561
|
|
|
526
562
|
The public API is the one described in
|
|
527
|
-
[
|
|
563
|
+
[documentation](#documentation), and the known limitations are listed in
|
|
528
564
|
[limitations.md](docs/limitations.md).
|
|
529
565
|
|
|
530
566
|
## License
|
|
@@ -62,7 +62,11 @@ Source = "https://github.com/offerrall/FuncToWeb"
|
|
|
62
62
|
[tool.pytest.ini_options]
|
|
63
63
|
testpaths = ["tests"]
|
|
64
64
|
addopts = "--strict-markers --strict-config"
|
|
65
|
-
filterwarnings = [
|
|
65
|
+
filterwarnings = [
|
|
66
|
+
"error",
|
|
67
|
+
# Raised inside Starlette's TestClient by anyio 4.15, not by FuncToWeb.
|
|
68
|
+
"ignore:The anyio.abc.BlockingPortal alias is deprecated:DeprecationWarning",
|
|
69
|
+
]
|
|
66
70
|
markers = [
|
|
67
71
|
"browser: needs a real headless browser",
|
|
68
72
|
"package: builds or installs the distribution",
|
|
@@ -51,6 +51,15 @@ const MODAL_STYLE = `
|
|
|
51
51
|
background: transparent;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
.ftw-modal-panel[data-ftw-sizing] {
|
|
55
|
+
visibility: hidden;
|
|
56
|
+
animation: ftw-reveal 0s 1.5s forwards;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@keyframes ftw-reveal {
|
|
60
|
+
to { visibility: visible; }
|
|
61
|
+
}
|
|
62
|
+
|
|
54
63
|
.ftw-modal-close {
|
|
55
64
|
position: absolute;
|
|
56
65
|
top: 10px;
|
|
@@ -568,6 +577,11 @@ export function openModal(url, options = {}) {
|
|
|
568
577
|
panel.append(button);
|
|
569
578
|
overlay.append(panel);
|
|
570
579
|
|
|
580
|
+
// Until the page reports its height the panel would open at its maximum
|
|
581
|
+
// and then shrink. It stays invisible meanwhile; the overlay still shows
|
|
582
|
+
// at once, and the stylesheet reveals the panel if no height ever comes.
|
|
583
|
+
if (autoHeight) panel.setAttribute("data-ftw-sizing", "");
|
|
584
|
+
|
|
571
585
|
// The modal owns sizing and listener lifetime; its iframe fills the panel.
|
|
572
586
|
const frame = embed(panel, url, { ...rest, autoHeight: false });
|
|
573
587
|
|
|
@@ -580,7 +594,9 @@ export function openModal(url, options = {}) {
|
|
|
580
594
|
|
|
581
595
|
const channel = listen(frame, {
|
|
582
596
|
onResize(size) {
|
|
583
|
-
if (autoHeight)
|
|
597
|
+
if (!autoHeight) return;
|
|
598
|
+
panel.style.setProperty("--ftw-content-height", `${size}px`);
|
|
599
|
+
panel.removeAttribute("data-ftw-sizing");
|
|
584
600
|
},
|
|
585
601
|
onResult(outputs) {
|
|
586
602
|
if (onResult !== null) onResult(outputs);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: func-to-web
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.2
|
|
4
4
|
Summary: Expose typed Python functions as web interfaces.
|
|
5
5
|
Author: Beltrán Offerrall
|
|
6
6
|
License: MIT License
|
|
@@ -61,7 +61,7 @@ Provides-Extra: test-browser
|
|
|
61
61
|
Requires-Dist: playwright; extra == "test-browser"
|
|
62
62
|
Dynamic: license-file
|
|
63
63
|
|
|
64
|
-
# FuncToWeb
|
|
64
|
+
# FuncToWeb
|
|
65
65
|
|
|
66
66
|
[](https://pypi.org/project/func-to-web/)
|
|
67
67
|
[](https://pypi.org/project/func-to-web/)
|
|
@@ -447,7 +447,7 @@ upload no execution ever uses expires; what your code received stays.
|
|
|
447
447
|
## Examples
|
|
448
448
|
|
|
449
449
|
The examples are probably the best way to learn the library.
|
|
450
|
-
[`examples/`](examples
|
|
450
|
+
[`examples/`](docs/examples.md) contains 81 runnable programs in 11 folders.
|
|
451
451
|
Each file teaches **a single capability**: you can read it in one sitting and
|
|
452
452
|
run it as it is. Alongside them, [`examples/project/`](examples/project/) holds
|
|
453
453
|
mini-apps, where several capabilities are combined into one small application.
|
|
@@ -539,13 +539,13 @@ mini-app with the dict swapped for a store.
|
|
|
539
539
|
|
|
540
540
|
Those three libraries are the whole stack: nested forms, recursive validation,
|
|
541
541
|
streaming, the file lifecycle and the published contract are all inside these
|
|
542
|
-
lines (v2.
|
|
542
|
+
lines (v2.7.1, `.py`/`.js`/`.css` under `src/`).
|
|
543
543
|
|
|
544
544
|
```text
|
|
545
545
|
pytypehint 2,740 lines types, validation, defaults
|
|
546
|
-
pytypehintweb 9,
|
|
547
|
-
FuncToWeb 5,
|
|
548
|
-
total ~17,
|
|
546
|
+
pytypehintweb 9,499 lines plan, widgets, transport (includes the JS/CSS)
|
|
547
|
+
FuncToWeb 5,306 lines routes, execution, storage, /doc
|
|
548
|
+
total ~17,500 lines
|
|
549
549
|
```
|
|
550
550
|
|
|
551
551
|
Each layer can be read on its own: pytypehint is under 3,000 lines of pure
|
|
@@ -578,16 +578,52 @@ func-to-web && pip freeze` in an empty virtualenv prints exactly this.
|
|
|
578
578
|
|
|
579
579
|
## Documentation
|
|
580
580
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
581
|
+
The technical reference, organized by what you want to do. For hands-on use,
|
|
582
|
+
see [Examples](docs/examples.md), one capability per file.
|
|
583
|
+
|
|
584
|
+
### Start here
|
|
585
|
+
|
|
586
|
+
- [Getting started](docs/getting-started.md): install, write your first function and run it.
|
|
587
|
+
- [Examples](docs/examples.md): the runnable examples and mini-apps, how to run them, and what each folder teaches.
|
|
588
|
+
- [`run()`](docs/run.md): the standalone application and the space index.
|
|
589
|
+
- [`app_of()`](docs/router.md): mounting the application in an existing FastAPI host application.
|
|
590
|
+
|
|
591
|
+
### Inputs and forms
|
|
592
|
+
|
|
593
|
+
- [Types and validation](docs/types.md): constraints, dataclasses, lists, unions, optionals and defaults.
|
|
594
|
+
- [Prefill and hidden parameters](docs/prefill.md): open a form with initial values, from Python or from the URL.
|
|
595
|
+
- [Files](docs/files.md): uploads, reusable file references, and which layer applies each limit.
|
|
596
|
+
- [`WebFunction`](docs/web-function.md): the name, description and slug of a function; prepared spaces.
|
|
597
|
+
|
|
598
|
+
### Execution and results
|
|
599
|
+
|
|
600
|
+
- [Execution over HTTP](docs/http.md): `/invoke`, the request body, the envelope and the status codes.
|
|
601
|
+
- [Streaming](docs/streaming.md): `/invoke-stream`, SSE events and `print()` capture.
|
|
602
|
+
- [Outputs](docs/outputs.md): text, images, tables and downloads with `Download`.
|
|
603
|
+
- [`OpenForm`](docs/open-form.md): open another function's form with the return value as prefill.
|
|
604
|
+
|
|
605
|
+
### Integration
|
|
606
|
+
|
|
607
|
+
- [`/doc`](docs/api-docs.md): the published contract that a client or an agent consumes.
|
|
608
|
+
- [`sdk.js`](docs/sdk.md): the helpers that call a space from your own frontend, and how to embed a function's page in another site.
|
|
609
|
+
- [Static assets](docs/static-assets.md): `/static`, the icons, the theme and how they are cached.
|
|
610
|
+
- [Security](docs/security.md): what FuncToWeb covers and what belongs to the host application.
|
|
611
|
+
|
|
612
|
+
### Internals
|
|
613
|
+
|
|
614
|
+
- [Architecture](docs/architecture.md): the layers and what each one solves.
|
|
615
|
+
- [Limitations](docs/limitations.md): the known limits, in a single list.
|
|
616
|
+
|
|
617
|
+
### Design notes
|
|
618
|
+
|
|
619
|
+
The pages above say what each thing is: the signature, the values, the errors and one example. The reasoning behind each of those decisions lives apart, in [`design/`](docs/design/index.md) — for whoever contributes to FuncToWeb, and for the curious. Nothing there is needed in order to use the library.
|
|
584
620
|
|
|
585
621
|
## Status
|
|
586
622
|
|
|
587
|
-
**FuncToWeb
|
|
623
|
+
**FuncToWeb is stable, used daily and actively maintained.**
|
|
588
624
|
|
|
589
625
|
The public API is the one described in
|
|
590
|
-
[
|
|
626
|
+
[documentation](#documentation), and the known limitations are listed in
|
|
591
627
|
[limitations.md](docs/limitations.md).
|
|
592
628
|
|
|
593
629
|
## License
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|