plain 0.2.3__tar.gz → 0.2.5__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 (158) hide show
  1. {plain-0.2.3 → plain-0.2.5}/PKG-INFO +1 -1
  2. {plain-0.2.3 → plain-0.2.5}/plain/assets/views.py +13 -5
  3. {plain-0.2.3 → plain-0.2.5}/pyproject.toml +1 -1
  4. {plain-0.2.3 → plain-0.2.5}/LICENSE +0 -0
  5. {plain-0.2.3 → plain-0.2.5}/README.md +0 -0
  6. {plain-0.2.3 → plain-0.2.5}/plain/README.md +0 -0
  7. {plain-0.2.3 → plain-0.2.5}/plain/__main__.py +0 -0
  8. {plain-0.2.3 → plain-0.2.5}/plain/assets/README.md +0 -0
  9. {plain-0.2.3 → plain-0.2.5}/plain/assets/__init__.py +0 -0
  10. {plain-0.2.3 → plain-0.2.5}/plain/assets/compile.py +0 -0
  11. {plain-0.2.3 → plain-0.2.5}/plain/assets/finders.py +0 -0
  12. {plain-0.2.3 → plain-0.2.5}/plain/assets/fingerprints.py +0 -0
  13. {plain-0.2.3 → plain-0.2.5}/plain/assets/urls.py +0 -0
  14. {plain-0.2.3 → plain-0.2.5}/plain/cli/README.md +0 -0
  15. {plain-0.2.3 → plain-0.2.5}/plain/cli/__init__.py +0 -0
  16. {plain-0.2.3 → plain-0.2.5}/plain/cli/cli.py +0 -0
  17. {plain-0.2.3 → plain-0.2.5}/plain/cli/formatting.py +0 -0
  18. {plain-0.2.3 → plain-0.2.5}/plain/cli/packages.py +0 -0
  19. {plain-0.2.3 → plain-0.2.5}/plain/cli/print.py +0 -0
  20. {plain-0.2.3 → plain-0.2.5}/plain/cli/startup.py +0 -0
  21. {plain-0.2.3 → plain-0.2.5}/plain/csrf/README.md +0 -0
  22. {plain-0.2.3 → plain-0.2.5}/plain/csrf/middleware.py +0 -0
  23. {plain-0.2.3 → plain-0.2.5}/plain/csrf/views.py +0 -0
  24. {plain-0.2.3 → plain-0.2.5}/plain/debug.py +0 -0
  25. {plain-0.2.3 → plain-0.2.5}/plain/exceptions.py +0 -0
  26. {plain-0.2.3 → plain-0.2.5}/plain/forms/README.md +0 -0
  27. {plain-0.2.3 → plain-0.2.5}/plain/forms/__init__.py +0 -0
  28. {plain-0.2.3 → plain-0.2.5}/plain/forms/boundfield.py +0 -0
  29. {plain-0.2.3 → plain-0.2.5}/plain/forms/exceptions.py +0 -0
  30. {plain-0.2.3 → plain-0.2.5}/plain/forms/fields.py +0 -0
  31. {plain-0.2.3 → plain-0.2.5}/plain/forms/forms.py +0 -0
  32. {plain-0.2.3 → plain-0.2.5}/plain/http/README.md +0 -0
  33. {plain-0.2.3 → plain-0.2.5}/plain/http/__init__.py +0 -0
  34. {plain-0.2.3 → plain-0.2.5}/plain/http/cookie.py +0 -0
  35. {plain-0.2.3 → plain-0.2.5}/plain/http/multipartparser.py +0 -0
  36. {plain-0.2.3 → plain-0.2.5}/plain/http/request.py +0 -0
  37. {plain-0.2.3 → plain-0.2.5}/plain/http/response.py +0 -0
  38. {plain-0.2.3 → plain-0.2.5}/plain/internal/__init__.py +0 -0
  39. {plain-0.2.3 → plain-0.2.5}/plain/internal/files/README.md +0 -0
  40. {plain-0.2.3 → plain-0.2.5}/plain/internal/files/__init__.py +0 -0
  41. {plain-0.2.3 → plain-0.2.5}/plain/internal/files/base.py +0 -0
  42. {plain-0.2.3 → plain-0.2.5}/plain/internal/files/locks.py +0 -0
  43. {plain-0.2.3 → plain-0.2.5}/plain/internal/files/move.py +0 -0
  44. {plain-0.2.3 → plain-0.2.5}/plain/internal/files/temp.py +0 -0
  45. {plain-0.2.3 → plain-0.2.5}/plain/internal/files/uploadedfile.py +0 -0
  46. {plain-0.2.3 → plain-0.2.5}/plain/internal/files/uploadhandler.py +0 -0
  47. {plain-0.2.3 → plain-0.2.5}/plain/internal/files/utils.py +0 -0
  48. {plain-0.2.3 → plain-0.2.5}/plain/internal/handlers/__init__.py +0 -0
  49. {plain-0.2.3 → plain-0.2.5}/plain/internal/handlers/base.py +0 -0
  50. {plain-0.2.3 → plain-0.2.5}/plain/internal/handlers/exception.py +0 -0
  51. {plain-0.2.3 → plain-0.2.5}/plain/internal/handlers/wsgi.py +0 -0
  52. {plain-0.2.3 → plain-0.2.5}/plain/internal/legacy/__init__.py +0 -0
  53. {plain-0.2.3 → plain-0.2.5}/plain/internal/legacy/__main__.py +0 -0
  54. {plain-0.2.3 → plain-0.2.5}/plain/internal/legacy/management/__init__.py +0 -0
  55. {plain-0.2.3 → plain-0.2.5}/plain/internal/legacy/management/base.py +0 -0
  56. {plain-0.2.3 → plain-0.2.5}/plain/internal/legacy/management/color.py +0 -0
  57. {plain-0.2.3 → plain-0.2.5}/plain/internal/legacy/management/sql.py +0 -0
  58. {plain-0.2.3 → plain-0.2.5}/plain/internal/legacy/management/utils.py +0 -0
  59. {plain-0.2.3 → plain-0.2.5}/plain/json.py +0 -0
  60. {plain-0.2.3 → plain-0.2.5}/plain/logs/README.md +0 -0
  61. {plain-0.2.3 → plain-0.2.5}/plain/logs/__init__.py +0 -0
  62. {plain-0.2.3 → plain-0.2.5}/plain/logs/configure.py +0 -0
  63. {plain-0.2.3 → plain-0.2.5}/plain/logs/loggers.py +0 -0
  64. {plain-0.2.3 → plain-0.2.5}/plain/logs/utils.py +0 -0
  65. {plain-0.2.3 → plain-0.2.5}/plain/middleware/README.md +0 -0
  66. {plain-0.2.3 → plain-0.2.5}/plain/middleware/__init__.py +0 -0
  67. {plain-0.2.3 → plain-0.2.5}/plain/middleware/clickjacking.py +0 -0
  68. {plain-0.2.3 → plain-0.2.5}/plain/middleware/common.py +0 -0
  69. {plain-0.2.3 → plain-0.2.5}/plain/middleware/gzip.py +0 -0
  70. {plain-0.2.3 → plain-0.2.5}/plain/middleware/security.py +0 -0
  71. {plain-0.2.3 → plain-0.2.5}/plain/packages/README.md +0 -0
  72. {plain-0.2.3 → plain-0.2.5}/plain/packages/__init__.py +0 -0
  73. {plain-0.2.3 → plain-0.2.5}/plain/packages/config.py +0 -0
  74. {plain-0.2.3 → plain-0.2.5}/plain/packages/registry.py +0 -0
  75. {plain-0.2.3 → plain-0.2.5}/plain/paginator.py +0 -0
  76. {plain-0.2.3 → plain-0.2.5}/plain/preflight/README.md +0 -0
  77. {plain-0.2.3 → plain-0.2.5}/plain/preflight/__init__.py +0 -0
  78. {plain-0.2.3 → plain-0.2.5}/plain/preflight/compatibility/__init__.py +0 -0
  79. {plain-0.2.3 → plain-0.2.5}/plain/preflight/compatibility/django_4_0.py +0 -0
  80. {plain-0.2.3 → plain-0.2.5}/plain/preflight/files.py +0 -0
  81. {plain-0.2.3 → plain-0.2.5}/plain/preflight/messages.py +0 -0
  82. {plain-0.2.3 → plain-0.2.5}/plain/preflight/registry.py +0 -0
  83. {plain-0.2.3 → plain-0.2.5}/plain/preflight/security/__init__.py +0 -0
  84. {plain-0.2.3 → plain-0.2.5}/plain/preflight/security/base.py +0 -0
  85. {plain-0.2.3 → plain-0.2.5}/plain/preflight/security/csrf.py +0 -0
  86. {plain-0.2.3 → plain-0.2.5}/plain/preflight/urls.py +0 -0
  87. {plain-0.2.3 → plain-0.2.5}/plain/runtime/README.md +0 -0
  88. {plain-0.2.3 → plain-0.2.5}/plain/runtime/__init__.py +0 -0
  89. {plain-0.2.3 → plain-0.2.5}/plain/runtime/global_settings.py +0 -0
  90. {plain-0.2.3 → plain-0.2.5}/plain/runtime/user_settings.py +0 -0
  91. {plain-0.2.3 → plain-0.2.5}/plain/signals/README.md +0 -0
  92. {plain-0.2.3 → plain-0.2.5}/plain/signals/__init__.py +0 -0
  93. {plain-0.2.3 → plain-0.2.5}/plain/signals/dispatch/__init__.py +0 -0
  94. {plain-0.2.3 → plain-0.2.5}/plain/signals/dispatch/dispatcher.py +0 -0
  95. {plain-0.2.3 → plain-0.2.5}/plain/signals/dispatch/license.txt +0 -0
  96. {plain-0.2.3 → plain-0.2.5}/plain/signing.py +0 -0
  97. {plain-0.2.3 → plain-0.2.5}/plain/templates/README.md +0 -0
  98. {plain-0.2.3 → plain-0.2.5}/plain/templates/__init__.py +0 -0
  99. {plain-0.2.3 → plain-0.2.5}/plain/templates/core.py +0 -0
  100. {plain-0.2.3 → plain-0.2.5}/plain/templates/jinja/README.md +0 -0
  101. {plain-0.2.3 → plain-0.2.5}/plain/templates/jinja/__init__.py +0 -0
  102. {plain-0.2.3 → plain-0.2.5}/plain/templates/jinja/defaults.py +0 -0
  103. {plain-0.2.3 → plain-0.2.5}/plain/templates/jinja/extensions.py +0 -0
  104. {plain-0.2.3 → plain-0.2.5}/plain/templates/jinja/filters.py +0 -0
  105. {plain-0.2.3 → plain-0.2.5}/plain/templates/jinja/globals.py +0 -0
  106. {plain-0.2.3 → plain-0.2.5}/plain/test/README.md +0 -0
  107. {plain-0.2.3 → plain-0.2.5}/plain/test/__init__.py +0 -0
  108. {plain-0.2.3 → plain-0.2.5}/plain/test/client.py +0 -0
  109. {plain-0.2.3 → plain-0.2.5}/plain/urls/README.md +0 -0
  110. {plain-0.2.3 → plain-0.2.5}/plain/urls/__init__.py +0 -0
  111. {plain-0.2.3 → plain-0.2.5}/plain/urls/base.py +0 -0
  112. {plain-0.2.3 → plain-0.2.5}/plain/urls/conf.py +0 -0
  113. {plain-0.2.3 → plain-0.2.5}/plain/urls/converters.py +0 -0
  114. {plain-0.2.3 → plain-0.2.5}/plain/urls/exceptions.py +0 -0
  115. {plain-0.2.3 → plain-0.2.5}/plain/urls/resolvers.py +0 -0
  116. {plain-0.2.3 → plain-0.2.5}/plain/utils/README.md +0 -0
  117. {plain-0.2.3 → plain-0.2.5}/plain/utils/__init__.py +0 -0
  118. {plain-0.2.3 → plain-0.2.5}/plain/utils/_os.py +0 -0
  119. {plain-0.2.3 → plain-0.2.5}/plain/utils/cache.py +0 -0
  120. {plain-0.2.3 → plain-0.2.5}/plain/utils/connection.py +0 -0
  121. {plain-0.2.3 → plain-0.2.5}/plain/utils/crypto.py +0 -0
  122. {plain-0.2.3 → plain-0.2.5}/plain/utils/datastructures.py +0 -0
  123. {plain-0.2.3 → plain-0.2.5}/plain/utils/dateformat.py +0 -0
  124. {plain-0.2.3 → plain-0.2.5}/plain/utils/dateparse.py +0 -0
  125. {plain-0.2.3 → plain-0.2.5}/plain/utils/dates.py +0 -0
  126. {plain-0.2.3 → plain-0.2.5}/plain/utils/deconstruct.py +0 -0
  127. {plain-0.2.3 → plain-0.2.5}/plain/utils/decorators.py +0 -0
  128. {plain-0.2.3 → plain-0.2.5}/plain/utils/deprecation.py +0 -0
  129. {plain-0.2.3 → plain-0.2.5}/plain/utils/duration.py +0 -0
  130. {plain-0.2.3 → plain-0.2.5}/plain/utils/email.py +0 -0
  131. {plain-0.2.3 → plain-0.2.5}/plain/utils/encoding.py +0 -0
  132. {plain-0.2.3 → plain-0.2.5}/plain/utils/functional.py +0 -0
  133. {plain-0.2.3 → plain-0.2.5}/plain/utils/hashable.py +0 -0
  134. {plain-0.2.3 → plain-0.2.5}/plain/utils/html.py +0 -0
  135. {plain-0.2.3 → plain-0.2.5}/plain/utils/http.py +0 -0
  136. {plain-0.2.3 → plain-0.2.5}/plain/utils/inspect.py +0 -0
  137. {plain-0.2.3 → plain-0.2.5}/plain/utils/ipv6.py +0 -0
  138. {plain-0.2.3 → plain-0.2.5}/plain/utils/itercompat.py +0 -0
  139. {plain-0.2.3 → plain-0.2.5}/plain/utils/module_loading.py +0 -0
  140. {plain-0.2.3 → plain-0.2.5}/plain/utils/regex_helper.py +0 -0
  141. {plain-0.2.3 → plain-0.2.5}/plain/utils/safestring.py +0 -0
  142. {plain-0.2.3 → plain-0.2.5}/plain/utils/termcolors.py +0 -0
  143. {plain-0.2.3 → plain-0.2.5}/plain/utils/text.py +0 -0
  144. {plain-0.2.3 → plain-0.2.5}/plain/utils/timesince.py +0 -0
  145. {plain-0.2.3 → plain-0.2.5}/plain/utils/timezone.py +0 -0
  146. {plain-0.2.3 → plain-0.2.5}/plain/utils/tree.py +0 -0
  147. {plain-0.2.3 → plain-0.2.5}/plain/validators.py +0 -0
  148. {plain-0.2.3 → plain-0.2.5}/plain/views/README.md +0 -0
  149. {plain-0.2.3 → plain-0.2.5}/plain/views/__init__.py +0 -0
  150. {plain-0.2.3 → plain-0.2.5}/plain/views/base.py +0 -0
  151. {plain-0.2.3 → plain-0.2.5}/plain/views/csrf.py +0 -0
  152. {plain-0.2.3 → plain-0.2.5}/plain/views/errors.py +0 -0
  153. {plain-0.2.3 → plain-0.2.5}/plain/views/exceptions.py +0 -0
  154. {plain-0.2.3 → plain-0.2.5}/plain/views/forms.py +0 -0
  155. {plain-0.2.3 → plain-0.2.5}/plain/views/objects.py +0 -0
  156. {plain-0.2.3 → plain-0.2.5}/plain/views/redirect.py +0 -0
  157. {plain-0.2.3 → plain-0.2.5}/plain/views/templates.py +0 -0
  158. {plain-0.2.3 → plain-0.2.5}/plain/wsgi.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: plain
