fastblocks 0.2.0__tar.gz → 0.2.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.
Files changed (45) hide show
  1. {fastblocks-0.2.0 → fastblocks-0.2.2}/PKG-INFO +10 -11
  2. fastblocks-0.2.2/fastblocks/Dockerfile +13 -0
  3. fastblocks-0.2.2/fastblocks/actions/__init__.py +9 -0
  4. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/actions/minify.py +4 -4
  5. fastblocks-0.2.2/fastblocks/adapters/__init__.py +12 -0
  6. fastblocks-0.2.2/fastblocks/adapters/admin/__init__.py +3 -0
  7. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/admin/sqladmin.py +11 -14
  8. fastblocks-0.2.2/fastblocks/adapters/app/__init__.py +3 -0
  9. fastblocks-0.2.0/fastblocks/adapters/app/main.py → fastblocks-0.2.2/fastblocks/adapters/app/admin.py +14 -19
  10. fastblocks-0.2.2/fastblocks/adapters/app/main.py +70 -0
  11. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/auth/__init__.py +2 -3
  12. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/auth/_model.py +1 -1
  13. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/auth/firebase.py +1 -1
  14. fastblocks-0.2.2/fastblocks/adapters/fonts/__init__.py +3 -0
  15. fastblocks-0.2.2/fastblocks/adapters/style/cirrus.py +1 -0
  16. fastblocks-0.2.2/fastblocks/adapters/templates/__init__.py +3 -0
  17. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/templates/jinja.py +2 -2
  18. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/applications.py +1 -7
  19. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/routing.py +0 -2
  20. {fastblocks-0.2.0 → fastblocks-0.2.2}/pyproject.toml +23 -18
  21. fastblocks-0.2.0/fastblocks/adapters/admin/__init__.py +0 -3
  22. fastblocks-0.2.0/fastblocks/adapters/app/__init__.py +0 -3
  23. fastblocks-0.2.0/fastblocks/adapters/auth/_routes.py +0 -0
  24. fastblocks-0.2.0/fastblocks/adapters/fonts/__init__.py +0 -3
  25. fastblocks-0.2.0/fastblocks/adapters/style/__init__.py +0 -0
  26. fastblocks-0.2.0/fastblocks/adapters/templates/__init__.py +0 -3
  27. {fastblocks-0.2.0 → fastblocks-0.2.2}/LICENSE +0 -0
  28. {fastblocks-0.2.0 → fastblocks-0.2.2}/README.md +0 -0
  29. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/__init__.py +0 -0
  30. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/__main__.py +0 -0
  31. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/admin/_base.py +0 -0
  32. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/app/_base.py +0 -0
  33. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/app/_router.py +0 -0
  34. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/auth/_base.py +0 -0
  35. /fastblocks-0.2.0/fastblocks/actions/__init__.py → /fastblocks-0.2.2/fastblocks/adapters/auth/_router.py +0 -0
  36. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/fonts/_base.py +0 -0
  37. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/fonts/google.py +0 -0
  38. {fastblocks-0.2.0/fastblocks/adapters → fastblocks-0.2.2/fastblocks/adapters/sitemap}/__init__.py +0 -0
  39. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/sitemap/sitemap.py +0 -0
  40. {fastblocks-0.2.0/fastblocks/adapters/sitemap → fastblocks-0.2.2/fastblocks/adapters/style}/__init__.py +0 -0
  41. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/style/_base.py +0 -0
  42. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/style/bulma.py +0 -0
  43. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/templates/_base.py +0 -0
  44. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/adapters/templates/_filters.py +0 -0
  45. {fastblocks-0.2.0 → fastblocks-0.2.2}/fastblocks/middleware.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastblocks
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Starlette based app for the rapid delivery HTMX/Jinja template blocks
5
5
  Keywords: starlette htmx jinja httpx fastapi sqladmin sqlmodel pydantic sqlalchemy redis
6
6
  Author-Email: lesleslie <les@wedgwoodwebworks.com>
@@ -23,25 +23,24 @@ Requires-Dist: asgi-logger>=0.1.0
23
23
  Requires-Dist: brotli-asgi>=1.4.0
24
24
  Requires-Dist: secure>=0.3.0
