skrift 0.1.0a8__py3-none-any.whl → 0.1.0a9__py3-none-any.whl

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.
@@ -63,10 +63,17 @@ def upgrade() -> None:
63
63
  # Step 2: Migrate existing data from users to oauth_accounts
64
64
  # Generate binary UUIDs (16 bytes) for new records and copy oauth data
65
65
  conn = op.get_bind()
66
- conn.execute(sa.text("""
66
+ dialect = conn.dialect.name
67
+
68
+ if dialect == 'sqlite':
69
+ uuid_func = 'randomblob(16)'
70
+ else: # PostgreSQL and others
71
+ uuid_func = 'gen_random_uuid()'
72
+
73
+ conn.execute(sa.text(f"""
67
74
  INSERT INTO oauth_accounts (id, created_at, updated_at, provider, provider_account_id, provider_email, user_id)
68
75
  SELECT
69
- randomblob(16),
76
+ {uuid_func},
70
77
  created_at,
71
78
  updated_at,
72
79
  oauth_provider,
skrift/auth/roles.py CHANGED
@@ -86,9 +86,44 @@ def get_role_definition(name: str) -> RoleDefinition | None:
86
86
  return ROLE_DEFINITIONS.get(name)
87
87
 
88
88
 
89
- def register_role(role: RoleDefinition) -> None:
89
+ def register_role(
90
+ name: str,
91
+ *permissions: str,
92
+ display_name: str | None = None,
93
+ description: str | None = None,
94
+ ) -> RoleDefinition:
90
95
  """Register a custom role definition.
91
96
 
92
97
  This allows applications to add custom roles beyond the defaults.
98
+ Call this during application startup (e.g., in a custom controller module
99
+ or app initialization) before the database sync occurs.
100
+
101
+ Args:
102
+ name: The unique identifier for the role
103
+ *permissions: Permission strings granted by this role
104
+ display_name: Human-readable name for the role
105
+ description: Description of the role's purpose
106
+
107
+ Returns:
108
+ The registered RoleDefinition instance
109
+
110
+ Example:
111
+ from skrift.auth.roles import register_role
112
+
113
+ # Register a custom role with permissions
114
+ register_role(
115
+ "support",
116
+ "view-tickets",
117
+ "respond-tickets",
118
+ display_name="Support Agent",
119
+ description="Can view and respond to support tickets",
120
+ )
93
121
  """
122
+ role = create_role(
123
+ name,
124
+ *permissions,
125
+ display_name=display_name,
126
+ description=description,
127
+ )
94
128
  ROLE_DEFINITIONS[role.name] = role
129
+ return role
@@ -791,6 +791,11 @@ main.container.admin-layout {
791
791
  color: var(--color-primary-text);
792
792
  }
793
793
 
794
+ .admin-nav a.active:hover {
795
+ background-color: var(--color-primary-hover);
796
+ color: var(--color-primary-text);
797
+ }
798
+
794
799
  .admin-nav a::after {
795
800
  display: none;
796
801
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skrift
3
- Version: 0.1.0a8
3
+ Version: 0.1.0a9
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
@@ -14,11 +14,11 @@ skrift/alembic/versions/20260122_152744_0b7c927d2591_add_roles_and_permissions.p
14
14
  skrift/alembic/versions/20260122_172836_cdf734a5b847_add_sa_orm_sentinel_column.py,sha256=96TCvvQbYk3RGpZdEQ0x4bIDXxBLc3Gv7VTItTq9T54,850
15
15
  skrift/alembic/versions/20260122_175637_a9c55348eae7_remove_page_type_column.py,sha256=XJ55LhwzgN07MAREk6w4Bx2Vu3KvMe_bDkIjgE6EfqM,1223
16
16
  skrift/alembic/versions/20260122_200000_add_settings_table.py,sha256=aG4pxp18fwonGAWt7EoT0XaiIEmu7zltSrj8e2a8QZU,1310
17
- skrift/alembic/versions/20260129_add_oauth_accounts.py,sha256=SJYQl0cfyJnUKLzsbGqu97Kcm7waPhxmpyARJXB3Z1Q,5240
17
+ skrift/alembic/versions/20260129_add_oauth_accounts.py,sha256=KPuzJ5J13FEbSbyziuB-nfO67i4cRgBeQnygn-uNQx8,5412
18
18
  skrift/alembic/versions/20260129_add_provider_metadata.py,sha256=prDfnYM0cODBSYb9xYqW5Dab2WDjHNkkEMRH-hI7BIA,846
19
19
  skrift/auth/__init__.py,sha256=uHMqty3dgDSYlReVT96WhygzH6qNAWSVDWoxumzxmsA,1155
20
20
  skrift/auth/guards.py,sha256=QePajHsGnJ4R_hlhzblr5IoAgZcY5jzeZ64bJwDL9hM,4451
21
- skrift/auth/roles.py,sha256=jpqK4qaavqAhJRxhptm2x5mUb6KkwEALaml8sEH4Sug,2267
21
+ skrift/auth/roles.py,sha256=Cvwv8v7Li6CJHhucTuzxRjaNmS530F9sbbQlCPRqhm4,3291
22
22
  skrift/auth/services.py,sha256=h6GTXdN5UMRYglnaFz4asMoutVkSSAyL3_Vt56N26pA,5441
23
23
  skrift/controllers/__init__.py,sha256=bVr0tsSGz7jBi002Lqd1AA1FQd7ZA_IagsqTKpiHiK0,147
24
24
  skrift/controllers/auth.py,sha256=xACbe6H0cEhyqbPNTy4_HvUek3ugaSUgsgyRZzM1E8A,19418
@@ -44,7 +44,7 @@ skrift/setup/controller.py,sha256=v0Ey8T7ptJ5A3vOqQ1TUAXH1bQwA0288J5uyUWMihsw,34
44
44
  skrift/setup/middleware.py,sha256=Nai8ZG2vHldngmAhq7kWzAwKRNcP5tHKhJHa5dCh404,2941
45
45
  skrift/setup/providers.py,sha256=0BFKB6168NcmtXxFF6ofHgEDMQD2FbXkexsqrARVtDI,7967
46
46
  skrift/setup/state.py,sha256=RMe9LtIjzDoOm9u-Nk5-KAnr_JBiQIjWDpTP9E30ezc,9304
47
- skrift/static/css/style.css,sha256=sJ7-y8nrUdB5EB5_CyjWo1CTnqmYq0UgMZYMjxw0988,20824
47
+ skrift/static/css/style.css,sha256=-Ijp4PCugWzhHhtZTaRUAITHJDW-0AsbNpDCFI1njVQ,20943
48
48
  skrift/templates/base.html,sha256=4bg4s4VdES0dSvhJYLgrfrN26ynqeq1-3jyKPkWWVWk,2065
49
49
  skrift/templates/error-404.html,sha256=sJrDaF3Or3Nyki8mxo3wBxLLzgy4wkB9p9wdS8pRA6k,409
50
50
  skrift/templates/error-500.html,sha256=MR0wJ1JKLqdmdvsoJbQnZxLkxDPE59LrlbtVPKLM8-A,401
@@ -68,7 +68,7 @@ skrift/templates/setup/configuring.html,sha256=2KHW9h2BrJgL_kO5IizbAYs4pnFLyRf76
68
68
  skrift/templates/setup/database.html,sha256=gU4-315-QraHa2Eq4Fh3b55QpOM2CkJzh27_Yz13frA,5495
69
69
  skrift/templates/setup/restart.html,sha256=GHg31F_e2uLFhWUzJoalk0Y0oYLqsFWyZXWKX3mblbY,1355
70
70
  skrift/templates/setup/site.html,sha256=PSOH-q1-ZBl47iSW9-Ad6lEfJn_fzdGD3Pk4vb3xgK4,1680
71
- skrift-0.1.0a8.dist-info/METADATA,sha256=5kxsqcxBQhpm0pm3kiHH2-wjtDwBzWp8cBpF2e-XoQg,6435
72
- skrift-0.1.0a8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
73
- skrift-0.1.0a8.dist-info/entry_points.txt,sha256=uquZ5Mumqr0xwYTpTcNiJtFSITGfF6_QCCy2DZJSZig,42
74
- skrift-0.1.0a8.dist-info/RECORD,,
71
+ skrift-0.1.0a9.dist-info/METADATA,sha256=2iBQ2j4BFoTEFFAAP8nEXirOwulueHdgAgoFwdAipSU,6435
72
+ skrift-0.1.0a9.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
73
+ skrift-0.1.0a9.dist-info/entry_points.txt,sha256=uquZ5Mumqr0xwYTpTcNiJtFSITGfF6_QCCy2DZJSZig,42
74
+ skrift-0.1.0a9.dist-info/RECORD,,