python-fasthtml 0.12.8__tar.gz → 0.12.10__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.
Files changed (43) hide show
  1. {python_fasthtml-0.12.8/python_fasthtml.egg-info → python_fasthtml-0.12.10}/PKG-INFO +18 -2
  2. python_fasthtml-0.12.10/fasthtml/__init__.py +2 -0
  3. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/_modidx.py +2 -0
  4. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/common.py +1 -0
  5. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/core.py +4 -3
  6. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/xtend.py +6 -1
  7. python_fasthtml-0.12.10/pyproject.toml +11 -0
  8. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10/python_fasthtml.egg-info}/PKG-INFO +18 -2
  9. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/settings.ini +2 -2
  10. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/setup.py +2 -2
  11. python_fasthtml-0.12.8/fasthtml/__init__.py +0 -2
  12. python_fasthtml-0.12.8/pyproject.toml +0 -3
  13. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/CONTRIBUTING.md +0 -0
  14. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/LICENSE +0 -0
  15. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/MANIFEST.in +0 -0
  16. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/README.md +0 -0
  17. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/authmw.py +0 -0
  18. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/basics.py +0 -0
  19. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/cli.py +0 -0
  20. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/components.py +0 -0
  21. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/components.pyi +0 -0
  22. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/core.pyi +0 -0
  23. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/fastapp.py +0 -0
  24. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/ft.py +0 -0
  25. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/js.py +0 -0
  26. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/jupyter.py +0 -0
  27. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/katex.js +0 -0
  28. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/live_reload.py +0 -0
  29. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/oauth.py +0 -0
  30. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/pico.py +0 -0
  31. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/starlette.py +0 -0
  32. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/stripe_otp.py +0 -0
  33. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/svg.py +0 -0
  34. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/toaster.py +0 -0
  35. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/fasthtml/xtend.pyi +0 -0
  36. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/python_fasthtml.egg-info/SOURCES.txt +0 -0
  37. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/python_fasthtml.egg-info/dependency_links.txt +0 -0
  38. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/python_fasthtml.egg-info/entry_points.txt +0 -0
  39. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/python_fasthtml.egg-info/not-zip-safe +0 -0
  40. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/python_fasthtml.egg-info/requires.txt +0 -0
  41. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/python_fasthtml.egg-info/top_level.txt +0 -0
  42. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/setup.cfg +0 -0
  43. {python_fasthtml-0.12.8 → python_fasthtml-0.12.10}/tests/test_toaster.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: python-fasthtml
3
- Version: 0.12.8
3
+ Version: 0.12.10
4
4
  Summary: The fastest way to create an HTML app
5
5
  Home-page: https://github.com/AnswerDotAI/fasthtml
6
6
  Author: Jeremy Howard and contributors
@@ -11,6 +11,9 @@ Classifier: Development Status :: 4 - Beta
11
11
  Classifier: Intended Audience :: Developers
12
12
  Classifier: Natural Language :: English
13
13
  Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
14
17
  Classifier: License :: OSI Approved :: Apache Software License
15
18
  Requires-Python: >=3.10
16
19
  Description-Content-Type: text/markdown
@@ -30,6 +33,19 @@ Requires-Dist: ipython; extra == "dev"
30
33
  Requires-Dist: lxml; extra == "dev"
31
34
  Requires-Dist: pysymbol_llm; extra == "dev"
32
35
  Requires-Dist: monsterui; extra == "dev"
36
+ Dynamic: author
37
+ Dynamic: author-email
38
+ Dynamic: classifier
39
+ Dynamic: description
40
+ Dynamic: description-content-type
41
+ Dynamic: home-page
42
+ Dynamic: keywords
43
+ Dynamic: license
44
+ Dynamic: license-file
45
+ Dynamic: provides-extra
46
+ Dynamic: requires-dist
47
+ Dynamic: requires-python
48
+ Dynamic: summary
33
49
 
34
50
  # FastHTML
35
51
 
