portacode 2.2.22.dev1__tar.gz → 2.2.24__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 (456) hide show
  1. {portacode-2.2.22.dev1 → portacode-2.2.24}/PKG-INFO +1 -1
  2. portacode-2.2.24/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode +15 -0
  3. portacode-2.2.24/examples/simple_device/data/device-01/.local/share/portacode/keys/id_portacode.pub +6 -0
  4. portacode-2.2.24/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode +15 -0
  5. portacode-2.2.24/examples/workshop_fleet/data/student-01/.local/share/portacode/keys/id_portacode.pub +6 -0
  6. portacode-2.2.24/examples/workshop_fleet/data/student-01/.local/share/portacode/run/gateway.pid +1 -0
  7. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/.gitignore +2 -0
  8. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/db.sqlite3 +0 -0
  9. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/__init__.cpython-311.pyc +0 -0
  10. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/settings.cpython-311.pyc +0 -0
  11. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/urls.cpython-311.pyc +0 -0
  12. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/galactic_bakeshop/__pycache__/wsgi.cpython-311.pyc +0 -0
  13. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/templates/treats/home.html +137 -0
  14. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/__init__.cpython-311.pyc +0 -0
  15. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/admin.cpython-311.pyc +0 -0
  16. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/apps.cpython-311.pyc +0 -0
  17. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/menu.cpython-311.pyc +0 -0
  18. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/models.cpython-311.pyc +0 -0
  19. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/urls.cpython-311.pyc +0 -0
  20. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/__pycache__/views.cpython-311.pyc +0 -0
  21. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/menu.py +69 -0
  22. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/migrations/__pycache__/__init__.cpython-311.pyc +0 -0
  23. portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace/treats/views.py +28 -0
  24. portacode-2.2.24/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode +15 -0
  25. portacode-2.2.24/examples/workshop_fleet/data/student-02/.local/share/portacode/keys/id_portacode.pub +6 -0
  26. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/README.md +38 -0
  27. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/__init__.py +1 -0
  28. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/asgi.py +13 -0
  29. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/settings.py +87 -0
  30. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/urls.py +13 -0
  31. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/galactic_bakeshop/wsgi.py +13 -0
  32. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/manage.py +22 -0
  33. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/requirements.txt +1 -0
  34. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/treats/__init__.py +1 -0
  35. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/treats/admin.py +3 -0
  36. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/treats/apps.py +6 -0
  37. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/treats/migrations/__init__.py +1 -0
  38. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/treats/models.py +11 -0
  39. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/treats/tests.py +15 -0
  40. portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace/treats/urls.py +9 -0
  41. portacode-2.2.24/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode +15 -0
  42. portacode-2.2.24/examples/workshop_fleet/data/student-03/.local/share/portacode/keys/id_portacode.pub +6 -0
  43. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/README.md +38 -0
  44. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/__init__.py +1 -0
  45. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/asgi.py +13 -0
  46. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/settings.py +87 -0
  47. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/urls.py +13 -0
  48. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/galactic_bakeshop/wsgi.py +13 -0
  49. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/manage.py +22 -0
  50. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/requirements.txt +1 -0
  51. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/templates/treats/home.html +85 -0
  52. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/treats/__init__.py +1 -0
  53. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/treats/admin.py +3 -0
  54. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/treats/apps.py +6 -0
  55. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/treats/menu.py +43 -0
  56. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/treats/migrations/__init__.py +1 -0
  57. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/treats/models.py +11 -0
  58. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/treats/tests.py +15 -0
  59. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/treats/urls.py +9 -0
  60. portacode-2.2.24/examples/workshop_fleet/data/student-03/workspace/treats/views.py +22 -0
  61. portacode-2.2.24/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode +15 -0
  62. portacode-2.2.24/examples/workshop_fleet/data/student-04/.local/share/portacode/keys/id_portacode.pub +6 -0
  63. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/README.md +38 -0
  64. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/__init__.py +1 -0
  65. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/asgi.py +13 -0
  66. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/settings.py +87 -0
  67. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/urls.py +13 -0
  68. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/galactic_bakeshop/wsgi.py +13 -0
  69. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/manage.py +22 -0
  70. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/requirements.txt +1 -0
  71. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/templates/treats/home.html +85 -0
  72. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/treats/__init__.py +1 -0
  73. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/treats/admin.py +3 -0
  74. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/treats/apps.py +6 -0
  75. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/treats/menu.py +43 -0
  76. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/treats/migrations/__init__.py +1 -0
  77. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/treats/models.py +11 -0
  78. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/treats/tests.py +15 -0
  79. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/treats/urls.py +9 -0
  80. portacode-2.2.24/examples/workshop_fleet/data/student-04/workspace/treats/views.py +22 -0
  81. portacode-2.2.24/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode +15 -0
  82. portacode-2.2.24/examples/workshop_fleet/data/student-05/.local/share/portacode/keys/id_portacode.pub +6 -0
  83. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/README.md +38 -0
  84. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/__init__.py +1 -0
  85. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/asgi.py +13 -0
  86. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/settings.py +87 -0
  87. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/urls.py +13 -0
  88. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/galactic_bakeshop/wsgi.py +13 -0
  89. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/manage.py +22 -0
  90. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/requirements.txt +1 -0
  91. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/templates/treats/home.html +85 -0
  92. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/treats/__init__.py +1 -0
  93. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/treats/admin.py +3 -0
  94. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/treats/apps.py +6 -0
  95. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/treats/menu.py +43 -0
  96. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/treats/migrations/__init__.py +1 -0
  97. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/treats/models.py +11 -0
  98. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/treats/tests.py +15 -0
  99. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/treats/urls.py +9 -0
  100. portacode-2.2.24/examples/workshop_fleet/data/student-05/workspace/treats/views.py +22 -0
  101. portacode-2.2.24/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode +15 -0
  102. portacode-2.2.24/examples/workshop_fleet/data/student-06/.local/share/portacode/keys/id_portacode.pub +6 -0
  103. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/README.md +38 -0
  104. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/__init__.py +1 -0
  105. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/asgi.py +13 -0
  106. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/settings.py +87 -0
  107. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/urls.py +13 -0
  108. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/galactic_bakeshop/wsgi.py +13 -0
  109. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/manage.py +22 -0
  110. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/requirements.txt +1 -0
  111. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/templates/treats/home.html +85 -0
  112. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/treats/__init__.py +1 -0
  113. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/treats/admin.py +3 -0
  114. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/treats/apps.py +6 -0
  115. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/treats/menu.py +43 -0
  116. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/treats/migrations/__init__.py +1 -0
  117. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/treats/models.py +11 -0
  118. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/treats/tests.py +15 -0
  119. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/treats/urls.py +9 -0
  120. portacode-2.2.24/examples/workshop_fleet/data/student-06/workspace/treats/views.py +22 -0
  121. portacode-2.2.24/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode +15 -0
  122. portacode-2.2.24/examples/workshop_fleet/data/student-07/.local/share/portacode/keys/id_portacode.pub +6 -0
  123. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/README.md +38 -0
  124. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/__init__.py +1 -0
  125. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/asgi.py +13 -0
  126. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/settings.py +87 -0
  127. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/urls.py +13 -0
  128. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/galactic_bakeshop/wsgi.py +13 -0
  129. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/manage.py +22 -0
  130. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/requirements.txt +1 -0
  131. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/templates/treats/home.html +85 -0
  132. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/treats/__init__.py +1 -0
  133. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/treats/admin.py +3 -0
  134. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/treats/apps.py +6 -0
  135. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/treats/menu.py +43 -0
  136. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/treats/migrations/__init__.py +1 -0
  137. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/treats/models.py +11 -0
  138. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/treats/tests.py +15 -0
  139. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/treats/urls.py +9 -0
  140. portacode-2.2.24/examples/workshop_fleet/data/student-07/workspace/treats/views.py +22 -0
  141. portacode-2.2.24/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode +15 -0
  142. portacode-2.2.24/examples/workshop_fleet/data/student-08/.local/share/portacode/keys/id_portacode.pub +6 -0
  143. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/README.md +38 -0
  144. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/__init__.py +1 -0
  145. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/asgi.py +13 -0
  146. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/settings.py +87 -0
  147. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/urls.py +13 -0
  148. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/galactic_bakeshop/wsgi.py +13 -0
  149. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/manage.py +22 -0
  150. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/requirements.txt +1 -0
  151. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/templates/treats/home.html +85 -0
  152. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/treats/__init__.py +1 -0
  153. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/treats/admin.py +3 -0
  154. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/treats/apps.py +6 -0
  155. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/treats/menu.py +43 -0
  156. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/treats/migrations/__init__.py +1 -0
  157. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/treats/models.py +11 -0
  158. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/treats/tests.py +15 -0
  159. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/treats/urls.py +9 -0
  160. portacode-2.2.24/examples/workshop_fleet/data/student-08/workspace/treats/views.py +22 -0
  161. portacode-2.2.24/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode +15 -0
  162. portacode-2.2.24/examples/workshop_fleet/data/student-09/.local/share/portacode/keys/id_portacode.pub +6 -0
  163. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/README.md +38 -0
  164. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/__init__.py +1 -0
  165. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/asgi.py +13 -0
  166. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/settings.py +87 -0
  167. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/urls.py +13 -0
  168. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/galactic_bakeshop/wsgi.py +13 -0
  169. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/manage.py +22 -0
  170. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/requirements.txt +1 -0
  171. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/templates/treats/home.html +85 -0
  172. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/treats/__init__.py +1 -0
  173. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/treats/admin.py +3 -0
  174. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/treats/apps.py +6 -0
  175. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/treats/menu.py +43 -0
  176. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/treats/migrations/__init__.py +1 -0
  177. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/treats/models.py +11 -0
  178. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/treats/tests.py +15 -0
  179. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/treats/urls.py +9 -0
  180. portacode-2.2.24/examples/workshop_fleet/data/student-09/workspace/treats/views.py +22 -0
  181. portacode-2.2.24/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode +15 -0
  182. portacode-2.2.24/examples/workshop_fleet/data/student-10/.local/share/portacode/keys/id_portacode.pub +6 -0
  183. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/README.md +38 -0
  184. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/__init__.py +1 -0
  185. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/asgi.py +13 -0
  186. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/settings.py +87 -0
  187. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/urls.py +13 -0
  188. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/galactic_bakeshop/wsgi.py +13 -0
  189. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/manage.py +22 -0
  190. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/requirements.txt +1 -0
  191. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/templates/treats/home.html +85 -0
  192. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/treats/__init__.py +1 -0
  193. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/treats/admin.py +3 -0
  194. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/treats/apps.py +6 -0
  195. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/treats/menu.py +43 -0
  196. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/treats/migrations/__init__.py +1 -0
  197. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/treats/models.py +11 -0
  198. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/treats/tests.py +15 -0
  199. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/treats/urls.py +9 -0
  200. portacode-2.2.24/examples/workshop_fleet/data/student-10/workspace/treats/views.py +22 -0
  201. portacode-2.2.24/examples/workshop_fleet/initial_content/README.md +38 -0
  202. portacode-2.2.24/examples/workshop_fleet/initial_content/galactic_bakeshop/__init__.py +1 -0
  203. portacode-2.2.24/examples/workshop_fleet/initial_content/galactic_bakeshop/asgi.py +13 -0
  204. portacode-2.2.24/examples/workshop_fleet/initial_content/galactic_bakeshop/settings.py +87 -0
  205. portacode-2.2.24/examples/workshop_fleet/initial_content/galactic_bakeshop/urls.py +13 -0
  206. portacode-2.2.24/examples/workshop_fleet/initial_content/galactic_bakeshop/wsgi.py +13 -0
  207. portacode-2.2.24/examples/workshop_fleet/initial_content/manage.py +22 -0
  208. portacode-2.2.24/examples/workshop_fleet/initial_content/requirements.txt +1 -0
  209. portacode-2.2.24/examples/workshop_fleet/initial_content/templates/treats/home.html +85 -0
  210. portacode-2.2.24/examples/workshop_fleet/initial_content/treats/__init__.py +1 -0
  211. portacode-2.2.24/examples/workshop_fleet/initial_content/treats/admin.py +3 -0
  212. portacode-2.2.24/examples/workshop_fleet/initial_content/treats/apps.py +6 -0
  213. portacode-2.2.24/examples/workshop_fleet/initial_content/treats/menu.py +43 -0
  214. portacode-2.2.24/examples/workshop_fleet/initial_content/treats/migrations/__init__.py +1 -0
  215. portacode-2.2.24/examples/workshop_fleet/initial_content/treats/models.py +11 -0
  216. portacode-2.2.24/examples/workshop_fleet/initial_content/treats/tests.py +15 -0
  217. portacode-2.2.24/examples/workshop_fleet/initial_content/treats/urls.py +9 -0
  218. portacode-2.2.24/examples/workshop_fleet/initial_content/treats/views.py +22 -0
  219. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/_version.py +2 -2
  220. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/codex_loopback_proxy.py +2 -0
  221. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/proxmox_infra.py +17 -1
  222. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/test_proxmox_infra.py +10 -5
  223. portacode-2.2.24/portacode/link_capture/__pycache__/__init__.cpython-311.pyc +0 -0
  224. portacode-2.2.24/portacode/link_capture/__pycache__/__init__.cpython-38.pyc +0 -0
  225. portacode-2.2.24/portacode/link_capture/bin/__pycache__/link_capture_wrapper.cpython-311.pyc +0 -0
  226. portacode-2.2.24/portacode/link_capture/bin/__pycache__/link_capture_wrapper.cpython-38.pyc +0 -0
  227. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode.egg-info/PKG-INFO +1 -1
  228. portacode-2.2.24/portacode.egg-info/SOURCES.txt +452 -0
  229. portacode-2.2.22.dev1/docs/template-engineering-roadmap.md +0 -414
  230. portacode-2.2.22.dev1/portacode.egg-info/SOURCES.txt +0 -232
  231. {portacode-2.2.22.dev1 → portacode-2.2.24}/.gitignore +0 -0
  232. {portacode-2.2.22.dev1 → portacode-2.2.24}/LICENSE +0 -0
  233. {portacode-2.2.22.dev1 → portacode-2.2.24}/MANIFEST.in +0 -0
  234. {portacode-2.2.22.dev1 → portacode-2.2.24}/Makefile +0 -0
  235. {portacode-2.2.22.dev1 → portacode-2.2.24}/README.md +0 -0
  236. {portacode-2.2.22.dev1 → portacode-2.2.24}/build_android.sh +0 -0
  237. {portacode-2.2.22.dev1 → portacode-2.2.24}/connect.py +0 -0
  238. {portacode-2.2.22.dev1 → portacode-2.2.24}/connect.sh +0 -0
  239. {portacode-2.2.22.dev1 → portacode-2.2.24}/docs/cloudflared-domain-connect-containers-audit.md +0 -0
  240. {portacode-2.2.22.dev1 → portacode-2.2.24}/docs/creative-team-brief-portacode.md +0 -0
  241. {portacode-2.2.22.dev1 → portacode-2.2.24}/docs/device-health-alerting-plan.md +0 -0
  242. {portacode-2.2.22.dev1 → portacode-2.2.24}/docs/devops-messaging-ab-tests.md +0 -0
  243. {portacode-2.2.22.dev1 → portacode-2.2.24}/docs/guest-host-requests-plan.md +0 -0
  244. {portacode-2.2.22.dev1 → portacode-2.2.24}/docs/homepage-dashboard-positioning-fixes.md +0 -0
  245. {portacode-2.2.22.dev1 → portacode-2.2.24}/docs/template-guide.html +0 -0
  246. {portacode-2.2.22.dev1 → portacode-2.2.24}/examples/README.md +0 -0
  247. {portacode-2.2.22.dev1 → portacode-2.2.24}/examples/simple_device/Dockerfile +0 -0
  248. {portacode-2.2.22.dev1 → portacode-2.2.24}/examples/simple_device/README.md +0 -0
  249. {portacode-2.2.22.dev1 → portacode-2.2.24}/examples/simple_device/docker-compose.yaml +0 -0
  250. {portacode-2.2.22.dev1 → portacode-2.2.24}/examples/workshop_fleet/Dockerfile +0 -0
  251. {portacode-2.2.22.dev1 → portacode-2.2.24}/examples/workshop_fleet/README.md +0 -0
  252. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/README.md +0 -0
  253. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/galactic_bakeshop/__init__.py +0 -0
  254. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/galactic_bakeshop/asgi.py +0 -0
  255. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/galactic_bakeshop/settings.py +0 -0
  256. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/galactic_bakeshop/urls.py +0 -0
  257. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/galactic_bakeshop/wsgi.py +0 -0
  258. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/manage.py +0 -0
  259. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/requirements.txt +0 -0
  260. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/treats/__init__.py +0 -0
  261. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/treats/admin.py +0 -0
  262. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/treats/apps.py +0 -0
  263. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/treats/migrations/__init__.py +0 -0
  264. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/treats/models.py +0 -0
  265. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/treats/tests.py +0 -0
  266. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-01/workspace}/treats/urls.py +0 -0
  267. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace}/templates/treats/home.html +0 -0
  268. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace}/treats/menu.py +0 -0
  269. {portacode-2.2.22.dev1/examples/workshop_fleet/initial_content → portacode-2.2.24/examples/workshop_fleet/data/student-02/workspace}/treats/views.py +0 -0
  270. {portacode-2.2.22.dev1 → portacode-2.2.24}/examples/workshop_fleet/docker-compose.yaml +0 -0
  271. {portacode-2.2.22.dev1 → portacode-2.2.24}/examples/workshop_fleet/instructions/WELCOME.md +0 -0
  272. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/README.md +0 -0
  273. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/__init__.py +0 -0
  274. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/__main__.py +0 -0
  275. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/assets/skills/portacode-github/SKILL.md +0 -0
  276. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/assets/skills/portacode-github/agents/openai.yaml +0 -0
  277. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/assets/skills/portacode-github/scripts/create_repository.py +0 -0
  278. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/assets/skills/portacode-image/SKILL.md +0 -0
  279. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/assets/skills/portacode-image/agents/openai.yaml +0 -0
  280. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/browser_cli.py +0 -0
  281. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/browser_prepare.py +0 -0
  282. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/browser_runtime.py +0 -0
  283. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/cli.py +0 -0
  284. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/codex_prepare.py +0 -0
  285. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/codex_usage_limit.py +0 -0
  286. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/README.md +0 -0
  287. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/__init__.py +0 -0
  288. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/client.py +0 -0
  289. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/codex_app_server.py +0 -0
  290. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/guest_host_protocol.py +0 -0
  291. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/README.md +0 -0
  292. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/WEBSOCKET_PROTOCOL.md +0 -0
  293. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/__init__.py +0 -0
  294. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/automation_v2_handlers.py +0 -0
  295. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/base.py +0 -0
  296. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/browser_handlers.py +0 -0
  297. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/chunked_content.py +0 -0
  298. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/cloudflare_forwarding.py +0 -0
  299. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/cloudflare_tunnel.py +0 -0
  300. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/codex_handlers.py +0 -0
  301. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/diff_handlers.py +0 -0
  302. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/file_handlers.py +0 -0
  303. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/file_transfer_handlers.py +0 -0
  304. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/git_handlers.py +0 -0
  305. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_aware_file_handlers.py +0 -0
  306. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state/README.md +0 -0
  307. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state/__init__.py +0 -0
  308. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state/file_system_watcher.py +0 -0
  309. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state/git_manager.py +0 -0
  310. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state/handlers.py +0 -0
  311. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state/manager.py +0 -0
  312. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state/models.py +0 -0
  313. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state/test_handlers.py +0 -0
  314. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state/utils.py +0 -0
  315. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/project_state_handlers.py +0 -0
  316. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/registry.py +0 -0
  317. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/resumable_transfer_handlers.py +0 -0
  318. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/runtime_user.py +0 -0
  319. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/session.py +0 -0
  320. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/system_handlers.py +0 -0
  321. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/tab_factory.py +0 -0
  322. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/terminal_handlers.py +0 -0
  323. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/test_browser_handlers.py +0 -0
  324. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/test_cloudflare_forwarding.py +0 -0
  325. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/test_file_move_copy.py +0 -0
  326. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/test_git_handlers.py +0 -0
  327. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/test_runtime_user.py +0 -0
  328. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/handlers/update_handler.py +0 -0
  329. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/multiplex.py +0 -0
  330. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/terminal.py +0 -0
  331. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/test_guest_host_protocol.py +0 -0
  332. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/test_guest_host_terminal.py +0 -0
  333. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/test_webmin_proxy_config.py +0 -0
  334. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/connection/webmin_proxy_config.py +0 -0
  335. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/data.py +0 -0
  336. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/exit_codes.py +0 -0
  337. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/github_credential.py +0 -0
  338. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/image_cli.py +0 -0
  339. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/keypair.py +0 -0
  340. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/__init__.py +0 -0
  341. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/elinks +0 -0
  342. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/gio-open +0 -0
  343. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/gnome-open +0 -0
  344. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/gvfs-open +0 -0
  345. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/kde-open +0 -0
  346. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/kfmclient +0 -0
  347. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/link_capture_exec.sh +0 -0
  348. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/link_capture_wrapper.py +0 -0
  349. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/links +0 -0
  350. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/links2 +0 -0
  351. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/lynx +0 -0
  352. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/mate-open +0 -0
  353. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/netsurf +0 -0
  354. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/sensible-browser +0 -0
  355. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/w3m +0 -0
  356. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/x-www-browser +0 -0
  357. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/link_capture/bin/xdg-open +0 -0
  358. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/logging_categories.py +0 -0
  359. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/pairing.py +0 -0
  360. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/provisioning_cache.py +0 -0
  361. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/restart.py +0 -0
  362. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/service.py +0 -0
  363. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/singleton.py +0 -0
  364. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/static/js/test-ntp-clock.html +0 -0
  365. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/static/js/utils/ntp-clock.js +0 -0
  366. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/test_runtime_paths.py +0 -0
  367. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/test_service.py +0 -0
  368. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/test_singleton.py +0 -0
  369. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/test_terminal_exposed_services.py +0 -0
  370. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_automation_v2_inputs.py +0 -0
  371. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_browser_cli.py +0 -0
  372. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_browser_prepare.py +0 -0
  373. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_cli_service_logs.py +0 -0
  374. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_codex_app_server.py +0 -0
  375. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_codex_handlers.py +0 -0
  376. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_codex_loopback_proxy.py +0 -0
  377. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_codex_prepare.py +0 -0
  378. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_github_credential.py +0 -0
  379. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_image_cli.py +0 -0
  380. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_image_read_handler.py +0 -0
  381. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_resumable_transfer_handlers.py +0 -0
  382. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_system_handlers.py +0 -0
  383. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_terminal_periodic_system_info.py +0 -0
  384. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tests/test_terminal_session_shell.py +0 -0
  385. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tunneling/__init__.py +0 -0
  386. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tunneling/cloudflared_login.py +0 -0
  387. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tunneling/ensure_cloudflared.py +0 -0
  388. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tunneling/ensure_pyyaml.py +0 -0
  389. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tunneling/forwarding_state.py +0 -0
  390. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tunneling/get_domain.py +0 -0
  391. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tunneling/privileged.py +0 -0
  392. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tunneling/service_install.py +0 -0
  393. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/tunneling/state.py +0 -0
  394. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/updater.py +0 -0
  395. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/utils/NTP_ARCHITECTURE.md +0 -0
  396. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/utils/__init__.py +0 -0
  397. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/utils/diff_apply.py +0 -0
  398. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/utils/diff_renderer.py +0 -0
  399. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/utils/ntp_clock.py +0 -0
  400. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode/utils/runtime_paths.py +0 -0
  401. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode.egg-info/dependency_links.txt +0 -0
  402. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode.egg-info/entry_points.txt +0 -0
  403. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode.egg-info/requires.txt +0 -0
  404. {portacode-2.2.22.dev1 → portacode-2.2.24}/portacode.egg-info/top_level.txt +0 -0
  405. {portacode-2.2.22.dev1 → portacode-2.2.24}/pyproject.toml +0 -0
  406. {portacode-2.2.22.dev1 → portacode-2.2.24}/run_tests.py +0 -0
  407. {portacode-2.2.22.dev1 → portacode-2.2.24}/scripts/diagnose_codex_gateway.py +0 -0
  408. {portacode-2.2.22.dev1 → portacode-2.2.24}/setup.cfg +0 -0
  409. {portacode-2.2.22.dev1 → portacode-2.2.24}/setup.py +0 -0
  410. {portacode-2.2.22.dev1 → portacode-2.2.24}/test.sh +0 -0
  411. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/README.md +0 -0
  412. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/__init__.py +0 -0
  413. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_device_online.py +0 -0
  414. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_file_operations.py +0 -0
  415. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_git_status_ui.py +0 -0
  416. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_login_flow.py +0 -0
  417. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_navigate_testing_folder.py +0 -0
  418. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_play_store_screenshots.py +0 -0
  419. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_terminal_buffer_performance.py +0 -0
  420. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_terminal_interaction.py +0 -0
  421. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_terminal_loading_race_condition.py +0 -0
  422. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_modules/test_terminal_start.py +0 -0
  423. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_request_id.py +0 -0
  424. {portacode-2.2.22.dev1 → portacode-2.2.24}/test_session_terminal_shutdown.py +0 -0
  425. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/.env.example +0 -0
  426. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/README.md +0 -0
  427. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/__init__.py +0 -0
  428. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/cli.py +0 -0
  429. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/core/__init__.py +0 -0
  430. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/core/base_test.py +0 -0
  431. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/core/cli_manager.py +0 -0
  432. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/core/hierarchical_runner.py +0 -0
  433. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/core/playwright_manager.py +0 -0
  434. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/core/runner.py +0 -0
  435. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/core/shared_cli_manager.py +0 -0
  436. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/core/test_discovery.py +0 -0
  437. {portacode-2.2.22.dev1 → portacode-2.2.24}/testing_framework/requirements.txt +0 -0
  438. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/UI_UX/opening_a_file_on_desktop_results_in_nothing.md +0 -0
  439. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/UI_UX/server_occasionally_stops_communicating_with_all_devices.md +0 -0
  440. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/agent_context_management.md +0 -0
  441. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/django_server_time_sync.md +0 -0
  442. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/issues/device_performance_degradation.md +0 -0
  443. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/issues/git_data_not_captured_in_proxmox.md +0 -0
  444. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/issues/indefinite_resource_loading.md +0 -0
  445. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/issues/portacode_service_silently_down.md +0 -0
  446. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/issues/premature_terminal_exit.md +0 -0
  447. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/issues/project_cpu_hotspots.md +0 -0
  448. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/issues/terminals_exit_upon_starting.md +0 -0
  449. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/issues/websocket_client_silently_dead.md +0 -0
  450. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/issues/wrong_item_classification_on_client_side.md +0 -0
  451. {portacode-2.2.22.dev1 → portacode-2.2.24}/todo/smartphone_terminal_input_frustrations.md +0 -0
  452. {portacode-2.2.22.dev1 → portacode-2.2.24}/tools/generate_play_store_assets.py +0 -0
  453. {portacode-2.2.22.dev1 → portacode-2.2.24}/tools/pairing_tester.py +0 -0
  454. {portacode-2.2.22.dev1 → portacode-2.2.24}/tools/run_screenshot_suite.sh +0 -0
  455. {portacode-2.2.22.dev1 → portacode-2.2.24}/tools/test_python_ntp_clock.py +0 -0
  456. {portacode-2.2.22.dev1 → portacode-2.2.24}/validate.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: portacode
