duckframework 1.0.2__tar.gz → 2.0.0__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 (429) hide show
  1. duckframework-2.0.0/PKG-INFO +546 -0
  2. duckframework-2.0.0/README.md +495 -0
  3. duckframework-2.0.0/duck/app/app.py +1306 -0
  4. duckframework-2.0.0/duck/app/base.py +337 -0
  5. {duckframework-1.0.2 → duckframework-2.0.0}/duck/app/microapp.py +115 -145
  6. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/urls.py +1 -1
  7. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/utils.py +15 -2
  8. duckframework-2.0.0/duck/contrib/auth/__init__.py +63 -0
  9. duckframework-2.0.0/duck/contrib/auth/exceptions.py +9 -0
  10. duckframework-2.0.0/duck/contrib/auth/helpers.py +381 -0
  11. duckframework-2.0.0/duck/contrib/jwt/__init__.py +189 -0
  12. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/reloader/ducksight.py +11 -4
  13. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/sync/smart_async.py +14 -2
  14. duckframework-2.0.0/duck/etc/apps/counterapp/views/__init__.py +547 -0
  15. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/middlewares.py +2 -2
  16. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/settings.py +8 -38
  17. duckframework-2.0.0/duck/etc/structures/projects/full/web/ui/static/images/duck-logo.png +0 -0
  18. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/settings.py +8 -9
  19. duckframework-2.0.0/duck/etc/structures/projects/mini/web/ui/static/images/duck-logo.png +0 -0
  20. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/settings.py +7 -6
  21. duckframework-2.0.0/duck/etc/structures/projects/normal/web/ui/static/images/duck-logo.png +0 -0
  22. {duckframework-1.0.2 → duckframework-2.0.0}/duck/exceptions/all.py +6 -0
  23. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/__init__.py +60 -24
  24. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/button.py +2 -1
  25. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/container.py +3 -3
  26. duckframework-2.0.0/duck/html/components/core/browser_state.py +58 -0
  27. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/exceptions.py +0 -7
  28. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/force_update.py +26 -0
  29. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/opcodes.py +10 -0
  30. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/props.py +5 -2
  31. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/staticfiles/lively.js +50 -15
  32. duckframework-2.0.0/duck/html/components/core/staticfiles/lively.min.js +1 -0
  33. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/system.py +5 -2
  34. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/warnings.py +9 -0
  35. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/websocket.py +179 -29
  36. duckframework-2.0.0/duck/html/components/duck.py +54 -0
  37. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/extensions/__init__.py +10 -0
  38. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/footer.py +13 -3
  39. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/form.py +4 -5
  40. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/image.py +4 -4
  41. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/input.py +11 -11
  42. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/link.py +2 -2
  43. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/lively.py +3 -2
  44. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/modal.py +98 -42
  45. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/navbar.py +3 -2
  46. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/page.py +63 -34
  47. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/select.py +41 -37
  48. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/snackbar.py +40 -24
  49. duckframework-2.0.0/duck/html/components/span.py +13 -0
  50. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/table_of_contents.py +23 -5
  51. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/utils/include.py +1 -0
  52. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/asgi.py +4 -4
  53. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/handler.py +7 -7
  54. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/httpd/http2/event_handler.py +1 -8
  55. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/httpd/httpd.py +7 -2
  56. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/processor.py +43 -6
  57. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/proxyhandler.py +3 -8
  58. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/response_finalizer.py +4 -14
  59. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/wsgi.py +4 -4
  60. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/fileuploads/handlers/__init__.py +23 -3
  61. duckframework-2.0.0/duck/http/jwt/engine.py +391 -0
  62. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/__init__.py +5 -2
  63. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/contrib/__init__.py +3 -0
  64. duckframework-2.0.0/duck/http/middlewares/contrib/jwt.py +248 -0
  65. duckframework-2.0.0/duck/http/middlewares/contrib/session.py +134 -0
  66. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/security/csrf.py +29 -14
  67. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/security/header.py +0 -2
  68. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/querydict.py +5 -3
  69. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/request.py +204 -228
  70. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/response.py +15 -10
  71. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/response_payload.py +3 -3
  72. duckframework-2.0.0/duck/http/session/connector.py +203 -0
  73. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/session/engine.py +150 -54
  74. {duckframework-1.0.2 → duckframework-2.0.0}/duck/meta/__init__.py +18 -1
  75. {duckframework-1.0.2 → duckframework-2.0.0}/duck/routes/__init__.py +2 -1
  76. {duckframework-1.0.2 → duckframework-2.0.0}/duck/routes/route_registry.py +42 -53
  77. duckframework-2.0.0/duck/secrets.py +228 -0
  78. {duckframework-1.0.2 → duckframework-2.0.0}/duck/settings/loaded.py +29 -11
  79. {duckframework-1.0.2 → duckframework-2.0.0}/duck/settings/settings.py +62 -52
  80. {duckframework-1.0.2 → duckframework-2.0.0}/duck/shortcuts/__init__.py +139 -20
  81. duckframework-2.0.0/duck/tests/__init__.py +0 -0
  82. {duckframework-1.0.2 → duckframework-2.0.0}/duck/tests/test_server.py +8 -4
  83. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/asyncio/__init__.py +10 -0
  84. duckframework-2.0.0/duck/utils/caching/__init__.py +1305 -0
  85. duckframework-2.0.0/duck/utils/caching/encrypted.py +411 -0
  86. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/email/__init__.py +23 -22
  87. duckframework-2.0.0/duck/utils/importer.py +58 -0
  88. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/performance.py +12 -6
  89. duckframework-2.0.0/duck/utils/port_registry.py +80 -0
  90. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/ssl.py +29 -38
  91. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/urlcrack.py +1 -1
  92. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/urldecode.py +17 -0
  93. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/xsocket/__init__.py +1 -1
  94. {duckframework-1.0.2 → duckframework-2.0.0}/duck/version.py +4 -2
  95. {duckframework-1.0.2 → duckframework-2.0.0}/duck/views.py +27 -0
  96. duckframework-2.0.0/duckframework.egg-info/PKG-INFO +546 -0
  97. {duckframework-1.0.2 → duckframework-2.0.0}/duckframework.egg-info/SOURCES.txt +17 -2
  98. {duckframework-1.0.2 → duckframework-2.0.0}/duckframework.egg-info/requires.txt +2 -0
  99. {duckframework-1.0.2 → duckframework-2.0.0}/pyproject.toml +7 -4
  100. duckframework-1.0.2/PKG-INFO +0 -251
  101. duckframework-1.0.2/README.md +0 -202
  102. duckframework-1.0.2/duck/app/app.py +0 -1292
  103. duckframework-1.0.2/duck/etc/apps/counterapp/views/__init__.py +0 -184
  104. duckframework-1.0.2/duck/html/components/duck.py +0 -32
  105. duckframework-1.0.2/duck/http/middlewares/contrib/session.py +0 -99
  106. duckframework-1.0.2/duck/http/session/session_storage_connector.py +0 -127
  107. duckframework-1.0.2/duck/secrets.py +0 -68
  108. duckframework-1.0.2/duck/utils/caching/__init__.py +0 -533
  109. duckframework-1.0.2/duck/utils/importer.py +0 -31
  110. duckframework-1.0.2/duck/utils/port_recorder.py +0 -25
  111. duckframework-1.0.2/duckframework.egg-info/PKG-INFO +0 -251
  112. {duckframework-1.0.2 → duckframework-2.0.0}/AUTHORS.md +0 -0
  113. {duckframework-1.0.2 → duckframework-2.0.0}/LICENSE +0 -0
  114. {duckframework-1.0.2 → duckframework-2.0.0}/MANIFEST.in +0 -0
  115. {duckframework-1.0.2 → duckframework-2.0.0}/duck/__init__.py +0 -0
  116. {duckframework-1.0.2 → duckframework-2.0.0}/duck/__main__.py +0 -0
  117. {duckframework-1.0.2 → duckframework-2.0.0}/duck/ansi.py +0 -0
  118. {duckframework-1.0.2 → duckframework-2.0.0}/duck/app/__init__.py +0 -0
  119. {duckframework-1.0.2 → duckframework-2.0.0}/duck/art.py +0 -0
  120. {duckframework-1.0.2 → duckframework-2.0.0}/duck/automation/__init__.py +0 -0
  121. {duckframework-1.0.2 → duckframework-2.0.0}/duck/automation/dispatcher.py +0 -0
  122. {duckframework-1.0.2 → duckframework-2.0.0}/duck/automation/trigger.py +0 -0
  123. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/__init__.py +0 -0
  124. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/__init__.py +0 -0
  125. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/bridge.py +0 -0
  126. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/logging.py +0 -0
  127. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/middlewares/__init__.py +0 -0
  128. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/middlewares/auth.py +0 -0
  129. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/middlewares/clickjacking.py +0 -0
  130. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/middlewares/common.py +0 -0
  131. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/middlewares/csrf.py +0 -0
  132. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/middlewares/duckshare.py +0 -0
  133. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/middlewares/messages.py +0 -0
  134. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/middlewares/security.py +0 -0
  135. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/middlewares/session.py +0 -0
  136. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/session/__init__.py +0 -0
  137. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/session/proxyengine.py +0 -0
  138. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/setup.py +0 -0
  139. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/templatetags/__init__.py +0 -0
  140. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/templatetags/ducktags.py +0 -0
  141. {duckframework-1.0.2 → duckframework-2.0.0}/duck/backend/django/views.py +0 -0
  142. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/__init__.py +0 -0
  143. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/__init__.py +0 -0
  144. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/collectstatic.py +0 -0
  145. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/django.py +0 -0
  146. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/integration/__init__.py +0 -0
  147. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/integration/_django_settings.py +0 -0
  148. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/integration/_django_urls.py +0 -0
  149. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/logs.py +0 -0
  150. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/makeblueprint.py +0 -0
  151. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/makeproject.py +0 -0
  152. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/monitor.py +0 -0
  153. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/runserver.py +0 -0
  154. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/runtests.py +0 -0
  155. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/service.py +0 -0
  156. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/sitemap.py +0 -0
  157. {duckframework-1.0.2 → duckframework-2.0.0}/duck/cli/commands/ssl_gen.py +0 -0
  158. {duckframework-1.0.2 → duckframework-2.0.0}/duck/compat.py +0 -0
  159. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/__init__.py +0 -0
  160. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/asyncio.py +0 -0
  161. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/reloader/__init__.py +0 -0
  162. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/reloader/dependency_graph.py +0 -0
  163. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/responses/__init__.py +0 -0
  164. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/responses/errors.py +0 -0
  165. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/responses/simple_response.py +0 -0
  166. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/responses/template_response.py +0 -0
  167. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/sitemap.py +0 -0
  168. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/sync/__init__.py +0 -0
  169. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/websockets/__init__.py +0 -0
  170. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/websockets/exceptions.py +0 -0
  171. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/websockets/extensions.py +0 -0
  172. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/websockets/frame.py +0 -0
  173. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/websockets/logging.py +0 -0
  174. {duckframework-1.0.2 → duckframework-2.0.0}/duck/contrib/websockets/opcodes.py +0 -0
  175. {duckframework-1.0.2 → duckframework-2.0.0}/duck/csp.py +0 -0
  176. {duckframework-1.0.2 → duckframework-2.0.0}/duck/db/hooks.py +0 -0
  177. {duckframework-1.0.2 → duckframework-2.0.0}/duck/env.py +0 -0
  178. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/__init__.py +0 -0
  179. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/README.md +0 -0
  180. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/__init__.py +0 -0
  181. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/certbot/blueprint.py +0 -0
  182. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/certbot/views/__init__.py +0 -0
  183. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/counterapp/blueprint.py +0 -0
  184. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/counterapp/static/css/bootstrap-icons.min.css +0 -0
  185. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/counterapp/static/css/bootstrap.min.css +0 -0
  186. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/counterapp/static/css/fonts/bootstrap-icons.woff +0 -0
  187. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/counterapp/static/css/fonts/bootstrap-icons.woff2 +0 -0
  188. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/counterapp/static/css/prism.css +0 -0
  189. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/counterapp/static/js/bootstrap.min.js +0 -0
  190. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/counterapp/static/js/jquery-3.7.1.min.js +0 -0
  191. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/counterapp/static/js/prism.js +0 -0
  192. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/blueprint.py +0 -0
  193. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/shared_static/duck-favicon.png +0 -0
  194. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/static/css/base.css +0 -0
  195. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/static/css/contact.css +0 -0
  196. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/static/images/about-us.jpg +0 -0
  197. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/static/images/duck-cover-bw.png +0 -0
  198. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/static/images/duck-default-bw.png +0 -0
  199. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/static/images/duck-default.png +0 -0
  200. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/static/images/duck-favicon.png +0 -0
  201. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/static/images/duck.png +0 -0
  202. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/static/images/kofi_donate_img.png +0 -0
  203. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/templates/about.html +0 -0
  204. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/templates/base.html +0 -0
  205. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/templates/contact.html +0 -0
  206. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/templates/home.html +0 -0
  207. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/views/__init__.py +0 -0
  208. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/views/about.py +0 -0
  209. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/views/contact.py +0 -0
  210. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/views/context/__init__.py +0 -0
  211. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/views/home.py +0 -0
  212. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/views/speedtest.py +0 -0
  213. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/defaultsite/views/static.py +0 -0
  214. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/essentials/blueprint.py +0 -0
  215. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/essentials/views/__init__.py +0 -0
  216. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/essentials/views/media.py +0 -0
  217. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/essentials/views/sitemap.py +0 -0
  218. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/apps/essentials/views/static.py +0 -0
  219. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/automations/certbot.py +0 -0
  220. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/headers/default.json +0 -0
  221. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/headers/default_ssl.json +0 -0
  222. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/internals/__init__.py +0 -0
  223. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/internals/profile_app.py +0 -0
  224. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/internals/template.py +0 -0
  225. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/normalizers.py +0 -0
  226. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/settings.py +0 -0
  227. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/ssl/README.md +0 -0
  228. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/ssl/server.crt +0 -0
  229. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/ssl/server.csr +0 -0
  230. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/ssl/server.key +0 -0
  231. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/ssl_defaults.py +0 -0
  232. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/statuscodes.py +0 -0
  233. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/README.md +0 -0
  234. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/blueprint/views/__init__.py +0 -0
  235. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/.env +0 -0
  236. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/.gitignore +0 -0
  237. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/LICENSE +0 -0
  238. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/README.md +0 -0
  239. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/TODO.md +0 -0
  240. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/etc/README.md +0 -0
  241. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/etc/ssl/server.crt +0 -0
  242. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/etc/ssl/server.key +0 -0
  243. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/requirements.txt +0 -0
  244. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/__init__.py +0 -0
  245. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/automations.py +0 -0
  246. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/backend/django/duckapp/duckapp/__init__.py +0 -0
  247. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/backend/django/duckapp/duckapp/asgi.py +0 -0
  248. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/backend/django/duckapp/duckapp/settings.py +0 -0
  249. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/backend/django/duckapp/duckapp/urls.py +0 -0
  250. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/backend/django/duckapp/duckapp/wsgi.py +0 -0
  251. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/backend/django/duckapp/manage.py +0 -0
  252. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/main.py +0 -0
  253. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/templatetags.py +0 -0
  254. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/ui/components/README.md +0 -0
  255. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/ui/pages/README.md +0 -0
  256. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/ui/static/README.md +0 -0
  257. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/ui/templates/README.md +0 -0
  258. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/urls.py +0 -0
  259. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/full/web/views.py +0 -0
  260. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/etc/README.md +0 -0
  261. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/etc/ssl/server.crt +0 -0
  262. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/etc/ssl/server.key +0 -0
  263. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/requirements.txt +0 -0
  264. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/__init__.py +0 -0
  265. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/backend/django/duckapp/duckapp/__init__.py +0 -0
  266. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/backend/django/duckapp/duckapp/asgi.py +0 -0
  267. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/backend/django/duckapp/duckapp/settings.py +0 -0
  268. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/backend/django/duckapp/duckapp/urls.py +0 -0
  269. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/backend/django/duckapp/duckapp/wsgi.py +0 -0
  270. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/backend/django/duckapp/manage.py +0 -0
  271. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/main.py +0 -0
  272. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/urls.py +0 -0
  273. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/mini/web/views.py +0 -0
  274. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/LICENSE +0 -0
  275. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/README.md +0 -0
  276. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/TODO.md +0 -0
  277. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/etc/README.md +0 -0
  278. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/etc/ssl/server.crt +0 -0
  279. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/etc/ssl/server.key +0 -0
  280. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/requirements.txt +0 -0
  281. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/__init__.py +0 -0
  282. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/backend/django/duckapp/duckapp/__init__.py +0 -0
  283. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/backend/django/duckapp/duckapp/asgi.py +0 -0
  284. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/backend/django/duckapp/duckapp/settings.py +0 -0
  285. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/backend/django/duckapp/duckapp/urls.py +0 -0
  286. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/backend/django/duckapp/duckapp/wsgi.py +0 -0
  287. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/backend/django/duckapp/manage.py +0 -0
  288. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/main.py +0 -0
  289. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/ui/components/README.md +0 -0
  290. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/ui/pages/README.md +0 -0
  291. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/ui/static/README.md +0 -0
  292. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/ui/templates/README.md +0 -0
  293. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/urls.py +0 -0
  294. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/normal/web/views.py +0 -0
  295. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/README.md +0 -0
  296. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/etc/README.md +0 -0
  297. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/etc/ssl/server.crt +0 -0
  298. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/etc/ssl/server.key +0 -0
  299. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/web/__init__.py +0 -0
  300. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/web/backend/django/duckapp/duckapp/__init__.py +0 -0
  301. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/web/backend/django/duckapp/duckapp/asgi.py +0 -0
  302. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/web/backend/django/duckapp/duckapp/settings.py +0 -0
  303. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/web/backend/django/duckapp/duckapp/urls.py +0 -0
  304. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/web/backend/django/duckapp/duckapp/wsgi.py +0 -0
  305. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/web/backend/django/duckapp/manage.py +0 -0
  306. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/web/settings.py +0 -0
  307. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/structures/projects/testing/web/urls.py +0 -0
  308. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/templates/base_response.html +0 -0
  309. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/templates/csrf_error.html +0 -0
  310. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/templates/simple_icon_response.html +0 -0
  311. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/templates/simple_response.html +0 -0
  312. {duckframework-1.0.2 → duckframework-2.0.0}/duck/etc/templatetags/__init__.py +0 -0
  313. {duckframework-1.0.2 → duckframework-2.0.0}/duck/exceptions/__init__.py +0 -0
  314. {duckframework-1.0.2 → duckframework-2.0.0}/duck/exceptions/error_ids.py +0 -0
  315. {duckframework-1.0.2 → duckframework-2.0.0}/duck/globals.py +0 -0
  316. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/__init__.py +0 -0
  317. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/card.py +0 -0
  318. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/checkbox.py +0 -0
  319. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/code.py +0 -0
  320. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/__init__.py +0 -0
  321. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/children.py +0 -0
  322. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/mutation.py +0 -0
  323. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/staticfiles/msgpack.min.js +0 -0
  324. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/utils.py +0 -0
  325. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/core/vdom.py +0 -0
  326. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/fileinput.py +0 -0
  327. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/heading.py +0 -0
  328. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/hero.py +0 -0
  329. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/icon.py +0 -0
  330. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/label.py +0 -0
  331. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/paragraph.py +0 -0
  332. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/progressbar.py +0 -0
  333. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/script.py +0 -0
  334. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/section.py +0 -0
  335. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/style.py +0 -0
  336. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/templatetags/__init__.py +0 -0
  337. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/textarea.py +0 -0
  338. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/utils/__init__.py +0 -0
  339. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/utils/caching.py +0 -0
  340. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/utils/static.py +0 -0
  341. {duckframework-1.0.2 → duckframework-2.0.0}/duck/html/components/video.py +0 -0
  342. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/__init__.py +0 -0
  343. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/content.py +0 -0
  344. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/__init__.py +0 -0
  345. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/httpd/__init__.py +0 -0
  346. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/httpd/http2/__init__.py +0 -0
  347. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/httpd/http2/protocol.py +0 -0
  348. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/httpd/servers.py +0 -0
  349. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/core/httpd/task_executor.py +0 -0
  350. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/fileuploads/__init__.py +0 -0
  351. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/fileuploads/multipart.py +0 -0
  352. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/headers.py +0 -0
  353. {duckframework-1.0.2/duck/http/middlewares/security/modules → duckframework-2.0.0/duck/http/jwt}/__init__.py +0 -0
  354. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/contrib/django.py +0 -0
  355. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/contrib/metashare.py +0 -0
  356. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/contrib/www_redirect.py +0 -0
  357. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/security/__init__.py +0 -0
  358. {duckframework-1.0.2/duck/http/session → duckframework-2.0.0/duck/http/middlewares/security/modules}/__init__.py +0 -0
  359. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/security/modules/command_injection.py +0 -0
  360. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/security/modules/header_injection.py +0 -0
  361. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/security/modules/sql_injection.py +0 -0
  362. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/security/modules/xss.py +0 -0
  363. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/security/requestslimit.py +0 -0
  364. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/middlewares/security/url.py +0 -0
  365. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/mimes.py +0 -0
  366. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/normalizers/__init__.py +0 -0
  367. {duckframework-1.0.2 → duckframework-2.0.0}/duck/http/request_data.py +0 -0
  368. {duckframework-1.0.2/duck/logging → duckframework-2.0.0/duck/http/session}/__init__.py +0 -0
  369. {duckframework-1.0.2/duck/template → duckframework-2.0.0/duck/logging}/__init__.py +0 -0
  370. {duckframework-1.0.2 → duckframework-2.0.0}/duck/logging/console.py +0 -0
  371. {duckframework-1.0.2 → duckframework-2.0.0}/duck/logging/logger.py +0 -0
  372. {duckframework-1.0.2 → duckframework-2.0.0}/duck/processes.py +0 -0
  373. {duckframework-1.0.2 → duckframework-2.0.0}/duck/routes/route_blueprint.py +0 -0
  374. {duckframework-1.0.2 → duckframework-2.0.0}/duck/settings/__init__.py +0 -0
  375. {duckframework-1.0.2 → duckframework-2.0.0}/duck/setup/__init__.py +0 -0
  376. {duckframework-1.0.2 → duckframework-2.0.0}/duck/setup/makeblueprint.py +0 -0
  377. {duckframework-1.0.2 → duckframework-2.0.0}/duck/setup/makeproject.py +0 -0
  378. {duckframework-1.0.2 → duckframework-2.0.0}/duck/storage.py +0 -0
  379. {duckframework-1.0.2/duck/tests → duckframework-2.0.0/duck/template}/__init__.py +0 -0
  380. {duckframework-1.0.2 → duckframework-2.0.0}/duck/template/csrf.py +0 -0
  381. {duckframework-1.0.2 → duckframework-2.0.0}/duck/template/environment.py +0 -0
  382. {duckframework-1.0.2 → duckframework-2.0.0}/duck/template/loaders.py +0 -0
  383. {duckframework-1.0.2 → duckframework-2.0.0}/duck/template/response.py +0 -0
  384. {duckframework-1.0.2 → duckframework-2.0.0}/duck/template/templatetags.py +0 -0
  385. {duckframework-1.0.2 → duckframework-2.0.0}/duck/tests/test_routes.py +0 -0
  386. {duckframework-1.0.2 → duckframework-2.0.0}/duck/urls.py +0 -0
  387. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/__init__.py +0 -0
  388. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/asyncio/eventloop.py +0 -0
  389. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/callabletools.py +0 -0
  390. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/codesandbox.py +0 -0
  391. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/cookie_consent.py +0 -0
  392. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/dateutils.py +0 -0
  393. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/email/collection.py +0 -0
  394. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/encrypt.py +0 -0
  395. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/eventlist.py +0 -0
  396. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/extraction.py +0 -0
  397. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/file.py +0 -0
  398. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/fileio.py +0 -0
  399. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/filelock.py +0 -0
  400. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/headers.py +0 -0
  401. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/ipc.py +0 -0
  402. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/lazy.py +0 -0
  403. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/multiprocessing/__init__.py +0 -0
  404. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/multiprocessing/process_manager.py +0 -0
  405. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/multiprocessing/processpool.py +0 -0
  406. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/multiprocessing/proxy.py +0 -0
  407. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/net.py +0 -0
  408. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/object_from_id.py +0 -0
  409. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/object_mapping.py +0 -0
  410. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/path.py +0 -0
  411. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/platform.py +0 -0
  412. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/rand_domain.py +0 -0
  413. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/safe_compare.py +0 -0
  414. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/safemarkup.py +0 -0
  415. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/slug.py +0 -0
  416. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/string.py +0 -0
  417. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/temp.py +0 -0
  418. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/threading/__init__.py +0 -0
  419. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/threading/patch.py +0 -0
  420. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/threading/thread_manager.py +0 -0
  421. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/threading/threadpool.py +0 -0
  422. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/timer.py +0 -0
  423. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/validation.py +0 -0
  424. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/wildcard.py +0 -0
  425. {duckframework-1.0.2 → duckframework-2.0.0}/duck/utils/xsocket/io.py +0 -0
  426. {duckframework-1.0.2 → duckframework-2.0.0}/duckframework.egg-info/dependency_links.txt +0 -0
  427. {duckframework-1.0.2 → duckframework-2.0.0}/duckframework.egg-info/entry_points.txt +0 -0
  428. {duckframework-1.0.2 → duckframework-2.0.0}/duckframework.egg-info/top_level.txt +0 -0
  429. {duckframework-1.0.2 → duckframework-2.0.0}/setup.cfg +0 -0
@@ -0,0 +1,546 @@
1
+ Metadata-Version: 2.4
2
+ Name: duckframework
3
+ Version: 2.0.0
4
+ Summary: Duck is a powerful, open-source, full-fledged Python-based web server, framework, and reverse proxy designed for building modern, customizable web applications — from small sites to large-scale platforms.
5
+ Author-email: Brian Musakwa <digreatbrian@gmail.com>
6
+ Maintainer-email: Brian Musakwa <digreatbrian@gmail.com>
7
+ License-Expression: BSD-3-Clause
8
+ Project-URL: Homepage, https://duckframework.com
9
+ Project-URL: Source, https://github.com/duckframework/duck
10
+ Project-URL: Issues, https://github.com/duckframework/duck/issues
11
+ Project-URL: Funding, https://duckframework.xyz/contribute
12
+ Project-URL: Documentation, https://docs.duckframework.com
13
+ Keywords: Python,web framework,web server,reverse proxy,HTTP/2,WSGI,ASGI,Django integration,Flask,Tornado,FastAPI,microservices,middleware,high-performance,async,Duck framework,routing,load balancing,HTTP proxy,web application
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Environment :: Web Environment
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3 :: Only
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Programming Language :: Python :: 3.14
26
+ Classifier: Topic :: Internet :: WWW/HTTP
27
+ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
28
+ Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
29
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
30
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
31
+ Description-Content-Type: text/markdown
32
+ License-File: LICENSE
33
+ License-File: AUTHORS.md
34
+ Requires-Dist: Django>=5.1.5
35
+ Requires-Dist: Jinja2>=3.1.5
36
+ Requires-Dist: watchdog>=4.0.1
37
+ Requires-Dist: requests>=2.31.0
38
+ Requires-Dist: h2>=4.2.0
39
+ Requires-Dist: msgpack>=1.1.1
40
+ Requires-Dist: diskcache
41
+ Requires-Dist: colorama
42
+ Requires-Dist: tzdata
43
+ Requires-Dist: click
44
+ Requires-Dist: asgiref>=3.8.1
45
+ Requires-Dist: psutil>=7.0.0
46
+ Requires-Dist: rich>=14.1.0
47
+ Requires-Dist: setproctitle
48
+ Requires-Dist: pyJWT
49
+ Requires-Dist: pynacl
50
+ Dynamic: license-file
51
+
52
+ # Duck Framework
53
+ [![Python >=3.10](https://img.shields.io/badge/python->=3.10-blue.svg)](https://www.python.org/downloads/release/python-3100/)
54
+ [![GitHub stars](https://img.shields.io/github/stars/duckframework/duck?style=social)](https://github.com/duckframework/duck/stargazers)
55
+ [![License](https://img.shields.io/github/license/duckframework/duck)](https://github.com/duckframework/duck/blob/main/LICENSE)
56
+ [![Build Status](https://img.shields.io/github/actions/workflow/status/duckframework/duck/docs.yml?branch=main)](https://github.com/duckframework/duck/actions)
57
+ [![Open Issues](https://img.shields.io/github/issues/duckframework/duck)](https://github.com/duckframework/duck/issues)
58
+ [![Contributors](https://img.shields.io/github/contributors/duckframework/duck)](https://github.com/duckframework/duck/graphs/contributors)
59
+ [![HTTPS](https://img.shields.io/badge/HTTPS-supported-brightgreen.svg)](#)
60
+ [![HTTP/2](https://img.shields.io/badge/HTTP--2-supported-brightgreen.svg)](#)
61
+ [![WebSocket](https://img.shields.io/badge/WebSocket-supported-brightgreen.svg)](#)
62
+ [![Async Views](https://img.shields.io/badge/Async-WSGI%2FASGI-blue.svg)](#)
63
+ [![Task Automation](https://img.shields.io/badge/Task-Automation-blueviolet.svg)](#)
64
+ [![Content Compression](https://img.shields.io/badge/Compression-gzip%2C%20brotli%2C%20deflate-blue.svg)](#)
65
+ [![SSL Auto-Renewal](https://img.shields.io/badge/SSL-Auto%20Renewal-brightgreen.svg)](#)
66
+ [![Resumable Downloads](https://img.shields.io/badge/Downloads-Resumable-orange.svg)](#)
67
+ [![Security](https://img.shields.io/badge/Security-DoS%2C%20SQLi%2C%20CmdInj-red.svg)](#)
68
+ [![Auto Reload](https://img.shields.io/badge/AutoReload-DuckSight-yellow.svg)](#)
69
+ [![Django Integration](https://img.shields.io/badge/Django-Integration-blue.svg)](#)
70
+ [![Monitoring](https://img.shields.io/badge/Monitoring-CPU%2FRAM%2FDisk%2FI%2FO-brightgreen.svg)](#)
71
+
72
+ **Duck Framework** is an open-source Python web framework and web server with built-in reactive UI and real-time WebSocket support. Build high-performance, scalable, server-side reactive web applications — without separate frontend frameworks or complex JavaScript stacks.
73
+
74
+ ---
75
+
76
+ ## Real world apps built with Duck framework:
77
+
78
+ 1. [Snip - URL Shortener](https://snip.duckframework.com)
79
+ 2. [Quill - AI Design Generator](https://quill.duckframework.com)
80
+ 3. [Counter - Simple Counter App](https://duckframework.com/counterapp)
81
+
82
+ ---
83
+
84
+ ## Duck simplifies web development with:
85
+
86
+ 1. [**Built-in HTTPS support**](https://docs.duckframework.com/main/https-and-http2) for secure connections
87
+ 2. **Native HTTP/2 support** with **HTTP/1** backward compatibility [link](https://docs.duckframework.com/main/https-and-http2)
88
+ 3. Hassle-free **free SSL certificate generation** with **automatic renewal** [link](https://docs.duckframework.com/main/free-ssl-certificate)
89
+ 4. [**Lively Component System**](https://docs.duckframework.com/main/lively-components) — with `VDom Diffing` (support for fast UI's)
90
+ 5. [**WebSocket support**](https://docs.duckframework.com/main/websocket) — modern websocket implementation with `per-message compression`.
91
+ 6. Built-in [task automation](https://docs.duckframework.com/main/automations) — no need for [cron jobs](https://en.m.wikipedia.org/wiki/Cron)
92
+ 7. Automatic **content compression** using `gzip`, `deflate` or `brotli`
93
+ 8. Support for **chunked transfer encoding**
94
+ 9. Easy integration with existing **Django** projects using [`django-add`](https://docs.duckframework.com/main/django-integration) command.
95
+ 10. Organized routing with **Duck** [`Blueprints`](https://docs.duckframework.com/main/blueprint)
96
+ 11. Full support for **async views** or asynchronous code even in [`WSGI`](https://docs.duckframework.com/main/wsgi) environment
97
+ 12. Dynamic project generation with `makeproject` (`mini`, `normal`, or `full`)
98
+ 13. Runs on both [`WSGI`](https://docs.duckframework.com/main/wsgi) and [`ASGI`](https://docs.duckframework.com/main/asgi) environments, can even run `async` protocols like `HTTP/2` or `WebSockets` on `WSGI`.
99
+ 14. High-performance with low-latency response times
100
+ 15. **Resumable downloads** for large files
101
+ 16. Protection against **DoS**, **SQL Injection**, **Command Injection**, and other threats
102
+ 17. **Auto-reload** in debug mode for rapid development
103
+ 18. [**Free production SSL**](https://docs.duckframework.com/main/free-ssl-certificate) — no certificate costs
104
+ 19. **Automatic SSL renewal** using `certbot` plus Duck automation system
105
+ 20. Comes with built-in web development tools and helpers
106
+ 21. [Log management](https://docs.duckframework.com/main/logging) with `duck logs` and file-based logging by default
107
+ 22. Real-time [system monitoring](https://docs.duckframework.com/main/monitoring) for CPU, RAM, Disk usage, and I/O activity with `duck monitor`
108
+ 23. Easily generate app sitemap using command [`duck sitemap`](https://docs.duckframework.com/main/sitemap) or just use
109
+ the builtin blueprint [`duck.etc.apps.essentials.blueprint.Sitemap`](https://docs.duckframework.com/main/sitemap) for dynamic cached sitemap serving.
110
+ 24. Comes with independant [micro applications](https://docs.duckframework.com/main/microapps) which runs on their own servers for micro services support.
111
+ 25. Highly **customizable** to fit any use case
112
+
113
+ And more — see [feature list](https://duckframework.com/features)
114
+
115
+ ## Upcoming Features
116
+
117
+ 1. **HTTP/3 with QUIC** – Faster, modern transport for improved performance.
118
+ 2. **QUIC WebTransport** – A next-gen alternative to WebSockets for real-time communication.
119
+ 3. **Component Pre-rendering System** – A system to preload components in the background thread to reduce initial load times of component trees.
120
+ 4. **Customizable Dashboards** – Tailor interfaces to your workflow and preferences.
121
+ 5. **MQTT (Message Queuing Telementry Transport) Integration** – Run your own broker and manage IoT devices with ease.
122
+ 6. **Duck WebApp to APK** – Easily convert a Duck web application to APK.
123
+ 7. **DuckSight Hot Reload** – Instead of full reload on file changes, implement **hot reload** for the **DuckSight Reloader**. This is faster and efficient than full reload.
124
+ 8. **Internal Updates** – Implement logic for listing and securely applying updates when available, utilizing cryptographic code signing (using standards like TUF) to verify GitHub-sourced updates, protecting against rollbacks, and man-in-the-middle exploits.
125
+ 9. ~~**Worker Processes** – Use of worker processes to utilize all available CPU cores for improved request handling.~~
126
+ 10. **Complete Reverse Proxy Server** – **Duck** only acts as reverse proxy for Django only. Need to make Duck a full-fledged reverse proxy server with optional sticky sessions.
127
+ 11. ~~**Component Mutation Observer** – Need to build an optional component mutation observer for keeping track of child changes for fastest re-render (approx. 75x fast on unchanged children).~~
128
+ 12. **MCP (Model Context Protocol) Server** – Need to make it easy for creating MCP servers for easy AI communication.
129
+ 13. **JWT (JSON-based Web Token) Authentication** – Need to add JWT authentication persistent logins.
130
+ 14. **...and more** – [Request a feature](./feature_request.md)
131
+
132
+ ---
133
+
134
+ ## 🦆 Fun Facts
135
+
136
+ - The **Duck** official website is powered by the **Duck** framework itself—showcasing a true "dogfooding" approach!
137
+ - [**Duck's Lively components**](https://docs.duckframework.com/main/lively-components) bring you a **Lively UI** that's exceptionally fast and responsive, eliminating slow page re-rendering for a seamless user experience.
138
+
139
+ ---
140
+
141
+ ## AI Assistance
142
+
143
+ All AI-assisted functionality is grouped under the `ai` directory in the root of this repository.
144
+
145
+ This directory includes:
146
+ - AI integration logic
147
+ - Supporting utilities and helpers
148
+ - Configuration and usage examples
149
+
150
+ Refer to it for a deeper understanding of how AI is incorporated into the project.
151
+
152
+ ### Vibe Coding
153
+
154
+ When vibe-coding, point your AI assistant to the ai directory in the root repository, or provide its files directly for best results.
155
+
156
+ **Example prompts:**
157
+ ```
158
+ Using the guidelines in the `ai` directory of https://github.com/duckframework/duck, create a project named `xyz`.
159
+ Using the guidelines in the `ai` directory of https://github.com/duckframework/duck, improve my project `xyz`.
160
+ Using the guidelines in the `ai` directory of https://github.com/duckframework/duck, improve my project UI — make it modern and beautiful.
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Getting Started
166
+
167
+ **Install latest version from Github using:**
168
+
169
+ ```sh
170
+ pip install git+https://github.com/duckframework/duck.git
171
+ ```
172
+
173
+ **Or install from `PyPi` using:**
174
+
175
+ ```sh
176
+ pip install duckframework
177
+ ```
178
+
179
+ ---
180
+
181
+ ## Project Creation
182
+
183
+ ```sh
184
+ duck makeproject myproject
185
+ ```
186
+
187
+ This creates a `normal` project named `myproject`. You can also create other project types using:
188
+
189
+ - `--full` for a full-featured project
190
+ - `--mini` for a simplified starter project
191
+
192
+ ### Full Project
193
+
194
+ The full version includes everything **Duck** offers. Recommended for experienced developers.
195
+
196
+ ```sh
197
+ duck makeproject myproject --full
198
+ ```
199
+
200
+ ### Mini Project
201
+
202
+ Beginner-friendly. Lightweight version with essential functionality.
203
+
204
+ ```sh
205
+ duck makeproject myproject --mini
206
+ ```
207
+
208
+ ---
209
+
210
+ ## Simple Startup
211
+
212
+ ```sh
213
+ duck makeproject myproject
214
+ cd myproject
215
+ duck runserver # or: python3 web/main.py
216
+ ```
217
+
218
+ This starts the server at **http://localhost:8000**
219
+
220
+ **Duck** serves a basic site by default — explore more at [Documentation](https://docs.duckframework.com/main)
221
+
222
+ ---
223
+
224
+ ## Understanding the Project
225
+
226
+ Duck generates a set of files and directories as you build your application. This section walks through the core ones you'll interact with most.
227
+
228
+ ---
229
+
230
+ ### `web/main.py`
231
+
232
+ The entry point for your Duck application. You can run it directly with `python web/main.py`, or use the `duck runserver` command instead.
233
+
234
+ ```py
235
+ #!/usr/bin/env python
236
+ """
237
+ Main script for creating and running the Duck application.
238
+ """
239
+
240
+ from duck.app import App
241
+
242
+ app = App(port=8000, addr="0.0.0.0", domain="localhost")
243
+
244
+ if __name__ == "__main__":
245
+ app.run()
246
+ ```
247
+
248
+ ---
249
+
250
+ ### `web/urls.py`
251
+
252
+ Defines the URL routes for your application. Each route maps a static or dynamic path to a **view** — a callable that handles incoming requests for that path.
253
+
254
+ By default, `urlpatterns` is an empty list. Add your own routes to wire up the app.
255
+
256
+ **HTTP route example:**
257
+
258
+ ```py
259
+ from duck.urls import path
260
+ from duck.http.response import HttpResponse
261
+
262
+ def home(request):
263
+ return HttpResponse("Hello world")
264
+
265
+ urlpatterns = [
266
+ path('/', home, name="home"),
267
+ ]
268
+ ```
269
+
270
+ **WebSocket route example:**
271
+
272
+ ```py
273
+ from duck.urls import path
274
+ from duck.contrib.websockets import WebSocketView
275
+
276
+ class SomeWebSocket(WebSocketView):
277
+ async def on_receive(self, data: bytes, opcode):
278
+ # Handle incoming WebSocket data
279
+ await self.send_text("Some text")
280
+
281
+ # Other available send methods:
282
+ # send_json, send_binary, send_ping, send_pong, send_close
283
+
284
+ urlpatterns = [
285
+ path('/some_endpoint', SomeWebSocket, name="some_ws_endpoint"),
286
+ ]
287
+ ```
288
+
289
+ ---
290
+
291
+ ### `web/views.py`
292
+
293
+ An optional file for organising your view functions. Import it as a module in `urls.py` to keep your routes clean.
294
+
295
+ ```py
296
+ # web/urls.py
297
+ from duck.urls import path
298
+ from . import views
299
+
300
+ urlpatterns = [
301
+ path('/', views.home, name="home"),
302
+ ]
303
+ ```
304
+
305
+ ---
306
+
307
+ ### `web/ui/`
308
+
309
+ Contains all frontend logic — components, pages, templates, and static files.
310
+
311
+ ---
312
+
313
+ #### `web/ui/pages/`
314
+
315
+ Duck recommends building UI with **Pages** — Python classes that represent full HTML pages. Pages unlock the [Lively Component System](https://docs.duckframework.com/main/lively-components), which enables fast navigation and real-time interactivity without JavaScript or full page reloads.
316
+
317
+ **What is an HTML Component?**
318
+
319
+ A component is a Python class that represents an HTML element. You configure it with props and style, then render it to HTML.
320
+
321
+ ```py
322
+ from duck.html.components import InnerComponent
323
+
324
+ class Button(InnerComponent):
325
+ def get_element(self):
326
+ return "button"
327
+
328
+ btn = Button(text="Hello world")
329
+
330
+ print(btn.render()) # <button>Hello world</button>
331
+ ```
332
+
333
+ Duck ships with many built-in components — `Button`, `Navbar`, `Modal`, `Input`, and more — available under `duck.html.components`.
334
+
335
+ **Creating Pages**
336
+
337
+ Subclass `duck.html.components.page.Page` to create a page. The recommended pattern is a `BasePage` that defines the shared layout, with individual pages overriding only what they need.
338
+
339
+ ```py
340
+ # web/ui/pages/base.py
341
+ from duck.html.components.container import FlexContainer
342
+ from duck.html.components.page import Page
343
+
344
+ class BasePage(Page):
345
+ def on_create(self):
346
+ super().on_create()
347
+ self.set_title("MySite")
348
+ self.set_description("Some base description ...")
349
+
350
+ # Set up the root layout container
351
+ self.main = FlexContainer(flex_direction="column")
352
+ self.add_to_body(self.main)
353
+
354
+ self.build_layout(self.main)
355
+
356
+ def build_layout(self, main):
357
+ # Override in subclasses to define page-specific layout
358
+ pass
359
+ ```
360
+
361
+ ```py
362
+ # web/ui/pages/home.py
363
+ from duck.html.components.container import Container
364
+ from web.ui.pages.base import BasePage
365
+
366
+ class HomePage(BasePage):
367
+ def build_layout(self, main):
368
+ main.add_child(Container(text="Hello world"))
369
+ ```
370
+
371
+ **Using Pages in views:**
372
+
373
+ ```py
374
+ # web/views.py
375
+ from duck.shortcuts import to_response
376
+
377
+ def home(request):
378
+ return to_response(HomePage(request))
379
+ ```
380
+
381
+ > Pages automatically enable fast client-side navigation via Lively. Unlike templates, switching between pages does not trigger a full reload.
382
+
383
+ ---
384
+
385
+ #### `web/ui/components/`
386
+
387
+ Where your custom reusable components live. The example below shows a feedback form with real-time UI updates powered by Lively.
388
+
389
+ ```py
390
+ # web/ui/components/form.py
391
+ from duck.html.components.form import Form
392
+ from duck.html.components.input import Input, InputWithLabel
393
+ from duck.html.components.textarea import TextArea
394
+ from duck.html.components.button import Button
395
+ from duck.html.components.label import Label
396
+
397
+ class MyFeedbackForm(Form):
398
+ def on_create(self):
399
+ super().on_create()
400
+
401
+ # Status label for displaying feedback or errors
402
+ self.label = Label(text="")
403
+
404
+ self.add_children([
405
+ self.label,
406
+ InputWithLabel(
407
+ label_text="Your name",
408
+ input=Input(name="name", type="text", placeholder="Enter your name", required=True),
409
+ ),
410
+ InputWithLabel(
411
+ label_text="Your message",
412
+ input=TextArea(name="message", placeholder="Your message", required=True),
413
+ ),
414
+ Button(text="Submit", props={"type": "submit"}),
415
+ ])
416
+
417
+ # Bind submit event — update_targets lists components to re-render on the client
418
+ self.bind("submit", self.on_form_submit, update_self=True, update_targets=[self.label])
419
+
420
+ async def on_form_submit(self, form, event, form_inputs, ws):
421
+ name = form_inputs.get("name").strip()
422
+ message = form_inputs.get("message").strip()
423
+
424
+ # Validate and persist the message here
425
+
426
+ # Patch the label in-place on the client
427
+ self.label.text = "Your message has been received"
428
+ self.label.color = "green"
429
+ ```
430
+
431
+ ---
432
+
433
+ #### `web/ui/templates/`
434
+
435
+ Prefer classic server-rendered templates? Store them here. Duck supports both **Django** and **Jinja2** template engines.
436
+
437
+ ```django
438
+ {# web/ui/templates/home.html #}
439
+ {% extends 'base.html' %}
440
+
441
+ {% block main %}
442
+ Hello world!
443
+ {% endblock main %}
444
+ ```
445
+
446
+ ```py
447
+ # web/views.py
448
+ from duck.shortcuts import render, async_render
449
+
450
+ def home(request):
451
+ return render("home.html", engine="django") # or engine="jinja2"
452
+
453
+ async def async_home(request):
454
+ return await async_render("home.html", engine="django")
455
+ ```
456
+
457
+ > You can also use HTML components inside templates. See [Lively Components](https://docs.duckframework.com/main/lively-components) for details.
458
+
459
+ #### `web/ui/static/`
460
+
461
+ This directory contains all the static files like css/js files, images or videos for your application.
462
+
463
+ > Instead of hard-coding static file URLs in components or templates, use the `static` function in `duck.shortcuts` module.
464
+
465
+ ```py
466
+ # views.py
467
+ from duck.shortcuts import static
468
+
469
+ def home(request):
470
+ # Instead of:
471
+ my_image_url = "/static/images/my-image.png"
472
+
473
+ # Do this instead:
474
+ my_image_url = static("images/my-image.png")
475
+
476
+ return "Hello world" # Anything here.
477
+ ```
478
+
479
+ > The same applies with hard-coding internal URLs, use the `resolve()` function in `duck.shortcuts`.
480
+
481
+ ---
482
+
483
+ ## Django Integration
484
+
485
+ If you have an existing **Django** project and want production features like **HTTPS**, **HTTP/2**, and **resumable downloads**, Duck makes it easy.
486
+
487
+ Unlike `nginx` setups, **Duck** simplifies this with a few commands.
488
+
489
+ ### Benefits
490
+
491
+ - Native [HTTP/2 & HTTPS](https://docs.duckframework.com/main/https-and-http2) implementation.
492
+ - Extra built-in security [middleware](https://docs.duckframework.com/main/middlewares) (DoS, SQLi, etc.)
493
+ - Duck and Django run in the same Python environment (faster communication)
494
+ - Auto-compressed responses
495
+ - Resumable large downloads
496
+ - Fast and [Reactive Lively components](https://docs.duckframework.com/main/lively-components) - for beautiful & responsive UI.
497
+ - [Free SSL with renewal](https://docs.duckframework.com/main/free-ssl-certificate)
498
+ - and more
499
+
500
+ ### Usage
501
+
502
+ ```sh
503
+ duck makeproject myproject
504
+ cd myproject
505
+ duck django-add "path/to/your/django_project"
506
+ duck runserver -dj
507
+ ```
508
+
509
+ ### Notes:
510
+
511
+ - Follow instructions provided by `django-add` command carefully
512
+ - Make sure your Django project defines at least one `urlpattern`
513
+ - Once setup, you’re good to go!
514
+
515
+ ---
516
+
517
+ ## Useful Links
518
+
519
+ 1. [Official Website](https://duckframework.com)
520
+ 2. [Documentation](https://docs.duckframework.com)
521
+ 3. [Lively UI Documentation](https://docs.duckframework.com/main/lively-components)
522
+
523
+ ---
524
+
525
+ ## 🚀 Premium Duck Components Coming Soon!
526
+ >
527
+ > All our UI components are currently free and open source. Stay tuned for upcoming Pro Packs featuring advanced dashboards, e-commerce, and integrations!
528
+ >
529
+ > ⭐ Star this repo to get notified on release!
530
+
531
+
532
+ ## Contributing & Issues
533
+
534
+ **Duck** is open to all forms of contribution — financial or technical.
535
+
536
+ ### Sponsorship/Donations:
537
+
538
+ Support development on [Patreon](https://patreon.com/duckframework)
539
+
540
+ ### Report issues:
541
+
542
+ Use the [GitHub Issues page](https://github.com/duckframework/duck/issues)
543
+
544
+ ---
545
+
546
+ > **Duck is updated regularly** — check the repo for improvements and bug fixes.