25
25
  Requires-Dist: starlette-csrf>=3.0.0
26
- Requires-Dist: starlette-async-jinja>=1.4.0
27
- Requires-Dist: cashews>=6.3.0
26
+ Requires-Dist: cashews>=6.4.0
28
27
  Requires-Dist: starception>=1.2.1
29
- Requires-Dist: pydantic>=2.4.0
28
+ Requires-Dist: pydantic>=2.5.3
30
29
  Requires-Dist: starlette-decorouter>=1.0.0
31
30
  Requires-Dist: pyfiglet>=1.0.2
32
- Requires-Dist: jinja2-async-environment>=0.3.0
33
- Requires-Dist: starlette>=0.31.1
34
- Requires-Dist: acb[cache,requests,secrets,sql,storage]>=0.3.4
35
- Requires-Dist: uvicorn>=0.23.2
31
+ Requires-Dist: starlette>=0.34.0
32
+ Requires-Dist: uvicorn>=0.25.0
36
33
  Requires-Dist: htmlmin>=0.1.12
37
34
  Requires-Dist: jsmin>=3.0.1
38
35
  Requires-Dist: libsass>=0.22.0
39
- Requires-Dist: aiohttp>=3.9.0b0
36
+ Requires-Dist: aiohttp>=3.9.1
37
+ Requires-Dist: acb[cache,requests,secrets,sql,storage]>=0.4.2
38
+ Requires-Dist: starlette-async-jinja>=1.4.2
40
39
  Requires-Dist: asgi-sitemaps>=1.0.0; extra == "sitemap"
41
- Requires-Dist: firebase-admin>=6.2.0; extra == "auth"
40
+ Requires-Dist: firebase-admin>=6.3.0; extra == "auth"
42
41
  Requires-Dist: beautifulsoup4>=4.12.2; extra == "style"
43
42
  Requires-Dist: tinycss2>=1.2.1; extra == "style"
44
- Requires-Dist: sqladmin>=0.15.2; extra == "admin"
43
+ Requires-Dist: sqladmin>=0.16.0; extra == "admin"
45
44
  Provides-Extra: sitemap
46
45
  Provides-Extra: auth
47
46
  Provides-Extra: style
@@ -0,0 +1,13 @@
1
+ FROM python:3.12
2
+
3
+ # Copy local code to the container image.
4
+ ENV APP_HOME /app
5
+ WORKDIR $APP_HOME
6
+ COPY . ./
7
+
8
+ # Install production dependencies.
9
+ RUN pip install --upgrade pipx
10
+ RUN pipx install pdm
11
+ RUN pdm install
12
+
13
+ uvicorn --port $PORT --host 0.0.0.0 main:app
@@ -0,0 +1,9 @@
1
+ from acb.actions import compress
2
+ from acb.actions import encode
3
+ from acb.actions import hash
4
+ from acb.actions import register_actions
5
+ from fastblocks.actions import minify
6
+
7
+ __all__: list[str] = ["encode", "hash", "compress", "minify"]
8
+
9
+ register_actions()
@@ -5,16 +5,16 @@ from jsmin import jsmin as min_js
5
5
 
6
6
  class Minify:
7
7
  @staticmethod
8
- def js(js: str):
8
+ def js(js: str) -> str:
9
9
  return min_js(js)
10
10
 
11
11
  @staticmethod
12
- def html(html: str):
12
+ def html(html: str) -> str:
13
13
  return min_html(html)
14
14
 
15
15
  @staticmethod
16
- def scss(css: str):
17
- return sass.compile(string=css, output_style="compressed")
16
+ def scss(css: str) -> str:
17
+ return sass.compile(string=css, output_style="compressed") # type: ignore
18
18
 
19
19
 
20
20
  minify = Minify()
@@ -0,0 +1,12 @@
1
+ from acb.adapters import cache
2
+ from acb.adapters import logger
3
+ from acb.adapters import register_adapters
4
+ from acb.adapters import requests
5
+ from acb.adapters import secrets
6
+ from acb.adapters import sql
7
+ from acb.adapters import storage
8
+ from . import app
9
+
10
+ __all__: list[str] = ["logger", "cache", "secrets", "storage", "requests", "sql", "app"]
11
+
12
+ register_adapters()
@@ -0,0 +1,3 @@
1
+ from acb.adapters import load_adapter
2
+
3
+ Admin = load_adapter()
@@ -2,7 +2,7 @@ import typing as t
2
2
  from typing import override