3
- Version: 0.2.3
3
+ Version: 0.2.5
4
4
  Summary: A web framework for building products with Python.
5
5
  Author: Dave Gaeddert
6
6
  Author-email: dave.gaeddert@dropseed.dev
@@ -1,4 +1,5 @@
1
1
  import functools
2
+ import mimetypes
2
3
  import os
3
4
  from email.utils import formatdate, parsedate
4
5
  from io import BytesIO
@@ -53,9 +54,12 @@ class AssetView(View):
53
54
  if not_modified_response := self.get_conditional_response(absolute_path):
54
55
  return not_modified_response
55
56
 
57
+ content_type, _ = mimetypes.guess_type(absolute_path)
58
+
56
59
  response = FileResponse(
57
60
  open(absolute_path, "rb"),
58
- filename=os.path.basename(absolute_path), # Used for Content-Type
61
+ filename=os.path.basename(absolute_path),
62
+ content_type=content_type,
59
63
  )
60
64
  response.headers = self.update_headers(response.headers, absolute_path)
61
65
  return response
@@ -124,10 +128,8 @@ class AssetView(View):
124
128
  headers["Vary"] = vary + ", Accept-Encoding"
125
129
 
126
130
  # If the file is compressed, tell the browser
127
- if path.endswith(".gz"):
128
- headers.setdefault("Content-Encoding", "gzip")
129
- elif path.endswith(".br"):
130
- headers.setdefault("Content-Encoding", "br")
131
+ if encoding := mimetypes.guess_type(path)[1]:
132
+ headers.setdefault("Content-Encoding", encoding)
131
133
 
132
134
  is_immutable = self.is_immutable(path)
133
135
 
@@ -147,6 +149,12 @@ class AssetView(View):
147
149
  if etag := self.get_etag(path):
148
150
  headers.setdefault("ETag", etag)
149
151
 
152
+ if "Content-Disposition" in headers:
153
+ # This header messes up Safari...
154
+ # https://github.com/evansd/whitenoise/commit/93657cf88e14b919cb726864814617a6a639e507
155
+ # At some point, should probably look at not using FileResponse at all?
156
+ del headers["Content-Disposition"]
157
+
150
158
  return headers
151
159
 
152
160
  def is_immutable(self, path):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "plain"
3
- version = "0.2.3"
3
+ version = "0.2.5"
4
4
  description = "A web framework for building products with Python."
5
5
  authors = ["Dave Gaeddert <dave.gaeddert@dropseed.dev>"]
6
6
  readme = "README.md"
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
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
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
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
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
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
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
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes