skrift 0.1.0a1__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.
- skrift/__init__.py +1 -0
- skrift/__main__.py +17 -0
- skrift/admin/__init__.py +11 -0
- skrift/admin/controller.py +452 -0
- skrift/admin/navigation.py +105 -0
- skrift/alembic/env.py +91 -0
- skrift/alembic/script.py.mako +26 -0
- skrift/alembic/versions/20260120_210154_09b0364dbb7b_initial_schema.py +70 -0
- skrift/alembic/versions/20260122_152744_0b7c927d2591_add_roles_and_permissions.py +57 -0
- skrift/alembic/versions/20260122_172836_cdf734a5b847_add_sa_orm_sentinel_column.py +31 -0
- skrift/alembic/versions/20260122_175637_a9c55348eae7_remove_page_type_column.py +43 -0
- skrift/alembic/versions/20260122_200000_add_settings_table.py +38 -0
- skrift/alembic.ini +77 -0
- skrift/asgi.py +545 -0
- skrift/auth/__init__.py +58 -0
- skrift/auth/guards.py +130 -0
- skrift/auth/roles.py +94 -0
- skrift/auth/services.py +184 -0
- skrift/cli.py +45 -0
- skrift/config.py +192 -0
- skrift/controllers/__init__.py +4 -0
- skrift/controllers/auth.py +371 -0
- skrift/controllers/web.py +67 -0
- skrift/db/__init__.py +3 -0
- skrift/db/base.py +7 -0
- skrift/db/models/__init__.py +6 -0
- skrift/db/models/page.py +26 -0
- skrift/db/models/role.py +56 -0
- skrift/db/models/setting.py +13 -0
- skrift/db/models/user.py +36 -0
- skrift/db/services/__init__.py +1 -0
- skrift/db/services/page_service.py +217 -0
- skrift/db/services/setting_service.py +206 -0
- skrift/lib/__init__.py +3 -0
- skrift/lib/exceptions.py +168 -0
- skrift/lib/template.py +108 -0
- skrift/setup/__init__.py +14 -0
- skrift/setup/config_writer.py +211 -0
- skrift/setup/controller.py +751 -0
- skrift/setup/middleware.py +89 -0
- skrift/setup/providers.py +163 -0
- skrift/setup/state.py +134 -0
- skrift/static/css/style.css +998 -0
- skrift/templates/admin/admin.html +19 -0
- skrift/templates/admin/base.html +24 -0
- skrift/templates/admin/pages/edit.html +32 -0
- skrift/templates/admin/pages/list.html +62 -0
- skrift/templates/admin/settings/site.html +32 -0
- skrift/templates/admin/users/list.html +58 -0
- skrift/templates/admin/users/roles.html +42 -0
- skrift/templates/auth/login.html +125 -0
- skrift/templates/base.html +52 -0
- skrift/templates/error-404.html +19 -0
- skrift/templates/error-500.html +19 -0
- skrift/templates/error.html +19 -0
- skrift/templates/index.html +9 -0
- skrift/templates/page.html +26 -0
- skrift/templates/setup/admin.html +24 -0
- skrift/templates/setup/auth.html +110 -0
- skrift/templates/setup/base.html +407 -0
- skrift/templates/setup/complete.html +17 -0
- skrift/templates/setup/database.html +125 -0
- skrift/templates/setup/restart.html +28 -0
- skrift/templates/setup/site.html +39 -0
- skrift-0.1.0a1.dist-info/METADATA +233 -0
- skrift-0.1.0a1.dist-info/RECORD +68 -0
- skrift-0.1.0a1.dist-info/WHEEL +4 -0
- skrift-0.1.0a1.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{% extends "setup/base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block title %}Site Settings - Skrift{% endblock %}
|
|
4
|
+
|
|
5
|
+
{% block content %}
|
|
6
|
+
<h2>Site Settings</h2>
|
|
7
|
+
<p class="description">Configure your site's basic information.</p>
|
|
8
|
+
|
|
9
|
+
<form method="post" action="/setup/site">
|
|
10
|
+
<div class="form-group">
|
|
11
|
+
<label for="site_name">Site Name *</label>
|
|
12
|
+
<input type="text" id="site_name" name="site_name" value="{{ settings.site_name }}" required>
|
|
13
|
+
<small>The name displayed in the header and browser title</small>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div class="form-group">
|
|
17
|
+
<label for="site_tagline">Site Tagline</label>
|
|
18
|
+
<input type="text" id="site_tagline" name="site_tagline" value="{{ settings.site_tagline }}">
|
|
19
|
+
<small>A short description or slogan for your site</small>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<div class="form-group">
|
|
23
|
+
<label for="site_copyright_holder">Copyright Holder</label>
|
|
24
|
+
<input type="text" id="site_copyright_holder" name="site_copyright_holder" value="{{ settings.site_copyright_holder }}">
|
|
25
|
+
<small>Name displayed in the copyright notice (defaults to site name if empty)</small>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<div class="form-group">
|
|
29
|
+
<label for="site_copyright_start_year">Copyright Start Year</label>
|
|
30
|
+
<input type="number" id="site_copyright_start_year" name="site_copyright_start_year" value="{{ settings.site_copyright_start_year }}" min="1900" max="2100">
|
|
31
|
+
<small>If different from current year, will show a range (e.g., 2020-2026)</small>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<div class="form-actions">
|
|
35
|
+
<a href="/setup/auth" class="btn-secondary" role="button">Back</a>
|
|
36
|
+
<button type="submit">Save & Continue</button>
|
|
37
|
+
</div>
|
|
38
|
+
</form>
|
|
39
|
+
{% endblock %}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: skrift
|
|
3
|
+
Version: 0.1.0a1
|
|
4
|
+
Summary: A lightweight async Python CMS for crafting modern websites
|
|
5
|
+
Requires-Python: >=3.13
|
|
6
|
+
Requires-Dist: advanced-alchemy>=0.26.0
|
|
7
|
+
Requires-Dist: aiosqlite>=0.20.0
|
|
8
|
+
Requires-Dist: alembic>=1.14.0
|
|
9
|
+
Requires-Dist: asyncpg>=0.30.0
|
|
10
|
+
Requires-Dist: httpx>=0.28.0
|
|
11
|
+
Requires-Dist: litestar[cryptography,jinja,standard]>=2.14.0
|
|
12
|
+
Requires-Dist: pydantic-settings>=2.7.0
|
|
13
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
14
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
15
|
+
Requires-Dist: ruamel-yaml>=0.18.0
|
|
16
|
+
Requires-Dist: sqlalchemy[asyncio]>=2.0.36
|
|
17
|
+
Requires-Dist: uvicorn>=0.34.0
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
|
|
20
|
+
# Skrift
|
|
21
|
+
|
|
22
|
+
A modern Litestar-powered content management framework with multi-provider OAuth authentication, role-based access control, and WordPress-like template resolution.
|
|
23
|
+
|
|
24
|
+
## Features
|
|
25
|
+
|
|
26
|
+
- **Multi-Provider OAuth**: Authenticate with Google, GitHub, Microsoft, Discord, Facebook, or Twitter/X
|
|
27
|
+
- **Role-Based Access Control**: Flexible permission system with Admin, Editor, Author, and Moderator roles
|
|
28
|
+
- **Setup Wizard**: Guided first-time configuration without manual file editing
|
|
29
|
+
- **Admin Interface**: Web-based management for users, pages, and site settings
|
|
30
|
+
- **WordPress-like Templates**: Hierarchical template resolution for content pages
|
|
31
|
+
- **Dynamic Controllers**: Load controllers from `app.yaml` configuration
|
|
32
|
+
- **SQLAlchemy Integration**: Async database support with SQLite/PostgreSQL
|
|
33
|
+
- **Client-Side Sessions**: Encrypted cookie sessions for horizontal scalability
|
|
34
|
+
|
|
35
|
+
## Quick Start
|
|
36
|
+
|
|
37
|
+
### Prerequisites
|
|
38
|
+
|
|
39
|
+
- Python 3.13+
|
|
40
|
+
|
|
41
|
+
### Installation
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Install Skrift
|
|
45
|
+
pip install skrift
|
|
46
|
+
|
|
47
|
+
# Or install from git
|
|
48
|
+
pip install git+https://github.com/ZechCodes/skrift.git
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Getting Started
|
|
52
|
+
|
|
53
|
+
Create a project directory and set up your environment:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
mkdir mysite && cd mysite
|
|
57
|
+
|
|
58
|
+
# Create minimal environment file
|
|
59
|
+
echo "SECRET_KEY=$(python -c 'import secrets; print(secrets.token_urlsafe(32))')" > .env
|
|
60
|
+
|
|
61
|
+
# Start Skrift
|
|
62
|
+
skrift
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Open http://localhost:8080 to launch the setup wizard.
|
|
66
|
+
|
|
67
|
+
### Setup Wizard
|
|
68
|
+
|
|
69
|
+
The setup wizard guides you through initial configuration:
|
|
70
|
+
|
|
71
|
+
1. **Database Configuration**: Choose SQLite (dev) or PostgreSQL (production)
|
|
72
|
+
2. **Authentication Providers**: Configure OAuth credentials
|
|
73
|
+
3. **Site Settings**: Set site name, tagline, and copyright info
|
|
74
|
+
4. **Admin Account**: Create your first admin user via OAuth login
|
|
75
|
+
|
|
76
|
+
After completing the wizard, an `app.yaml` configuration file is created in your project directory.
|
|
77
|
+
|
|
78
|
+
### Manual Configuration
|
|
79
|
+
|
|
80
|
+
Alternatively, create `app.yaml` manually:
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
controllers:
|
|
84
|
+
- skrift.controllers.auth:AuthController
|
|
85
|
+
- skrift.admin.controller:AdminController
|
|
86
|
+
- skrift.controllers.web:WebController
|
|
87
|
+
|
|
88
|
+
db:
|
|
89
|
+
url: sqlite+aiosqlite:///./app.db
|
|
90
|
+
|
|
91
|
+
auth:
|
|
92
|
+
redirect_base_url: http://localhost:8080
|
|
93
|
+
providers:
|
|
94
|
+
google:
|
|
95
|
+
client_id: $GOOGLE_CLIENT_ID
|
|
96
|
+
client_secret: $GOOGLE_CLIENT_SECRET
|
|
97
|
+
scopes: [openid, email, profile]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Then run migrations and start the server:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
skrift-db upgrade head
|
|
104
|
+
skrift
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Documentation
|
|
108
|
+
|
|
109
|
+
- **[Full Documentation](docs/README.md)**: Comprehensive guide covering all features
|
|
110
|
+
- **[Deployment Guide](docs/deployment.md)**: VPS, Docker, and Kubernetes deployment
|
|
111
|
+
- **[CSS Framework](docs/css-framework.md)**: Styling documentation
|
|
112
|
+
|
|
113
|
+
## Project Structure
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
skrift/
|
|
117
|
+
├── skrift/ # Main Python package
|
|
118
|
+
│ ├── asgi.py # Application factory
|
|
119
|
+
│ ├── config.py # Settings management
|
|
120
|
+
│ ├── controllers/ # Route handlers
|
|
121
|
+
│ ├── admin/ # Admin panel
|
|
122
|
+
│ ├── auth/ # RBAC and guards
|
|
123
|
+
│ ├── db/ # Models and services
|
|
124
|
+
│ ├── lib/ # Template resolver
|
|
125
|
+
│ └── setup/ # Setup wizard
|
|
126
|
+
├── templates/ # Jinja2 templates
|
|
127
|
+
├── static/ # Static assets
|
|
128
|
+
├── alembic/ # Database migrations
|
|
129
|
+
├── docs/ # Documentation
|
|
130
|
+
├── app.yaml # Application config (generated)
|
|
131
|
+
└── main.py # Development entry point
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Configuration
|
|
135
|
+
|
|
136
|
+
### Environment Variables
|
|
137
|
+
|
|
138
|
+
| Variable | Required | Description |
|
|
139
|
+
|----------|----------|-------------|
|
|
140
|
+
| `SECRET_KEY` | Yes | Session encryption key |
|
|
141
|
+
| `DEBUG` | No | Enable debug mode (default: false) |
|
|
142
|
+
| `DATABASE_URL` | No | Database connection string |
|
|
143
|
+
| `OAUTH_REDIRECT_BASE_URL` | No | OAuth callback base URL |
|
|
144
|
+
|
|
145
|
+
OAuth credentials are configured per-provider (e.g., `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`).
|
|
146
|
+
|
|
147
|
+
### app.yaml
|
|
148
|
+
|
|
149
|
+
Application configuration is stored in `app.yaml` (generated by setup wizard):
|
|
150
|
+
|
|
151
|
+
```yaml
|
|
152
|
+
controllers:
|
|
153
|
+
- skrift.controllers.auth:AuthController
|
|
154
|
+
- skrift.admin.controller:AdminController
|
|
155
|
+
- skrift.controllers.web:WebController
|
|
156
|
+
|
|
157
|
+
db:
|
|
158
|
+
url: $DATABASE_URL
|
|
159
|
+
pool_size: 5
|
|
160
|
+
|
|
161
|
+
auth:
|
|
162
|
+
redirect_base_url: $OAUTH_REDIRECT_BASE_URL
|
|
163
|
+
providers:
|
|
164
|
+
google:
|
|
165
|
+
client_id: $GOOGLE_CLIENT_ID
|
|
166
|
+
client_secret: $GOOGLE_CLIENT_SECRET
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Environment variables (prefixed with `$`) are interpolated at runtime.
|
|
170
|
+
|
|
171
|
+
## Deployment
|
|
172
|
+
|
|
173
|
+
### Minimal VPS Deployment
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Install Skrift
|
|
177
|
+
pip install skrift
|
|
178
|
+
|
|
179
|
+
# Create project directory
|
|
180
|
+
mkdir -p /opt/skrift && cd /opt/skrift
|
|
181
|
+
|
|
182
|
+
# Configure environment
|
|
183
|
+
cat > .env << EOF
|
|
184
|
+
SECRET_KEY=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
|
|
185
|
+
DATABASE_URL=sqlite+aiosqlite:///./app.db
|
|
186
|
+
OAUTH_REDIRECT_BASE_URL=https://yourdomain.com
|
|
187
|
+
EOF
|
|
188
|
+
|
|
189
|
+
# Start server (use setup wizard or create app.yaml manually)
|
|
190
|
+
skrift
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Production with Gunicorn
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
pip install gunicorn
|
|
197
|
+
gunicorn skrift.asgi:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8080
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
See the [Deployment Guide](docs/deployment.md) for detailed instructions including Docker, Docker Compose, and Kubernetes deployments.
|
|
201
|
+
|
|
202
|
+
## Database Migrations
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Apply migrations
|
|
206
|
+
skrift-db upgrade head
|
|
207
|
+
|
|
208
|
+
# Create new migration
|
|
209
|
+
skrift-db revision --autogenerate -m "description"
|
|
210
|
+
|
|
211
|
+
# Rollback
|
|
212
|
+
skrift-db downgrade -1
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Template Resolution
|
|
216
|
+
|
|
217
|
+
Templates follow WordPress-like hierarchical resolution:
|
|
218
|
+
|
|
219
|
+
| URL Path | Templates Tried |
|
|
220
|
+
|----------|-----------------|
|
|
221
|
+
| `/about` | `page-about.html` -> `page.html` |
|
|
222
|
+
| `/services/web` | `page-services-web.html` -> `page-services.html` -> `page.html` |
|
|
223
|
+
|
|
224
|
+
## Contributing
|
|
225
|
+
|
|
226
|
+
1. Fork the repository
|
|
227
|
+
2. Create a feature branch
|
|
228
|
+
3. Make your changes
|
|
229
|
+
4. Submit a pull request
|
|
230
|
+
|
|
231
|
+
## License
|
|
232
|
+
|
|
233
|
+
MIT
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
skrift/__init__.py,sha256=eXE5PFVkJpH5XsV_ZlrTIeFPUPrmcHYAj4GpRS3R5PY,29
|
|
2
|
+
skrift/__main__.py,sha256=Fs17xxkqTjZpJn9MMC6pzkW4sOzNhV5RGLsA2ONPFww,271
|
|
3
|
+
skrift/alembic.ini,sha256=aq1sNDUgKvdON-N28lN9fncRcYtg430HE2DsuEMIDtk,1782
|
|
4
|
+
skrift/asgi.py,sha256=62fWbHMwAqUBveboWK-bwmplREvXXBlBna8-0kAcKOI,18836
|
|
5
|
+
skrift/cli.py,sha256=rrm0cSc2LhQ1FA5-ucDN1sDTwFwKnDk1DCYf746SYyo,1522
|
|
6
|
+
skrift/config.py,sha256=fwB8oGKFmSkGEHqjM5Z9dJvcztjx8WSUqyCkvQXfIBo,5640
|
|
7
|
+
skrift/admin/__init__.py,sha256=x81Cj_ilVmv6slaMl16HHyT_AgrnLxKEWkS0RPa4V9s,289
|
|
8
|
+
skrift/admin/controller.py,sha256=5ZDypvKHXLNDESsKNsdsH2E3Si5OqlpzttFl7Ot8aF0,15651
|
|
9
|
+
skrift/admin/navigation.py,sha256=VwttFoIUIJy5rONKIkJd5w4CNkUpeK22_OfLGHecN34,3382
|
|
10
|
+
skrift/alembic/env.py,sha256=vYy8dBm7zW8F5izsQdVgQyJ6yGmRbqUfGoWgefD49vQ,2609
|
|
11
|
+
skrift/alembic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
|
|
12
|
+
skrift/alembic/versions/20260120_210154_09b0364dbb7b_initial_schema.py,sha256=X6w1vbVKFurhEcblTLGO4Nd_IKkMVtb8TsptV4gpAJ4,2750
|
|
13
|
+
skrift/alembic/versions/20260122_152744_0b7c927d2591_add_roles_and_permissions.py,sha256=yCGjnMTpfSMHVYQCsPTD6wdDI8pJSUtGRESO6bz0KfU,2672
|
|
14
|
+
skrift/alembic/versions/20260122_172836_cdf734a5b847_add_sa_orm_sentinel_column.py,sha256=96TCvvQbYk3RGpZdEQ0x4bIDXxBLc3Gv7VTItTq9T54,850
|
|
15
|
+
skrift/alembic/versions/20260122_175637_a9c55348eae7_remove_page_type_column.py,sha256=XJ55LhwzgN07MAREk6w4Bx2Vu3KvMe_bDkIjgE6EfqM,1223
|
|
16
|
+
skrift/alembic/versions/20260122_200000_add_settings_table.py,sha256=aG4pxp18fwonGAWt7EoT0XaiIEmu7zltSrj8e2a8QZU,1310
|
|
17
|
+
skrift/auth/__init__.py,sha256=uHMqty3dgDSYlReVT96WhygzH6qNAWSVDWoxumzxmsA,1155
|
|
18
|
+
skrift/auth/guards.py,sha256=QePajHsGnJ4R_hlhzblr5IoAgZcY5jzeZ64bJwDL9hM,4451
|
|
19
|
+
skrift/auth/roles.py,sha256=jpqK4qaavqAhJRxhptm2x5mUb6KkwEALaml8sEH4Sug,2267
|
|
20
|
+
skrift/auth/services.py,sha256=h6GTXdN5UMRYglnaFz4asMoutVkSSAyL3_Vt56N26pA,5441
|
|
21
|
+
skrift/controllers/__init__.py,sha256=bVr0tsSGz7jBi002Lqd1AA1FQd7ZA_IagsqTKpiHiK0,147
|
|
22
|
+
skrift/controllers/auth.py,sha256=fqn-E2YCiMKJU1lh2fzUwVdx9cHfrFiBIi-cdBkjwN0,13282
|
|
23
|
+
skrift/controllers/web.py,sha256=vmoBS1u5G9gCBu65S49yqZn_WBKlmsqlcvX5tYXTKnE,2348
|
|
24
|
+
skrift/db/__init__.py,sha256=uSghyDFT2K4SFiEqUzdjCGzWpS-Oy6Sd1FUappau-v0,52
|
|
25
|
+
skrift/db/base.py,sha256=QJplFj9235kZdScASEpvyNHln6YW2hqbHwJEYZ3OSsc,173
|
|
26
|
+
skrift/db/models/__init__.py,sha256=8ivPDjVMDZPvl06ZWBjp4YmSfC4qhbq76PDJ8MWqzv4,269
|
|
27
|
+
skrift/db/models/page.py,sha256=CI5W2sWq0zbKHxfwH5TpmGdJ4zlTicckzpdZtaqjJVE,1019
|
|
28
|
+
skrift/db/models/role.py,sha256=VkwkF3XWemmFtkUpQRk6RTIBfcukrU-0PUPCeo8x834,1768
|
|
29
|
+
skrift/db/models/setting.py,sha256=Am4HTyq2LFR408R6BZb--slys1xM8YLYq9HTq_gybD0,392
|
|
30
|
+
skrift/db/models/user.py,sha256=zqZ-sYcYa0StFsSGsPcovy7EpswFo_PtrObBJ8TyHiA,1310
|
|
31
|
+
skrift/db/services/__init__.py,sha256=qAC24IPOYg6AampUWonmLeajljQRMwUw0lgXksQG6Nk,69
|
|
32
|
+
skrift/db/services/page_service.py,sha256=cXJ-urV7LjUDoVsT1P52f6wcOsur3T-pvqKkGG4xlvI,5246
|
|
33
|
+
skrift/db/services/setting_service.py,sha256=eqFxukn8QFrDHQbaBILOLjP1nr34JPIPFT_NnhmeaTY,5613
|
|
34
|
+
skrift/lib/__init__.py,sha256=PL66bS4_-90zJDMsQSnzqkkxwkO_3aLcYl9l9cDrE2Y,65
|
|
35
|
+
skrift/lib/exceptions.py,sha256=p8ceLIQCc7agCwW6-mhBDAuMAMxZDcf9TDLC6PfztU4,5803
|
|
36
|
+
skrift/lib/template.py,sha256=4_urkRfvth75yNeQ5TyGTHvkvs3vVef7TcwZx0k285k,4226
|
|
37
|
+
skrift/setup/__init__.py,sha256=3VjFPMES5y0M5cQ9R4C1xazqiEPEDqTPjX9-3rBMXnA,478
|
|
38
|
+
skrift/setup/config_writer.py,sha256=FkAfS4xa_R0tmgdp2Ac-0QlVXte2xUo1TWpxWBGBkUA,6260
|
|
39
|
+
skrift/setup/controller.py,sha256=HZs6Q2lNdvNh-JakmznMVL-1sj_6wD9axr3ESL1iIaA,29202
|
|
40
|
+
skrift/setup/middleware.py,sha256=Nai8ZG2vHldngmAhq7kWzAwKRNcP5tHKhJHa5dCh404,2941
|
|
41
|
+
skrift/setup/providers.py,sha256=XQQ7q_4axkTkspHyN66wn-zVaCzGZCf4BClEhNbEnWU,6171
|
|
42
|
+
skrift/setup/state.py,sha256=JRFh6ZSbznLtTwyPBATR75heHdG4uuk8JcCFHawTrPI,3711
|
|
43
|
+
skrift/static/css/style.css,sha256=4874DhxJD9oD81PjvJGwiQwdVjUDKWAZ2V8Gq62Igew,20755
|
|
44
|
+
skrift/templates/base.html,sha256=4bg4s4VdES0dSvhJYLgrfrN26ynqeq1-3jyKPkWWVWk,2065
|
|
45
|
+
skrift/templates/error-404.html,sha256=sJrDaF3Or3Nyki8mxo3wBxLLzgy4wkB9p9wdS8pRA6k,409
|
|
46
|
+
skrift/templates/error-500.html,sha256=MR0wJ1JKLqdmdvsoJbQnZxLkxDPE59LrlbtVPKLM8-A,401
|
|
47
|
+
skrift/templates/error.html,sha256=tg45Hj0wNc9QiZKBVVQ2WsqDiAkByXZnuehTdJPclXc,415
|
|
48
|
+
skrift/templates/index.html,sha256=lzZlnoZ2luY__OtRVa61mpQIgcopAbkKa2rS9XRfRlI,172
|
|
49
|
+
skrift/templates/page.html,sha256=kY1j7TH6dFnvWnYwBEGCIEvardjLhnFMnM3NbAnKszQ,759
|
|
50
|
+
skrift/templates/admin/admin.html,sha256=8sErpGKedl7Hf_CMeu53bUEHptH1FqdBX9LT3z-1HcU,454
|
|
51
|
+
skrift/templates/admin/base.html,sha256=JX1MPw9XTY8jCT2M6iHUwEj8NPNOdZPca2cDUEs9kfQ,659
|
|
52
|
+
skrift/templates/admin/pages/edit.html,sha256=s-uZ4BYG7BdnWYTBSS1mr5aFL8XfT8h-KNiSIraWmHw,1322
|
|
53
|
+
skrift/templates/admin/pages/list.html,sha256=LYh1vEwSHkyXihjcy5PIo33iA7UeIxprw4Gsn1WZMm4,2185
|
|
54
|
+
skrift/templates/admin/settings/site.html,sha256=xHZCZGj9XqyLKCe2eoBlpI3oFIx5VoG_5FP-VAF2mz4,1516
|
|
55
|
+
skrift/templates/admin/users/list.html,sha256=9GWql1la5Srm-OOgooHR9Eouk7ZL66K_FXY6HAAB5lA,1732
|
|
56
|
+
skrift/templates/admin/users/roles.html,sha256=pos-ZM-gXYCN_D8DZpzwEBEm_WvmOKMMPz-3xJqs7nY,1473
|
|
57
|
+
skrift/templates/auth/login.html,sha256=hafLcmmRgiLhFjTDzGvEla31JoKl6dfw7sLdzQyzGmA,6195
|
|
58
|
+
skrift/templates/setup/admin.html,sha256=BSIztZT2iqxVSW23Tfg7ZM51SdGrKL422CR05DPjNic,804
|
|
59
|
+
skrift/templates/setup/auth.html,sha256=0DVL0kU6DlJ2pWe4zwc3DsIVfBAdqpMJxPYvS4zm4OM,4953
|
|
60
|
+
skrift/templates/setup/base.html,sha256=LTXqbnHMvx1wDsxFvo4BSieBPD9pcLMj6NM4ZGzErFM,10372
|
|
61
|
+
skrift/templates/setup/complete.html,sha256=oyT-rYPl0uuyOjPXgNeLr8YoptW9QjHTlScZSViDvTk,630
|
|
62
|
+
skrift/templates/setup/database.html,sha256=gU4-315-QraHa2Eq4Fh3b55QpOM2CkJzh27_Yz13frA,5495
|
|
63
|
+
skrift/templates/setup/restart.html,sha256=GHg31F_e2uLFhWUzJoalk0Y0oYLqsFWyZXWKX3mblbY,1355
|
|
64
|
+
skrift/templates/setup/site.html,sha256=PSOH-q1-ZBl47iSW9-Ad6lEfJn_fzdGD3Pk4vb3xgK4,1680
|
|
65
|
+
skrift-0.1.0a1.dist-info/METADATA,sha256=lrfb40qZ-KZ5o5U7j1A9ablJG4cbqXexdcOTkMMuD54,6365
|
|
66
|
+
skrift-0.1.0a1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
67
|
+
skrift-0.1.0a1.dist-info/entry_points.txt,sha256=4AIrmbeWKOdZnvTsKT3US6N3X9rrgk9jEDsYOPEZ1AE,74
|
|
68
|
+
skrift-0.1.0a1.dist-info/RECORD,,
|