tower 0.3.7__tar.gz → 0.3.9__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 (320) hide show
  1. {tower-0.3.7 → tower-0.3.9}/Cargo.lock +25 -19
  2. {tower-0.3.7 → tower-0.3.9}/Cargo.toml +2 -1
  3. {tower-0.3.7 → tower-0.3.9}/PKG-INFO +1 -1
  4. {tower-0.3.7 → tower-0.3.9}/crates/config/Cargo.toml +3 -0
  5. {tower-0.3.7 → tower-0.3.9}/crates/config/src/error.rs +5 -0
  6. {tower-0.3.7 → tower-0.3.9}/crates/config/src/lib.rs +5 -0
  7. {tower-0.3.7 → tower-0.3.9}/crates/config/src/session.rs +101 -0
  8. {tower-0.3.7 → tower-0.3.9}/crates/config/src/towerfile.rs +32 -3
  9. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/Cargo.toml +0 -1
  10. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/README.md +36 -33
  11. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/apis/configuration.rs +1 -1
  12. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/apis/default_api.rs +156 -102
  13. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/apis/mod.rs +21 -0
  14. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/accept_invitation_params.rs +1 -1
  15. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/accept_invitation_response.rs +1 -1
  16. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/account.rs +1 -1
  17. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/api_key.rs +1 -1
  18. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/app.rs +6 -2
  19. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/app_statistics.rs +1 -1
  20. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/app_summary.rs +1 -1
  21. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/app_version.rs +1 -1
  22. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/cancel_run_response.rs +1 -1
  23. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/catalog.rs +1 -1
  24. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/catalog_property.rs +1 -1
  25. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/claim_device_login_ticket_params.rs +1 -1
  26. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/claim_device_login_ticket_response.rs +1 -1
  27. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_account_params.rs +1 -1
  28. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_account_params_flags_struct.rs +1 -1
  29. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_account_response.rs +1 -1
  30. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_api_key_params.rs +1 -1
  31. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_api_key_response.rs +1 -1
  32. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_app_params.rs +5 -1
  33. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_app_response.rs +1 -1
  34. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_catalog_params.rs +1 -1
  35. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_catalog_response.rs +1 -1
  36. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_device_login_ticket_response.rs +1 -1
  37. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_secret_params.rs +1 -1
  38. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_secret_response.rs +1 -1
  39. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_session_params.rs +1 -1
  40. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_session_response.rs +1 -1
  41. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_team_params.rs +1 -1
  42. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/create_team_response.rs +1 -1
  43. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/delete_api_key_params.rs +1 -1
  44. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/delete_api_key_response.rs +1 -1
  45. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/delete_app_response.rs +1 -1
  46. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/delete_catalog_response.rs +1 -1
  47. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/delete_team_invitation_params.rs +1 -1
  48. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/delete_team_invitation_response.rs +1 -1
  49. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/delete_team_params.rs +1 -1
  50. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/delete_team_response.rs +1 -1
  51. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/deploy_app_response.rs +1 -1
  52. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/describe_app_response.rs +1 -1
  53. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/describe_app_version_response.rs +1 -1
  54. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/describe_device_login_session_response.rs +1 -1
  55. tower-0.3.7/crates/tower-api/src/models/get_run_logs_output_body.rs → tower-0.3.9/crates/tower-api/src/models/describe_run_logs_response.rs +6 -6
  56. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/describe_run_response.rs +1 -1
  57. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/describe_secrets_key_response.rs +1 -1
  58. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/describe_session_response.rs +1 -1
  59. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/encrypted_catalog_property.rs +1 -1
  60. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/error_detail.rs +1 -1
  61. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/error_model.rs +1 -1
  62. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/export_secrets_response.rs +1 -1
  63. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/export_user_secrets_params.rs +1 -1
  64. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/exported_secret.rs +1 -1
  65. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/generate_app_statistics_response.rs +1 -1
  66. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/generate_run_statistics_response.rs +1 -1
  67. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/invite_team_member_params.rs +1 -1
  68. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/invite_team_member_response.rs +1 -1
  69. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/leave_team_response.rs +1 -1
  70. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_api_keys_response.rs +1 -1
  71. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_app_environments_response.rs +1 -1
  72. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_app_versions_response.rs +1 -1
  73. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_apps_response.rs +1 -1
  74. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_catalogs_response.rs +1 -1
  75. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_my_team_invitations_response.rs +1 -1
  76. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_runs_response.rs +1 -1
  77. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_secret_environments_response.rs +1 -1
  78. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_secrets_response.rs +1 -1
  79. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_team_invitations_response.rs +1 -1
  80. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_team_members_response.rs +1 -1
  81. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/list_teams_response.rs +1 -1
  82. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/log_line.rs +1 -1
  83. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/log_line_error.rs +1 -1
  84. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/mod.rs +10 -6
  85. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/pagination.rs +1 -1
  86. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/parameter.rs +1 -1
  87. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/refresh_session_params.rs +1 -1
  88. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/refresh_session_response.rs +1 -1
  89. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/remove_team_member_params.rs +1 -1
  90. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/remove_team_member_response.rs +1 -1
  91. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/resend_team_invitation_params.rs +1 -1
  92. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/resend_team_invitation_response.rs +1 -1
  93. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/run.rs +7 -5
  94. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/run_app_params.rs +1 -1
  95. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/run_app_response.rs +1 -1
  96. tower-0.3.7/crates/tower-api/src/models/get_run_log_line.rs → tower-0.3.9/crates/tower-api/src/models/run_log_line.rs +5 -5
  97. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/run_results.rs +1 -1
  98. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/run_statistics.rs +1 -1
  99. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/secret.rs +1 -1
  100. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/series_point.rs +1 -1
  101. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/session.rs +1 -1
  102. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/statistics_settings.rs +1 -1
  103. tower-0.3.7/crates/tower-api/src/models/stream_app_run_logs_200_response_inner.rs → tower-0.3.9/crates/tower-api/src/models/stream_run_logs_200_response_inner.rs +3 -3
  104. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/team.rs +1 -1
  105. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/team_invitation.rs +1 -1
  106. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/token.rs +1 -1
  107. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_account_slug_params.rs +1 -1
  108. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_account_slug_response.rs +1 -1
  109. tower-0.3.9/crates/tower-api/src/models/update_app_params.rs +36 -0
  110. tower-0.3.9/crates/tower-api/src/models/update_app_response.rs +31 -0
  111. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_catalog_params.rs +1 -1
  112. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_catalog_response.rs +1 -1
  113. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_my_team_invitation_params.rs +1 -1
  114. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_my_team_invitation_response.rs +1 -1
  115. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_secret_params.rs +1 -1
  116. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_secret_response.rs +1 -1
  117. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_team_params.rs +1 -1
  118. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_team_response.rs +1 -1
  119. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_user_params.rs +4 -1
  120. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/update_user_response.rs +1 -1
  121. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/models/user.rs +5 -2
  122. tower-0.3.9/crates/tower-cmd/src/api.rs +389 -0
  123. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/apps.rs +43 -81
  124. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/lib.rs +16 -3
  125. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/output.rs +8 -2
  126. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/run.rs +38 -55
  127. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/secrets.rs +53 -109
  128. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/session.rs +15 -33
  129. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/teams.rs +20 -21
  130. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/util/apps.rs +11 -10
  131. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/util/deploy.rs +1 -0
  132. {tower-0.3.7 → tower-0.3.9}/crates/tower-package/src/error.rs +4 -2
  133. {tower-0.3.7 → tower-0.3.9}/crates/tower-package/src/lib.rs +13 -21
  134. {tower-0.3.7 → tower-0.3.9}/crates/tower-package/tests/package_test.rs +39 -3
  135. {tower-0.3.7 → tower-0.3.9}/crates/tower-version/Cargo.toml +3 -1
  136. {tower-0.3.7 → tower-0.3.9}/crates/tower-version/src/lib.rs +12 -0
  137. {tower-0.3.7 → tower-0.3.9}/pyproject.toml +1 -1
  138. tower-0.3.7/crates/tower-cmd/src/api.rs +0 -254
  139. {tower-0.3.7 → tower-0.3.9}/LICENSE +0 -0
  140. {tower-0.3.7 → tower-0.3.9}/README.md +0 -0
  141. {tower-0.3.7 → tower-0.3.9}/crates/crypto/Cargo.toml +0 -0
  142. {tower-0.3.7 → tower-0.3.9}/crates/crypto/src/lib.rs +0 -0
  143. {tower-0.3.7 → tower-0.3.9}/crates/testutils/Cargo.toml +0 -0
  144. {tower-0.3.7 → tower-0.3.9}/crates/testutils/src/crypto.rs +0 -0
  145. {tower-0.3.7 → tower-0.3.9}/crates/testutils/src/fs.rs +0 -0
  146. {tower-0.3.7 → tower-0.3.9}/crates/testutils/src/lib.rs +0 -0
  147. {tower-0.3.7 → tower-0.3.9}/crates/tower/Cargo.toml +0 -0
  148. {tower-0.3.7 → tower-0.3.9}/crates/tower/src/main.rs +0 -0
  149. {tower-0.3.7 → tower-0.3.9}/crates/tower/wix/main.wxs +0 -0
  150. {tower-0.3.7 → tower-0.3.9}/crates/tower-api/src/lib.rs +0 -0
  151. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/Cargo.toml +0 -0
  152. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/banner.txt +0 -0
  153. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/deploy.rs +0 -0
  154. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/error.rs +0 -0
  155. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/util/mod.rs +0 -0
  156. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/util/progress.rs +0 -0
  157. {tower-0.3.7 → tower-0.3.9}/crates/tower-cmd/src/version.rs +0 -0
  158. {tower-0.3.7 → tower-0.3.9}/crates/tower-package/Cargo.toml +0 -0
  159. {tower-0.3.7 → tower-0.3.9}/crates/tower-runtime/Cargo.toml +0 -0
  160. {tower-0.3.7 → tower-0.3.9}/crates/tower-runtime/src/errors.rs +0 -0
  161. {tower-0.3.7 → tower-0.3.9}/crates/tower-runtime/src/lib.rs +0 -0
  162. {tower-0.3.7 → tower-0.3.9}/crates/tower-runtime/src/local.rs +0 -0
  163. {tower-0.3.7 → tower-0.3.9}/rust-toolchain.toml +0 -0
  164. {tower-0.3.7 → tower-0.3.9}/src/tower/__init__.py +0 -0
  165. {tower-0.3.7 → tower-0.3.9}/src/tower/__main__.py +0 -0
  166. {tower-0.3.7 → tower-0.3.9}/src/tower/_client.py +0 -0
  167. {tower-0.3.7 → tower-0.3.9}/src/tower/_context.py +0 -0
  168. {tower-0.3.7 → tower-0.3.9}/src/tower/_features.py +0 -0
  169. {tower-0.3.7 → tower-0.3.9}/src/tower/_llms.py +0 -0
  170. {tower-0.3.7 → tower-0.3.9}/src/tower/_tables.py +0 -0
  171. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/__init__.py +0 -0
  172. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/__init__.py +0 -0
  173. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/__init__.py +0 -0
  174. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/accept_invitation.py +0 -0
  175. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/cancel_run.py +0 -0
  176. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/claim_device_login_ticket.py +0 -0
  177. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/create_account.py +0 -0
  178. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/create_api_key.py +0 -0
  179. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/create_apps.py +0 -0
  180. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/create_device_login_ticket.py +0 -0
  181. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/create_secret.py +0 -0
  182. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/create_session.py +0 -0
  183. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/create_team.py +0 -0
  184. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/delete_api_key.py +0 -0
  185. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/delete_app.py +0 -0
  186. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/delete_secret.py +0 -0
  187. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/delete_team.py +0 -0
  188. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/delete_team_invitation.py +0 -0
  189. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/deploy_app.py +0 -0
  190. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/describe_app.py +0 -0
  191. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/describe_app_version.py +0 -0
  192. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/describe_device_login_session.py +0 -0
  193. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/describe_run.py +0 -0
  194. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/describe_secrets_key.py +0 -0
  195. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/describe_session.py +0 -0
  196. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/export_secrets.py +0 -0
  197. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/generate_app_statistics.py +0 -0
  198. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/generate_run_statistics.py +0 -0
  199. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/get_app_run_logs.py +0 -0
  200. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/invite_team_member.py +0 -0
  201. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/leave_team.py +0 -0
  202. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_api_keys.py +0 -0
  203. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_app_environments.py +0 -0
  204. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_app_versions.py +0 -0
  205. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_apps.py +0 -0
  206. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_my_team_invitations.py +0 -0
  207. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_runs.py +0 -0
  208. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_secret_environments.py +0 -0
  209. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_secrets.py +0 -0
  210. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_team_invitations.py +0 -0
  211. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_team_members.py +0 -0
  212. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/list_teams.py +0 -0
  213. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/refresh_session.py +0 -0
  214. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/remove_team_member.py +0 -0
  215. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/resend_team_invitation.py +0 -0
  216. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/run_app.py +0 -0
  217. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/stream_app_run_logs.py +0 -0
  218. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/update_account_slug.py +0 -0
  219. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/update_my_team_invitation.py +0 -0
  220. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/update_team.py +0 -0
  221. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/api/default/update_user.py +0 -0
  222. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/client.py +0 -0
  223. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/__init__.py +0 -0
  224. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/accept_invitation_params.py +0 -0
  225. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/accept_invitation_response.py +0 -0
  226. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/account.py +0 -0
  227. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/api_key.py +0 -0
  228. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/app.py +0 -0
  229. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/app_statistics.py +0 -0
  230. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/app_summary.py +0 -0
  231. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/app_version.py +0 -0
  232. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/cancel_run_response.py +0 -0
  233. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/claim_device_login_ticket_params.py +0 -0
  234. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/claim_device_login_ticket_response.py +0 -0
  235. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_account_params.py +0 -0
  236. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_account_params_flags_struct.py +0 -0
  237. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_account_response.py +0 -0
  238. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_api_key_params.py +0 -0
  239. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_api_key_response.py +0 -0
  240. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_app_params.py +0 -0
  241. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_app_response.py +0 -0
  242. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_device_login_ticket_response.py +0 -0
  243. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_secret_params.py +0 -0
  244. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_secret_response.py +0 -0
  245. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_session_params.py +0 -0
  246. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_session_response.py +0 -0
  247. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_team_params.py +0 -0
  248. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/create_team_response.py +0 -0
  249. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/delete_api_key_params.py +0 -0
  250. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/delete_api_key_response.py +0 -0
  251. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/delete_app_response.py +0 -0
  252. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/delete_team_invitation_params.py +0 -0
  253. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/delete_team_invitation_response.py +0 -0
  254. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/delete_team_params.py +0 -0
  255. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/delete_team_response.py +0 -0
  256. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/deploy_app_response.py +0 -0
  257. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/describe_app_response.py +0 -0
  258. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/describe_app_version_response.py +0 -0
  259. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/describe_device_login_session_response.py +0 -0
  260. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/describe_run_response.py +0 -0
  261. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/describe_secrets_key_response.py +0 -0
  262. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/describe_session_response.py +0 -0
  263. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/error_detail.py +0 -0
  264. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/error_model.py +0 -0
  265. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/export_secrets_response.py +0 -0
  266. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/export_user_secrets_params.py +0 -0
  267. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/exported_secret.py +0 -0
  268. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/generate_app_statistics_response.py +0 -0
  269. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/generate_run_statistics_response.py +0 -0
  270. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/get_run_log_line.py +0 -0
  271. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/get_run_logs_output_body.py +0 -0
  272. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/invite_team_member_params.py +0 -0
  273. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/invite_team_member_response.py +0 -0
  274. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/leave_team_response.py +0 -0
  275. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_api_keys_response.py +0 -0
  276. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_app_environments_response.py +0 -0
  277. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_app_versions_response.py +0 -0
  278. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_apps_response.py +0 -0
  279. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_apps_status_item.py +0 -0
  280. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_my_team_invitations_response.py +0 -0
  281. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_runs_response.py +0 -0
  282. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_secret_environments_response.py +0 -0
  283. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_secrets_response.py +0 -0
  284. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_team_invitations_response.py +0 -0
  285. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_team_members_response.py +0 -0
  286. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/list_teams_response.py +0 -0
  287. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/log_line.py +0 -0
  288. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/log_line_error.py +0 -0
  289. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/pagination.py +0 -0
  290. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/parameter.py +0 -0
  291. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/refresh_session_response.py +0 -0
  292. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/remove_team_member_params.py +0 -0
  293. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/remove_team_member_response.py +0 -0
  294. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/resend_team_invitation_params.py +0 -0
  295. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/resend_team_invitation_response.py +0 -0
  296. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/run.py +0 -0
  297. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/run_app_params.py +0 -0
  298. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/run_app_params_parameters.py +0 -0
  299. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/run_app_response.py +0 -0
  300. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/run_results.py +0 -0
  301. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/run_statistics.py +0 -0
  302. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/secret.py +0 -0
  303. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/series_point.py +0 -0
  304. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/session.py +0 -0
  305. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/statistics_settings.py +0 -0
  306. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/team.py +0 -0
  307. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/team_invitation.py +0 -0
  308. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/token.py +0 -0
  309. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/update_account_slug_params.py +0 -0
  310. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/update_account_slug_response.py +0 -0
  311. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/update_my_team_invitation_params.py +0 -0
  312. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/update_my_team_invitation_response.py +0 -0
  313. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/update_team_params.py +0 -0
  314. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/update_team_response.py +0 -0
  315. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/update_user_params.py +0 -0
  316. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/update_user_response.py +0 -0
  317. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/models/user.py +0 -0
  318. {tower-0.3.7 → tower-0.3.9}/src/tower/tower_api_client/types.py +0 -0
  319. {tower-0.3.7 → tower-0.3.9}/src/tower/utils/pyarrow.py +0 -0
  320. {tower-0.3.7 → tower-0.3.9}/src/tower/utils/tables.py +0 -0
