skrift 0.1.0a5__tar.gz → 0.1.0a7__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 (72) hide show
  1. {skrift-0.1.0a5 → skrift-0.1.0a7}/PKG-INFO +1 -1
  2. {skrift-0.1.0a5 → skrift-0.1.0a7}/pyproject.toml +1 -1
  3. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/asgi.py +23 -14
  4. {skrift-0.1.0a5 → skrift-0.1.0a7}/.gitignore +0 -0
  5. {skrift-0.1.0a5 → skrift-0.1.0a7}/README.md +0 -0
  6. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/__init__.py +0 -0
  7. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/__main__.py +0 -0
  8. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/admin/__init__.py +0 -0
  9. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/admin/controller.py +0 -0
  10. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/admin/navigation.py +0 -0
  11. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/alembic/env.py +0 -0
  12. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/alembic/script.py.mako +0 -0
  13. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/alembic/versions/20260120_210154_09b0364dbb7b_initial_schema.py +0 -0
  14. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/alembic/versions/20260122_152744_0b7c927d2591_add_roles_and_permissions.py +0 -0
  15. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/alembic/versions/20260122_172836_cdf734a5b847_add_sa_orm_sentinel_column.py +0 -0
  16. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/alembic/versions/20260122_175637_a9c55348eae7_remove_page_type_column.py +0 -0
  17. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/alembic/versions/20260122_200000_add_settings_table.py +0 -0
  18. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/alembic/versions/20260129_add_oauth_accounts.py +0 -0
  19. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/alembic.ini +0 -0
  20. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/auth/__init__.py +0 -0
  21. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/auth/guards.py +0 -0
  22. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/auth/roles.py +0 -0
  23. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/auth/services.py +0 -0
  24. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/cli.py +0 -0
  25. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/config.py +0 -0
  26. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/controllers/__init__.py +0 -0
  27. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/controllers/auth.py +0 -0
  28. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/controllers/web.py +0 -0
  29. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/__init__.py +0 -0
  30. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/base.py +0 -0
  31. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/models/__init__.py +0 -0
  32. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/models/oauth_account.py +0 -0
  33. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/models/page.py +0 -0
  34. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/models/role.py +0 -0
  35. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/models/setting.py +0 -0
  36. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/models/user.py +0 -0
  37. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/services/__init__.py +0 -0
  38. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/services/page_service.py +0 -0
  39. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/db/services/setting_service.py +0 -0
  40. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/lib/__init__.py +0 -0
  41. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/lib/exceptions.py +0 -0
  42. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/lib/template.py +0 -0
  43. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/setup/__init__.py +0 -0
  44. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/setup/config_writer.py +0 -0
  45. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/setup/controller.py +0 -0
  46. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/setup/middleware.py +0 -0
  47. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/setup/providers.py +0 -0
  48. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/setup/state.py +0 -0
  49. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/static/css/style.css +0 -0
  50. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/admin/admin.html +0 -0
  51. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/admin/base.html +0 -0
  52. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/admin/pages/edit.html +0 -0
  53. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/admin/pages/list.html +0 -0
  54. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/admin/settings/site.html +0 -0
  55. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/admin/users/list.html +0 -0
  56. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/admin/users/roles.html +0 -0
  57. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/auth/dummy_login.html +0 -0
  58. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/auth/login.html +0 -0
  59. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/base.html +0 -0
  60. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/error-404.html +0 -0
  61. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/error-500.html +0 -0
  62. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/error.html +0 -0
  63. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/index.html +0 -0
  64. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/page.html +0 -0
  65. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/setup/admin.html +0 -0
  66. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/setup/auth.html +0 -0
  67. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/setup/base.html +0 -0
  68. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/setup/complete.html +0 -0
  69. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/setup/configuring.html +0 -0
  70. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/setup/database.html +0 -0
  71. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/setup/restart.html +0 -0
  72. {skrift-0.1.0a5 → skrift-0.1.0a7}/skrift/templates/setup/site.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skrift
