python-fasthtml 0.14.3__tar.gz → 0.14.5__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.
- {python_fasthtml-0.14.3/python_fasthtml.egg-info → python_fasthtml-0.14.5}/PKG-INFO +2 -2
- python_fasthtml-0.14.5/fasthtml/__init__.py +2 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/_modidx.py +4 -1
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/components.py +2 -6
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/core.py +41 -10
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/js.py +1 -1
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/jupyter.py +1 -1
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/oauth.py +1 -1
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/pico.py +1 -1
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/stripe_otp.py +1 -1
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/svg.py +1 -1
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/xtend.py +9 -2
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/pyproject.toml +4 -1
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5/python_fasthtml.egg-info}/PKG-INFO +2 -2
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/python_fasthtml.egg-info/requires.txt +1 -1
- python_fasthtml-0.14.3/fasthtml/__init__.py +0 -2
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/CONTRIBUTING.md +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/LICENSE +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/MANIFEST.in +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/README.md +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/authmw.py +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/basics.py +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/cli.py +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/common.py +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/components.pyi +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/core.pyi +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/fastapp.py +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/ft.py +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/katex.js +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/live_reload.py +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/starlette.py +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/toaster.py +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/fasthtml/xtend.pyi +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/python_fasthtml.egg-info/SOURCES.txt +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/python_fasthtml.egg-info/dependency_links.txt +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/python_fasthtml.egg-info/entry_points.txt +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/python_fasthtml.egg-info/top_level.txt +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/setup.cfg +0 -0
- {python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/tests/test_toaster.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-fasthtml
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.5
|
|
4
4
|
Summary: The fastest way to create an HTML app
|
|
5
5
|
Author-email: Jeremy Howard and contributors <github@jhoward.fastmail.fm>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3 :: Only
|
|
|
15
15
|
Requires-Python: >=3.10
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
|
-
Requires-Dist: fastcore>=1.
|
|
18
|
+
Requires-Dist: fastcore>=1.14.2
|
|
19
19
|
Requires-Dist: python-dateutil
|
|
20
20
|
Requires-Dist: starlette>=1.0.1
|
|
21
21
|
Requires-Dist: oauthlib
|
|
@@ -15,7 +15,6 @@ d = { 'settings': { 'branch': 'main',
|
|
|
15
15
|
'fasthtml.components.FT.__radd__': ('api/components.html#ft.__radd__', 'fasthtml/components.py'),
|
|
16
16
|
'fasthtml.components.FT.__str__': ('api/components.html#ft.__str__', 'fasthtml/components.py'),
|
|
17
17
|
'fasthtml.components.File': ('api/components.html#file', 'fasthtml/components.py'),
|
|
18
|
-
'fasthtml.components.__getattr__': ('api/components.html#__getattr__', 'fasthtml/components.py'),
|
|
19
18
|
'fasthtml.components._fill_item': ('api/components.html#_fill_item', 'fasthtml/components.py'),
|
|
20
19
|
'fasthtml.components.attrmap_x': ('api/components.html#attrmap_x', 'fasthtml/components.py'),
|
|
21
20
|
'fasthtml.components.fill_dataclass': ('api/components.html#fill_dataclass', 'fasthtml/components.py'),
|
|
@@ -131,6 +130,7 @@ d = { 'settings': { 'branch': 'main',
|
|
|
131
130
|
'fasthtml.core._to_htmx_header': ('api/core.html#_to_htmx_header', 'fasthtml/core.py'),
|
|
132
131
|
'fasthtml.core._to_xml': ('api/core.html#_to_xml', 'fasthtml/core.py'),
|
|
133
132
|
'fasthtml.core._url_for': ('api/core.html#_url_for', 'fasthtml/core.py'),
|
|
133
|
+
'fasthtml.core._wait_disconnect': ('api/core.html#_wait_disconnect', 'fasthtml/core.py'),
|
|
134
134
|
'fasthtml.core._wrap_call': ('api/core.html#_wrap_call', 'fasthtml/core.py'),
|
|
135
135
|
'fasthtml.core._wrap_ex': ('api/core.html#_wrap_ex', 'fasthtml/core.py'),
|
|
136
136
|
'fasthtml.core._wrap_req': ('api/core.html#_wrap_req', 'fasthtml/core.py'),
|
|
@@ -138,6 +138,7 @@ d = { 'settings': { 'branch': 'main',
|
|
|
138
138
|
'fasthtml.core._ws_endp': ('api/core.html#_ws_endp', 'fasthtml/core.py'),
|
|
139
139
|
'fasthtml.core._xt_cts': ('api/core.html#_xt_cts', 'fasthtml/core.py'),
|
|
140
140
|
'fasthtml.core.add_sig_param': ('api/core.html#add_sig_param', 'fasthtml/core.py'),
|
|
141
|
+
'fasthtml.core.cancel_on_disconnect': ('api/core.html#cancel_on_disconnect', 'fasthtml/core.py'),
|
|
141
142
|
'fasthtml.core.cookie': ('api/core.html#cookie', 'fasthtml/core.py'),
|
|
142
143
|
'fasthtml.core.decode_uri': ('api/core.html#decode_uri', 'fasthtml/core.py'),
|
|
143
144
|
'fasthtml.core.def_hdrs': ('api/core.html#def_hdrs', 'fasthtml/core.py'),
|
|
@@ -160,6 +161,7 @@ d = { 'settings': { 'branch': 'main',
|
|
|
160
161
|
'fasthtml.core.signal_shutdown': ('api/core.html#signal_shutdown', 'fasthtml/core.py'),
|
|
161
162
|
'fasthtml.core.snake2hyphens': ('api/core.html#snake2hyphens', 'fasthtml/core.py'),
|
|
162
163
|
'fasthtml.core.unqid': ('api/core.html#unqid', 'fasthtml/core.py'),
|
|
164
|
+
'fasthtml.core.until_disconnect': ('api/core.html#until_disconnect', 'fasthtml/core.py'),
|
|
163
165
|
'fasthtml.core.uri': ('api/core.html#uri', 'fasthtml/core.py')},
|
|
164
166
|
'fasthtml.fastapp': {},
|
|
165
167
|
'fasthtml.ft': {},
|
|
@@ -339,4 +341,5 @@ d = { 'settings': { 'branch': 'main',
|
|
|
339
341
|
'fasthtml.xtend.sitemap_url': ('api/xtend.html#sitemap_url', 'fasthtml/xtend.py'),
|
|
340
342
|
'fasthtml.xtend.sitemap_xml': ('api/xtend.html#sitemap_xml', 'fasthtml/xtend.py'),
|
|
341
343
|
'fasthtml.xtend.undouble_braces': ('api/xtend.html#undouble_braces', 'fasthtml/xtend.py'),
|
|
344
|
+
'fasthtml.xtend.upload_pb_attrs': ('api/xtend.html#upload_pb_attrs', 'fasthtml/xtend.py'),
|
|
342
345
|
'fasthtml.xtend.with_sid': ('api/xtend.html#with_sid', 'fasthtml/xtend.py')}}}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""`ft_html` and `ft_hx` functions to add some conveniences to `ft`, along with a full set of basic HTML components, and functions to work with forms and `FT` conversion
|
|
2
2
|
|
|
3
|
-
Docs: https://www.fastht.ml/
|
|
3
|
+
Docs: https://www.fastht.ml/docs/api/components.html.md"""
|
|
4
4
|
|
|
5
5
|
# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/api/01_components.ipynb.
|
|
6
6
|
|
|
@@ -195,11 +195,7 @@ def find_inputs(e, tags='input', **kw):
|
|
|
195
195
|
return inputs
|
|
196
196
|
|
|
197
197
|
# %% ../nbs/api/01_components.ipynb #1d8a28b1
|
|
198
|
-
|
|
199
|
-
if tag.startswith('_') or tag[0].islower(): raise AttributeError
|
|
200
|
-
tag = tag.replace("_", "-")
|
|
201
|
-
def _f(*c, target_id=None, **kwargs): return ft_hx(tag, *c, target_id=target_id, **kwargs)
|
|
202
|
-
return _f
|
|
198
|
+
__getattr__ = mk_getattr(ft_hx)
|
|
203
199
|
|
|
204
200
|
# %% ../nbs/api/01_components.ipynb #afb0f65c
|
|
205
201
|
_re_h2x_attr_key = re.compile(r'^[A-Za-z_-][\w-]*$')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""The `FastHTML` subclass of `Starlette`.
|
|
2
2
|
|
|
3
|
-
Docs: https://www.fastht.ml/
|
|
3
|
+
Docs: https://www.fastht.ml/docs/api/core.html.md"""
|
|
4
4
|
|
|
5
5
|
# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/api/00_core.ipynb.
|
|
6
6
|
|
|
@@ -10,15 +10,16 @@ __all__ = ['empty', 'htmx_hdrs', 'fh_cfg', 'htmx_resps', 'DEF_MAXPART', 'htmx_ex
|
|
|
10
10
|
'snake2hyphens', 'HtmxHeaders', 'HttpHeader', 'HtmxResponseHeaders', 'form2dict', 'parse_form', 'ApiReturn',
|
|
11
11
|
'JSONResponse', 'flat_xt', 'Beforeware', 'EventStream', 'signal_shutdown', 'uri', 'decode_uri', 'flat_tuple',
|
|
12
12
|
'noop_body', 'respond', 'is_full_page', 'Redirect', 'get_key', 'qp', 'def_hdrs', 'Lifespan', 'FastHTML',
|
|
13
|
-
'HostRoute', 'nested_name', 'serve', '
|
|
14
|
-
'
|
|
13
|
+
'HostRoute', 'nested_name', 'serve', 'until_disconnect', 'cancel_on_disconnect', 'Client', 'RouteFuncs',
|
|
14
|
+
'APIRouter', 'cookie', 'reg_re_param', 'StaticNoCache', 'add_sig_param', 'into', 'MiddlewareBase',
|
|
15
|
+
'FtResponse', 'unqid']
|
|
15
16
|
|
|
16
17
|
# %% ../nbs/api/00_core.ipynb #23503b9e
|
|
17
18
|
import json,uuid,inspect,types,asyncio,inspect,random,contextlib,itsdangerous
|
|
18
19
|
|
|
19
20
|
from fastcore.utils import *
|
|
20
21
|
from fastcore.xml import *
|
|
21
|
-
from fastcore.meta import use_kwargs_dict,delegates
|
|
22
|
+
from fastcore.meta import use_kwargs_dict,delegates,splice_sig
|
|
22
23
|
from fastcore.style import S
|
|
23
24
|
|
|
24
25
|
from types import UnionType, SimpleNamespace as ns, GenericAlias
|
|
@@ -157,7 +158,7 @@ DEF_MAXPART = 100*1024*1024
|
|
|
157
158
|
|
|
158
159
|
# %% ../nbs/api/00_core.ipynb #42c9cea0
|
|
159
160
|
async def parse_form(req: Request) -> FormData:
|
|
160
|
-
"Starlette errors on empty multipart forms, so this checks for that situation"
|
|
161
|
+
"Starlette errors on empty multipart/json forms, so this checks for that situation"
|
|
161
162
|
ctype = req.headers.get("Content-Type", "")
|
|
162
163
|
maxpart = getattr(req, "max_part_size", DEF_MAXPART)
|
|
163
164
|
if ctype.startswith("multipart/form-data"):
|
|
@@ -165,8 +166,9 @@ async def parse_form(req: Request) -> FormData:
|
|
|
165
166
|
except IndexError: raise HTTPException(400, "Invalid form-data: no boundary")
|
|
166
167
|
if int(req.headers.get("Content-Length", "0")) <= len(boundary) + 6: return FormData()
|
|
167
168
|
return await req.form(max_part_size=maxpart)
|
|
168
|
-
await req.body() # Cache body for non-multipart request types
|
|
169
|
-
|
|
169
|
+
body = await req.body() # Cache body for non-multipart request types
|
|
170
|
+
if ctype == 'application/json': return await req.json() if body else {}
|
|
171
|
+
return await req.form(max_part_size=maxpart)
|
|
170
172
|
|
|
171
173
|
# %% ../nbs/api/00_core.ipynb #0caedd04
|
|
172
174
|
async def _from_body(conn, p, data):
|
|
@@ -458,7 +460,7 @@ def _is_ft_resp(resp):
|
|
|
458
460
|
# %% ../nbs/api/00_core.ipynb #968d9245
|
|
459
461
|
def _resp(req, resp, cls=empty, status_code=200):
|
|
460
462
|
"Create appropriate HTTP response from request and response data"
|
|
461
|
-
if
|
|
463
|
+
if resp is None: resp=''
|
|
462
464
|
if hasattr(resp, '__response__'): resp = resp.__response__(req)
|
|
463
465
|
if not (isinstance(cls, type) and issubclass(cls, Response)): cls=empty
|
|
464
466
|
if isinstance(resp, FileResponse) and not os.path.exists(resp.path): raise HTTPException(404, resp.path)
|
|
@@ -818,6 +820,35 @@ def serve(
|
|
|
818
820
|
print('Link: '+ S.light_red.bold(link))
|
|
819
821
|
run(f'{appname}:{app}', host=host, port=port, reload=reload, **kwargs)
|
|
820
822
|
|
|
823
|
+
# %% ../nbs/api/00_core.ipynb #c5220a0e
|
|
824
|
+
async def _wait_disconnect(req):
|
|
825
|
+
while (await req.receive())["type"] != "http.disconnect": pass
|
|
826
|
+
|
|
827
|
+
async def until_disconnect(req, coro):
|
|
828
|
+
"Await `coro`, cancelling it (and returning an empty response) if the client disconnects first"
|
|
829
|
+
work,watch = asyncio.ensure_future(coro),asyncio.ensure_future(_wait_disconnect(req))
|
|
830
|
+
try:
|
|
831
|
+
done,_ = await asyncio.wait({work,watch}, return_when=asyncio.FIRST_COMPLETED)
|
|
832
|
+
if work in done: return work.result()
|
|
833
|
+
return Response(status_code=204)
|
|
834
|
+
finally:
|
|
835
|
+
watch.cancel()
|
|
836
|
+
if not work.done(): work.cancel()
|
|
837
|
+
|
|
838
|
+
# %% ../nbs/api/00_core.ipynb #c5721d76
|
|
839
|
+
def cancel_on_disconnect(
|
|
840
|
+
f=None, # Async route handler to wrap
|
|
841
|
+
*,
|
|
842
|
+
timeout=None, # Also cancel the handler after this many seconds
|
|
843
|
+
):
|
|
844
|
+
"Route decorator: cancel the handler when the client disconnects"
|
|
845
|
+
if f is None: return partial(cancel_on_disconnect, timeout=timeout)
|
|
846
|
+
assert is_async_callable(f), "cancel_on_disconnect requires an async handler"
|
|
847
|
+
async def _f(__req: Request, *args, **kw):
|
|
848
|
+
c = until_disconnect(__req, f(**kw))
|
|
849
|
+
return await (asyncio.wait_for(c, timeout) if timeout is not None else c)
|
|
850
|
+
return splice_sig(_f, f)
|
|
851
|
+
|
|
821
852
|
# %% ../nbs/api/00_core.ipynb #8121968a
|
|
822
853
|
class Client:
|
|
823
854
|
"A simple httpx ASGI client that doesn't require `async`"
|
|
@@ -916,14 +947,14 @@ reg_re_param("static", '|'.join(_static_exts))
|
|
|
916
947
|
@patch
|
|
917
948
|
def static_route_exts(self:FastHTML, prefix='/', static_path='.', exts='static'):
|
|
918
949
|
"Add a static route at URL path `prefix` with files from `static_path` and `exts` defined by `reg_re_param()`"
|
|
919
|
-
@self.
|
|
950
|
+
@self.get(f"{prefix}{{fname:path}}.{{ext:{exts}}}")
|
|
920
951
|
async def get(fname:str, ext:str): return FileResponse(f'{static_path}/{fname}.{ext}')
|
|
921
952
|
|
|
922
953
|
# %% ../nbs/api/00_core.ipynb #b31de65a
|
|
923
954
|
@patch
|
|
924
955
|
def static_route(self:FastHTML, ext='', prefix='/', static_path='.'):
|
|
925
956
|
"Add a static route at URL path `prefix` with files from `static_path` and single `ext` (including the '.')"
|
|
926
|
-
@self.
|
|
957
|
+
@self.get(f"{prefix}{{fname:path}}{ext}")
|
|
927
958
|
async def get(fname:str): return FileResponse(f'{static_path}/{fname}{ext}')
|
|
928
959
|
|
|
929
960
|
# %% ../nbs/api/00_core.ipynb #f63b7a03
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Simple extensions to standard HTML components, such as adding sensible defaults
|
|
2
2
|
|
|
3
|
-
Docs: https://www.fastht.ml/
|
|
3
|
+
Docs: https://www.fastht.ml/docs/api/xtend.html.md"""
|
|
4
4
|
|
|
5
5
|
# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/api/02_xtend.ipynb.
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ __all__ = ['sid_scr', 'A', 'AX', 'Form', 'Hidden', 'CheckboxX', 'Script', 'Style
|
|
|
9
9
|
'loose_format', 'ScriptX', 'replace_css_vars', 'StyleX', 'Nbsp', 'Surreal', 'On', 'Prev', 'Now', 'AnyNow',
|
|
10
10
|
'run_js', 'HtmxOn', 'jsd', 'Fragment', 'Titled', 'Socials', 'YouTubeEmbed', 'Favicon', 'clear', 'with_sid',
|
|
11
11
|
'LdJson', 'LdContactPoint', 'LdOrg', 'LdWebsite', 'LdCourseInstance', 'LdCourse', 'robots_txt',
|
|
12
|
-
'sitemap_url', 'sitemap_xml']
|
|
12
|
+
'sitemap_url', 'sitemap_xml', 'upload_pb_attrs']
|
|
13
13
|
|
|
14
14
|
# %% ../nbs/api/02_xtend.ipynb #8e2d405b
|
|
15
15
|
from dataclasses import dataclass, asdict
|
|
@@ -349,3 +349,10 @@ def sitemap_xml(app, urls, loc_base=""):
|
|
|
349
349
|
def get():
|
|
350
350
|
urlset = [sitemap_url(url_info, loc_base) for url_info in urls]
|
|
351
351
|
return Urlset(*urlset, xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
|
|
352
|
+
|
|
353
|
+
# %% ../nbs/api/02_xtend.ipynb #6a1990ed
|
|
354
|
+
def upload_pb_attrs(id='uploadprog'):
|
|
355
|
+
"Form `hx_on` progress attr that reveals and updates a hidden `upload_pb` of matching `id`"
|
|
356
|
+
js = """{ const p=document.getElementById('%s');
|
|
357
|
+
if(event.detail.total) {p.classList.remove('hidden'); p.value=event.detail.loaded/event.detail.total*100} }""" % id
|
|
358
|
+
return {'hx-on::xhr:progress': js}
|
|
@@ -12,7 +12,7 @@ license = {text = "Apache-2.0"}
|
|
|
12
12
|
authors = [{name = "Jeremy Howard and contributors", email = "github@jhoward.fastmail.fm"}]
|
|
13
13
|
keywords = ['nbdev', 'jupyter', 'notebook', 'python']
|
|
14
14
|
classifiers = ["Natural Language :: English", "Intended Audience :: Developers", "Development Status :: 3 - Alpha", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only"]
|
|
15
|
-
dependencies = ['fastcore>=1.
|
|
15
|
+
dependencies = ['fastcore>=1.14.2', 'python-dateutil', 'starlette>=1.0.1', 'oauthlib', 'itsdangerous', 'uvicorn[standard]>=0.30', 'httpx2', 'fastlite>=0.1.1', 'python-multipart', 'beautifulsoup4']
|
|
16
16
|
|
|
17
17
|
[project.urls]
|
|
18
18
|
Repository = "https://github.com/AnswerDotAI/fasthtml"
|
|
@@ -41,3 +41,6 @@ allowed_cell_metadata_keys = ['solveit_ai']
|
|
|
41
41
|
jupyter_hooks = true
|
|
42
42
|
custom_sidebar = false
|
|
43
43
|
lib_path = "fasthtml"
|
|
44
|
+
|
|
45
|
+
[tool.chkstyle]
|
|
46
|
+
skip_paths = ["_modidx.py"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-fasthtml
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.5
|
|
4
4
|
Summary: The fastest way to create an HTML app
|
|
5
5
|
Author-email: Jeremy Howard and contributors <github@jhoward.fastmail.fm>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3 :: Only
|
|
|
15
15
|
Requires-Python: >=3.10
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
|
-
Requires-Dist: fastcore>=1.
|
|
18
|
+
Requires-Dist: fastcore>=1.14.2
|
|
19
19
|
Requires-Dist: python-dateutil
|
|
20
20
|
Requires-Dist: starlette>=1.0.1
|
|
21
21
|
Requires-Dist: oauthlib
|
|
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
|
{python_fasthtml-0.14.3 → python_fasthtml-0.14.5}/python_fasthtml.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|