3
3
 
4
4
  from acb.adapters.logger import Logger
5
- from acb.adapters.models import Models
5
+ from acb.adapters.sql import SqlModels
6
6
  from acb.adapters.storage import Storage
7
7
  from acb.config import Config
8
8
  from acb.config import Settings
@@ -25,7 +25,7 @@ from ..templates import Templates
25
25
 
26
26
 
27
27
  class AdminSettings(Settings):
28
- requires: list[str] = ["app", "storage", "sql", "auth"]
28
+ requires: t.Optional[list[str]] = ["app", "storage", "sql", "auth"]
29
29
  title: str = "Fastblocks Dashboard"
30
30
  roles: t.Optional[list[str]] = ["admin", "owner", "contributor", "viewer"]
31
31
 
@@ -41,20 +41,17 @@ class Admin(SqlAdmin):
41
41
  super().__init__(app, **kwargs)
42
42
 
43
43
  @depends.inject
44
- async def init(self, models: Models = depends()) -> None: # type: ignore
44
+ async def init(self, models: SqlModels = depends()) -> None: # type: ignore
45
45
  ...
46
46
 
47
- @depends.inject
48
- def init_templating_engine(
49
- self, templates: Templates = depends() # type: ignore
50
- ) -> AsyncJinja2Templates:
51
- tmpls = templates.admin
52
- tmpls.env.globals["min"] = min
53
- tmpls.env.globals["zip"] = zip
54
- tmpls.env.globals["admin"] = self
55
- tmpls.env.globals["is_list"] = lambda x: isinstance(x, list) # type: ignore
56
- tmpls.env.globals["get_object_identifier"] = get_object_identifier
57
- return tmpls
47
+ @override
48
+ def init_templating_engine(self) -> AsyncJinja2Templates: # type: ignore
49
+ self.templates.env.globals["min"] = min
50
+ self.templates.env.globals["zip"] = zip
51
+ self.templates.env.globals["admin"] = self
52
+ self.templates.env.globals["is_list"] = lambda x: isinstance(x, list) # type: ignore
53
+ self.templates.globals["get_object_identifier"] = get_object_identifier
54
+ return self.templates
58
55
 
59
56
  @override
60
57
  async def login(self, request: Request) -> (RedirectResponse | Response):
@@ -0,0 +1,3 @@
1
+ from acb.adapters import load_adapter
2
+
3
+ App = load_adapter()
@@ -2,33 +2,27 @@ from contextlib import asynccontextmanager
2
2
  from time import time
3
3
 
4
4
  from acb import adapter_registry
5
- from acb import register_package
6
5
  from acb.adapters.cache import Cache
7
6
  from acb.adapters.logger import Logger
8
- from acb.adapters.models import Models
7
+ from acb.adapters.sql import SqlModels
9
8
  from acb.adapters.sql import Sql
10
9
  from acb.config import Config
11
10
  from acb.depends import depends
12
- from fastblocks.routing import router_registry
13
-
14
11
  from fastblocks.adapters.admin import Admin
15
12
  from fastblocks.adapters.auth import Auth
16
13
  from fastblocks.adapters.templates import Templates
17
- from middleware import middlewares
18
- from sqlalchemy.exc import IntegrityError
19
14
  from fastblocks.applications import FastBlocks
15
+ from fastblocks.routing import router_registry
16
+ from middleware import middlewares
20
17
  from ._base import AppBase
21
18
  from ._base import AppBaseSettings
22
19
 
23
- register_package()
24
-
25
20
  main_start = time()
26
21
 
27
22
 
28
23
  class AppSettings(AppBaseSettings):
29
24
  style: str = "bulma"
30
25
  theme: str = "light"
31
- wtf_csrf_time_limit: int = 172_800
32
26
  media_types: list[str] = ["image", "video", "audio"]
33
27
  video_exts: list[str] = [".webm", ".m4v", ".mp4"]
34
28
  image_exts: list[str] = [".jpeg", ".jpg", ".png", ".webp"]