3
- Version: 0.1.0a5
3
+ Version: 0.1.0a7
4
4
  Summary: A lightweight async Python CMS for crafting modern websites
5
5
  Requires-Python: >=3.13
6
6
  Requires-Dist: advanced-alchemy>=0.26.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "skrift"
3
- version = "0.1.0a5"
3
+ version = "0.1.0a7"
4
4
  description = "A lightweight async Python CMS for crafting modern websites"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -10,6 +10,8 @@ The application uses a dispatcher architecture:
10
10
  import asyncio
11
11
  import hashlib
12
12
  import importlib
13
+ import os
14
+ import sys
13
15
  from datetime import datetime
14
16
  from pathlib import Path
15
17
 
@@ -56,16 +58,17 @@ def load_controllers() -> list:
56
58
  if not config:
57
59
  return []
58
60
 
61
+ # Add working directory to sys.path for local controller imports
62
+ cwd = os.getcwd()
63
+ if cwd not in sys.path:
64
+ sys.path.insert(0, cwd)
65
+
59
66
  controllers = []
60
67
  for controller_spec in config.get("controllers", []):
61
- try:
62
- module_path, class_name = controller_spec.split(":")
63
- module = importlib.import_module(module_path)
64
- controller_class = getattr(module, class_name)
65
- controllers.append(controller_class)
66
- except Exception:
67
- # Skip controllers that can't be loaded during setup
68
- pass
68
+ module_path, class_name = controller_spec.split(":")
69
+ module = importlib.import_module(module_path)
70
+ controller_class = getattr(module, class_name)
71
+ controllers.append(controller_class)
69
72
 
70
73
  return controllers
71
74
 
@@ -309,9 +312,11 @@ def create_app() -> Litestar:
309
312
  )
310
313
 
311
314
  # Template configuration
315
+ # Search working directory first for user overrides, then package directory
316
+ working_dir_templates = Path(os.getcwd()) / "templates"
312
317
  template_dir = Path(__file__).parent / "templates"
313
318
  template_config = TemplateConfig(
314
- directory=template_dir,
319
+ directory=[working_dir_templates, template_dir],
315
320
  engine=JinjaTemplateEngine,
316
321
  engine_callback=lambda engine: engine.engine.globals.update({
317
322
  "now": datetime.now,
@@ -322,10 +327,11 @@ def create_app() -> Litestar:
322
327
  }),
323
328
  )
324
329
 
325
- # Static files
330
+ # Static files - working directory first for user overrides, then package directory
331
+ working_dir_static = Path(os.getcwd()) / "static"
326
332
  static_files_router = create_static_files_router(
327
333
  path="/static",
328
- directories=[Path(__file__).parent / "static"],
334
+ directories=[working_dir_static, Path(__file__).parent / "static"],
329
335
  )
330
336
 
331
337
  from skrift.auth import sync_roles_to_database
@@ -381,9 +387,11 @@ def create_setup_app() -> Litestar:
381
387
  )
382
388
 
383
389
  # Template configuration
390
+ # Search working directory first for user overrides, then package directory
391
+ working_dir_templates = Path(os.getcwd()) / "templates"
384
392
  template_dir = Path(__file__).parent / "templates"
385
393
  template_config = TemplateConfig(
386
- directory=template_dir,
394
+ directory=[working_dir_templates, template_dir],
387
395
  engine=JinjaTemplateEngine,
388
396
  engine_callback=lambda engine: engine.engine.globals.update({
389
397
  "now": datetime.now,
@@ -394,10 +402,11 @@ def create_setup_app() -> Litestar:
394
402
  }),
395
403
  )
396
404
 
397
- # Static files
405
+ # Static files - working directory first for user overrides, then package directory
406
+ working_dir_static = Path(os.getcwd()) / "static"
398
407
  static_files_router = create_static_files_router(
399
408
  path="/static",
400
- directories=[Path(__file__).parent / "static"],
409
+ directories=[working_dir_static, Path(__file__).parent / "static"],
401
410
  )
402
411
 
403
412
  # Import controllers
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