@@ -0,0 +1,2 @@
1
+ __version__ = "0.12.10"
2
+ from .core import *
@@ -247,6 +247,8 @@ d = { 'settings': { 'branch': 'main',
247
247
  'fasthtml.xtend.CheckboxX': ('api/xtend.html#checkboxx', 'fasthtml/xtend.py'),
248
248
  'fasthtml.xtend.Favicon': ('api/xtend.html#favicon', 'fasthtml/xtend.py'),
249
249
  'fasthtml.xtend.Form': ('api/xtend.html#form', 'fasthtml/xtend.py'),
250
+ 'fasthtml.xtend.Fragment': ('api/xtend.html#fragment', 'fasthtml/xtend.py'),
251
+ 'fasthtml.xtend.Fragment.__init__': ('api/xtend.html#fragment.__init__', 'fasthtml/xtend.py'),
250
252
  'fasthtml.xtend.Hidden': ('api/xtend.html#hidden', 'fasthtml/xtend.py'),
251
253
  'fasthtml.xtend.HtmxOn': ('api/xtend.html#htmxon', 'fasthtml/xtend.py'),
252
254
  'fasthtml.xtend.Nbsp': ('api/xtend.html#nbsp', 'fasthtml/xtend.py'),
@@ -1,5 +1,6 @@
1
1
  import uvicorn
2
2
  from dataclasses import dataclass
3
+ from typing import Any
3
4
 
4
5
  from .starlette import *
5
6
  from fastcore.utils import *
@@ -448,7 +448,7 @@ htmx_exts = {
448
448
  }
449
449
 
450
450
  # %% ../nbs/api/00_core.ipynb
451
- htmxsrc = Script(src="https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js")
451
+ htmxsrc = Script(src="https://cdn.jsdelivr.net/npm/htmx.org@2.0.4/dist/htmx.min.js")
452
452
  fhjsscr = Script(src="https://cdn.jsdelivr.net/gh/answerdotai/fasthtml-js@1.0.12/fasthtml.js")
453
453
  surrsrc = Script(src="https://cdn.jsdelivr.net/gh/answerdotai/surreal@main/surreal.js")
454
454
  scopesrc = Script(src="https://cdn.jsdelivr.net/gh/gnat/css-scope-inline@main/script.js")
@@ -775,12 +775,13 @@ class MiddlewareBase:
775
775
  # %% ../nbs/api/00_core.ipynb
776
776
  class FtResponse:
777
777
  "Wrap an FT response with any Starlette `Response`"
778
- def __init__(self, content, status_code:int=200, headers=None, cls=HTMLResponse, media_type:str|None=None):
778
+ def __init__(self, content, status_code:int=200, headers=None, cls=HTMLResponse, media_type:str|None=None, background: BackgroundTask | None = None):
779
779
  self.content,self.status_code,self.headers = content,status_code,headers
780
- self.cls,self.media_type = cls,media_type
780
+ self.cls,self.media_type,self.background = cls,media_type,background
781
781
 
782
782
  def __response__(self, req):
783
783
  cts,httphdrs,tasks = _xt_cts(req, self.content)
784
+ if not tasks.tasks: tasks = self.background
784
785
  headers = {**(self.headers or {}), **httphdrs}
785
786
  return self.cls(cts, status_code=self.status_code, headers=headers, media_type=self.media_type, background=tasks)
786
787
 
@@ -5,7 +5,7 @@
5
5
  # %% auto 0
6
6
  __all__ = ['sid_scr', 'A', 'AX', 'Form', 'Hidden', 'CheckboxX', 'Script', 'Style', 'double_braces', 'undouble_braces',
7
7
  'loose_format', 'ScriptX', 'replace_css_vars', 'StyleX', 'Nbsp', 'Surreal', 'On', 'Prev', 'Now', 'AnyNow',
8
- 'run_js', 'HtmxOn', 'jsd', 'Titled', 'Socials', 'YouTubeEmbed', 'Favicon', 'clear', 'with_sid']
8
+ 'run_js', 'HtmxOn', 'jsd', 'Fragment', 'Titled', 'Socials', 'YouTubeEmbed', 'Favicon', 'clear', 'with_sid']
9
9
 
10
10
  # %% ../nbs/api/02_xtend.ipynb
11
11
  from dataclasses import dataclass, asdict
@@ -178,6 +178,11 @@ def jsd(org, repo, root, path, prov='gh', typ='script', ver=None, esm=False, **k
178
178
  if esm: s += '/+esm'
179
179
  return Script(src=s, **kwargs) if typ=='script' else Link(rel='stylesheet', href=s, **kwargs) if typ=='css' else s
180
180
 
181
+ # %% ../nbs/api/02_xtend.ipynb
182
+ class Fragment(FT):
183
+ "An empty tag, used as a container"
184
+ def __init__(self, *c): super().__init__('', c, {}, void_=True)
185
+
181
186
  # %% ../nbs/api/02_xtend.ipynb
182
187
  @delegates(ft_hx, keep=True)
183
188
  def Titled(title:str="FastHTML app", *args, cls="container", **kwargs)->FT:
@@ -0,0 +1,11 @@
1
+ [build-system]
2
+ requires = ["setuptools>=64.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name="python-fasthtml"
7
+ requires-python=">=3.10"
8
+ dynamic = [ "keywords", "description", "version", "dependencies", "optional-dependencies", "readme", "license", "authors", "classifiers", "entry-points", "scripts", "urls"]
9
+
10
+ [tool.uv]
11
+ cache-keys = [{ file = "pyproject.toml" }, { file = "settings.ini" }, { file = "setup.py" }]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: python-fasthtml
3
- Version: 0.12.8
3
+ Version: 0.12.10
4
4
  Summary: The fastest way to create an HTML app
5
5
  Home-page: https://github.com/AnswerDotAI/fasthtml
6
6
  Author: Jeremy Howard and contributors
@@ -11,6 +11,9 @@ Classifier: Development Status :: 4 - Beta
11
11
  Classifier: Intended Audience :: Developers
12
12
  Classifier: Natural Language :: English
13
13
  Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
14
17
  Classifier: License :: OSI Approved :: Apache Software License
15
18
  Requires-Python: >=3.10
16
19
  Description-Content-Type: text/markdown
@@ -30,6 +33,19 @@ Requires-Dist: ipython; extra == "dev"
30
33
  Requires-Dist: lxml; extra == "dev"
31
34
  Requires-Dist: pysymbol_llm; extra == "dev"
32
35
  Requires-Dist: monsterui; extra == "dev"
36
+ Dynamic: author
37
+ Dynamic: author-email
38
+ Dynamic: classifier
39
+ Dynamic: description
40
+ Dynamic: description-content-type
41
+ Dynamic: home-page
42
+ Dynamic: keywords
43
+ Dynamic: license
44
+ Dynamic: license-file
45
+ Dynamic: provides-extra
46
+ Dynamic: requires-dist
47
+ Dynamic: requires-python
48
+ Dynamic: summary
33
49
 
34
50
  # FastHTML
35
51
 
@@ -1,7 +1,7 @@
1
1
  [DEFAULT]
2
2
  repo = fasthtml
3
- lib_name = fasthtml
4
- version = 0.12.8
3
+ lib_name = python-fasthtml
4
+ version = 0.12.10
5
5
  min_python = 3.10
6
6
  license = apache2
7
7
  requirements = fastcore>=1.7.18 python-dateutil starlette>0.33 oauthlib itsdangerous uvicorn[standard]>=0.30 httpx fastlite>=0.1.1 python-multipart beautifulsoup4
@@ -22,7 +22,7 @@ licenses = {
22
22
  }
23
23
  statuses = [ '1 - Planning', '2 - Pre-Alpha', '3 - Alpha',
24
24
  '4 - Beta', '5 - Production/Stable', '6 - Mature', '7 - Inactive' ]
25
- py_versions = '3.6 3.7 3.8 3.9 3.10'.split()
25
+ py_versions = '3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13'.split()
26
26
 
27
27
  requirements = shlex.split(cfg.get('requirements', ''))
28
28
  if cfg.get('pip_requirements'): requirements += shlex.split(cfg.get('pip_requirements', ''))
@@ -31,7 +31,7 @@ lic = licenses.get(cfg['license'].lower(), (cfg['license'], None))
31
31
  dev_requirements = (cfg.get('dev_requirements') or '').split()
32
32
 
33
33
  setuptools.setup(
34
- name = 'python-fasthtml',
34
+ name = cfg['lib_name'],
35
35
  license = lic[0],
36
36
  classifiers = [
37
37
  'Development Status :: ' + statuses[int(cfg['status'])],
@@ -1,2 +0,0 @@
1
- __version__ = "0.12.8"
2
- from .core import *
@@ -1,3 +0,0 @@
1
- [build-system]
2
- requires = ["setuptools>=64.0"]
3
- build-backend = "setuptools.build_meta"