3
- Version: 2.2.22.dev1
3
+ Version: 2.2.24
4
4
  Summary: Device agent for the AI platform that builds, tests, deploys, and operates real software
5
5
  Home-page: https://portacode.com/
6
6
  Author: Meena Erian
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICXAIBAAKBgQDHaiNiWx3PuZdVt4eRSv1Hs1Uaydg9WfdhBxcnmTO1iyx1b/uP
3
+ jMfZRmq82u+l7YzrdOUJuZ945MXNvoyKbW3lMmzB4TRQCLbhtZpsRolQeFdfRbOG
4
+ LCUuS5EBzaoADIOAfqXNVxoOsZtbMvy5RpDCj+TkEVEEJ5o0dmG0oKV5jwIDAQAB
5
+ AoGBALce2nt5nLiifzwxmwZrTIdJQT+mVzKPqUGqlzK/1uJBeYQmX2YFK4h0x5PB
6
+ oQxIRn36DFGP6cfEnXhAISMFNkH+jD2dZ8zmsJ5di3rJXaW7tHVMXirqc2/5Mm4M
7
+ eYueIxNkLQmoDUjpd6gDicMzTTuoAvYwoqG9+BJgmDyKShYhAkEA/9pPov+6slW5
8
+ FxXZP/fkVHLAP4VihjVvB3NNLGllvrJU2QvAIMCz/F0F+o4Ip7juJEqN9kV5HSrz
9
+ wCZ39HUwlwJBAMeHg24A0FFpxbXC1umBJr8/iW/hSQlAe1StsK/jFECRYhBv/blV
10
+ 3uLgHT6M3OxT6p6jDBVXb+qMldOqMiNXpckCQFGErFUB5+lEONnrIzIneH+TpD9Y
11
+ 72BVjA+ypAcfecR9q10QSmHlJDOnK+197bIK0Q2NF5g84G7zrYAugY/I+vcCQDZh
12
+ otqqchyeXXqKnhSKVMsvQAA0QLm6z2Jm7I8jrvNiLH4aZ+bJlrPzLUVNEzF+NaYC
13
+ /loauLAOnQ9RhdTIILECQBouKA8XwYhOTlA4d8EK34Zf3t4JWsMnHR3Twh4aOIKi
14
+ xViNG6iVz2h86CueckTho/JOV8KLvR9cBaDmDQ+xNW0=
15
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHaiNiWx3PuZdVt4eRSv1Hs1Ua
3
+ ydg9WfdhBxcnmTO1iyx1b/uPjMfZRmq82u+l7YzrdOUJuZ945MXNvoyKbW3lMmzB
4
+ 4TRQCLbhtZpsRolQeFdfRbOGLCUuS5EBzaoADIOAfqXNVxoOsZtbMvy5RpDCj+Tk
5
+ EVEEJ5o0dmG0oKV5jwIDAQAB
6
+ -----END PUBLIC KEY-----
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICXQIBAAKBgQCTWwQ71WOKaYCgldu/tfRtBdGlxjysx+BysYXLWjUcyF3AzOtA
3
+ 9Ux3e/w5wbMxFBzeyf/C1bC1ZBS06E5Tv308jVCDxNHlxHhwdHOQHbUiiyS+g/pn
4
+ Gy9PFZVBMJoB3JXWU/APKKkR1ZIfFEWaeI81vmYklycBzqxj92F3diU74QIDAQAB
5
+ AoGBAIqhsXz9SDXbBimOc3yMmdXMCK4Wr9S6Ax7EhySGzLs0goe2AopNfVBYNDa+
6
+ VnCRBIxRrK7HzgUJkDWW7MH7wLy+najlclFGJEX4ahLpqDKe5u7IrkU4knC75U5o
7
+ c4mb38RpmSWA+qHqCmih7L5OriYqU0ZS6x86okNVBia0zRrBAkEAwkv80H5UgS9q
8
+ JR2bhNkB3musL75psg7j+1aQsg/fMHXyATfSXCOIpeZr5Hhz0hv/x/1Uw8sbkn8p
9
+ 5G4c180BGQJBAMImx3BO+OpozKkgdJ797p0Ufd8kvCRPAKf/i2WsaPObqGEQAZlh
10
+ fzf3DlWRAQ1TkrufoMUqY+iseCDvyu0eAgkCQFeRacsJ9MoYdY1uz6XLLEVzX7JQ
11
+ 7lAa1/NyK1qlPqEXt0+HOh7ewPqMZDofc4vRpLEc4vQveSjIeTgDzKoSMhkCQDye
12
+ OvrXzWPy4KOVnJPfmNa2hS5cm9mCSSQq520RTZtx6DqV8sne5QemPXV91qRAibnG
13
+ 9z1YJOWKo980v1kVW3ECQQCAzKWdkUNEHPUHVZdPLk8AVDVFwaYbhWqR821X5ykU
14
+ s5Tf00HZdm6rGtd1YqL1dajvIotfPEkO2NNArRrq6mxh
15
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTWwQ71WOKaYCgldu/tfRtBdGl
3
+ xjysx+BysYXLWjUcyF3AzOtA9Ux3e/w5wbMxFBzeyf/C1bC1ZBS06E5Tv308jVCD
4
+ xNHlxHhwdHOQHbUiiyS+g/pnGy9PFZVBMJoB3JXWU/APKKkR1ZIfFEWaeI81vmYk
5
+ lycBzqxj92F3diU74QIDAQAB
6
+ -----END PUBLIC KEY-----
@@ -0,0 +1,137 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title>Cosmic Cupcake Stand</title>
6
+ <style>
7
+ body {
8
+ background: #080a1c;
9
+ color: #f7f7ff;
10
+ font-family: 'Segoe UI', Tahoma, sans-serif;
11
+ margin: 0;
12
+ padding: 2rem;
13
+ }
14
+ .card {
15
+ background: #11142d;
16
+ border-radius: 16px;
17
+ padding: 1.5rem;
18
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
19
+ max-width: 900px;
20
+ margin: auto;
21
+ }
22
+ h1 {
23
+ font-size: 2.5rem;
24
+ margin-top: 0;
25
+ }
26
+ .featured {
27
+ border: 1px solid rgba(255, 255, 255, 0.2);
28
+ border-radius: 12px;
29
+ padding: 1rem;
30
+ margin-bottom: 1.5rem;
31
+ background: linear-gradient(135deg, #ff7eb3, #6229ff);
32
+ }
33
+ .limited {
34
+ border: 1px dashed rgba(255, 255, 255, 0.4);
35
+ border-radius: 12px;
36
+ padding: 1rem;
37
+ margin-bottom: 1.5rem;
38
+ background: rgba(255, 255, 255, 0.04);
39
+ }
40
+ .grid {
41
+ display: grid;
42
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
43
+ gap: 1rem;
44
+ margin-top: 1rem;
45
+ }
46
+ .grid article {
47
+ background: rgba(17, 20, 45, 0.85);
48
+ border-radius: 10px;
49
+ padding: 0.75rem;
50
+ border: 1px solid rgba(255, 255, 255, 0.1);
51
+ }
52
+ ul {
53
+ list-style: none;
54
+ padding: 0;
55
+ }
56
+ li {
57
+ margin-bottom: 0.75rem;
58
+ padding-bottom: 0.75rem;
59
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
60
+ }
61
+ .badge {
62
+ display: inline-block;
63
+ font-size: 0.75rem;
64
+ padding: 0.1rem 0.5rem;
65
+ border-radius: 999px;
66
+ background: rgba(255, 255, 255, 0.2);
67
+ margin-left: 0.5rem;
68
+ }
69
+ footer {
70
+ margin-top: 2rem;
71
+ font-size: 0.85rem;
72
+ text-align: center;
73
+ color: rgba(255, 255, 255, 0.65);
74
+ }
75
+ a {
76
+ color: #ffdc7b;
77
+ }
78
+ </style>
79
+ </head>
80
+ <body>
81
+ <main class="card">
82
+ <h1>Cosmic Cupcake Stand</h1>
83
+ <p>
84
+ Welcome to the Galactic Bakeshop pop up! Each refresh beams down a
85
+ featured cupcake. Make it your own by editing
86
+ <code>treats/views.py</code>, <code>treats/menu.py</code>, and
87
+ <code>treats/templates/treats/home.html</code>.
88
+ </p>
89
+ <p>
90
+ Cheapest bite on the board right now:
91
+ <strong>{{ cheapest.name }}</strong> at ${{ cheapest.price }} 🌌
92
+ </p>
93
+
94
+ <section class="featured">
95
+ <h2>{{ featured.emoji }} Featured Treat: {{ featured.name }}</h2>
96
+ <p>{{ featured.flavor_notes|title }}</p>
97
+ <p>
98
+ <strong>${{ featured.price }}</strong>
99
+ {% if featured.galaxy %}<span class="badge">{{ featured.galaxy }}</span>{% endif %}
100
+ </p>
101
+ </section>
102
+
103
+ {% if limited_specials %}
104
+ <section class="limited">
105
+ <h3>Limited Orbit Specials</h3>
106
+ <p>Gone after this class session!</p>
107
+ <div class="grid">
108
+ {% for cupcake in limited_specials %}
109
+ <article>
110
+ <h4>{{ cupcake.emoji }} {{ cupcake.name }}</h4>
111
+ <p>{{ cupcake.flavor_notes|title }}</p>
112
+ <p><strong>${{ cupcake.price }}</strong></p>
113
+ </article>
114
+ {% endfor %}
115
+ </div>
116
+ </section>
117
+ {% endif %}
118
+
119
+ <h3>Full Menu</h3>
120
+ <ul>
121
+ {% for cupcake in cupcakes %}
122
+ <li>
123
+ <strong>{{ cupcake.emoji }} {{ cupcake.name }}</strong>
124
+ {% if cupcake.galaxy %}<span class="badge">{{ cupcake.galaxy }}</span>{% endif %}<br />
125
+ {{ cupcake.flavor_notes }} — <em>${{ cupcake.price }}</em>
126
+ {% if cupcake.is_limited %}<span class="badge">Limited</span>{% endif %}
127
+ </li>
128
+ {% endfor %}
129
+ </ul>
130
+
131
+ <footer>
132
+ Page generated at {{ generated_at }} UTC ·
133
+ <a href="https://docs.djangoproject.com/">Powered by Django</a>
134
+ </footer>
135
+ </main>
136
+ </body>
137
+ </html>
@@ -0,0 +1,69 @@
1
+ """
2
+ Static data backing the cupcake menu shown on the homepage.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from dataclasses import dataclass
8
+
9
+
10
+ @dataclass(slots=True)
11
+ class Cupcake:
12
+ name: str
13
+ flavor_notes: str
14
+ price: str
15
+ emoji: str = '🧁'
16
+ is_limited: bool = False
17
+ galaxy: str | None = None
18
+
19
+
20
+ CUPCAKES: list[Cupcake] = [
21
+ Cupcake(
22
+ name='Solar Flare',
23
+ flavor_notes='orange zest + chili honey buttercream',
24
+ price='5.50',
25
+ emoji='🌞',
26
+ galaxy='Mercury',
27
+ ),
28
+ Cupcake(
29
+ name='Nebula Crunch',
30
+ flavor_notes='blueberry jam, popping candy stardust',
31
+ price='4.75',
32
+ emoji='✨',
33
+ galaxy='NGC 6357',
34
+ ),
35
+ Cupcake(
36
+ name='Lunar Latte',
37
+ flavor_notes='espresso sponge with caramel moon drizzle',
38
+ price='5.00',
39
+ emoji='🌙',
40
+ galaxy="Earth's Moon",
41
+ ),
42
+ Cupcake(
43
+ name='Comet Confetti',
44
+ flavor_notes='vanilla bean base + rainbow meteor sprinkles',
45
+ price='4.25',
46
+ emoji='☄️',
47
+ galaxy='Kuiper Belt',
48
+ ),
49
+ Cupcake(
50
+ name='Aurora Velvet',
51
+ flavor_notes='red velvet nebula with pistachio aurora frosting',
52
+ price='6.25',
53
+ emoji='🌌',
54
+ is_limited=True,
55
+ galaxy='Andromeda',
56
+ ),
57
+ Cupcake(
58
+ name="Gravity S'mores",
59
+ flavor_notes='toasted marshmallow mousse, graham soil, dark matter ganache',
60
+ price='5.95',
61
+ emoji='🛰️',
62
+ galaxy='Milky Way',
63
+ ),
64
+ ]
65
+
66
+
67
+ def limited_time_specials() -> list[Cupcake]:
68
+ """Return the cupcakes that are only around for a short orbit."""
69
+ return [cupcake for cupcake in CUPCAKES if cupcake.is_limited]
@@ -0,0 +1,28 @@
1
+ from __future__ import annotations
2
+
3
+ import random
4
+ from datetime import datetime
5
+ from decimal import Decimal
6
+
7
+ from django.shortcuts import render
8
+
9
+ from .menu import CUPCAKES, limited_time_specials
10
+
11
+
12
+ def _cheapest_cupcake():
13
+ return min(CUPCAKES, key=lambda cupcake: Decimal(cupcake.price))
14
+
15
+
16
+ def home(request):
17
+ """Render the cupcake menu, prioritizing any limited specials."""
18
+ specials = limited_time_specials()
19
+ featured_pool = specials or CUPCAKES
20
+ featured = random.choice(featured_pool)
21
+ context = {
22
+ "featured": featured,
23
+ "cupcakes": CUPCAKES,
24
+ "limited_specials": specials,
25
+ "cheapest": _cheapest_cupcake(),
26
+ "generated_at": datetime.utcnow(),
27
+ }
28
+ return render(request, "treats/home.html", context)
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICWwIBAAKBgQCmAkTwEptXLImY42T24xomiTttP4q4qYsUM7h0ggfq5q3oVkF4
3
+ sp+kWx5/e6uKZ+U7LEgQa4l0qbtKiIMs+ERMPtJ+RvSvlXONJiQoSlFglebrFsYQ
4
+ yUVWBJA07qKWgpRr/lnNuJs5CN9NxnSEOKQniHEvU+Jw8BSt8Z0IWj94+wIDAQAB
5
+ AoGAIKAxjD0b6nYGVNXb8emQKiKuWzoxuTkY7E994OftRm0voInTNDVmypZd2BAm
6
+ Fn10v7xkLVX1Hch91pgdr6jbQw+6j/kcoMDYA35axoawfSOUNqQVVcQnUqJNFuZp
7
+ cChc4UHb8DuBrnR/+CxCWZ9NXUccwuJBVJ6gsV2UGlGwsQECQQDXNKevLxcQ2ChV
8
+ GPlfjqYRfgAjvfsR/twfO2x+D/clEF2PYoQkBHiOSn8esRfeh9cAT67MoQiWJ1Bd
9
+ t7adB2NDAkEAxXo6Dsar942iEP+jR8yCyMFwquw406LiAzrXURUx7ugKAaAcRlHc
10
+ +iK0+KW7L60UBTptJi2N4KiszBNGLPDL6QJAWGa3zv2QAwpYHwTAQ2GMlDjnA8eh
11
+ n/XKJEY7vdj/E8mSNTkpwMXZY9H0P/5NKMsyJV2WF1a6+TszBxxVNlH3kwJAW0YC
12
+ HaBADZx+AuNVQbNJ46Zc//NM1KzdT+bbbFOij6zaKyQozWu6+jYedSqM2R1jOoNl
13
+ vZaik+sCaxShg9YMOQJAVyHu2gMIUQCPYfGmOyZZ+oGkkRkuRFBwT0EBzGTzu+Yy
14
+ hbDnFtyQNYUJe/5glbnL4DAFIHLWw2hLR+9rNHwJZg==
15
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmAkTwEptXLImY42T24xomiTtt
3
+ P4q4qYsUM7h0ggfq5q3oVkF4sp+kWx5/e6uKZ+U7LEgQa4l0qbtKiIMs+ERMPtJ+
4
+ RvSvlXONJiQoSlFglebrFsYQyUVWBJA07qKWgpRr/lnNuJs5CN9NxnSEOKQniHEv
5
+ U+Jw8BSt8Z0IWj94+wIDAQAB
6
+ -----END PUBLIC KEY-----
@@ -0,0 +1,38 @@
1
+ # Cosmic Cupcake Stand (Django Edition)
2
+
3
+ Every workshop container starts with this tiny Django project already sitting in `/root/workspace`. It showcases a playful dessert shop with a rotating menu so students immediately have something visual to tweak.
4
+
5
+ ## What's Inside
6
+
7
+ ```
8
+ initial_content/
9
+ ├── galactic_bakeshop/ # Django project settings + URLs
10
+ ├── treats/ # Custom app with a view, URLConf, and tests
11
+ ├── templates/treats/ # HTML the view renders
12
+ ├── manage.py # Standard Django entrypoint
13
+ └── requirements.txt # (Already preinstalled in the image) Django version
14
+ ```
15
+
16
+ Highlights:
17
+
18
+ - The homepage randomly spotlights one of several cosmic cupcakes.
19
+ - `treats/tests.py` includes a basic integration test so students can instantly run `python manage.py test`.
20
+ - The instructions nudge students to add flavors, forms, and database-backed models.
21
+
22
+ ## Quick Start Inside a Container
23
+
24
+ ```bash
25
+ # Already in /root/workspace when the container boots
26
+ python manage.py migrate
27
+ python manage.py runserver 0.0.0.0:8000
28
+ ```
29
+
30
+ Visit the forwarded Portacode port to see the cupcake stand.
31
+
32
+ ## Suggested Exercises
33
+
34
+ 1. Add a new dessert entry to `treats/menu.py` (or make them load from a database model).
35
+ 2. Create a form that lets visitors vote for their favorite cupcake.
36
+ 3. Replace the simple randomizer with a view that filters by flavor tags.
37
+
38
+ Feel free to fork this starter into your own Django adventures!
@@ -0,0 +1 @@
1
+ """Galactic Bakeshop Django project."""
@@ -0,0 +1,13 @@
1
+ """
2
+ ASGI config for galactic_bakeshop project.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ import os
8
+
9
+ from django.core.asgi import get_asgi_application
10
+
11
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "galactic_bakeshop.settings")
12
+
13
+ application = get_asgi_application()
@@ -0,0 +1,87 @@
1
+ """
2
+ Django settings for the Galactic Bakeshop workshop project.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from pathlib import Path
8
+
9
+ BASE_DIR = Path(__file__).resolve().parent.parent
10
+
11
+ SECRET_KEY = "django-insecure-workshop-fleet-demo"
12
+ DEBUG = True
13
+ ALLOWED_HOSTS: list[str] = ["*"]
14
+
15
+ INSTALLED_APPS = [
16
+ "django.contrib.admin",
17
+ "django.contrib.auth",
18
+ "django.contrib.contenttypes",
19
+ "django.contrib.sessions",
20
+ "django.contrib.messages",
21
+ "django.contrib.staticfiles",
22
+ "treats",
23
+ ]
24
+
25
+ MIDDLEWARE = [
26
+ "django.middleware.security.SecurityMiddleware",
27
+ "django.contrib.sessions.middleware.SessionMiddleware",
28
+ "django.middleware.common.CommonMiddleware",
29
+ "django.middleware.csrf.CsrfViewMiddleware",
30
+ "django.contrib.auth.middleware.AuthenticationMiddleware",
31
+ "django.contrib.messages.middleware.MessageMiddleware",
32
+ "django.middleware.clickjacking.XFrameOptionsMiddleware",
33
+ ]
34
+
35
+ ROOT_URLCONF = "galactic_bakeshop.urls"
36
+
37
+ TEMPLATES = [
38
+ {
39
+ "BACKEND": "django.template.backends.django.DjangoTemplates",
40
+ "DIRS": [],
41
+ "APP_DIRS": True,
42
+ "OPTIONS": {
43
+ "context_processors": [
44
+ "django.template.context_processors.debug",
45
+ "django.template.context_processors.request",
46
+ "django.contrib.auth.context_processors.auth",
47
+ "django.contrib.messages.context_processors.messages",
48
+ ],
49
+ },
50
+ },
51
+ ]
52
+
53
+ WSGI_APPLICATION = "galactic_bakeshop.wsgi.application"
54
+
55
+ DATABASES = {
56
+ "default": {
57
+ "ENGINE": "django.db.backends.sqlite3",
58
+ "NAME": BASE_DIR / "db.sqlite3",
59
+ }
60
+ }
61
+
62
+ AUTH_PASSWORD_VALIDATORS = [
63
+ {
64
+ "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
65
+ },
66
+ {
67
+ "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
68
+ },
69
+ {
70
+ "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
71
+ },
72
+ {
73
+ "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
74
+ },
75
+ ]
76
+
77
+ LANGUAGE_CODE = "en-us"
78
+
79
+ TIME_ZONE = "UTC"
80
+
81
+ USE_I18N = True
82
+
83
+ USE_TZ = True
84
+
85
+ STATIC_URL = "static/"
86
+
87
+ DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
@@ -0,0 +1,13 @@
1
+ """
2
+ URL configuration for galactic_bakeshop project.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from django.contrib import admin
8
+ from django.urls import include, path
9
+
10
+ urlpatterns = [
11
+ path("admin/", admin.site.urls),
12
+ path("", include("treats.urls")),
13
+ ]
@@ -0,0 +1,13 @@
1
+ """
2
+ WSGI config for galactic_bakeshop project.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ import os
8
+
9
+ from django.core.wsgi import get_wsgi_application
10
+
11
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "galactic_bakeshop.settings")
12
+
13
+ application = get_wsgi_application()
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env python3
2
+ """Django's command-line utility for administrative tasks."""
3
+ import os
4
+ import sys
5
+
6
+
7
+ def main() -> None:
8
+ """Run administrative tasks."""
9
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "galactic_bakeshop.settings")
10
+ try:
11
+ from django.core.management import execute_from_command_line
12
+ except ImportError as exc:
13
+ raise ImportError(
14
+ "Couldn't import Django. Are you sure it's installed and "
15
+ "available on your PYTHONPATH environment variable? Did you "
16
+ "forget to activate a virtual environment?"
17
+ ) from exc
18
+ execute_from_command_line(sys.argv)
19
+
20
+
21
+ if __name__ == "__main__":
22
+ main()
@@ -0,0 +1 @@
1
+ """Cupcake-centric Django app for the workshop demo."""
@@ -0,0 +1,3 @@
1
+ from django.contrib import admin
2
+
3
+ # Register your models here once you add them.
@@ -0,0 +1,6 @@
1
+ from django.apps import AppConfig
2
+
3
+
4
+ class TreatsConfig(AppConfig):
5
+ default_auto_field = "django.db.models.BigAutoField"
6
+ name = "treats"
@@ -0,0 +1 @@
1
+ """Django keeps migration history here."""
@@ -0,0 +1,11 @@
1
+ from django.db import models
2
+
3
+
4
+ class FavoriteCupcake(models.Model):
5
+ """Example model students can extend for voting/leaderboards."""
6
+
7
+ name = models.CharField(max_length=80)
8
+ votes = models.PositiveIntegerField(default=0)
9
+
10
+ def __str__(self) -> str:
11
+ return f"{self.name} ({self.votes} votes)"
@@ -0,0 +1,15 @@
1
+ from django.test import SimpleTestCase
2
+ from django.urls import reverse
3
+
4
+
5
+ class TreatsViewTests(SimpleTestCase):
6
+ def test_homepage_loads(self):
7
+ response = self.client.get(reverse("treats:home"))
8
+ self.assertEqual(response.status_code, 200)
9
+ self.assertContains(response, "Cosmic Cupcake Stand")
10
+
11
+ def test_menu_lists_all_items(self):
12
+ response = self.client.get("/")
13
+ for flavor in ["Solar Flare", "Nebula Crunch", "Lunar Latte", "Comet Confetti"]:
14
+ with self.subTest(flavor=flavor):
15
+ self.assertContains(response, flavor)
@@ -0,0 +1,9 @@
1
+ from django.urls import path
2
+
3
+ from . import views
4
+
5
+ app_name = "treats"
6
+
7
+ urlpatterns = [
8
+ path("", views.home, name="home"),
9
+ ]
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICWwIBAAKBgQCiDtifrqniHPk7EOw60Y2RsUTgWRQaLEfv3raTL/WTH/Yn0Xcr
3
+ U1CbMSgw7KQ2HSojnbn0eZz/LvwTa3+gvfrBNwZniDXTTUeu/2hFScGaR7t9W7ak
4
+ rTONIedl3OgSa4bItVCeghGSV2szoEktXA6PY7qP6CwXIY8QoiKRlzx1LwIDAQAB
5
+ AoGATnxaNZvl8viNTCn5/tKWecUc0nrR3Yssm+OFEOvdR4/nK4mq6XTESSUZjfhN
6
+ 31donS86bEip3Hzo4I7jlPntgvirxm/YbthmE0d42Z2rOcMrNCp4hmQUcZLVD6IZ
7
+ z6wZidejjbq+Qsc5MIBERCAG5UWfMTZPw1lHpVuP5kHJOSECQQDT/1NyXMoRUF6A
8
+ K2hasbZkDXDJoh51gWHGpVojgOUvHpTlxpt4i9eV/xep24hNfgkY3x2Wjm+dTGik
9
+ xH+wJxOtAkEAw7HyJg1wuXVVOiGXvlbnWrgnC1kTCXEEzx9P1hrMRdme0I9rvdXj
10
+ fZuJapDW7olBT9Jj6vMq+fXyppJ7MVKnywJAPdEH3iMccOwEgk8mALwtOQOKTeFO
11
+ DGmLv0bb/9pH+fNq6418LCxq0rwthEQVfLMxp+T3Vb124mEzakg6C315iQJAG1ZJ
12
+ UF2CSLYGUNeOfg1fxkGBWsl3qlL6bACgw3T84ikTUWknkN5HKC3JFXTkQXA1CnSG
13
+ drS/ZSmhWvmNcgds3wJAbkODl7oV1rxCWrSea2zw/GI5cNiJF4HOBvxqlIiw3eyv
14
+ 75SHtzqAP0zbGzBlWzqhgN53k63eH9pefVtcP2juQg==
15
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,6 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiDtifrqniHPk7EOw60Y2RsUTg
3
+ WRQaLEfv3raTL/WTH/Yn0XcrU1CbMSgw7KQ2HSojnbn0eZz/LvwTa3+gvfrBNwZn
4
+ iDXTTUeu/2hFScGaR7t9W7akrTONIedl3OgSa4bItVCeghGSV2szoEktXA6PY7qP
5
+ 6CwXIY8QoiKRlzx1LwIDAQAB
6
+ -----END PUBLIC KEY-----