@@ -310,15 +310,18 @@ dependencies = [
310
310
 
311
311
  [[package]]
312
312
  name = "config"
313
- version = "0.3.7"
313
+ version = "0.3.9"
314
314
  dependencies = [
315
+ "chrono",
315
316
  "clap",
316
317
  "dirs",
318
+ "futures",
317
319
  "log",
318
320
  "serde",
319
321
  "serde_json",
320
322
  "snafu",
321
323
  "testutils",
324
+ "tokio",
322
325
  "toml",
323
326
  "tower-api",
324
327
  "url",
@@ -379,7 +382,7 @@ dependencies = [
379
382
 
380
383
  [[package]]
381
384
  name = "crypto"
382
- version = "0.3.7"
385
+ version = "0.3.9"
383
386
  dependencies = [
384
387
  "base64",
385
388
  "pem",
@@ -693,6 +696,7 @@ checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
693
696
  dependencies = [
694
697
  "futures-channel",
695
698
  "futures-core",
699
+ "futures-executor",
696
700
  "futures-io",
697
701
  "futures-sink",
698
702
  "futures-task",
@@ -715,6 +719,17 @@ version = "0.3.31"
715
719
  source = "registry+https://github.com/rust-lang/crates.io-index"
716
720
  checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
717
721
 
722
+ [[package]]
723
+ name = "futures-executor"
724
+ version = "0.3.31"
725
+ source = "registry+https://github.com/rust-lang/crates.io-index"
726
+ checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
727
+ dependencies = [
728
+ "futures-core",
729
+ "futures-task",
730
+ "futures-util",
731
+ ]
732
+
718
733
  [[package]]
719
734
  name = "futures-io"
720
735
  version = "0.3.31"
@@ -2410,7 +2425,7 @@ dependencies = [
2410
2425
 
2411
2426
  [[package]]
2412
2427
  name = "testutils"
2413
- version = "0.3.7"
2428
+ version = "0.3.9"
2414
2429
  dependencies = [
2415
2430
  "pem",
2416
2431
  "rsa",
@@ -2614,7 +2629,7 @@ dependencies = [
2614
2629
 
2615
2630
  [[package]]
2616
2631
  name = "tower"
2617
- version = "0.3.7"
2632
+ version = "0.3.9"
2618
2633
  dependencies = [
2619
2634
  "tokio",
2620
2635
  "tower-api",
@@ -2646,12 +2661,11 @@ dependencies = [
2646
2661
  "serde_repr",
2647
2662
  "serde_with",
2648
2663
  "url",
2649
- "uuid",
2650
2664
  ]
2651
2665
 
2652
2666
  [[package]]
2653
2667
  name = "tower-cmd"
2654
- version = "0.3.7"
2668
+ version = "0.3.9"
2655
2669
  dependencies = [
2656
2670
  "anyhow",
2657
2671
  "bytes",
@@ -2690,7 +2704,7 @@ checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
2690
2704
 
2691
2705
  [[package]]
2692
2706
  name = "tower-package"
2693
- version = "0.3.7"
2707
+ version = "0.3.9"
2694
2708
  dependencies = [
2695
2709
  "async-compression",
2696
2710
  "config",
@@ -2708,7 +2722,7 @@ dependencies = [
2708
2722
 
2709
2723
  [[package]]
2710
2724
  name = "tower-runtime"
2711
- version = "0.3.7"
2725
+ version = "0.3.9"
2712
2726
  dependencies = [
2713
2727
  "chrono",
2714
2728
  "log",
@@ -2725,9 +2739,11 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
2725
2739
 
2726
2740
  [[package]]
2727
2741
  name = "tower-version"
2728
- version = "0.3.7"
2742
+ version = "0.3.9"
2729
2743
  dependencies = [
2730
2744
  "anyhow",
2745
+ "chrono",
2746
+ "config",
2731
2747
  "log",
2732
2748
  "reqwest",
2733
2749
  "serde_json",
@@ -2830,16 +2846,6 @@ version = "0.2.2"
2830
2846
  source = "registry+https://github.com/rust-lang/crates.io-index"
2831
2847
  checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
2832
2848
 
2833
- [[package]]
2834
- name = "uuid"
2835
- version = "1.16.0"
2836
- source = "registry+https://github.com/rust-lang/crates.io-index"
2837
- checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
2838
- dependencies = [
2839
- "getrandom 0.3.2",
2840
- "serde",
2841
- ]
2842
-
2843
2849
  [[package]]
2844
2850
  name = "vcpkg"
2845
2851
  version = "0.2.15"
@@ -4,7 +4,7 @@ resolver = "2"
4
4
 
5
5
  [workspace.package]
6
6
  edition = "2021"
7
- version = "0.3.7"
7
+ version = "0.3.9"
8
8
  description = "Tower is the best way to host Python data apps in production"
9
9
  rust-version = "1.77"
10
10
  authors = ["Brad Heller <brad@tower.dev>"]
@@ -24,6 +24,7 @@ config = { path = "crates/config" }
24
24
  crypto = { path = "crates/crypto" }
25
25
  dirs = "5"
26
26
  env_logger = "*"
27
+ futures = "0.3"
27
28
  futures-util = "0.3"
28
29
  glob = "0.3"
29
30
  http = "1.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tower
3
- Version: 0.3.7
3
+ Version: 0.3.9
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -7,12 +7,15 @@ rust-version = { workspace = true }
7
7
  license = { workspace = true }
8
8
 
9
9
  [dependencies]
10
+ chrono = { workspace = true }
10
11
  clap = { workspace = true }
11
12
  dirs = { workspace = true }
13
+ futures = { workspace = true }
12
14
  log = { workspace = true }
13
15
  serde = { workspace = true }
14
16
  serde_json = { workspace = true }
15
17
  snafu = { workspace = true }
18
+ tokio = { workspace = true }
16
19
  toml = { workspace = true }
17
20
  testutils = { workspace = true }
18
21
  url = { workspace = true }
@@ -22,6 +22,11 @@ pub enum Error {
22
22
 
23
23
  #[snafu(display("Team with slug {} not found!", team_slug))]
24
24
  TeamNotFound { team_slug: String },
25
+
26
+ #[snafu(display("Unknown describe session value: {}", value))]
27
+ UnknownDescribeSessionValue { value: serde_json::Value },
28
+
29
+ DescribeSessionError { err: tower_api::apis::Error<tower_api::apis::default_api::DescribeSessionError> },
25
30
  }
26
31
 
27
32
  impl From<std::io::Error> for Error {
@@ -10,6 +10,11 @@ pub use error::Error;
10
10
  pub use session::{default_tower_url, Session, Team, Token, User};
11
11
  pub use towerfile::Towerfile;
12
12
 
13
+ pub use session::{
14
+ get_last_version_check_timestamp,
15
+ set_last_version_check_timestamp,
16
+ };
17
+
13
18
  #[derive(Clone, Serialize, Deserialize)]
14
19
  pub struct Config {
15
20
  pub debug: bool,
@@ -1,9 +1,12 @@
1
+ use std::future::Future;
1
2
  use serde::{Deserialize, Serialize};
3
+ use chrono::{DateTime, Utc, TimeZone};
2
4
  use std::fs;
3
5
  use std::path::PathBuf;
4
6
  use url::Url;
5
7
 
6
8
  use crate::error::Error;
9
+ use tower_api::apis::default_api::describe_session;
7
10
 
8
11
  const DEFAULT_TOWER_URL: &str = "https://api.tower.dev";
9
12
 
@@ -67,6 +70,47 @@ fn find_or_create_config_dir() -> Result<PathBuf, Error> {
67
70
  Ok(config_dir)
68
71
  }
69
72
 
73
+ pub fn get_last_version_check_timestamp() -> DateTime<Utc> {
74
+ let default: DateTime<Utc> = Utc.timestamp_opt(0, 0).unwrap();
75
+
76
+ // Look up (in the config dir) when the last version check was done. It's stored in a file
77
+ // called last_version_check.txt and contains a chrono::DateTime timestamp in ISO 8601 format.
78
+ match find_or_create_config_dir() {
79
+ Ok(path) => {
80
+ if let Ok(last_version_check) = fs::read_to_string(path.join("last_version_check.txt")) {
81
+ if let Ok(dt) = DateTime::parse_from_rfc3339(&last_version_check) {
82
+ dt.into()
83
+ } else {
84
+ log::debug!("Error parsing last version check timestamp: {}", last_version_check);
85
+ default
86
+ }
87
+ } else {
88
+ log::debug!("Error reading last version check timestamp");
89
+ default
90
+ }
91
+ },
92
+ Err(err) => {
93
+ log::debug!("Error finding config dir: {}", err);
94
+ default
95
+ }
96
+ }
97
+ }
98
+
99
+ pub fn set_last_version_check_timestamp(dt: DateTime<Utc>) {
100
+ match find_or_create_config_dir() {
101
+ Ok(path) => {
102
+ let dt_str = dt.to_rfc3339();
103
+
104
+ if let Err(err) = fs::write(path.join("last_version_check.txt"), dt_str) {
105
+ log::debug!("Error writing last version check timestamp: {}", err);
106
+ }
107
+ },
108
+ Err(err) => {
109
+ log::debug!("Error finding config dir: {}", err);
110
+ }
111
+ }
112
+ }
113
+
70
114
  impl Session {
71
115
  pub fn new(user: User, token: Token, teams: Vec<Team>) -> Self {
72
116
  Self {
@@ -215,4 +259,61 @@ impl Session {
215
259
 
216
260
  return next_session;
217
261
  }
262
+
263
+ pub fn from_jwt(jwt: &str) -> Result<Self, Error> {
264
+ // We need to instantiate our own configuration object here, instead of the typical thing
265
+ // that we do which is turn a Config into a Configuration.
266
+ let mut config = tower_api::apis::configuration::Configuration::new();
267
+ config.bearer_access_token = Some(jwt.to_string());
268
+
269
+ // We only pull TOWER_URL out of the environment here because we only ever use the JWT and
270
+ // all that in programmatic contexts (when TOWER_URL is set).
271
+ let tower_url = if let Ok(val) = std::env::var("TOWER_URL") {
272
+ val
273
+ } else {
274
+ DEFAULT_TOWER_URL.to_string()
275
+ };
276
+
277
+ // Setup the base path to point to the /v1 API endpoint as expected.
278
+ let mut base_path = Url::parse(&tower_url).unwrap();
279
+ base_path.set_path("/v1");
280
+
281
+ config.base_path = base_path.to_string();
282
+
283
+ // This is a bit of a hairy thing: I didn't want to pull in too much from the Tower API
284
+ // client, so we're using the raw bindings here.
285
+ match run_future_sync(describe_session(&config)) {
286
+ Ok(resp) => {
287
+ // Now we need to extract the session from the response.
288
+ let entity = resp.entity.unwrap();
289
+
290
+ match entity {
291
+ tower_api::apis::default_api::DescribeSessionSuccess::Status200(resp) => {
292
+ let mut session = Session::from_api_session(&resp.session);
293
+ session.tower_url = base_path;
294
+ Ok(session)
295
+ }
296
+ tower_api::apis::default_api::DescribeSessionSuccess::UnknownValue(val) => {
297
+ log::error!("Unknown value while describing session: {}", val);
298
+ Err(Error::UnknownDescribeSessionValue { value: val })
299
+ }
300
+ }
301
+ }
302
+ Err(err) => {
303
+ log::error!("Error describing session: {}", err);
304
+ Err(Error::DescribeSessionError { err })
305
+ }
306
+ }
307
+ }
308
+ }
309
+
310
+ // This hairy little function is a workaround for the fact that we can't use async/await in the
311
+ // context of some of the functions in this file.
312
+ fn run_future_sync<F, T>(future: F) -> T
313
+ where
314
+ F: Future<Output = T>,
315
+ {
316
+ tokio::task::block_in_place(|| {
317
+ tokio::runtime::Handle::current().block_on(future)
318
+ })
218
319
  }
@@ -2,7 +2,7 @@ use crate::Error;
2
2
  use serde::Deserialize;
3
3
  use std::path::PathBuf;
4
4
 
5
- #[derive(Deserialize)]
5
+ #[derive(Deserialize, Debug)]
6
6
  pub struct Parameter{
7
7
  #[serde(default)]
8
8
  pub name: String,
@@ -14,7 +14,7 @@ pub struct Parameter{
14
14
  pub default: String,
15
15
  }
16
16
 
17
- #[derive(Deserialize)]
17
+ #[derive(Deserialize, Debug)]
18
18
  pub struct App {
19
19
  #[serde(default)]
20
20
  pub name: String,
@@ -30,9 +30,12 @@ pub struct App {
30
30
 
31
31
  #[serde(default)]
32
32
  pub description: String,
33
+
34
+ #[serde(default)]
35
+ pub workspace: PathBuf,
33
36
  }
34
37
 
35
- #[derive(Deserialize)]
38
+ #[derive(Deserialize, Debug)]
36
39
  pub struct Towerfile {
37
40
  /// file_path is the path to where this file was read on disk. It's always populated by the
38
41
  /// parser/application, never by the data.
@@ -56,6 +59,7 @@ impl Towerfile {
56
59
  source: vec![],
57
60
  schedule: String::from("0 0 * * *"),
58
61
  description: String::from(""),
62
+ workspace: PathBuf::new(),
59
63
  },
60
64
  }
61
65
  }
@@ -81,6 +85,16 @@ impl Towerfile {
81
85
  let mut towerfile = Self::from_toml(&std::fs::read_to_string(path.to_path_buf())?)?;
82
86
  towerfile.file_path = path;
83
87
 
88
+ // We set the workspace to the directory of the Towerfile if it's not set because that's
89
+ // the implicit behavior overall for legacy Towerfiles.
90
+ if towerfile.app.workspace.as_os_str().is_empty() {
91
+ log::debug!("Setting workspace to the directory of the Towerfile");
92
+ towerfile.app.workspace = towerfile.file_path
93
+ .parent()
94
+ .map(|p| p.to_path_buf())
95
+ .unwrap();
96
+ }
97
+
84
98
  Ok(towerfile)
85
99
  }
86
100
 
@@ -246,4 +260,19 @@ mod test {
246
260
  assert_eq!(towerfile.parameters[0].name, "my_first_param");
247
261
  assert_eq!(towerfile.parameters[1].name, "my_second_param");
248
262
  }
263
+
264
+ #[test]
265
+ fn test_parsing_workspaces() {
266
+ let toml = r#"
267
+ [app]
268
+ name = "my-app"
269
+ script = "my-app/script.py"
270
+ source = ["*.py"]
271
+ workspace = "../"
272
+ "#;
273
+
274
+ // All we want need to do is to ensure that the workspace is set accordingly.
275
+ let towerfile = crate::Towerfile::from_toml(toml).unwrap();
276
+ assert_eq!(towerfile.app.workspace, PathBuf::from("../"));
277
+ }
249
278
  }
@@ -14,5 +14,4 @@ serde_with = { version = "^3.8", default-features = false, features = ["base64",
14
14
  serde_json = "^1.0"
15
15
  serde_repr = "^0.1"
16
16
  url = "^2.5"
17
- uuid = { version = "^1.8", features = ["serde", "v4"] }
18
17
  reqwest = { version = "^0.12", features = ["json", "multipart"] }
@@ -8,9 +8,9 @@ For more information, please visit [https://tower.dev](https://tower.dev)
8
8
 
9
9
  This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
10
10
 
11
- - API version: v0.4.3
11
+ - API version: v0.5.1
12
12
  - Package version: 1.0.0
13
- - Generator version: 7.12.0-SNAPSHOT
13
+ - Generator version: 7.13.0-SNAPSHOT
14
14
  - Build package: `org.openapitools.codegen.languages.RustClientCodegen`
15
15
 
16
16
  ## Installation
@@ -28,57 +28,58 @@ All URIs are relative to *https://api.tower.dev/v1*
28
28
  Class | Method | HTTP request | Description
29
29
  ------------ | ------------- | ------------- | -------------
30
30
  *DefaultApi* | [**accept_invitation**](docs/DefaultApi.md#accept_invitation) | **POST** /accounts/invite | Accept an invitation code
31
- *DefaultApi* | [**cancel_run**](docs/DefaultApi.md#cancel_run) | **POST** /apps/{name}/runs/{seq} | Cancel run
31
+ *DefaultApi* | [**cancel_run**](docs/DefaultApi.md#cancel_run) | **POST** /apps/{slug}/runs/{seq} | Cancel run
32
32
  *DefaultApi* | [**claim_device_login_ticket**](docs/DefaultApi.md#claim_device_login_ticket) | **POST** /login/device/claim | Claim a device login ticket
33
33
  *DefaultApi* | [**create_account**](docs/DefaultApi.md#create_account) | **POST** /accounts | Create account
34
34
  *DefaultApi* | [**create_api_key**](docs/DefaultApi.md#create_api_key) | **POST** /api-keys | Create API Key
35
- *DefaultApi* | [**create_apps**](docs/DefaultApi.md#create_apps) | **POST** /apps | Create app
35
+ *DefaultApi* | [**create_app**](docs/DefaultApi.md#create_app) | **POST** /apps | Create app
36
36
  *DefaultApi* | [**create_catalog**](docs/DefaultApi.md#create_catalog) | **POST** /catalogs | Create catalog
37
- *DefaultApi* | [**create_device_login_ticket**](docs/DefaultApi.md#create_device_login_ticket) | **GET** /login/device | Create a device login ticket
37
+ *DefaultApi* | [**create_device_login_ticket**](docs/DefaultApi.md#create_device_login_ticket) | **GET** /login/device | Create device login ticket
38
38
  *DefaultApi* | [**create_secret**](docs/DefaultApi.md#create_secret) | **POST** /secrets | Create secret
39
39
  *DefaultApi* | [**create_session**](docs/DefaultApi.md#create_session) | **POST** /session | Create session
40
- *DefaultApi* | [**create_team**](docs/DefaultApi.md#create_team) | **POST** /teams | Create Team
41
- *DefaultApi* | [**delete_api_key**](docs/DefaultApi.md#delete_api_key) | **DELETE** /api-keys | Delete API Key
42
- *DefaultApi* | [**delete_app**](docs/DefaultApi.md#delete_app) | **DELETE** /apps/{name} | Delete app
40
+ *DefaultApi* | [**create_team**](docs/DefaultApi.md#create_team) | **POST** /teams | Create team
41
+ *DefaultApi* | [**delete_api_key**](docs/DefaultApi.md#delete_api_key) | **DELETE** /api-keys | Delete API key
42
+ *DefaultApi* | [**delete_app**](docs/DefaultApi.md#delete_app) | **DELETE** /apps/{slug} | Delete app
43
43
  *DefaultApi* | [**delete_catalog**](docs/DefaultApi.md#delete_catalog) | **DELETE** /catalogs/{slug} | Delete catalog
44
- *DefaultApi* | [**delete_secret**](docs/DefaultApi.md#delete_secret) | **DELETE** /secrets/{name} | Delete a secret.
45
- *DefaultApi* | [**delete_team**](docs/DefaultApi.md#delete_team) | **DELETE** /teams | Delete Team
46
- *DefaultApi* | [**delete_team_invitation**](docs/DefaultApi.md#delete_team_invitation) | **DELETE** /teams/{slug}/invites | Delete Team Invitation
47
- *DefaultApi* | [**deploy_app**](docs/DefaultApi.md#deploy_app) | **POST** /apps/{name}/deploy | Deploy app
48
- *DefaultApi* | [**describe_app**](docs/DefaultApi.md#describe_app) | **GET** /apps/{name} | Describe app
44
+ *DefaultApi* | [**delete_secret**](docs/DefaultApi.md#delete_secret) | **DELETE** /secrets/{name} | Delete secret
45
+ *DefaultApi* | [**delete_team**](docs/DefaultApi.md#delete_team) | **DELETE** /teams | Delete team
46
+ *DefaultApi* | [**delete_team_invitation**](docs/DefaultApi.md#delete_team_invitation) | **DELETE** /teams/{slug}/invites | Delete team invitation
47
+ *DefaultApi* | [**deploy_app**](docs/DefaultApi.md#deploy_app) | **POST** /apps/{slug}/deploy | Deploy app
48
+ *DefaultApi* | [**describe_app**](docs/DefaultApi.md#describe_app) | **GET** /apps/{slug} | Describe app
49
49
  *DefaultApi* | [**describe_app_version**](docs/DefaultApi.md#describe_app_version) | **GET** /apps/{name}/versions/{num} | Describe app version
50
50
  *DefaultApi* | [**describe_device_login_session**](docs/DefaultApi.md#describe_device_login_session) | **GET** /login/device/{device_code} | Describe device login session
51
- *DefaultApi* | [**describe_run**](docs/DefaultApi.md#describe_run) | **GET** /apps/{name}/runs/{seq} | Describe run
51
+ *DefaultApi* | [**describe_run**](docs/DefaultApi.md#describe_run) | **GET** /apps/{slug}/runs/{seq} | Describe run
52
+ *DefaultApi* | [**describe_run_logs**](docs/DefaultApi.md#describe_run_logs) | **GET** /apps/{slug}/runs/{seq}/logs | Describe run logs
52
53
  *DefaultApi* | [**describe_secrets_key**](docs/DefaultApi.md#describe_secrets_key) | **GET** /secrets/key | Describe encryption key
53
54
  *DefaultApi* | [**describe_session**](docs/DefaultApi.md#describe_session) | **GET** /session | Describe session
54
55
  *DefaultApi* | [**export_secrets**](docs/DefaultApi.md#export_secrets) | **GET** /secrets/export | Export secrets
55
56
  *DefaultApi* | [**generate_app_statistics**](docs/DefaultApi.md#generate_app_statistics) | **GET** /stats/apps | Generate app statistics
56
57
  *DefaultApi* | [**generate_run_statistics**](docs/DefaultApi.md#generate_run_statistics) | **GET** /stats/runs | Generate run statistics
57
- *DefaultApi* | [**get_app_run_logs**](docs/DefaultApi.md#get_app_run_logs) | **GET** /apps/{name}/runs/{seq}/logs | Get logs for a specific app run.
58
- *DefaultApi* | [**invite_team_member**](docs/DefaultApi.md#invite_team_member) | **POST** /teams/{slug}/invites | Invite Team Member
59
- *DefaultApi* | [**leave_team**](docs/DefaultApi.md#leave_team) | **POST** /teams/{slug}/leave | Leave Team
60
- *DefaultApi* | [**list_api_keys**](docs/DefaultApi.md#list_api_keys) | **GET** /api-keys | List API Keys
61
- *DefaultApi* | [**list_app_environments**](docs/DefaultApi.md#list_app_environments) | **GET** /apps/{name}/environments | List app environments
58
+ *DefaultApi* | [**invite_team_member**](docs/DefaultApi.md#invite_team_member) | **POST** /teams/{slug}/invites | Invite team member
59
+ *DefaultApi* | [**leave_team**](docs/DefaultApi.md#leave_team) | **POST** /teams/{slug}/leave | Leave team
60
+ *DefaultApi* | [**list_api_keys**](docs/DefaultApi.md#list_api_keys) | **GET** /api-keys | List API keys
61
+ *DefaultApi* | [**list_app_environments**](docs/DefaultApi.md#list_app_environments) | **GET** /apps/{slug}/environments | List app environments
62
62
  *DefaultApi* | [**list_app_versions**](docs/DefaultApi.md#list_app_versions) | **GET** /apps/{name}/versions | List app versions
63
63
  *DefaultApi* | [**list_apps**](docs/DefaultApi.md#list_apps) | **GET** /apps | List apps
64
64
  *DefaultApi* | [**list_catalogs**](docs/DefaultApi.md#list_catalogs) | **GET** /catalogs | List catalogs
65
- *DefaultApi* | [**list_my_team_invitations**](docs/DefaultApi.md#list_my_team_invitations) | **GET** /team-invites | List My Team Invitations
66
- *DefaultApi* | [**list_runs**](docs/DefaultApi.md#list_runs) | **GET** /apps/{name}/runs | List runs
65
+ *DefaultApi* | [**list_my_team_invitations**](docs/DefaultApi.md#list_my_team_invitations) | **GET** /team-invites | List my team invitations
66
+ *DefaultApi* | [**list_runs**](docs/DefaultApi.md#list_runs) | **GET** /apps/{slug}/runs | List runs
67
67
  *DefaultApi* | [**list_secret_environments**](docs/DefaultApi.md#list_secret_environments) | **GET** /secrets/environments | List secret environments
68
68
  *DefaultApi* | [**list_secrets**](docs/DefaultApi.md#list_secrets) | **GET** /secrets | List secrets
69
- *DefaultApi* | [**list_team_invitations**](docs/DefaultApi.md#list_team_invitations) | **GET** /teams/{slug}/invites | List Team Invitations
70
- *DefaultApi* | [**list_team_members**](docs/DefaultApi.md#list_team_members) | **GET** /teams/{slug}/members | List Team Members
71
- *DefaultApi* | [**list_teams**](docs/DefaultApi.md#list_teams) | **GET** /teams | List Teams
69
+ *DefaultApi* | [**list_team_invitations**](docs/DefaultApi.md#list_team_invitations) | **GET** /teams/{slug}/invites | List team invitations
70
+ *DefaultApi* | [**list_team_members**](docs/DefaultApi.md#list_team_members) | **GET** /teams/{slug}/members | List team members
71
+ *DefaultApi* | [**list_teams**](docs/DefaultApi.md#list_teams) | **GET** /teams | List teams
72
72
  *DefaultApi* | [**refresh_session**](docs/DefaultApi.md#refresh_session) | **POST** /session/refresh | Refresh session
73
- *DefaultApi* | [**remove_team_member**](docs/DefaultApi.md#remove_team_member) | **DELETE** /teams/{slug}/members | Remove Team Member
74
- *DefaultApi* | [**resend_team_invitation**](docs/DefaultApi.md#resend_team_invitation) | **POST** /teams/{slug}/invites/resend | Resend Team Invitation
75
- *DefaultApi* | [**run_app**](docs/DefaultApi.md#run_app) | **POST** /apps/{name}/runs | Run app
76
- *DefaultApi* | [**stream_app_run_logs**](docs/DefaultApi.md#stream_app_run_logs) | **GET** /apps/{name}/runs/{seq}/logs/stream | Stream logs for a specific app run
73
+ *DefaultApi* | [**remove_team_member**](docs/DefaultApi.md#remove_team_member) | **DELETE** /teams/{slug}/members | Remove team member
74
+ *DefaultApi* | [**resend_team_invitation**](docs/DefaultApi.md#resend_team_invitation) | **POST** /teams/{slug}/invites/resend | Resend team invitation
75
+ *DefaultApi* | [**run_app**](docs/DefaultApi.md#run_app) | **POST** /apps/{slug}/runs | Run app
76
+ *DefaultApi* | [**stream_run_logs**](docs/DefaultApi.md#stream_run_logs) | **GET** /apps/{slug}/runs/{seq}/logs/stream | Stream run logs
77
77
  *DefaultApi* | [**update_account_slug**](docs/DefaultApi.md#update_account_slug) | **PUT** /accounts/{slug} | Update account slug
78
+ *DefaultApi* | [**update_app**](docs/DefaultApi.md#update_app) | **PUT** /apps/{name} | Update app
78
79
  *DefaultApi* | [**update_catalog**](docs/DefaultApi.md#update_catalog) | **PUT** /catalogs/{slug} | Update catalog
79
- *DefaultApi* | [**update_my_team_invitation**](docs/DefaultApi.md#update_my_team_invitation) | **PUT** /team-invites | Update My Team Invitation
80
+ *DefaultApi* | [**update_my_team_invitation**](docs/DefaultApi.md#update_my_team_invitation) | **PUT** /team-invites | Update my team invitation
80
81
  *DefaultApi* | [**update_secret**](docs/DefaultApi.md#update_secret) | **PUT** /secrets/{name} | Update secret
81
- *DefaultApi* | [**update_team**](docs/DefaultApi.md#update_team) | **PUT** /teams/{slug} | Update Team
82
+ *DefaultApi* | [**update_team**](docs/DefaultApi.md#update_team) | **PUT** /teams/{slug} | Update team
82
83
  *DefaultApi* | [**update_user**](docs/DefaultApi.md#update_user) | **PUT** /user | Update user profile
83
84
 
84
85
 
@@ -125,6 +126,7 @@ Class | Method | HTTP request | Description
125
126
  - [DescribeAppResponse](docs/DescribeAppResponse.md)
126
127
  - [DescribeAppVersionResponse](docs/DescribeAppVersionResponse.md)
127
128
  - [DescribeDeviceLoginSessionResponse](docs/DescribeDeviceLoginSessionResponse.md)
129
+ - [DescribeRunLogsResponse](docs/DescribeRunLogsResponse.md)
128
130
  - [DescribeRunResponse](docs/DescribeRunResponse.md)
129
131
  - [DescribeSecretsKeyResponse](docs/DescribeSecretsKeyResponse.md)
130
132
  - [DescribeSessionResponse](docs/DescribeSessionResponse.md)
@@ -136,8 +138,6 @@ Class | Method | HTTP request | Description
136
138
  - [ExportedSecret](docs/ExportedSecret.md)
137
139
  - [GenerateAppStatisticsResponse](docs/GenerateAppStatisticsResponse.md)
138
140
  - [GenerateRunStatisticsResponse](docs/GenerateRunStatisticsResponse.md)
139
- - [GetRunLogLine](docs/GetRunLogLine.md)
140
- - [GetRunLogsOutputBody](docs/GetRunLogsOutputBody.md)
141
141
  - [InviteTeamMemberParams](docs/InviteTeamMemberParams.md)
142
142
  - [InviteTeamMemberResponse](docs/InviteTeamMemberResponse.md)
143
143
  - [LeaveTeamResponse](docs/LeaveTeamResponse.md)
@@ -166,18 +166,21 @@ Class | Method | HTTP request | Description
166
166
  - [Run](docs/Run.md)
167
167
  - [RunAppParams](docs/RunAppParams.md)
168
168
  - [RunAppResponse](docs/RunAppResponse.md)
169
+ - [RunLogLine](docs/RunLogLine.md)
169
170
  - [RunResults](docs/RunResults.md)
170
171
  - [RunStatistics](docs/RunStatistics.md)
171
172
  - [Secret](docs/Secret.md)
172
173
  - [SeriesPoint](docs/SeriesPoint.md)
173
174
  - [Session](docs/Session.md)
174
175
  - [StatisticsSettings](docs/StatisticsSettings.md)
175
- - [StreamAppRunLogs200ResponseInner](docs/StreamAppRunLogs200ResponseInner.md)
176
+ - [StreamRunLogs200ResponseInner](docs/StreamRunLogs200ResponseInner.md)
176
177
  - [Team](docs/Team.md)
177
178
  - [TeamInvitation](docs/TeamInvitation.md)
178
179
  - [Token](docs/Token.md)
179
180
  - [UpdateAccountSlugParams](docs/UpdateAccountSlugParams.md)
180
181
  - [UpdateAccountSlugResponse](docs/UpdateAccountSlugResponse.md)
182
+ - [UpdateAppParams](docs/UpdateAppParams.md)
183
+ - [UpdateAppResponse](docs/UpdateAppResponse.md)
181
184
  - [UpdateCatalogParams](docs/UpdateCatalogParams.md)
182
185
  - [UpdateCatalogResponse](docs/UpdateCatalogResponse.md)
183
186
  - [UpdateMyTeamInvitationParams](docs/UpdateMyTeamInvitationParams.md)
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * REST API to interact with Tower Services.
5
5
  *
6
- * The version of the OpenAPI document: v0.4.3
6
+ * The version of the OpenAPI document: v0.5.1
7
7
  * Contact: hello@tower.dev
8
8
  * Generated by: https://openapi-generator.tech
9
9
  */