plain 0.21.4__py3-none-any.whl → 0.22.0__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.
Files changed (189) hide show
  1. plain/.pytype/.gitignore +2 -0
  2. plain/.pytype/.ninja_log +17 -0
  3. plain/.pytype/build.ninja +318 -0
  4. plain/.pytype/imports/..packages.__init__.imports +8 -0
  5. plain/.pytype/imports/..packages.__init__.imports-1 +4 -0
  6. plain/.pytype/imports/__main__.imports +0 -0
  7. plain/.pytype/imports/assets.__init__.imports +0 -0
  8. plain/.pytype/imports/assets.compile.imports +10 -0
  9. plain/.pytype/imports/assets.finders.imports +7 -0
  10. plain/.pytype/imports/assets.fingerprints.imports +7 -0
  11. plain/.pytype/imports/assets.urls.imports +51 -0
  12. plain/.pytype/imports/assets.urls.imports-1 +35 -0
  13. plain/.pytype/imports/assets.views.imports +51 -0
  14. plain/.pytype/imports/assets.views.imports-1 +35 -0
  15. plain/.pytype/imports/cli.__init__.imports +16 -0
  16. plain/.pytype/imports/cli.cli.imports +15 -0
  17. plain/.pytype/imports/cli.formatting.imports +2 -0
  18. plain/.pytype/imports/cli.packages.imports +8 -0
  19. plain/.pytype/imports/cli.print.imports +1 -0
  20. plain/.pytype/imports/cli.startup.imports +7 -0
  21. plain/.pytype/imports/debug.imports +2 -0
  22. plain/.pytype/imports/default.pyi +3 -0
  23. plain/.pytype/imports/forms.__init__.imports +23 -0
  24. plain/.pytype/imports/forms.boundfield.imports +0 -0
  25. plain/.pytype/imports/forms.exceptions.imports +1 -0
  26. plain/.pytype/imports/forms.fields.imports +13 -0
  27. plain/.pytype/imports/forms.forms.imports +15 -0
  28. plain/.pytype/imports/http.__init__.imports +20 -0
  29. plain/.pytype/imports/http.__init__.imports-1 +17 -0
  30. plain/.pytype/imports/http.cookie.imports +0 -0
  31. plain/.pytype/imports/http.multipartparser.imports +14 -0
  32. plain/.pytype/imports/http.multipartparser.imports-1 +17 -0
  33. plain/.pytype/imports/http.request.imports +14 -0
  34. plain/.pytype/imports/http.request.imports-1 +25 -0
  35. plain/.pytype/imports/http.response.imports +16 -0
  36. plain/.pytype/imports/internal.__init__.imports +0 -0
  37. plain/.pytype/imports/internal.files.__init__.imports +1 -0
  38. plain/.pytype/imports/internal.files.base.imports +2 -0
  39. plain/.pytype/imports/internal.files.locks.imports +0 -0
  40. plain/.pytype/imports/internal.files.move.imports +1 -0
  41. plain/.pytype/imports/internal.files.temp.imports +1 -0
  42. plain/.pytype/imports/internal.files.uploadedfile.imports +10 -0
  43. plain/.pytype/imports/internal.files.uploadhandler.imports +12 -0
  44. plain/.pytype/imports/internal.files.utils.imports +1 -0
  45. plain/.pytype/imports/internal.handlers.__init__.imports +0 -0
  46. plain/.pytype/imports/internal.handlers.base.imports +53 -0
  47. plain/.pytype/imports/internal.handlers.exception.imports +10 -0
  48. plain/.pytype/imports/internal.handlers.wsgi.imports +29 -0
  49. plain/.pytype/imports/internal.middleware.__init__.imports +0 -0
  50. plain/.pytype/imports/internal.middleware.headers.imports +7 -0
  51. plain/.pytype/imports/internal.middleware.https.imports +8 -0
  52. plain/.pytype/imports/internal.middleware.slash.imports +51 -0
  53. plain/.pytype/imports/json.imports +12 -0
  54. plain/.pytype/imports/json.imports-1 +6 -0
  55. plain/.pytype/imports/json_encoding.imports +3 -0
  56. plain/.pytype/imports/logs.configure.imports +0 -0
  57. plain/.pytype/imports/logs.loggers.imports +0 -0
  58. plain/.pytype/imports/logs.utils.imports +0 -0
  59. plain/.pytype/imports/middleware.imports +13 -0
  60. plain/.pytype/imports/packages.__init__.imports +8 -0
  61. plain/.pytype/imports/packages.__init__.imports-1 +4 -0
  62. plain/.pytype/imports/packages.config.imports +0 -0
  63. plain/.pytype/imports/packages.registry.imports +7 -0
  64. plain/.pytype/imports/packages.registry.imports-1 +3 -0
  65. plain/.pytype/imports/paginator.imports +2 -0
  66. plain/.pytype/imports/preflight.__init__.imports +72 -0
  67. plain/.pytype/imports/preflight.__init__.imports-1 +53 -0
  68. plain/.pytype/imports/preflight.files.imports +8 -0
  69. plain/.pytype/imports/preflight.files.imports-1 +48 -0
  70. plain/.pytype/imports/preflight.messages.imports +7 -0
  71. plain/.pytype/imports/preflight.registry.imports +2 -0
  72. plain/.pytype/imports/preflight.security.imports +11 -0
  73. plain/.pytype/imports/preflight.urls.imports +51 -0
  74. plain/.pytype/imports/preflight.urls.imports-1 +48 -0
  75. plain/.pytype/imports/runtime.global_settings.imports +7 -0
  76. plain/.pytype/imports/runtime.user_settings.imports +7 -0
  77. plain/.pytype/imports/runtime.user_settings.imports-1 +3 -0
  78. plain/.pytype/imports/signals.dispatch.__init__.imports +10 -0
  79. plain/.pytype/imports/signals.dispatch.dispatcher.imports +8 -0
  80. plain/.pytype/imports/templates.__init__.imports +51 -0
  81. plain/.pytype/imports/templates.__init__.imports-1 +35 -0
  82. plain/.pytype/imports/templates.core.imports +51 -0
  83. plain/.pytype/imports/templates.core.imports-1 +35 -0
  84. plain/.pytype/imports/templates.jinja.__init__.imports +51 -0
  85. plain/.pytype/imports/templates.jinja.__init__.imports-1 +35 -0
  86. plain/.pytype/imports/templates.jinja.environments.imports +51 -0
  87. plain/.pytype/imports/templates.jinja.environments.imports-1 +35 -0
  88. plain/.pytype/imports/templates.jinja.extensions.imports +2 -0
  89. plain/.pytype/imports/templates.jinja.filters.imports +7 -0
  90. plain/.pytype/imports/templates.jinja.globals.imports +51 -0
  91. plain/.pytype/imports/templates.jinja.globals.imports-1 +35 -0
  92. plain/.pytype/imports/test.__init__.imports +0 -0
  93. plain/.pytype/imports/test.client.imports +58 -0
  94. plain/.pytype/imports/urls.base.imports +51 -0
  95. plain/.pytype/imports/urls.base.imports-1 +35 -0
  96. plain/.pytype/imports/urls.conf.imports +51 -0
  97. plain/.pytype/imports/urls.conf.imports-1 +35 -0
  98. plain/.pytype/imports/urls.converters.imports +0 -0
  99. plain/.pytype/imports/urls.exceptions.imports +1 -0
  100. plain/.pytype/imports/urls.resolvers.imports +51 -0
  101. plain/.pytype/imports/urls.resolvers.imports-1 +35 -0
  102. plain/.pytype/imports/utils.__init__.imports +0 -0
  103. plain/.pytype/imports/utils._os.imports +1 -0
  104. plain/.pytype/imports/utils.cache.imports +28 -0
  105. plain/.pytype/imports/utils.connection.imports +8 -0
  106. plain/.pytype/imports/utils.datastructures.imports +0 -0
  107. plain/.pytype/imports/utils.dateformat.imports +4 -0
  108. plain/.pytype/imports/utils.dateparse.imports +2 -0
  109. plain/.pytype/imports/utils.dates.imports +0 -0
  110. plain/.pytype/imports/utils.deconstruct.imports +0 -0
  111. plain/.pytype/imports/utils.decorators.imports +0 -0
  112. plain/.pytype/imports/utils.deprecation.imports +0 -0
  113. plain/.pytype/imports/utils.duration.imports +0 -0
  114. plain/.pytype/imports/utils.email.imports +0 -0
  115. plain/.pytype/imports/utils.encoding.imports +1 -0
  116. plain/.pytype/imports/utils.hashable.imports +1 -0
  117. plain/.pytype/imports/utils.html.imports +10 -0
  118. plain/.pytype/imports/utils.inspect.imports +0 -0
  119. plain/.pytype/imports/utils.ipv6.imports +1 -0
  120. plain/.pytype/imports/utils.itercompat.imports +0 -0
  121. plain/.pytype/imports/utils.module_loading.imports +0 -0
  122. plain/.pytype/imports/utils.regex_helper.imports +1 -0
  123. plain/.pytype/imports/utils.safestring.imports +1 -0
  124. plain/.pytype/imports/utils.text.imports +3 -0
  125. plain/.pytype/imports/utils.timesince.imports +6 -0
  126. plain/.pytype/imports/utils.timezone.imports +8 -0
  127. plain/.pytype/imports/utils.tree.imports +2 -0
  128. plain/.pytype/imports/validators.imports +7 -0
  129. plain/.pytype/imports/views.__init__.imports +72 -0
  130. plain/.pytype/imports/views.__init__.imports-1 +53 -0
  131. plain/.pytype/imports/views.base.imports +3 -0
  132. plain/.pytype/imports/views.csrf.imports +1 -0
  133. plain/.pytype/imports/views.errors.imports +51 -0
  134. plain/.pytype/imports/views.exceptions.imports +0 -0
  135. plain/.pytype/imports/views.forms.imports +51 -0
  136. plain/.pytype/imports/views.forms.imports-1 +35 -0
  137. plain/.pytype/imports/views.imports +51 -0
  138. plain/.pytype/imports/views.objects.imports +51 -0
  139. plain/.pytype/imports/views.objects.imports-1 +35 -0
  140. plain/.pytype/imports/views.redirect.imports +51 -0
  141. plain/.pytype/imports/views.redirect.imports-1 +35 -0
  142. plain/.pytype/imports/views.templates.imports +51 -0
  143. plain/.pytype/imports/views.templates.imports-1 +35 -0
  144. plain/.pytype/imports/wsgi.imports +8 -0
  145. plain/.pytype/pyi/json.pyi +15 -0
  146. plain/.pytype/pyi/json.pyi-1 +15 -0
  147. plain/.pytype/pyi/logs/configure.pyi +8 -0
  148. plain/.pytype/pyi/logs/loggers.pyi +20 -0
  149. plain/.pytype/pyi/logs/utils.pyi +7 -0
  150. plain/.pytype/pyi/packages/__init__.pyi +8 -0
  151. plain/.pytype/pyi/packages/__init__.pyi-1 +8 -0
  152. plain/.pytype/pyi/packages/config.pyi +35 -0
  153. plain/.pytype/pyi/packages/registry.pyi +49 -0
  154. plain/.pytype/pyi/packages/registry.pyi-1 +49 -0
  155. plain/.pytype/pyi/runtime/user_settings.pyi +64 -0
  156. plain/.pytype/pyi/runtime/user_settings.pyi-1 +64 -0
  157. plain/.pytype/pyi/utils/duration.pyi +9 -0
  158. plain/.pytype/pyi/utils/hashable.pyi +9 -0
  159. plain/.pytype/pyi/utils/itercompat.pyi +3 -0
  160. plain/.pytype/pyi/utils/module_loading.pyi +14 -0
  161. plain/assets/urls.py +9 -8
  162. plain/assets/views.py +4 -4
  163. plain/cli/cli.py +90 -7
  164. plain/cli/packages.py +25 -8
  165. plain/http/request.py +1 -2
  166. plain/internal/handlers/base.py +9 -23
  167. plain/internal/handlers/exception.py +2 -0
  168. plain/internal/middleware/slash.py +15 -7
  169. plain/packages/registry.py +3 -77
  170. plain/preflight/urls.py +2 -2
  171. plain/runtime/global_settings.py +1 -1
  172. plain/templates/jinja/globals.py +2 -8
  173. plain/test/client.py +10 -10
  174. plain/urls/__init__.py +8 -19
  175. plain/urls/patterns.py +271 -0
  176. plain/urls/resolvers.py +48 -360
  177. plain/urls/routers.py +90 -0
  178. plain/urls/{base.py → utils.py} +5 -61
  179. plain/utils/functional.py +1 -2
  180. plain/views/redirect.py +1 -1
  181. plain/views/templates.py +1 -1
  182. {plain-0.21.4.dist-info → plain-0.22.0.dist-info}/METADATA +1 -1
  183. plain-0.22.0.dist-info/RECORD +305 -0
  184. plain/urls/conf.py +0 -95
  185. plain/utils/deprecation.py +0 -6
  186. plain-0.21.4.dist-info/RECORD +0 -145
  187. {plain-0.21.4.dist-info → plain-0.22.0.dist-info}/WHEEL +0 -0
  188. {plain-0.21.4.dist-info → plain-0.22.0.dist-info}/entry_points.txt +0 -0
  189. {plain-0.21.4.dist-info → plain-0.22.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,37 +1,18 @@
1
- from threading import local
2
-
3
1
  from plain.utils.functional import lazy
4
2
 
5
- from .exceptions import NoReverseMatch, Resolver404
6
- from .resolvers import _get_cached_resolver, get_ns_resolver, get_resolver
7
-
8
- # Overridden URLconfs for each thread are stored here.
9
- _urlconfs = local()
10
-
11
-
12
- def resolve(path, urlconf=None):
13
- if urlconf is None:
14
- urlconf = get_urlconf()
15
- return get_resolver(urlconf).resolve(path)
3
+ from .exceptions import NoReverseMatch
4
+ from .resolvers import get_ns_resolver, get_resolver
16
5
 
17
6
 
18
- def reverse(viewname, urlconf=None, args=None, kwargs=None, using_namespace=None):
19
- if urlconf is None:
20
- urlconf = get_urlconf()
21
- resolver = get_resolver(urlconf)
22
- args = args or []
23
- kwargs = kwargs or {}
7
+ def reverse(viewname, *args, **kwargs):
8
+ resolver = get_resolver()
24
9
 
25
10
  if not isinstance(viewname, str):
26
11
  view = viewname
27
12
  else:
28
13
  *path, view = viewname.split(":")
29
14
 
30
- if using_namespace:
31
- current_path = using_namespace.split(":")
32
- current_path.reverse()
33
- else:
34
- current_path = None
15
+ current_path = None
35
16
 
36
17
  resolved_path = []
37
18
  ns_pattern = ""
@@ -79,40 +60,3 @@ def reverse(viewname, urlconf=None, args=None, kwargs=None, using_namespace=None
79
60
 
80
61
 
81
62
  reverse_lazy = lazy(reverse, str)
82
-
83
-
84
- def clear_url_caches():
85
- _get_cached_resolver.cache_clear()
86
- get_ns_resolver.cache_clear()
87
-
88
-
89
- def set_urlconf(urlconf_name):
90
- """
91
- Set the URLconf for the current thread (overriding the default one in
92
- settings). If urlconf_name is None, revert back to the default.
93
- """
94
- if urlconf_name:
95
- _urlconfs.value = urlconf_name
96
- else:
97
- if hasattr(_urlconfs, "value"):
98
- del _urlconfs.value
99
-
100
-
101
- def get_urlconf(default=None):
102
- """
103
- Return the root URLconf to use for the current thread if it has been
104
- changed from the default one.
105
- """
106
- return getattr(_urlconfs, "value", default)
107
-
108
-
109
- def is_valid_path(path, urlconf=None):
110
- """
111
- Return the ResolverMatch if the given path resolves against the default URL
112
- resolver, False otherwise. This is a convenience method to make working
113
- with "is this a match?" cases easier, avoiding try...except blocks.
114
- """
115
- try:
116
- return resolve(path, urlconf)
117
- except Resolver404:
118
- return False
plain/utils/functional.py CHANGED
@@ -18,8 +18,7 @@ class cached_property:
18
18
  @staticmethod
19
19
  def func(instance):
20
20
  raise TypeError(
21
- "Cannot use cached_property instance without calling "
22
- "__set_name__() on it."
21
+ "Cannot use cached_property instance without calling __set_name__() on it."
23
22
  )
24
23
 
25
24
  def __init__(self, func):
plain/views/redirect.py CHANGED
@@ -29,7 +29,7 @@ class RedirectView(View):
29
29
  if self.url:
30
30
  url = self.url % self.url_kwargs
31
31
  elif self.pattern_name:
32
- url = reverse(self.pattern_name, args=self.url_args, kwargs=self.url_kwargs)
32
+ url = reverse(self.pattern_name, *self.url_args, **self.url_kwargs)
33
33
  else:
34
34
  return None
35
35
 
plain/views/templates.py CHANGED
@@ -22,7 +22,7 @@ csrf_token_lazy = lazy(get_token, str)
22
22
 
23
23
  class TemplateView(View):
24
24
  """
25
- Render a template. Pass keyword arguments from the URLconf to the context.
25
+ Render a template.
26
26
  """
27
27
 
28
28
  template_name: str | None = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain
3
- Version: 0.21.4
3
+ Version: 0.22.0
4
4
  Summary: A web framework for building products with Python.
5
5
  Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
6
  License-File: LICENSE
@@ -0,0 +1,305 @@
1
+ plain/README.md,sha256=nW3Ioj3IxPb6aoCGaFMN2n7Cd7LMx0s8Lph6pMkKnh4,8
2
+ plain/__main__.py,sha256=BiYbF-txGNbeRqp_CHQ9EZ_bCbbKq2iw51Z8RRUgIBY,105
3
+ plain/debug.py,sha256=abPkJY4aSbBYGEYSZST_ZY3ohXPGDdz9uWQBYRqfd3M,730
4
+ plain/exceptions.py,sha256=pPAO8cIzNoqa2YrxG0d31C4P2V9SZ2OprHcjY9-qhIU,6332
5
+ plain/json.py,sha256=McJdsbMT1sYwkGRG--f2NSZz0hVXPMix9x3nKaaak2o,1262
6
+ plain/paginator.py,sha256=zCHCmCG8FEet6C28w2rUko9yiGFnOGCQxRbM_ssa9XY,6037
7
+ plain/signing.py,sha256=sf7g1Mp-FzdjFAEoLxHyu2YvbUl5w4FOtTVDAfq6TO0,8733
8
+ plain/validators.py,sha256=2tZh2Bvp955gejltwVtFGwfqw5-9VAOhKqos3Me4paY,19923
9
+ plain/wsgi.py,sha256=R6k5FiAElvGDApEbMPTT0MPqSD7n2e2Az5chQqJZU0I,236
10
+ plain/.pytype/.gitignore,sha256=6ThPJZJMBEzaq2Etn8cC6zfVPzsfq1ltXwamsEW5vAc,35
11
+ plain/.pytype/.ninja_log,sha256=4HC3-L-HWjz4U3n11u0QMHTzOuUK6mnzejpW4NtW_sk,2188
12
+ plain/.pytype/build.ninja,sha256=YK74Zm4f5i3GowF0qrf7DyWWvW975QxfHVxfqhKn11w,92425
13
+ plain/.pytype/imports/..packages.__init__.imports,sha256=AU-EejGw6VTWVtGDsOYXQ6W1-D23xOjPaJFvPn_gCqQ,880
14
+ plain/.pytype/imports/..packages.__init__.imports-1,sha256=aa40lmjgvaQToZNexjdF1zUiGVM2MkypLwEY9f8sgbA,427
15
+ plain/.pytype/imports/__main__.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ plain/.pytype/imports/assets.__init__.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ plain/.pytype/imports/assets.compile.imports,sha256=IgzrdYcHEvEDEQis5S7baMl0AHWW242zLFmbdTCgllc,1090
18
+ plain/.pytype/imports/assets.finders.imports,sha256=oWGfVWTwxV7Yx4B7QKyZuoWMl5L-d2Inj1z5NzEpXQg,755
19
+ plain/.pytype/imports/assets.fingerprints.imports,sha256=oWGfVWTwxV7Yx4B7QKyZuoWMl5L-d2Inj1z5NzEpXQg,755
20
+ plain/.pytype/imports/assets.urls.imports,sha256=TQkzO7mCyQg4qeKGyetI5D-862lxnoBGDhXMCZRVBc8,5423
21
+ plain/.pytype/imports/assets.urls.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
22
+ plain/.pytype/imports/assets.views.imports,sha256=qWtOV090TJWqDEkYG4wTbGaAGAGc_FKwnAqhU0cNMbk,5421
23
+ plain/.pytype/imports/assets.views.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
24
+ plain/.pytype/imports/cli.__init__.imports,sha256=BiTqBNBvjG2QCtXXI1nN1f3yyPoQCNcy7CHw2w8A_SM,1664
25
+ plain/.pytype/imports/cli.cli.imports,sha256=ZEmBjznYDIkN00NydLF3UgbS3Y-1vzjgrHkM8b0YDJA,1575
26
+ plain/.pytype/imports/cli.formatting.imports,sha256=29pesgjUAm9CjTNLEu3dZCAbXoasaoLzufFXQCuboUM,202
27
+ plain/.pytype/imports/cli.packages.imports,sha256=d5qxuCydfSlD4E21sGuY0aE94lbOJeku2nK6X99HeHo,855
28
+ plain/.pytype/imports/cli.print.imports,sha256=ufj6EPZuYA8PKVr43rWYvoGR89KXkJWH04ky0L0nxGU,100
29
+ plain/.pytype/imports/cli.startup.imports,sha256=oWGfVWTwxV7Yx4B7QKyZuoWMl5L-d2Inj1z5NzEpXQg,755
30
+ plain/.pytype/imports/debug.imports,sha256=BcvCx8CcRzKGZ3krB1h_BitNWxVUU4ZTAotZq8j366c,210
31
+ plain/.pytype/imports/default.pyi,sha256=wYT5YgDkfN4EmgBq-famXTNNyiRlzKyUFUIBybcwrRs,58
32
+ plain/.pytype/imports/forms.__init__.imports,sha256=ZCzisnbI8IXpWrCXyVzoLnoxtYW7ch_qLxXocB4PxHI,2425
33
+ plain/.pytype/imports/forms.boundfield.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ plain/.pytype/imports/forms.exceptions.imports,sha256=OtI4oKRluUxKVgkaMaWouYOOXHrpknikcq6nJ5PWv-8,102
35
+ plain/.pytype/imports/forms.fields.imports,sha256=8Bv3CoGNyvvHSLN_0k_Qetl-OD9tXKgSurTSIWcDun4,1351
36
+ plain/.pytype/imports/forms.forms.imports,sha256=WlDhYVx_aIyK3J5AdD5hsBSnVKjIsXOaqNAICygstC4,1562
37
+ plain/.pytype/imports/http.__init__.imports,sha256=5QQ9NGnmxx2Kt_jTP3XspChhZ2FlrwcRxpJgCmSGTKc,2166
38
+ plain/.pytype/imports/http.__init__.imports-1,sha256=0dcNmeAtARHAX4McXFU0clnBWLxtUmXbw7sKpSKnNRQ,1842
39
+ plain/.pytype/imports/http.cookie.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ plain/.pytype/imports/http.multipartparser.imports,sha256=xjj6dx8_ZDwuizyRtVFeuB5f-bUXu20ly20ZcUu8des,1519
41
+ plain/.pytype/imports/http.multipartparser.imports-1,sha256=0dcNmeAtARHAX4McXFU0clnBWLxtUmXbw7sKpSKnNRQ,1842
42
+ plain/.pytype/imports/http.request.imports,sha256=wM-JoMv_KXVKqMkcdc7milRzGRUoRlAj9qJbV-dTNGQ,1513
43
+ plain/.pytype/imports/http.request.imports-1,sha256=B0budRW6jiGAihch1eznDb39M-BP3jcApXZBo3npZ-o,2719
44
+ plain/.pytype/imports/http.response.imports,sha256=65KY9VVqDJFAjtda4KPpQWpPSNRGy2y_Fi1_vS9DzGc,1712
45
+ plain/.pytype/imports/internal.__init__.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ plain/.pytype/imports/internal.files.__init__.imports,sha256=LjmI1lQBfBBPbXilxlx0CRLRNrxFnoZ8koi1oLHS7U8,111
47
+ plain/.pytype/imports/internal.files.base.imports,sha256=SEenECtmpmqUL2niRXxsHMtIfN0hDGbOHTXMhWLociQ,220
48
+ plain/.pytype/imports/internal.files.locks.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ plain/.pytype/imports/internal.files.move.imports,sha256=9DPRlOZDCYDL1qmEyB8oGin47hN5OxE3xnWMRc1J66A,115
50
+ plain/.pytype/imports/internal.files.temp.imports,sha256=g3EVv1QpETVEjIO3WDXrQxUOVO2M397qEZSTG-0Cyns,112
51
+ plain/.pytype/imports/internal.files.uploadedfile.imports,sha256=GZebz15izbeEAD01Wx1EaGH9vE6438qKuR622SoZKKE,1092
52
+ plain/.pytype/imports/internal.files.uploadhandler.imports,sha256=Nz1EKB9eWlmxJFY_u9PXi5zeUycjdlsNJ2qBboTMrO8,1332
53
+ plain/.pytype/imports/internal.files.utils.imports,sha256=OtI4oKRluUxKVgkaMaWouYOOXHrpknikcq6nJ5PWv-8,102
54
+ plain/.pytype/imports/internal.handlers.__init__.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ plain/.pytype/imports/internal.handlers.base.imports,sha256=s6LXUHREegQe-4P44m5SM38j1iPJYRUjG2zMBbJYi0k,5632
56
+ plain/.pytype/imports/internal.handlers.exception.imports,sha256=DXfY7vIHq4eKakRr1eBp1oINHfgCG0cnooK3Fm7Jk_Y,1080
57
+ plain/.pytype/imports/internal.handlers.wsgi.imports,sha256=GBIzko9k5-jmWzV6SV9C97n08xSTKOaM-MmSXeO112E,3149
58
+ plain/.pytype/imports/internal.middleware.__init__.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
+ plain/.pytype/imports/internal.middleware.headers.imports,sha256=oWGfVWTwxV7Yx4B7QKyZuoWMl5L-d2Inj1z5NzEpXQg,755
60
+ plain/.pytype/imports/internal.middleware.https.imports,sha256=fuX7Z4_Krx94pvMy4hQp1_i2__GTDBiApocHtCL3KU8,860
61
+ plain/.pytype/imports/internal.middleware.slash.imports,sha256=I-aDYLJcTb-jYCPUv0hF6YZYk3D37V4Qe6YF1pIeesU,5395
62
+ plain/.pytype/imports/json.imports,sha256=tG9UF_zc9nbJzrgevGt-I_tU0USMb0WULaQp-Y4TICI,1276
63
+ plain/.pytype/imports/json.imports-1,sha256=GYW4z-Q2Ikt33hNse2YcVKzh_DjrscjA0T-lrVW2oNQ,638
64
+ plain/.pytype/imports/json_encoding.imports,sha256=bdA1NeSR_1rLhGBpzwP-uT_5JiznIPVpz-bh4m6g_zk,320
65
+ plain/.pytype/imports/logs.configure.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
+ plain/.pytype/imports/logs.loggers.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ plain/.pytype/imports/logs.utils.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ plain/.pytype/imports/middleware.imports,sha256=z6xVqEfdmH0Td8ZtJfYLOjrnPiTduYjPXkdqoTTRxtY,1388
69
+ plain/.pytype/imports/packages.__init__.imports,sha256=J2pXPbT1Oc6sOdgoogFfsET5mypYm-oKHYJYjVMSWYw,873
70
+ plain/.pytype/imports/packages.__init__.imports-1,sha256=XURXeIDwTBUWmMstG06VeOD-dr80SHmue2-Mtp6ZDAU,424
71
+ plain/.pytype/imports/packages.config.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
+ plain/.pytype/imports/packages.registry.imports,sha256=r63DI8Eokmk1udpd0KIA34PFhfKjubMa-EXzk2b49Oo,759
73
+ plain/.pytype/imports/packages.registry.imports-1,sha256=wuC3eyf__VLUH5oOIBNmlgdZT2NhjckEgFhERz5ZRAk,312
74
+ plain/.pytype/imports/paginator.imports,sha256=cg2GiC3cFcTLdm7VSQVAys-_Pw4deMixwainywjsCJ0,209
75
+ plain/.pytype/imports/preflight.__init__.imports,sha256=Y9Elo5bIWPLTCO0LR9sp6aDx_VDzuc0miHSwKKLp9Q0,7701
76
+ plain/.pytype/imports/preflight.__init__.imports-1,sha256=jrVDxS_HHT6n0onnMiFsyiQjdrNc4esHUYpW65t7OpU,5664
77
+ plain/.pytype/imports/preflight.files.imports,sha256=VY58yhVxjU9RqREoBum9HMCS4HuM4zz-WkNdaM0wyG4,865
78
+ plain/.pytype/imports/preflight.files.imports-1,sha256=qS4lShq3k8VZJLCHs158KkSNyin_QnAC9sLwlMXP1mU,5083
79
+ plain/.pytype/imports/preflight.messages.imports,sha256=oWGfVWTwxV7Yx4B7QKyZuoWMl5L-d2Inj1z5NzEpXQg,755
80
+ plain/.pytype/imports/preflight.registry.imports,sha256=rUTdMOkWPC5jj4YWxP9moD6v3pflcR1_LTt9EymMi4k,212
81
+ plain/.pytype/imports/preflight.security.imports,sha256=hs-3mJ1vEbt5x_-g09pQbqE8mKcpZcJcaX2pE9fszQk,1189
82
+ plain/.pytype/imports/preflight.urls.imports,sha256=qB6E_KIVogS7EXNhpJmH8aaC6l3Z1eZZ2FzRa8L-nXw,5395
83
+ plain/.pytype/imports/preflight.urls.imports-1,sha256=qS4lShq3k8VZJLCHs158KkSNyin_QnAC9sLwlMXP1mU,5083
84
+ plain/.pytype/imports/runtime.global_settings.imports,sha256=oWGfVWTwxV7Yx4B7QKyZuoWMl5L-d2Inj1z5NzEpXQg,755
85
+ plain/.pytype/imports/runtime.user_settings.imports,sha256=TDtGMVGz-26QotEkJqXAE_vbCWNAMMCcNFbmQM9LkP4,757
86
+ plain/.pytype/imports/runtime.user_settings.imports-1,sha256=wuC3eyf__VLUH5oOIBNmlgdZT2NhjckEgFhERz5ZRAk,312
87
+ plain/.pytype/imports/signals.dispatch.__init__.imports,sha256=jdNriDg9wolwJLjL9gVgh3GqLm5kgo4QhVUt7qcWhOM,1101
88
+ plain/.pytype/imports/signals.dispatch.dispatcher.imports,sha256=Hl3MeJOQEUexGcaWs-8ChP5F3a7H9TbmdGpopocXNfg,860
89
+ plain/.pytype/imports/templates.__init__.imports,sha256=uZAgsjvhtsRfswOuJXQvbWlkXcs-041Nu_ezNacO7OQ,5419
90
+ plain/.pytype/imports/templates.__init__.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
91
+ plain/.pytype/imports/templates.core.imports,sha256=h65i9YKyT1QsGDaGNEVWYNx1g9dqn2ZpmZKQwiCWYtg,5417
92
+ plain/.pytype/imports/templates.core.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
93
+ plain/.pytype/imports/templates.jinja.__init__.imports,sha256=0X93MsutNECKcI5QY3GqtyWz1sbYsMC-U_QQ-IC8YR0,5415
94
+ plain/.pytype/imports/templates.jinja.__init__.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
95
+ plain/.pytype/imports/templates.jinja.environments.imports,sha256=brcMmfa0YgjVMkOzThXEgt7KFkhNOtisR59bMdgHOjQ,5413
96
+ plain/.pytype/imports/templates.jinja.environments.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
97
+ plain/.pytype/imports/templates.jinja.extensions.imports,sha256=ihSyJhjr9TY8_vCPNBuN-7y38Pg7hBLBf2ReVNCLu4M,194
98
+ plain/.pytype/imports/templates.jinja.filters.imports,sha256=WkcrOLSrEkDNhA1v5OiS-wV7nJDYqJhE3C3429mDsL0,729
99
+ plain/.pytype/imports/templates.jinja.globals.imports,sha256=A99gokP5VOobQkAnfOg7Zflhdz0Wgwz3Wu5jUGrPw94,5411
100
+ plain/.pytype/imports/templates.jinja.globals.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
101
+ plain/.pytype/imports/test.__init__.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
+ plain/.pytype/imports/test.client.imports,sha256=3ieLwb59ylWh29htO9Cw9DGYCa6Z0pycsUUXsYb34JA,6183
103
+ plain/.pytype/imports/urls.base.imports,sha256=Or96l0lB-jGKjs-ufTeihC9RrWAhxjbQfa87aIp1IN0,5409
104
+ plain/.pytype/imports/urls.base.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
105
+ plain/.pytype/imports/urls.conf.imports,sha256=TwSiUKlfVXf4Y_ahSxYzQ8s8WPNLJC_PYAo3va1wwZ0,5407
106
+ plain/.pytype/imports/urls.conf.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
107
+ plain/.pytype/imports/urls.converters.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
+ plain/.pytype/imports/urls.exceptions.imports,sha256=kCBzAPmzkqheCt2kTov9J4TECEPvHC0bFkJQyqh21ws,105
109
+ plain/.pytype/imports/urls.resolvers.imports,sha256=yXh7t4H4ka6bMqPycLfcXuUT4O93t-Nbg73z5bBdXwc,5405
110
+ plain/.pytype/imports/urls.resolvers.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
111
+ plain/.pytype/imports/utils.__init__.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
+ plain/.pytype/imports/utils._os.imports,sha256=OtI4oKRluUxKVgkaMaWouYOOXHrpknikcq6nJ5PWv-8,102
113
+ plain/.pytype/imports/utils.cache.imports,sha256=h1zMoTYzsznLfvKg4goOPjP_OBgN-kdB0VgspzXa-m0,3035
114
+ plain/.pytype/imports/utils.connection.imports,sha256=CxAPkfRMeOoQHuiCIt631W5pXtsxAGG0nSokz7ChjsM,863
115
+ plain/.pytype/imports/utils.datastructures.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
+ plain/.pytype/imports/utils.dateformat.imports,sha256=y2B2U89oxgkz1-albtDrjBlLm0-elSFw4n5MDZUhuVA,422
117
+ plain/.pytype/imports/utils.dateparse.imports,sha256=EJn3sqEeMLF6XoavzLgwauVQT-DSpy7ePq1mJ5pID6M,216
118
+ plain/.pytype/imports/utils.dates.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
+ plain/.pytype/imports/utils.deconstruct.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
+ plain/.pytype/imports/utils.decorators.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
+ plain/.pytype/imports/utils.deprecation.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
+ plain/.pytype/imports/utils.duration.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
+ plain/.pytype/imports/utils.email.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
+ plain/.pytype/imports/utils.encoding.imports,sha256=Ofu8EcrfhvTEqReQONu3oleF7IFpDpjwXNCuis5i04U,108
125
+ plain/.pytype/imports/utils.hashable.imports,sha256=0iMjoVlEV9GU-vPKmdmfSdD85Yh0YdUH3-I1UzwdclQ,107
126
+ plain/.pytype/imports/utils.html.imports,sha256=W1LgsNzTUF9N4jtLLGIiAumUZmK8KH-Rf2UEmjq1ajs,1043
127
+ plain/.pytype/imports/utils.inspect.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
+ plain/.pytype/imports/utils.ipv6.imports,sha256=OtI4oKRluUxKVgkaMaWouYOOXHrpknikcq6nJ5PWv-8,102
129
+ plain/.pytype/imports/utils.itercompat.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
+ plain/.pytype/imports/utils.module_loading.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
+ plain/.pytype/imports/utils.regex_helper.imports,sha256=Ofu8EcrfhvTEqReQONu3oleF7IFpDpjwXNCuis5i04U,108
132
+ plain/.pytype/imports/utils.safestring.imports,sha256=Ofu8EcrfhvTEqReQONu3oleF7IFpDpjwXNCuis5i04U,108
133
+ plain/.pytype/imports/utils.text.imports,sha256=TAVQpHhMdOFVh6UFEllit1hhxep0WGXxT4AT-whvWtM,321
134
+ plain/.pytype/imports/utils.timesince.imports,sha256=w8ehtjH7tIiz_RZ67GGsSyGmhskKdMiUm58eJg8cOHs,624
135
+ plain/.pytype/imports/utils.timezone.imports,sha256=2Lcp6QeqJFwERU36vtsnLZoKxEqzmt7lIQyRUwUhCnc,867
136
+ plain/.pytype/imports/utils.tree.imports,sha256=fUz5XJPtiElPCIsD6wHFt80iI9GFrTMtqu7wRjvJBtg,210
137
+ plain/.pytype/imports/validators.imports,sha256=zhH5-C6AUo1otXiLxX67BkvbfcuHr8ChraHwS7m-OB4,726
138
+ plain/.pytype/imports/views.__init__.imports,sha256=1JPLXQ26zDFByS_Y8LXPQ4hlaFEKphcDzCMYI8CnIOE,7685
139
+ plain/.pytype/imports/views.__init__.imports-1,sha256=jrVDxS_HHT6n0onnMiFsyiQjdrNc4esHUYpW65t7OpU,5664
140
+ plain/.pytype/imports/views.base.imports,sha256=96Eupca5EwknprgEDYMxF7_0444URsO5q8r26sowkBQ,320
141
+ plain/.pytype/imports/views.csrf.imports,sha256=-6xQFHL51F5LEmDzHUV1rWUGl_uLvXWTUcJ1vIGcvRg,108
142
+ plain/.pytype/imports/views.errors.imports,sha256=Aji2boLjSG4cNDdgCV_gtUKgAqfX4NWabJgomcSgziM,5395
143
+ plain/.pytype/imports/views.exceptions.imports,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
+ plain/.pytype/imports/views.forms.imports,sha256=fr3mCFQr9tTnsq66n1dPVjLNDIiXN5NdFTuY7qiGzn4,5403
145
+ plain/.pytype/imports/views.forms.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
146
+ plain/.pytype/imports/views.imports,sha256=ZqxL8g1Gk3IFZMD6jW7_CMbZy6tlanZW-CJ3fnA4WD4,5395
147
+ plain/.pytype/imports/views.objects.imports,sha256=Y7R76U3aoJB406xKvhIEK4OmnfwBPUjwpu1ttUdei_I,5401
148
+ plain/.pytype/imports/views.objects.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
149
+ plain/.pytype/imports/views.redirect.imports,sha256=3J4eDW1LErxEOzypPNfxATEH7y8juFea0s3CdzBImh0,5399
150
+ plain/.pytype/imports/views.redirect.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
151
+ plain/.pytype/imports/views.templates.imports,sha256=gCpLjKMYtWe_4Gof1RyYwbZIL0FOFZKfzpg999uqL_k,5397
152
+ plain/.pytype/imports/views.templates.imports-1,sha256=tAFMVU_gb3HcESykf7jAlJSU1G9sareqUhbDFWEtowA,3704
153
+ plain/.pytype/imports/wsgi.imports,sha256=JJYNUFZtreXO1mZDek6Oyqrx3qZGSDsaaKbBZu4DSvo,869
154
+ plain/.pytype/pyi/json.pyi,sha256=wRZatyXBkD9xBL52dL5ILpi-ern_rdQR_vQfvLMIMmI,243
155
+ plain/.pytype/pyi/json.pyi-1,sha256=pyZOPTfTXPkBz4uv3FOROpGz12FZI-i8iSBWUTakUPM,264
156
+ plain/.pytype/pyi/logs/configure.pyi,sha256=Wa3IP2M3fZgecSYprElxhju9Cm81mfvOJNz18YZq5eo,134
157
+ plain/.pytype/pyi/logs/loggers.pyi,sha256=MHj9GcsuskRsm9aIz5IdLs7TQdlbsKydd9pIVEoYwNk,670
158
+ plain/.pytype/pyi/logs/utils.pyi,sha256=wibPWtg1uXDH8TgNtPkaZ3XQRbTR3L3uiIVQWQVngtg,197
159
+ plain/.pytype/pyi/packages/__init__.pyi,sha256=ClfijuV2ihX3HQcfVZop9vIRJgywHFkhOY7PDkkYRuY,184
160
+ plain/.pytype/pyi/packages/__init__.pyi-1,sha256=dDr5G_xx8ohwF3LKAl4fAch0Wzq5Lbt_NSk1K4qmQ7A,159
161
+ plain/.pytype/pyi/packages/config.pyi,sha256=48mYM9dzANTcNOxnQeIVJhBNSB3sxwnBywNh0LOyOLo,998
162
+ plain/.pytype/pyi/packages/registry.pyi,sha256=Om6nUBFtQe9zY3ogRyq22zscxQWN0nc_aZ2oZWzmij8,1828
163
+ plain/.pytype/pyi/packages/registry.pyi-1,sha256=P05aueoookesmajpCft2ZdoBSViKWSGIXzY0HvXz5bU,1847
164
+ plain/.pytype/pyi/runtime/user_settings.pyi,sha256=5piV1L6xrsE04hHpdFHDdshj3xtw2snFTsXp_CHKBIM,2007
165
+ plain/.pytype/pyi/runtime/user_settings.pyi-1,sha256=5piV1L6xrsE04hHpdFHDdshj3xtw2snFTsXp_CHKBIM,2007
166
+ plain/.pytype/pyi/utils/duration.pyi,sha256=_rpuX2yAb0PrQ9Vrqso8oL5SWP8bk_L9ftGe5Tj1IUQ,279
167
+ plain/.pytype/pyi/utils/hashable.pyi,sha256=3Ec-TNuqmeKixdjGGofry8ZBZwKjneWb0V9fRovZ_f4,164
168
+ plain/.pytype/pyi/utils/itercompat.pyi,sha256=NDS9sQ3t3afbIN7hfv8G0NO_dDw4Vq1NHL_HrkdNqNo,60
169
+ plain/.pytype/pyi/utils/module_loading.pyi,sha256=VXAWFP-CZGeIsGk2XsigBUvhL1U3HokWWi9gwjN_VNc,509
170
+ plain/assets/README.md,sha256=048BzyQ2-BcsRiv6NiuLHHijOw96RK-e6lJ_Eq7g2pc,2857
171
+ plain/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
+ plain/assets/compile.py,sha256=Qg-rMWykij_Jheq4THrPFWlmYv07ihHzWiNsD815HYE,3336
173
+ plain/assets/finders.py,sha256=wMa0GUi4S5SUXKcWSqEesMgU4NbXXDrC4SMJwDakwNc,1215
174
+ plain/assets/fingerprints.py,sha256=1NKAnnXVlncY5iimXztr0NL3RIjBKsNlZRIe6nmItJc,931
175
+ plain/assets/urls.py,sha256=lW7VzKNzTKY11JqbszhJQ1Yy0HtljZlsHDnnkTPdLOM,992
176
+ plain/assets/views.py,sha256=z7noLzoelGw_8-MXcvGKjXs9KZ43Tivmy2TIfnZIpgw,9253
177
+ plain/cli/README.md,sha256=TvWCnNwb1rNthPzJglCRMKacN5H_RLeEjYBMe62Uz4M,2461
178
+ plain/cli/__init__.py,sha256=9ByBOIdM8DebChjNz-RH2atdz4vWe8somlwNEsbhwh4,40
179
+ plain/cli/cli.py,sha256=0iHzlXWQTLxWxqxGV4f4K9ABT7s5q5gzSqoNzj0XuKg,18383
180
+ plain/cli/formatting.py,sha256=1hZH13y1qwHcU2K2_Na388nw9uvoeQH8LrWL-O9h8Yc,2207
181
+ plain/cli/packages.py,sha256=TiLirp0ccj5K96jOfp_pS18rOnk1aQS9ckiTi27aRwE,2740
182
+ plain/cli/print.py,sha256=XraUYrgODOJquIiEv78wSCYGRBplHXtXSS9QtFG5hqY,217
183
+ plain/cli/startup.py,sha256=3LIz9JrIZoF52Sa0j0SCypQwEaBDkhvuGaBdtiQLr5Q,680
184
+ plain/csrf/README.md,sha256=RXMWMtHmzf30gVVNOfj0kD4xlSqFIPgJh-n7dIciaEM,163
185
+ plain/csrf/middleware.py,sha256=1szNRF-kKJdjhTw_Jw1Cp2IldtrLtbUqAApJOrVP1qc,17449
186
+ plain/csrf/views.py,sha256=HwQqfI6KPelHP9gSXhjfZaTLQic71PKsoZ6DPhr1rKI,572
187
+ plain/forms/README.md,sha256=fglB9MmHiEgfGGdZmcRstNl6eYaFljrElu2mzapK52M,377
188
+ plain/forms/__init__.py,sha256=UxqPwB8CiYPCQdHmUc59jadqaXqDmXBH8y4bt9vTPms,226
189
+ plain/forms/boundfield.py,sha256=LhydhCVR0okrli0-QBMjGjAJ8-06gTCXVEaBZhBouQk,1741
190
+ plain/forms/exceptions.py,sha256=XCLDRl5snIEDu5-8mLB0NnU_tegcBfyIHMiJxqvbxnc,164
191
+ plain/forms/fields.py,sha256=86ZE9jac6Zyg5vKsYGgyOUOIQLKxO--UomGXwA65tk4,35103
192
+ plain/forms/forms.py,sha256=CiONLo9VhE7E1-u-UejX4XWxxwu6MvR-lVPaVAY7VQM,10441
193
+ plain/http/README.md,sha256=HjEtoAhn14OoMdgb-wK-uc8No7C4d4gZUhzseOp7Fg4,236
194
+ plain/http/__init__.py,sha256=DIsDRbBsCGa4qZgq-fUuQS0kkxfbTU_3KpIM9VvH04w,1067
195
+ plain/http/cookie.py,sha256=11FnSG3Plo6T3jZDbPoCw7SKh9ExdBio3pTmIO03URg,597
196
+ plain/http/multipartparser.py,sha256=k6BhpilFENQQ1cuGix6aa-jGwbhBVms2A2O01-s3_4c,27304
197
+ plain/http/request.py,sha256=Kp0q-1obg7ZUJBz7iuyHwPmNMnssZmoIdLp8ylxJNAo,25965
198
+ plain/http/response.py,sha256=RR2sUG-ONWKWcZyIbztjWvtFyh0cR-CoxQvnWOyN0io,23619
199
+ plain/internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
200
+ plain/internal/files/README.md,sha256=kMux-NU5qiH0o1K8IajYQT8VjrYl_jLk9LkGG_kGuSc,45
201
+ plain/internal/files/__init__.py,sha256=VctFgox4Q1AWF3klPaoCC5GIw5KeLafYjY5JmN8mAVw,63
202
+ plain/internal/files/base.py,sha256=CSq_BPKWY2kUib7pnoIvzi40isEyrKdkx1yHb8nPtLc,4817
203
+ plain/internal/files/locks.py,sha256=z03q7IZD4tPMK3s1HKF3w_uetkFj6w6FTheLUxZsfB0,3616
204
+ plain/internal/files/move.py,sha256=jfdD29QhamxZjXRgqmZS4dJoJ4sK6M7QK1Km-69jWeo,3238
205
+ plain/internal/files/temp.py,sha256=UJJnCI8dqPIC8XXHU3-jG2-0svbkrgGlBs4yhciLm4c,2506
206
+ plain/internal/files/uploadedfile.py,sha256=JRB7T3quQjg-1y3l1ASPxywtSQZhaeMc45uFPIxvl7c,4192
207
+ plain/internal/files/uploadhandler.py,sha256=eEnd5onstypjHYtg367PnVWwCaF1kAPlLPSV7goIf_E,7198
208
+ plain/internal/files/utils.py,sha256=xN4HTJXDRdcoNyrL1dFd528MBwodRlHZM8DGTD_oBIg,2646
209
+ plain/internal/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
+ plain/internal/handlers/base.py,sha256=oRKni79ATI_u7sywGFExrzKvP5dpJTqIp1m521A90Ew,4169
211
+ plain/internal/handlers/exception.py,sha256=rv8shMlTJdIhTm99VacILIiu5JRcmtumg8yWuy7GYto,4592
212
+ plain/internal/handlers/wsgi.py,sha256=estA1QKHTk3ZqziWxenHsw5UO2cwPp3Zr0XjkDeM5TY,7561
213
+ plain/internal/middleware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
+ plain/internal/middleware/headers.py,sha256=ENIW1Gwat54hv-ejgp2R8QTZm-PlaI7k44WU01YQrNk,964
215
+ plain/internal/middleware/https.py,sha256=XpuQK8HicYX1jNanQHqNgyQ9rqe4NLUOZO3ZzKdsP8k,1203
216
+ plain/internal/middleware/slash.py,sha256=FMU8b9w0NSx4eJs9Y7Ew6RAoSTbUqe2oOM68kg3wOng,2817
217
+ plain/logs/README.md,sha256=H6uVXdInYlasq0Z1WnhWnPmNwYQoZ1MSLPDQ4ZE7u4A,492
218
+ plain/logs/__init__.py,sha256=rASvo4qFBDIHfkACmGLNGa6lRGbG9PbNjW6FmBt95ys,168
219
+ plain/logs/configure.py,sha256=6mV7d1IxkDYT3VBz61qhIj0Esuy5l5QdQfsHaGCfI6w,1063
220
+ plain/logs/loggers.py,sha256=iz9SYcwP9w5QAuwpULl48SFkVyJuuMoQ_fdLgdCHpNg,2121
221
+ plain/logs/utils.py,sha256=9UzdCCQXJinGDs71Ngw297mlWkhgZStSd67ya4NOW98,1257
222
+ plain/packages/README.md,sha256=Vq1Nw3mmEmZ2IriQavuVi4BjcQC2nb8k7YIbnm8QjIg,799
223
+ plain/packages/__init__.py,sha256=DnHN1wwHXiXib4Y9BV__x9WrbUaTovoTIxW-tVyScTU,106
224
+ plain/packages/config.py,sha256=6j6Y9Uw4Lbye1M7LVgOhL4rAMkSSkleTzHQU9JRBW7k,11070
225
+ plain/packages/registry.py,sha256=YMYGGrMWPoj4Bg_MXDVNnnoqOAufG_IBT24DB-twAgw,14860
226
+ plain/preflight/README.md,sha256=-PKVd0RBMh4ROiMkegPS2PgvT1Kq9qqN1KfNkmUSdFc,177
227
+ plain/preflight/__init__.py,sha256=H-TNRvaddPtOGmv4RXoc1fxDV1AOb7_K3u7ECF8mV58,607
228
+ plain/preflight/files.py,sha256=wbHCNgps7o1c1zQNBd8FDCaVaqX90UwuvLgEQ_DbUpY,510
229
+ plain/preflight/messages.py,sha256=HwatjA6MRFfzFAnSOa_uAw1Pvk_CLuNfW3IYi71_1Mk,2322
230
+ plain/preflight/registry.py,sha256=7s7f_iEwURzv-Ye515P5lJWcHltd5Ca2fsX1Wpbf1wQ,2306
231
+ plain/preflight/security.py,sha256=sNpv5AHobPcaO48cOUGRNe2EjusTducjY8vyShR8EhI,2645
232
+ plain/preflight/urls.py,sha256=q3ikavMB8ZFMzzm_JOnm1YKwSONgaHjH4Is4-4mmTKM,3001
233
+ plain/runtime/README.md,sha256=Q8VVO7JRGuYrDxzuYL6ptoilhclbecxKzpRXKgbWGkU,2061
234
+ plain/runtime/__init__.py,sha256=ZfypqlhtbWUoJ84vLW4aKgpx2HsdtdJfDZnbbZw6kLE,1510
235
+ plain/runtime/global_settings.py,sha256=SfOhwzpZe2zpNqSpdx3hHgCN89xdbW9KJVR4KJfS_Gk,5498
236
+ plain/runtime/user_settings.py,sha256=r6uQ-h0QxX3gSB_toJJekEbSikXXdNSb8ykUtwGTpdY,11280
237
+ plain/signals/README.md,sha256=cd3tKEgH-xc88CUWyDxl4-qv-HBXx8VT32BXVwA5azA,230
238
+ plain/signals/__init__.py,sha256=eAs0kLqptuP6I31dWXeAqRNji3svplpAV4Ez6ktjwXM,131
239
+ plain/signals/dispatch/__init__.py,sha256=FzEygqV9HsM6gopio7O2Oh_X230nA4d5Q9s0sUjMq0E,292
240
+ plain/signals/dispatch/dispatcher.py,sha256=VxSlqn9PCOTghPPJLOqZPs6FNQZfV2BJpMfFMSg6Dtc,11531
241
+ plain/signals/dispatch/license.txt,sha256=o9EhDhsC4Q5HbmD-IfNGVTEkXtNE33r5rIt3lleJ8gc,1727
242
+ plain/templates/README.md,sha256=VfA2HmrklG5weE1md85q9g84cWnMBEiXAynKzM7S1Sk,464
243
+ plain/templates/__init__.py,sha256=bX76FakE9T7mfK3N0deN85HlwHNQpeigytSC9Z8LcOs,451
244
+ plain/templates/core.py,sha256=iw58EAmyyv8N5HDA-Sq4-fLgz_qx8v8WJfurgR116jw,625
245
+ plain/templates/jinja/README.md,sha256=ft4781b4IAVI6fsIdAHIpOigdsZ6wGg06LK7BHxoj-g,6996
246
+ plain/templates/jinja/__init__.py,sha256=jGjtygVB5Bwknpd3u_pBSrtUSGlFkYo6MDo0E3IWVrs,2653
247
+ plain/templates/jinja/environments.py,sha256=T5e8rjVteN3-6IWCXNRsvPgMe0OVvTkX-r6_Q9gxhv8,2046
248
+ plain/templates/jinja/extensions.py,sha256=AEmmmHDbdRW8fhjYDzq9eSSNbp9WHsXenD8tPthjc0s,1351
249
+ plain/templates/jinja/filters.py,sha256=3KJKKbxcv9dLzUDWPcaa88k3NU2m1GG3iMIgFhzXrBA,860
250
+ plain/templates/jinja/globals.py,sha256=xx3sQBn0Hkqp9jM0fZDlCM5_35C23FrZL6jKEifL77k,498
251
+ plain/test/README.md,sha256=Zso3Ir7a8vQerzKB6egjROQWkpveLAbscn7VTROPAiU,37
252
+ plain/test/__init__.py,sha256=rXe88Y602NP8DBnReSyXb7dUzKoWweLuT43j-qwOUl4,138
253
+ plain/test/client.py,sha256=36Cir1KbrNEhza-5FTgdwxe1iZ5zaEDtESrqcnyndnY,31318
254
+ plain/urls/README.md,sha256=pWnCvgYkWN7rG7hSyBOtX4ZUP3iO7FhqM6lvwwYll6c,33
255
+ plain/urls/__init__.py,sha256=XF-W2GqLMA4bHbDRKnpZ7tiUtJ-BhWN-yAzw4nNnHdc,590
256
+ plain/urls/converters.py,sha256=s2JZVOdzZC16lgobsI93hygcdH5L0Kj4742WEkXsVcs,1193
257
+ plain/urls/exceptions.py,sha256=q4iPh3Aa-zHbA-tw8v6WyX1J1n5WdAady2xvxFuyXB0,114
258
+ plain/urls/patterns.py,sha256=bU_xfhZbKMSgRG9OJ8w_NSuYRm_9zGnqoz_WY44fhUk,9358
259
+ plain/urls/resolvers.py,sha256=kw3Savkrk-A6mQ4jiKeRWnMazNaKmfSvu6vA6EYZR_8,15543
260
+ plain/urls/routers.py,sha256=8HS1giVMzqkVXb_0L02uqeqi3CAbEtSnsrWFLNNmeC8,2864
261
+ plain/urls/utils.py,sha256=WiGq6hHI-5DLFOxCQTAZ2qm0J-UdGosLcjuxlfK6_Tg,2137
262
+ plain/utils/README.md,sha256=Bf5OG-MkOJDz_U8RGVreDfAI4M4nnPaLtk-LdinxHSc,99
263
+ plain/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
264
+ plain/utils/_os.py,sha256=oqfiKZRbmHwwWSZP36SIajQnFDbImbB6gcyK0idAGl4,1988
265
+ plain/utils/cache.py,sha256=3GtF8EU07LmD7CSvWSuF7YTThgeNxVkuU68wBK_35Wk,11489
266
+ plain/utils/connection.py,sha256=NN7xRhy6qIWuOOhi1x9YdGcFcYhKepTiMUETeEMS0vY,2501
267
+ plain/utils/crypto.py,sha256=zFDydnaqNMGYFHUc-CAn8f93685a17BhGusAcITH1lI,2662
268
+ plain/utils/datastructures.py,sha256=g4UYTbxIb_n8F9JWMP4dHPwUz71591fHreGATPO4qEc,10240
269
+ plain/utils/dateformat.py,sha256=nsy71l16QuPN0ozGpVlCU5Et101fhk9L38F-wqT5p5I,10203
270
+ plain/utils/dateparse.py,sha256=u9_tF85YteXSjW9KQzNg_pcCEFDZS3EGorCddcWU0vE,5351
271
+ plain/utils/dates.py,sha256=hSDKz8eIb3W5QjmGiklFZZELB0inYXsfiRUy49Cx-2Q,1226
272
+ plain/utils/deconstruct.py,sha256=7NwEFIDCiadAArUBFmiErzDgfIgDWeKqqQFDXwSgQoQ,1830
273
+ plain/utils/decorators.py,sha256=mLHOo2jLdvYRo2z8lkeVn2vQErlj7xC6XoLwZBYf_z8,358
274
+ plain/utils/duration.py,sha256=l0Gc41-DeyyAmpdy2XG-YO5UKxMf1NDpWIlQuD5hAn0,1162
275
+ plain/utils/email.py,sha256=puRTBVuz44YvpnqV3LT4nNIKqdqfY3L8zbDJIkqHk2Y,328
276
+ plain/utils/encoding.py,sha256=z8c7HxYW6wQiE4csx5Ui3WvzgbDzLGXY2aCP04_GZd4,7900
277
+ plain/utils/functional.py,sha256=Xf51mt5bB8zehR8pTRVnRfV21vJ4n1IGpcwj88SSsUA,14791
278
+ plain/utils/hashable.py,sha256=uLWobCCh7VcEPJ7xzVGPgigNVuTazYJbyzRzHTCI_wo,739
279
+ plain/utils/html.py,sha256=K8nJSiNRU54htQOfhezZAYspXaDGN3LjOE3SxmnQml8,13513
280
+ plain/utils/http.py,sha256=OmnqW_nYUaFN-pAEwjTEh9AkpfjKGmE51Ge6inNGB10,12710
281
+ plain/utils/inspect.py,sha256=lhDEOtmSLEub5Jj__MIgW3AyWOEVkaA6doJKKwBhZ6A,2235
282
+ plain/utils/ipv6.py,sha256=pISQ2AIlG8xXlxpphn388q03fq-fOrlu4GZR0YYjQXw,1267
283
+ plain/utils/itercompat.py,sha256=lacIDjczhxbwG4ON_KfG1H6VNPOGOpbRhnVhbedo2CY,184
284
+ plain/utils/module_loading.py,sha256=CWl7Shoax9Zkevf1pM9PpS_0V69J5Cukjyj078UPCAw,2252
285
+ plain/utils/regex_helper.py,sha256=pAdh_xG52BOyXLsiuIMPFgduUAoWOEje1ZpjhcefxiA,12769
286
+ plain/utils/safestring.py,sha256=SHGhpbX6FFDKSYOY9zYAgAQX0g0exzRba7dM2bJalWs,1873
287
+ plain/utils/text.py,sha256=qX7vECGH4Xk96qZRH9A1IyZA-mrJ-j62j3kDcLTdWK0,16586
288
+ plain/utils/timesince.py,sha256=a_-ZoPK_s3Pt998CW4rWp0clZ1XyK2x04hCqak2giII,5928
289
+ plain/utils/timezone.py,sha256=6u0sE-9RVp0_OCe0Y1KiYYQoq5THWLokZFQYY8jf78g,6221
290
+ plain/utils/tree.py,sha256=wdWzmfsgc26YDF2wxhAY3yVxXTixQYqYDKE9mL3L3ZY,4383
291
+ plain/views/README.md,sha256=qndsXKyNMnipPlLaAvgQeGxqXknNQwlFh31Yxk8rHp8,5994
292
+ plain/views/__init__.py,sha256=a-N1nkklVohJTtz0yD1MMaS0g66HviEjsKydNVVjvVc,392
293
+ plain/views/base.py,sha256=HxOOOKZDCCZDmy2cJCEhYswVeIHZ9TukYh1zibeUn6w,3160
294
+ plain/views/csrf.py,sha256=7q6l5xzLWhRnMY64aNj0hR6G-3pxI2yhRwG6k_5j00E,144
295
+ plain/views/errors.py,sha256=Y4oGX4Z6D2COKcDEfINvXE1acE8Ad15KwNNWPs5BCfc,967
296
+ plain/views/exceptions.py,sha256=b4euI49ZUKS9O8AGAcFfiDpstzkRAuuj_uYQXzWNHME,138
297
+ plain/views/forms.py,sha256=RhlaUcZCkeqokY_fvv-NOS-kgZAG4XhDLOPbf9K_Zlc,2691
298
+ plain/views/objects.py,sha256=g5Lzno0Zsv0K449UpcCtxwCoO7WMRAWqKlxxV2V0_qg,8263
299
+ plain/views/redirect.py,sha256=9zHZgKvtSkdrMX9KmsRM8hJTPmBktxhc4d8OitbuniI,1724
300
+ plain/views/templates.py,sha256=cBkFNCSXgVi8cMqQbhsqJ4M_rIQYVl8cUvq9qu4YIes,1951
301
+ plain-0.22.0.dist-info/METADATA,sha256=y8BriQ2UA5WsaRwExaSEm-4-iV_HliwWkJYerEqYho4,319
302
+ plain-0.22.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
303
+ plain-0.22.0.dist-info/entry_points.txt,sha256=DHHprvufgd7xypiBiqMANYRnpJ9xPPYhYbnPGwOkWqE,40
304
+ plain-0.22.0.dist-info/licenses/LICENSE,sha256=m0D5O7QoH9l5Vz_rrX_9r-C8d9UNr_ciK6Qwac7o6yo,3175
305
+ plain-0.22.0.dist-info/RECORD,,
plain/urls/conf.py DELETED
@@ -1,95 +0,0 @@
1
- """Functions for use in URLsconfs."""
2
-
3
- from functools import partial
4
-
5
- from plain.exceptions import ImproperlyConfigured
6
-
7
- from .resolvers import (
8
- RegexPattern,
9
- RoutePattern,
10
- URLPattern,
11
- URLResolver,
12
- )
13
-
14
-
15
- def include(arg, namespace=None):
16
- default_namespace = None
17
- if isinstance(arg, tuple):
18
- # Callable returning a namespace hint.
19
- try:
20
- urlconf_module, default_namespace = arg
21
- except ValueError:
22
- if namespace:
23
- raise ImproperlyConfigured(
24
- "Cannot override the namespace for a dynamic module that "
25
- "provides a namespace."
26
- )
27
- raise ImproperlyConfigured(
28
- "Passing a %d-tuple to include() is not supported. Pass a " # noqa: UP031
29
- "2-tuple containing the list of patterns and default_namespace, and "
30
- "provide the namespace argument to include() instead." % len(arg)
31
- )
32
- else:
33
- # No namespace hint - use manually provided namespace.
34
- urlconf_module = arg
35
-
36
- patterns = getattr(urlconf_module, "urlpatterns", urlconf_module)
37
- default_namespace = getattr(urlconf_module, "default_namespace", default_namespace)
38
- if namespace and not default_namespace:
39
- raise ImproperlyConfigured(
40
- "Specifying a namespace in include() without providing an default_namespace "
41
- "is not supported. Set the default_namespace attribute in the included "
42
- "module, or pass a 2-tuple containing the list of patterns and "
43
- "default_namespace instead.",
44
- )
45
- namespace = namespace or default_namespace
46
- # Make sure the patterns can be iterated through (without this, some
47
- # testcases will break).
48
- if isinstance(patterns, list | tuple):
49
- for url_pattern in patterns:
50
- getattr(url_pattern, "pattern", None)
51
- return (urlconf_module, default_namespace, namespace)
52
-
53
-
54
- def _path(route, view, kwargs=None, name=None, Pattern=None):
55
- from plain.views import View
56
-
57
- if kwargs is not None and not isinstance(kwargs, dict):
58
- raise TypeError(
59
- f"kwargs argument must be a dict, but got {kwargs.__class__.__name__}."
60
- )
61
-
62
- if isinstance(view, list | tuple):
63
- # For include(...) processing.
64
- pattern = Pattern(route, is_endpoint=False)
65
- urlconf_module, default_namespace, namespace = view
66
- return URLResolver(
67
- pattern,
68
- urlconf_module,
69
- kwargs,
70
- default_namespace=default_namespace,
71
- namespace=namespace,
72
- )
73
-
74
- if isinstance(view, View):
75
- view_cls_name = view.__class__.__name__
76
- raise TypeError(
77
- f"view must be a callable, pass {view_cls_name} or {view_cls_name}.as_view(*args, **kwargs), not "
78
- f"{view_cls_name}()."
79
- )
80
-
81
- # Automatically call view.as_view() for class-based views
82
- if as_view := getattr(view, "as_view", None):
83
- pattern = Pattern(route, name=name, is_endpoint=True)
84
- return URLPattern(pattern, as_view(), kwargs, name)
85
-
86
- # Function-based views or view_class.as_view() usage
87
- if callable(view):
88
- pattern = Pattern(route, name=name, is_endpoint=True)
89
- return URLPattern(pattern, view, kwargs, name)
90
-
91
- raise TypeError("view must be a callable or a list/tuple in the case of include().")
92
-
93
-
94
- path = partial(_path, Pattern=RoutePattern)
95
- re_path = partial(_path, Pattern=RegexPattern)
@@ -1,6 +0,0 @@
1
- class RemovedInDjango51Warning(DeprecationWarning):
2
- pass
3
-
4
-
5
- class RemovedInDjango60Warning(PendingDeprecationWarning):
6
- pass