plain 0.21.0__py3-none-any.whl → 0.21.2__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.
plain/README.md CHANGED
@@ -1,33 +1 @@
1
1
  # Plain
2
-
3
- Plain is a web framework for building products with Python.
4
-
5
- With the core `plain` package you can build an app that:
6
-
7
- - Matches [URL patterns](./urls) to Python [views](./views)
8
- - Handles [HTTP requests and responses](./http)
9
- - Renders [HTML templates](./templates) with Jinja
10
- - Processes user input via [forms](./forms)
11
- - Has a [CLI interface](./cli)
12
- - Serves static [assets](./assets) (CSS, JS, images)
13
- - Can be modified with [middleware](./middleware)
14
- - Integrates first-party and third-party [packages](./packages)
15
- - Has a [preflight check system](./preflight)
16
-
17
- With the official Plain ecosystem packages you can:
18
-
19
- - Integrate a full-featured [database ORM](https://plainframework.com/docs/plain-models/)
20
- - Use a built-in [user authentication](https://plainframework.com/docs/plain-auth/) system
21
- - [Lint and format code](https://plainframework.com/docs/plain-code/)
22
- - Run a [database-backed cache](https://plainframework.com/docs/plain-cache/)
23
- - [Send emails](https://plainframework.com/docs/plain-mail/)
24
- - Streamline [local development](https://plainframework.com/docs/plain-dev/)
25
- - Manage [feature flags](https://plainframework.com/docs/plain-flags/)
26
- - Integrate [HTMX](https://plainframework.com/docs/plain-htmx/)
27
- - Style with [Tailwind CSS](https://plainframework.com/docs/plain-tailwind/)
28
- - Add [OAuth login](https://plainframework.com/docs/plain-oauth/) and API access
29
- - Run tests with [pytest](https://plainframework.com/docs/plain-test/)
30
- - Run a [background job worker](https://plainframework.com/docs/plain-worker/)
31
- - Build [staff tooling and admin dashboards](https://plainframework.com/docs/plain-staff/)
32
-
33
- Learn more at [plainframework.com](https://plainframework.com).
plain/assets/compile.py CHANGED
@@ -12,34 +12,34 @@ FINGERPRINT_LENGTH = 7
12
12
 
13
13
  SKIP_COMPRESS_EXTENSIONS = (
14
14
  # Images
15
- "jpg",
16
- "jpeg",
17
- "png",
18
- "gif",
19
- "webp",
15
+ ".jpg",
16
+ ".jpeg",
17
+ ".png",
18
+ ".gif",
19
+ ".webp",
20
20
  # Compressed files
21
- "zip",
22
- "gz",
23
- "tgz",
24
- "bz2",
25
- "tbz",
26
- "xz",
27
- "br",
21
+ ".zip",
22
+ ".gz",
23
+ ".tgz",
24
+ ".bz2",
25
+ ".tbz",
26
+ ".xz",
27
+ ".br",
28
28
  # Fonts
29
- "woff",
30
- "woff2",
29
+ ".woff",
30
+ ".woff2",
31
31
  # Video
32
- "3gp",
33
- "3gpp",
34
- "asf",
35
- "avi",
36
- "m4v",
37
- "mov",
38
- "mp4",
39
- "mpeg",
40
- "mpg",
41
- "webm",
42
- "wmv",
32
+ ".3gp",
33
+ ".3gpp",
34
+ ".asf",
35
+ ".avi",
36
+ ".m4v",
37
+ ".mov",
38
+ ".mp4",
39
+ ".mpeg",
40
+ ".mpg",
41
+ ".webm",
42
+ ".wmv",
43
43
  )
44
44
 
45
45
 
plain/views/objects.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from plain.exceptions import ImproperlyConfigured, ObjectDoesNotExist
2
- from plain.http import Http404, Response, ResponseRedirect
2
+ from plain.forms import Form
3
+ from plain.http import Http404, Response
3
4
 
4
5
  from .forms import FormView
5
6
  from .templates import TemplateView
@@ -154,30 +155,41 @@ class UpdateView(ObjectTemplateViewMixin, FormView):
154
155
  return kwargs
155
156
 
156
157
 
157
- class DeleteView(ObjectTemplateViewMixin, TemplateView):
158
+ class DeleteView(ObjectTemplateViewMixin, FormView):
158
159
  """
159
160
  View for deleting an object retrieved with self.get_object(), with a
160
161
  response rendered by a template.
161
162
  """
162
163
 
164
+ class EmptyDeleteForm(Form):
165
+ def __init__(self, instance, *args, **kwargs):
166
+ self.instance = instance
167
+ super().__init__(*args, **kwargs)
168
+
169
+ def save(self):
170
+ self.instance.delete()
171
+
172
+ form_class = EmptyDeleteForm
163
173
  template_name_suffix = "_confirm_delete"
164
174
 
175
+ def post(self) -> Response:
176
+ """
177
+ Handle POST requests: instantiate a form instance with the passed
178
+ POST variables and then check if it's valid.
179
+ """
180
+ self.load_object()
181
+ return super().post()
182
+
165
183
  def get_form_kwargs(self):
166
184
  """Return the keyword arguments for instantiating the form."""
167
185
  kwargs = super().get_form_kwargs()
168
186
  kwargs.update({"instance": self.object})
169
187
  return kwargs
170
188
 
171
- def get_success_url(self):
172
- if self.success_url:
173
- return self.success_url.format(**self.object.__dict__)
174
- else:
175
- raise ImproperlyConfigured("No URL to redirect to. Provide a success_url.")
176
-
177
- def post(self):
178
- self.load_object()
179
- self.object.delete()
180
- return ResponseRedirect(self.get_success_url())
189
+ def form_valid(self, form):
190
+ """If the form is valid, save the associated model."""
191
+ form.save()
192
+ return super().form_valid(form)
181
193
 
182
194
 
183
195
  class ListView(TemplateView):
@@ -0,0 +1,12 @@
1
+ Metadata-Version: 2.4
2
+ Name: plain
3
+ Version: 0.21.2
4
+ Summary: A web framework for building products with Python.
5
+ Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
+ License-File: LICENSE
7
+ Requires-Python: >=3.11
8
+ Requires-Dist: click>=8.0.0
9
+ Requires-Dist: jinja2>=3.1.2
10
+ Description-Content-Type: text/markdown
11
+
12
+ # Plain
@@ -1,4 +1,4 @@
1
- plain/README.md,sha256=mFsLBpqiHvuznV98eewupvo1JoQeQG0q87wNlXit21A,1695
1
+ plain/README.md,sha256=nW3Ioj3IxPb6aoCGaFMN2n7Cd7LMx0s8Lph6pMkKnh4,8
2
2
  plain/__main__.py,sha256=BiYbF-txGNbeRqp_CHQ9EZ_bCbbKq2iw51Z8RRUgIBY,105
3
3
  plain/debug.py,sha256=abPkJY4aSbBYGEYSZST_ZY3ohXPGDdz9uWQBYRqfd3M,730
4
4
  plain/exceptions.py,sha256=pPAO8cIzNoqa2YrxG0d31C4P2V9SZ2OprHcjY9-qhIU,6332
@@ -9,7 +9,7 @@ plain/validators.py,sha256=2tZh2Bvp955gejltwVtFGwfqw5-9VAOhKqos3Me4paY,19923
9
9
  plain/wsgi.py,sha256=R6k5FiAElvGDApEbMPTT0MPqSD7n2e2Az5chQqJZU0I,236
10
10
  plain/assets/README.md,sha256=048BzyQ2-BcsRiv6NiuLHHijOw96RK-e6lJ_Eq7g2pc,2857
11
11
  plain/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- plain/assets/compile.py,sha256=_FSWTg2JBFKLnUoOjpioV4EtiH8DH7F_3zYhM6zI4JU,3303
12
+ plain/assets/compile.py,sha256=m8rSpdnC5Ot8zRfn9lniFl7o0lv8-P1p2EmdWB2i3Iw,3328
13
13
  plain/assets/finders.py,sha256=wMa0GUi4S5SUXKcWSqEesMgU4NbXXDrC4SMJwDakwNc,1215
14
14
  plain/assets/fingerprints.py,sha256=1NKAnnXVlncY5iimXztr0NL3RIjBKsNlZRIe6nmItJc,931
15
15
  plain/assets/urls.py,sha256=ZTIoM1Zq35JaXZ3wFhXhfGa7VoITDNlH9i5RS0R5xow,933
@@ -135,11 +135,11 @@ plain/views/csrf.py,sha256=7q6l5xzLWhRnMY64aNj0hR6G-3pxI2yhRwG6k_5j00E,144
135
135
  plain/views/errors.py,sha256=Y4oGX4Z6D2COKcDEfINvXE1acE8Ad15KwNNWPs5BCfc,967
136
136
  plain/views/exceptions.py,sha256=b4euI49ZUKS9O8AGAcFfiDpstzkRAuuj_uYQXzWNHME,138
137
137
  plain/views/forms.py,sha256=RhlaUcZCkeqokY_fvv-NOS-kgZAG4XhDLOPbf9K_Zlc,2691
138
- plain/views/objects.py,sha256=LfYEbBWLTmwvEcJlcsWlD0DO29QWIYRt2h8quvq46cE,7957
138
+ plain/views/objects.py,sha256=g5Lzno0Zsv0K449UpcCtxwCoO7WMRAWqKlxxV2V0_qg,8263
139
139
  plain/views/redirect.py,sha256=KLnlktzK6ZNMTlaEiZpMKQMEP5zeTgGLJ9BIkIJfwBo,1733
140
140
  plain/views/templates.py,sha256=nF9CcdhhjAyp3LB0RrSYnBaHpHzMfPSw719RCdcXk7o,2007
141
- plain-0.21.0.dist-info/METADATA,sha256=LtYn44-bRq4_6avgmAO4ZCrSVHbEKo4upBXusnOOLr8,2518
142
- plain-0.21.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
143
- plain-0.21.0.dist-info/entry_points.txt,sha256=DHHprvufgd7xypiBiqMANYRnpJ9xPPYhYbnPGwOkWqE,40
144
- plain-0.21.0.dist-info/licenses/LICENSE,sha256=m0D5O7QoH9l5Vz_rrX_9r-C8d9UNr_ciK6Qwac7o6yo,3175
145
- plain-0.21.0.dist-info/RECORD,,
141
+ plain-0.21.2.dist-info/METADATA,sha256=_cWDPqAJsAfMWAmQpgZ9kvzI-Cpg6BZZDF6b6Wuh2Uo,319
142
+ plain-0.21.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
143
+ plain-0.21.2.dist-info/entry_points.txt,sha256=DHHprvufgd7xypiBiqMANYRnpJ9xPPYhYbnPGwOkWqE,40
144
+ plain-0.21.2.dist-info/licenses/LICENSE,sha256=m0D5O7QoH9l5Vz_rrX_9r-C8d9UNr_ciK6Qwac7o6yo,3175
145
+ plain-0.21.2.dist-info/RECORD,,
@@ -1,46 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: plain
3
- Version: 0.21.0
4
- Summary: A web framework for building products with Python.
5
- Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
- License-File: LICENSE
7
- Requires-Python: >=3.11
8
- Requires-Dist: click>=8.0.0
9
- Requires-Dist: jinja2>=3.1.2
10
- Description-Content-Type: text/markdown
11
-
12
- <!-- This file is compiled from plain/plain/README.md. Do not edit this file directly. -->
13
-
14
- # Plain
15
-
16
- Plain is a web framework for building products with Python.
17
-
18
- With the core `plain` package you can build an app that:
19
-
20
- - Matches [URL patterns](https://plainframework.com/docs/plain/plain/urls) to Python [views](https://plainframework.com/docs/plain/plain/views)
21
- - Handles [HTTP requests and responses](https://plainframework.com/docs/plain/plain/http)
22
- - Renders [HTML templates](https://plainframework.com/docs/plain/plain/templates) with Jinja
23
- - Processes user input via [forms](https://plainframework.com/docs/plain/plain/forms)
24
- - Has a [CLI interface](https://plainframework.com/docs/plain/plain/cli)
25
- - Serves static [assets](https://plainframework.com/docs/plain/plain/assets) (CSS, JS, images)
26
- - Can be modified with [middleware](https://plainframework.com/docs/plain/plain/middleware)
27
- - Integrates first-party and third-party [packages](https://plainframework.com/docs/plain/plain/packages)
28
- - Has a [preflight check system](https://plainframework.com/docs/plain/plain/preflight)
29
-
30
- With the official Plain ecosystem packages you can:
31
-
32
- - Integrate a full-featured [database ORM](https://plainframework.com/docs/plain-models/)
33
- - Use a built-in [user authentication](https://plainframework.com/docs/plain-auth/) system
34
- - [Lint and format code](https://plainframework.com/docs/plain-code/)
35
- - Run a [database-backed cache](https://plainframework.com/docs/plain-cache/)
36
- - [Send emails](https://plainframework.com/docs/plain-mail/)
37
- - Streamline [local development](https://plainframework.com/docs/plain-dev/)
38
- - Manage [feature flags](https://plainframework.com/docs/plain-flags/)
39
- - Integrate [HTMX](https://plainframework.com/docs/plain-htmx/)
40
- - Style with [Tailwind CSS](https://plainframework.com/docs/plain-tailwind/)
41
- - Add [OAuth login](https://plainframework.com/docs/plain-oauth/) and API access
42
- - Run tests with [pytest](https://plainframework.com/docs/plain-test/)
43
- - Run a [background job worker](https://plainframework.com/docs/plain-worker/)
44
- - Build [staff tooling and admin dashboards](https://plainframework.com/docs/plain-staff/)
45
-
46
- Learn more at [plainframework.com](https://plainframework.com).
File without changes