@@ -50,6 +44,7 @@ class AppSettings(AppBaseSettings):
50
44
  danger="exclamation-circle",
51
45
  warning="exclamation-triangle",
52
46
  )
47
+ wtf_csrf_time_limit: int = 172_800
53
48
 
54
49
 
55
50
  class App(FastBlocks, AppBase):
@@ -74,7 +69,7 @@ class App(FastBlocks, AppBase):
74
69
  self,
75
70
  config: Config = depends(), # type: ignore
76
71
  logger: Logger = depends(), # type: ignore
77
- models: Models = depends(), # type: ignore
72
+ models: SqlModels = depends(), # type: ignore
78
73
  cache: Cache = depends(), # type: ignore
79
74
  sql: Sql = depends(), # type: ignore
80
75
  auth: Auth = depends(), # type: ignore
@@ -82,15 +77,15 @@ class App(FastBlocks, AppBase):
82
77
  ):
83
78
  logger.info("Application starting...")
84
79
  if next(a for a in adapter_registry.get() if a.name == "admin" and a.installed):
85
- try:
86
- logger.info("Creating admin superuser...")
87
- await models.create_user(
88
- gmail=config.admin.gmail,
89
- email=config.admin.email,
90
- role="admin",
91
- )
92
- except IntegrityError:
93
- logger.debug("Admin superuser exists")
80
+ # try:
81
+ # logger.info("Creating admin superuser...")
82
+ # await models.create_user(
83
+ # gmail=config.admin.gmail,
84
+ # email=config.admin.email,
85
+ # role="admin",
86
+ # )
87
+ # except IntegrityError:
88
+ # logger.debug("Admin superuser exists")
94
89
  admin.__init__(
95
90
  app=self,
96
91
  engine=sql.engine,
@@ -0,0 +1,70 @@
1
+ from contextlib import asynccontextmanager
2
+ from time import time
3
+
4
+ from acb.adapters.cache import Cache
5
+ from acb.adapters.logger import Logger
6
+ from acb.adapters.storage import Storage
7
+ from acb.config import Config
8
+ from acb.depends import depends
9
+ from fastblocks.adapters.templates import Templates
10
+ from fastblocks.applications import FastBlocks
11
+ from fastblocks.routing import router_registry
12
+ from middleware import middlewares
13
+ from ._base import AppBase
14
+ from ._base import AppBaseSettings
15
+
16
+ main_start = time()
17
+
18
+
19
+ class AppSettings(AppBaseSettings):
20
+ style: str = "bulma"
21
+ theme: str = "light"
22
+
23
+
24
+ class App(FastBlocks, AppBase):
25
+ config: Config = depends() # type: ignore
26
+ templates: Templates = depends() # type: ignore
27
+
28
+ def __init__(self) -> None:
29
+ super().__init__(
30
+ debug=self.config.debug.app,
31
+ middleware=middlewares(),
32
+ lifespan=self.lifespan,
33
+ )
34
+ self.templates = self.templates.app
35
+
36
+ async def init(self) -> None:
37
+ for router in router_registry.get():
38
+ super().routes.append(router)
39
+
40
+ @depends.inject
41
+ @asynccontextmanager
42
+ async def lifespan(
43
+ self,
44
+ logger: Logger = depends(), # type: ignore
45
+ cache: Cache = depends(), # type: ignore
46
+ storage: Storage = depends(), # type: ignore
47
+ ):
48
+ logger.info("Application starting...")
49
+
50
+ async def post_startup() -> None:
51
+ if not self.config.deployed:
52
+ from aioconsole import aprint
53
+ from pyfiglet import Figlet # type: ignore
54
+
55
+ fig = Figlet(font="slant", width=90, justify="center")
56
+ await aprint(f"\n\n{fig.renderText(self.config.app.name.upper())}\n")
57
+ if not self.config.debug.production and self.config.app.deployed:
58
+ logger.info("Entering production mode...")
59
+
60
+ await post_startup()
61
+ main_start_time = time() - main_start
62
+ logger.info(f"App started in {main_start_time} s")
63
+ yield
64
+ await cache.close()
65
+ logger.error("Application shut down")
66
+
67
+
68
+ depends.set(App)
69
+
70
+ app = depends.get(App)
@@ -1,14 +1,13 @@
1
- from acb.config import load_adapter
1
+ from acb.adapters import load_adapter
2
2
  from ._model import UserModel
3
3
  from ._base import current_user
4
4
 
5
5
 
6
6
  __all__: list[str] = [
7
7
  "Auth",
8
- "AuthSettings",
9
8
  "UserModel",
10
9
  "current_user",
11
10
  ]
12
11
 
13
12
 
14
- Auth, AuthSettings = load_adapter()
13
+ Auth = load_adapter()
@@ -1,6 +1,6 @@
1
1
  import typing as t
2
2
 
3
- from acb.adapters.models._sql_model import SqlModel
3
+ from acb.adapters.sql import SqlModel
4
4
  from sqlmodel import Field # type: ignore
5
5
 
6
6
  from pydantic import EmailStr
@@ -155,4 +155,4 @@ class Auth(AuthBase):
155
155
  return await current_user.get().is_authenticated(request)
156
156
 
157
157
 
158
- depends.set(Auth, Auth())
158
+ depends.set(Auth)
@@ -0,0 +1,3 @@
1
+ from acb.adapters import load_adapter
2
+
3
+ Fonts = load_adapter()
@@ -0,0 +1 @@
1
+ # cirrus-ui style placeholder
@@ -0,0 +1,3 @@
1
+ from acb.adapters import load_adapter
2
+
3
+ Templates = load_adapter()
@@ -9,7 +9,7 @@ from re import search
9
9
 
10
10
  from jinja_partials import register_starlette_extensions # type: ignore
11
11
 
12
- from acb import adapters_path
12
+ # from acb import adapters_path
13
13
  from acb import base_path
14
14
  from acb.adapters.cache import Cache
15
15
  from acb.adapters.logger import Logger
@@ -259,7 +259,7 @@ class TemplatesSettings(TemplatesBaseSettings):
259
259
  requires: t.Optional[list[str]] = ["cache", "storage"]
260
260
  app: t.Optional[EnvTemplatePaths] = EnvTemplatePaths(root=base_path)
261
261
  admin: t.Optional[EnvTemplatePaths] = EnvTemplatePaths(
262
- root=adapters_path / "admin" / "_templates"
262
+ root=base_path.parent / "admin" / "_templates"
263
263
  )
264
264
  loader: t.Optional[str] = None
265
265
  extensions: list[Extension] = []
@@ -1,13 +1,10 @@
1
1
  import typing as t
2
- from pathlib import Path
3
2
  from platform import system
4
3
 
5
- from acb import register_package
6
- from acb.adapters.logger._base import ExternalLogger
7
4
  from acb.adapters.logger import Logger
5
+ from acb.adapters.logger._base import ExternalLogger
8
6
  from acb.config import Config
9
7
  from acb.depends import depends
10
-
11
8
  from asgi_htmx import HtmxRequest as Request
12
9
  from starception import add_link_template
13
10
  from starception import install_error_handler
@@ -20,8 +17,6 @@ from starlette.responses import Response
20
17
  from starlette.types import ASGIApp
21
18
  from .middleware import middlewares
22
19
 
23
- register_package()
24
-
25
20
  match system():
26
21
  case "Windows":
27
22
  add_link_template("pycharm", "pycharm64.exe --line {lineno} {path}")
@@ -39,7 +34,6 @@ class FastBlocks(Starlette):
39
34
 
40
35
  def __init__(self, **kwargs: t.Any) -> None:
41
36
  super().__init__(**kwargs)
42
- register_package(Path.cwd())
43
37
  set_editor("pycharm")
44
38
  install_error_handler()
45
39
  loggers = ["uvicorn", "uvicorn.access", "uvicorn.error"]
@@ -4,8 +4,6 @@ from contextvars import ContextVar
4
4
 
5
5
  from acb.config import Config
6
6
  from acb.depends import depends
7
-
8
-
9
7
  from fastblocks.adapters.templates import Templates
10
8
 
11
9
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastblocks"
3
- version = "0.2.0"
3
+ version = "0.2.2"
4
4
  description = "Starlette based app for the rapid delivery HTMX/Jinja template blocks"
5
5
  authors = [
6
6
  { name = "lesleslie", email = "les@wedgwoodwebworks.com" },
@@ -41,20 +41,19 @@ dependencies = [
41
41
  "brotli-asgi>=1.4.0",
42
42
  "secure>=0.3.0",
43
43
  "starlette-csrf>=3.0.0",
44
- "starlette-async-jinja>=1.4.0",
45
- "cashews>=6.3.0",
44
+ "cashews>=6.4.0",
46
45
  "starception>=1.2.1",
47
- "pydantic>=2.4.0",
46
+ "pydantic>=2.5.3",
48
47
  "starlette-decorouter>=1.0.0",
49
48
  "pyfiglet>=1.0.2",
50
- "jinja2-async-environment>=0.3.0",
51
- "starlette>=0.31.1",
52
- "acb[cache,requests,secrets,sql,storage]>=0.3.4",
53
- "uvicorn>=0.23.2",
49
+ "starlette>=0.34.0",
50
+ "uvicorn>=0.25.0",
54
51
  "htmlmin>=0.1.12",
55
52
  "jsmin>=3.0.1",
56
53
  "libsass>=0.22.0",
57
- "aiohttp>=3.9.0b0",
54
+ "aiohttp>=3.9.1",
55
+ "acb[cache,requests,secrets,sql,storage]>=0.4.2",
56
+ "starlette-async-jinja>=1.4.2",
58
57
  ]
59
58
 
60
59
  [project.optional-dependencies]
@@ -62,14 +61,14 @@ sitemap = [
62
61
  "asgi-sitemaps>=1.0.0",
63
62
  ]
64
63
  auth = [
65
- "firebase-admin>=6.2.0",
64
+ "firebase-admin>=6.3.0",
66
65
  ]
67
66
  style = [
68
67
  "beautifulsoup4>=4.12.2",
69
68
  "tinycss2>=1.2.1",
70
69
  ]
71
70
  admin = [
72
- "sqladmin>=0.15.2",
71
+ "sqladmin>=0.16.0",
73
72
  ]
74
73
 
75
74
  [project.license]
@@ -83,7 +82,7 @@ config = [
83
82
 
84
83
  [tool.pdm.dev-dependencies]
85
84
  dev = [
86
- "crackerjack>=0.7.4",
85
+ "crackerjack>=0.7.19",
87
86
  ]
88
87
 
89
88
  [tool.ruff]
@@ -114,13 +113,14 @@ paths = [
114
113
  deps-file = "pyproject.toml"
115
114
  exclude-deps = [
116
115
  "pytest",
117
- "pyfiglet",
118
- "aiohttp",
116
+ "pdm-bump",
119
117
  "pre-commit",
120
- "starlette-decorouter",
121
118
  "libsass",
122
- "pdm-bump",
119
+ "pdm",
123
120
  "autotyping",
121
+ "aiohttp",
122
+ "starlette-decorouter",
123
+ "pyfiglet",
124
124
  ]
125
125
 
126
126
  [tool.refurb]
@@ -131,10 +131,10 @@ target = [
131
131
  "fastblocks",
132
132
  ]
133
133
  skips = [
134
+ "B404",
134
135
  "B403",
135
- "B113",
136
136
  "B603",
137
- "B404",
137
+ "B113",
138
138
  ]
139
139
 
140
140
  [tool.pyright]
@@ -156,6 +156,11 @@ reportPrivateUsage = "warning"
156
156
  pythonVersion = "3.12"
157
157
  pythonPlatform = "Darwin"
158
158
 
159
+ [tool.codespell]
160
+ skip = "*/data/*"
161
+ quiet-level = 3
162
+ ignore-words-list = "crate,uptodate"
163
+
159
164
  [build-system]
160
165
  requires = [
161
166
  "pdm-backend",
@@ -1,3 +0,0 @@
1
- from acb import load_adapter
2
-
3
- Admin = load_adapter()
@@ -1,3 +0,0 @@
1
- from acb import load_adapter
2
-
3
- App = load_adapter()
File without changes
@@ -1,3 +0,0 @@
1
- from acb import load_adapter
2
-
3
- Fonts = load_adapter()
File without changes
@@ -1,3 +0,0 @@
1
- from acb import load_adapter
2
-
3
- Templates = load_adapter()
File without changes
File without changes