immichpy 1.6.5__py3-none-any.whl → 1.7.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. immichpy/cli/__main__.py +1 -1
  2. immichpy/cli/commands/activities.py +23 -11
  3. immichpy/cli/commands/albums.py +34 -20
  4. immichpy/cli/commands/api_keys.py +6 -4
  5. immichpy/cli/commands/assets.py +274 -65
  6. immichpy/cli/commands/authentication.py +115 -25
  7. immichpy/cli/commands/database_backups_admin.py +111 -0
  8. immichpy/cli/commands/download.py +13 -5
  9. immichpy/cli/commands/duplicates.py +1 -1
  10. immichpy/cli/commands/faces.py +17 -11
  11. immichpy/cli/commands/jobs.py +6 -4
  12. immichpy/cli/commands/libraries.py +15 -9
  13. immichpy/cli/commands/maintenance_admin.py +39 -2
  14. immichpy/cli/commands/map.py +8 -8
  15. immichpy/cli/commands/memories.py +35 -21
  16. immichpy/cli/commands/notifications.py +16 -8
  17. immichpy/cli/commands/notifications_admin.py +43 -17
  18. immichpy/cli/commands/partners.py +9 -3
  19. immichpy/cli/commands/people.py +30 -24
  20. immichpy/cli/commands/plugins.py +14 -0
  21. immichpy/cli/commands/queues.py +8 -6
  22. immichpy/cli/commands/search.py +395 -189
  23. immichpy/cli/commands/server.py +6 -2
  24. immichpy/cli/commands/sessions.py +6 -4
  25. immichpy/cli/commands/shared_links.py +42 -25
  26. immichpy/cli/commands/stacks.py +4 -4
  27. immichpy/cli/commands/sync.py +26 -10
  28. immichpy/cli/commands/system_config.py +216 -115
  29. immichpy/cli/commands/system_metadata.py +3 -1
  30. immichpy/cli/commands/tags.py +9 -9
  31. immichpy/cli/commands/trash.py +1 -1
  32. immichpy/cli/commands/users.py +57 -29
  33. immichpy/cli/commands/users_admin.py +79 -45
  34. immichpy/cli/commands/workflows.py +40 -11
  35. immichpy/cli/main.py +10 -2
  36. immichpy/cli/utils.py +2 -2
  37. immichpy/cli/wrapper/setup.py +1 -1
  38. immichpy/client/.openapi-generator/FILES +26 -2
  39. immichpy/client/generated/__init__.py +101 -7
  40. immichpy/client/generated/api/__init__.py +3 -0
  41. immichpy/client/generated/api/activities_api.py +73 -43
  42. immichpy/client/generated/api/albums_api.py +40 -19
  43. immichpy/client/generated/api/api_keys_api.py +1 -1
  44. immichpy/client/generated/api/assets_api.py +1768 -366
  45. immichpy/client/generated/api/authentication_admin_api.py +1 -1
  46. immichpy/client/generated/api/authentication_api.py +1 -1
  47. immichpy/client/generated/api/database_backups_admin_api.py +1224 -0
  48. immichpy/client/generated/api/deprecated_api.py +103 -73
  49. immichpy/client/generated/api/download_api.py +1 -1
  50. immichpy/client/generated/api/duplicates_api.py +1 -1
  51. immichpy/client/generated/api/faces_api.py +7 -7
  52. immichpy/client/generated/api/jobs_api.py +7 -7
  53. immichpy/client/generated/api/libraries_api.py +1 -1
  54. immichpy/client/generated/api/maintenance_admin_api.py +459 -1
  55. immichpy/client/generated/api/map_api.py +103 -49
  56. immichpy/client/generated/api/memories_api.py +109 -61
  57. immichpy/client/generated/api/notifications_admin_api.py +1 -1
  58. immichpy/client/generated/api/notifications_api.py +52 -25
  59. immichpy/client/generated/api/partners_api.py +7 -7
  60. immichpy/client/generated/api/people_api.py +37 -19
  61. immichpy/client/generated/api/plugins_api.py +230 -1
  62. immichpy/client/generated/api/queues_api.py +37 -31
  63. immichpy/client/generated/api/search_api.py +529 -283
  64. immichpy/client/generated/api/server_api.py +1 -1
  65. immichpy/client/generated/api/sessions_api.py +1 -1
  66. immichpy/client/generated/api/shared_links_api.py +53 -19
  67. immichpy/client/generated/api/stacks_api.py +13 -7
  68. immichpy/client/generated/api/sync_api.py +1 -1
  69. immichpy/client/generated/api/system_config_api.py +1 -1
  70. immichpy/client/generated/api/system_metadata_api.py +1 -1
  71. immichpy/client/generated/api/tags_api.py +1 -1
  72. immichpy/client/generated/api/timeline_api.py +1 -1
  73. immichpy/client/generated/api/trash_api.py +1 -1
  74. immichpy/client/generated/api/users_admin_api.py +55 -31
  75. immichpy/client/generated/api/users_api.py +16 -7
  76. immichpy/client/generated/api/views_api.py +1 -1
  77. immichpy/client/generated/api/workflows_api.py +1 -1
  78. immichpy/client/generated/api_client.py +1 -1
  79. immichpy/client/generated/configuration.py +2 -2
  80. immichpy/client/generated/exceptions.py +1 -1
  81. immichpy/client/generated/models/__init__.py +56 -3
  82. immichpy/client/generated/models/activity_create_dto.py +11 -5
  83. immichpy/client/generated/models/activity_response_dto.py +10 -6
  84. immichpy/client/generated/models/activity_statistics_response_dto.py +4 -4
  85. immichpy/client/generated/models/add_users_dto.py +2 -2
  86. immichpy/client/generated/models/admin_onboarding_update_dto.py +4 -2
  87. immichpy/client/generated/models/album_response_dto.py +28 -16
  88. immichpy/client/generated/models/album_statistics_response_dto.py +6 -4
  89. immichpy/client/generated/models/album_user_add_dto.py +3 -3
  90. immichpy/client/generated/models/album_user_create_dto.py +3 -3
  91. immichpy/client/generated/models/album_user_response_dto.py +3 -3
  92. immichpy/client/generated/models/album_user_role.py +2 -2
  93. immichpy/client/generated/models/albums_add_assets_dto.py +3 -3
  94. immichpy/client/generated/models/albums_add_assets_response_dto.py +4 -4
  95. immichpy/client/generated/models/albums_response.py +4 -2
  96. immichpy/client/generated/models/albums_update.py +5 -3
  97. immichpy/client/generated/models/api_key_create_dto.py +5 -3
  98. immichpy/client/generated/models/api_key_create_response_dto.py +2 -2
  99. immichpy/client/generated/models/api_key_response_dto.py +6 -6
  100. immichpy/client/generated/models/api_key_update_dto.py +5 -3
  101. immichpy/client/generated/models/asset_bulk_delete_dto.py +6 -4
  102. immichpy/client/generated/models/asset_bulk_update_dto.py +28 -12
  103. immichpy/client/generated/models/asset_bulk_upload_check_dto.py +3 -3
  104. immichpy/client/generated/models/asset_bulk_upload_check_item.py +3 -3
  105. immichpy/client/generated/models/asset_bulk_upload_check_response_dto.py +5 -3
  106. immichpy/client/generated/models/asset_bulk_upload_check_result.py +12 -6
  107. immichpy/client/generated/models/asset_copy_dto.py +16 -8
  108. immichpy/client/generated/models/asset_delta_sync_dto.py +5 -3
  109. immichpy/client/generated/models/asset_delta_sync_response_dto.py +6 -4
  110. immichpy/client/generated/models/asset_edit_action.py +35 -0
  111. immichpy/client/generated/models/asset_edit_action_crop.py +95 -0
  112. immichpy/client/generated/models/asset_edit_action_list_dto.py +104 -0
  113. immichpy/client/generated/models/asset_edit_action_list_dto_edits_inner.py +188 -0
  114. immichpy/client/generated/models/asset_edit_action_mirror.py +95 -0
  115. immichpy/client/generated/models/asset_edit_action_rotate.py +95 -0
  116. immichpy/client/generated/models/asset_edits_dto.py +107 -0
  117. immichpy/client/generated/models/asset_face_create_dto.py +13 -9
  118. immichpy/client/generated/models/asset_face_delete_dto.py +3 -3
  119. immichpy/client/generated/models/asset_face_response_dto.py +26 -10
  120. immichpy/client/generated/models/asset_face_update_dto.py +3 -3
  121. immichpy/client/generated/models/asset_face_update_item.py +3 -3
  122. immichpy/client/generated/models/asset_face_without_person_response_dto.py +23 -9
  123. immichpy/client/generated/models/asset_full_sync_dto.py +13 -5
  124. immichpy/client/generated/models/asset_ids_dto.py +2 -2
  125. immichpy/client/generated/models/asset_ids_response_dto.py +6 -4
  126. immichpy/client/generated/models/asset_job_name.py +2 -2
  127. immichpy/client/generated/models/asset_jobs_dto.py +3 -3
  128. immichpy/client/generated/models/asset_media_response_dto.py +4 -4
  129. immichpy/client/generated/models/asset_media_size.py +2 -1
  130. immichpy/client/generated/models/asset_media_status.py +2 -2
  131. immichpy/client/generated/models/asset_metadata_bulk_delete_dto.py +103 -0
  132. immichpy/client/generated/models/asset_metadata_bulk_delete_item_dto.py +86 -0
  133. immichpy/client/generated/models/asset_metadata_bulk_response_dto.py +93 -0
  134. immichpy/client/generated/models/asset_metadata_bulk_upsert_dto.py +103 -0
  135. immichpy/client/generated/models/asset_metadata_bulk_upsert_item_dto.py +91 -0
  136. immichpy/client/generated/models/asset_metadata_response_dto.py +5 -6
  137. immichpy/client/generated/models/asset_metadata_upsert_dto.py +5 -3
  138. immichpy/client/generated/models/asset_metadata_upsert_item_dto.py +4 -5
  139. immichpy/client/generated/models/asset_ocr_response_dto.py +1 -1
  140. immichpy/client/generated/models/asset_order.py +2 -2
  141. immichpy/client/generated/models/asset_response_dto.py +66 -24
  142. immichpy/client/generated/models/asset_stack_response_dto.py +8 -4
  143. immichpy/client/generated/models/asset_stats_response_dto.py +5 -5
  144. immichpy/client/generated/models/asset_type_enum.py +2 -2
  145. immichpy/client/generated/models/asset_visibility.py +2 -2
  146. immichpy/client/generated/models/audio_codec.py +2 -2
  147. immichpy/client/generated/models/auth_status_response_dto.py +12 -6
  148. immichpy/client/generated/models/avatar_update.py +3 -3
  149. immichpy/client/generated/models/bulk_id_error_reason.py +2 -2
  150. immichpy/client/generated/models/bulk_id_response_dto.py +14 -5
  151. immichpy/client/generated/models/bulk_ids_dto.py +3 -3
  152. immichpy/client/generated/models/cast_response.py +4 -2
  153. immichpy/client/generated/models/cast_update.py +4 -2
  154. immichpy/client/generated/models/change_password_dto.py +6 -4
  155. immichpy/client/generated/models/check_existing_assets_dto.py +3 -3
  156. immichpy/client/generated/models/check_existing_assets_response_dto.py +4 -2
  157. immichpy/client/generated/models/clip_config.py +5 -3
  158. immichpy/client/generated/models/colorspace.py +1 -1
  159. immichpy/client/generated/models/contributor_count_response_dto.py +5 -3
  160. immichpy/client/generated/models/cq_mode.py +2 -2
  161. immichpy/client/generated/models/create_album_dto.py +9 -5
  162. immichpy/client/generated/models/create_library_dto.py +9 -5
  163. immichpy/client/generated/models/create_profile_image_response_dto.py +8 -4
  164. immichpy/client/generated/models/crop_parameters.py +105 -0
  165. immichpy/client/generated/models/database_backup_config.py +6 -4
  166. immichpy/client/generated/models/database_backup_delete_dto.py +82 -0
  167. immichpy/client/generated/models/database_backup_dto.py +85 -0
  168. immichpy/client/generated/models/database_backup_list_response_dto.py +98 -0
  169. immichpy/client/generated/models/download_archive_info.py +5 -3
  170. immichpy/client/generated/models/download_info_dto.py +11 -5
  171. immichpy/client/generated/models/download_response.py +8 -3
  172. immichpy/client/generated/models/download_response_dto.py +3 -3
  173. immichpy/client/generated/models/download_update.py +5 -3
  174. immichpy/client/generated/models/duplicate_detection_config.py +6 -3
  175. immichpy/client/generated/models/duplicate_response_dto.py +5 -3
  176. immichpy/client/generated/models/email_notifications_response.py +10 -4
  177. immichpy/client/generated/models/email_notifications_update.py +14 -4
  178. immichpy/client/generated/models/exif_response_dto.py +47 -23
  179. immichpy/client/generated/models/face_dto.py +3 -3
  180. immichpy/client/generated/models/facial_recognition_config.py +15 -6
  181. immichpy/client/generated/models/folders_response.py +5 -3
  182. immichpy/client/generated/models/folders_update.py +9 -3
  183. immichpy/client/generated/models/image_format.py +2 -2
  184. immichpy/client/generated/models/job_create_dto.py +3 -3
  185. immichpy/client/generated/models/job_name.py +3 -2
  186. immichpy/client/generated/models/job_settings_dto.py +4 -2
  187. immichpy/client/generated/models/library_response_dto.py +16 -10
  188. immichpy/client/generated/models/library_stats_response_dto.py +6 -6
  189. immichpy/client/generated/models/license_key_dto.py +7 -3
  190. immichpy/client/generated/models/license_response_dto.py +8 -4
  191. immichpy/client/generated/models/log_level.py +1 -1
  192. immichpy/client/generated/models/login_credential_dto.py +4 -4
  193. immichpy/client/generated/models/login_response_dto.py +13 -9
  194. immichpy/client/generated/models/logout_response_dto.py +3 -3
  195. immichpy/client/generated/models/machine_learning_availability_checks_dto.py +3 -3
  196. immichpy/client/generated/models/maintenance_action.py +4 -2
  197. immichpy/client/generated/models/maintenance_auth_dto.py +3 -3
  198. immichpy/client/generated/models/maintenance_detect_install_response_dto.py +101 -0
  199. immichpy/client/generated/models/maintenance_detect_install_storage_folder_dto.py +95 -0
  200. immichpy/client/generated/models/maintenance_login_dto.py +3 -3
  201. immichpy/client/generated/models/maintenance_status_response_dto.py +109 -0
  202. immichpy/client/generated/models/manual_job_name.py +2 -2
  203. immichpy/client/generated/models/map_marker_response_dto.py +8 -8
  204. immichpy/client/generated/models/map_reverse_geocode_response_dto.py +5 -5
  205. immichpy/client/generated/models/memories_response.py +4 -4
  206. immichpy/client/generated/models/memories_update.py +7 -3
  207. immichpy/client/generated/models/memory_create_dto.py +12 -6
  208. immichpy/client/generated/models/memory_response_dto.py +20 -12
  209. immichpy/client/generated/models/memory_search_order.py +1 -1
  210. immichpy/client/generated/models/memory_statistics_response_dto.py +3 -3
  211. immichpy/client/generated/models/memory_type.py +1 -1
  212. immichpy/client/generated/models/memory_update_dto.py +10 -4
  213. immichpy/client/generated/models/merge_person_dto.py +3 -3
  214. immichpy/client/generated/models/metadata_search_dto.py +124 -46
  215. immichpy/client/generated/models/{asset_metadata_key.py → mirror_axis.py} +6 -5
  216. immichpy/client/generated/models/mirror_parameters.py +83 -0
  217. immichpy/client/generated/models/notification_create_dto.py +18 -8
  218. immichpy/client/generated/models/notification_delete_all_dto.py +3 -3
  219. immichpy/client/generated/models/notification_dto.py +15 -9
  220. immichpy/client/generated/models/notification_level.py +1 -1
  221. immichpy/client/generated/models/notification_type.py +1 -1
  222. immichpy/client/generated/models/notification_update_all_dto.py +5 -3
  223. immichpy/client/generated/models/notification_update_dto.py +4 -2
  224. immichpy/client/generated/models/o_auth_authorize_response_dto.py +3 -3
  225. immichpy/client/generated/models/o_auth_callback_dto.py +8 -4
  226. immichpy/client/generated/models/o_auth_config_dto.py +10 -4
  227. immichpy/client/generated/models/o_auth_token_endpoint_auth_method.py +2 -2
  228. immichpy/client/generated/models/ocr_config.py +14 -6
  229. immichpy/client/generated/models/on_this_day_dto.py +2 -2
  230. immichpy/client/generated/models/onboarding_dto.py +4 -2
  231. immichpy/client/generated/models/onboarding_response_dto.py +4 -2
  232. immichpy/client/generated/models/partner_create_dto.py +4 -2
  233. immichpy/client/generated/models/partner_direction.py +1 -1
  234. immichpy/client/generated/models/partner_response_dto.py +16 -8
  235. immichpy/client/generated/models/partner_update_dto.py +4 -2
  236. immichpy/client/generated/models/people_response.py +5 -3
  237. immichpy/client/generated/models/people_response_dto.py +7 -5
  238. immichpy/client/generated/models/people_update.py +9 -3
  239. immichpy/client/generated/models/people_update_dto.py +3 -3
  240. immichpy/client/generated/models/people_update_item.py +10 -10
  241. immichpy/client/generated/models/permission.py +13 -2
  242. immichpy/client/generated/models/person_create_dto.py +8 -8
  243. immichpy/client/generated/models/person_response_dto.py +17 -9
  244. immichpy/client/generated/models/person_statistics_response_dto.py +3 -3
  245. immichpy/client/generated/models/person_update_dto.py +9 -9
  246. immichpy/client/generated/models/person_with_faces_response_dto.py +20 -10
  247. immichpy/client/generated/models/pin_code_change_dto.py +10 -4
  248. immichpy/client/generated/models/pin_code_reset_dto.py +7 -3
  249. immichpy/client/generated/models/pin_code_setup_dto.py +2 -2
  250. immichpy/client/generated/models/places_response_dto.py +11 -7
  251. immichpy/client/generated/models/plugin_action_response_dto.py +13 -9
  252. immichpy/client/generated/models/{plugin_context.py → plugin_context_type.py} +4 -4
  253. immichpy/client/generated/models/plugin_filter_response_dto.py +13 -9
  254. immichpy/client/generated/models/plugin_response_dto.py +11 -11
  255. immichpy/client/generated/models/plugin_trigger_response_dto.py +89 -0
  256. immichpy/client/generated/models/plugin_trigger_type.py +2 -2
  257. immichpy/client/generated/models/purchase_response.py +7 -3
  258. immichpy/client/generated/models/purchase_update.py +7 -3
  259. immichpy/client/generated/models/queue_command.py +2 -2
  260. immichpy/client/generated/models/queue_command_dto.py +6 -4
  261. immichpy/client/generated/models/queue_delete_dto.py +1 -1
  262. immichpy/client/generated/models/queue_job_response_dto.py +6 -6
  263. immichpy/client/generated/models/queue_job_status.py +1 -1
  264. immichpy/client/generated/models/queue_name.py +2 -1
  265. immichpy/client/generated/models/queue_response_dto.py +5 -3
  266. immichpy/client/generated/models/queue_response_legacy_dto.py +1 -1
  267. immichpy/client/generated/models/queue_statistics_dto.py +8 -8
  268. immichpy/client/generated/models/queue_status_legacy_dto.py +8 -3
  269. immichpy/client/generated/models/queue_update_dto.py +4 -2
  270. immichpy/client/generated/models/queues_response_legacy_dto.py +9 -1
  271. immichpy/client/generated/models/random_search_dto.py +96 -34
  272. immichpy/client/generated/models/ratings_response.py +3 -3
  273. immichpy/client/generated/models/ratings_update.py +5 -3
  274. immichpy/client/generated/models/reaction_level.py +1 -1
  275. immichpy/client/generated/models/reaction_type.py +1 -1
  276. immichpy/client/generated/models/reverse_geocoding_state_response_dto.py +7 -3
  277. immichpy/client/generated/models/rotate_parameters.py +84 -0
  278. immichpy/client/generated/models/search_album_response_dto.py +4 -4
  279. immichpy/client/generated/models/search_asset_response_dto.py +6 -4
  280. immichpy/client/generated/models/search_explore_item.py +3 -3
  281. immichpy/client/generated/models/search_explore_response_dto.py +2 -2
  282. immichpy/client/generated/models/search_facet_count_response_dto.py +4 -4
  283. immichpy/client/generated/models/search_facet_response_dto.py +3 -3
  284. immichpy/client/generated/models/search_response_dto.py +1 -1
  285. immichpy/client/generated/models/search_statistics_response_dto.py +3 -3
  286. immichpy/client/generated/models/search_suggestion_type.py +1 -1
  287. immichpy/client/generated/models/server_about_response_dto.py +46 -22
  288. immichpy/client/generated/models/server_apk_links_dto.py +12 -6
  289. immichpy/client/generated/models/server_config_dto.py +36 -12
  290. immichpy/client/generated/models/server_features_dto.py +32 -16
  291. immichpy/client/generated/models/server_media_types_response_dto.py +5 -5
  292. immichpy/client/generated/models/server_ping_response.py +1 -1
  293. immichpy/client/generated/models/server_stats_response_dto.py +10 -6
  294. immichpy/client/generated/models/server_storage_response_dto.py +21 -8
  295. immichpy/client/generated/models/server_theme_dto.py +4 -2
  296. immichpy/client/generated/models/server_version_history_response_dto.py +6 -4
  297. immichpy/client/generated/models/server_version_response_dto.py +5 -5
  298. immichpy/client/generated/models/session_create_dto.py +8 -4
  299. immichpy/client/generated/models/session_create_response_dto.py +17 -11
  300. immichpy/client/generated/models/session_response_dto.py +16 -10
  301. immichpy/client/generated/models/session_unlock_dto.py +7 -3
  302. immichpy/client/generated/models/session_update_dto.py +2 -2
  303. immichpy/client/generated/models/set_maintenance_mode_dto.py +17 -7
  304. immichpy/client/generated/models/shared_link_create_dto.py +25 -11
  305. immichpy/client/generated/models/shared_link_edit_dto.py +19 -9
  306. immichpy/client/generated/models/shared_link_response_dto.py +18 -14
  307. immichpy/client/generated/models/shared_link_type.py +2 -2
  308. immichpy/client/generated/models/shared_links_response.py +5 -3
  309. immichpy/client/generated/models/shared_links_update.py +9 -3
  310. immichpy/client/generated/models/sign_up_dto.py +5 -5
  311. immichpy/client/generated/models/smart_search_dto.py +102 -36
  312. immichpy/client/generated/models/source_type.py +2 -2
  313. immichpy/client/generated/models/stack_create_dto.py +2 -2
  314. immichpy/client/generated/models/stack_response_dto.py +6 -4
  315. immichpy/client/generated/models/stack_update_dto.py +4 -2
  316. immichpy/client/generated/models/statistics_search_dto.py +86 -30
  317. immichpy/client/generated/models/storage_folder.py +38 -0
  318. immichpy/client/generated/models/sync_ack_delete_dto.py +5 -3
  319. immichpy/client/generated/models/sync_ack_dto.py +4 -4
  320. immichpy/client/generated/models/sync_ack_set_dto.py +4 -2
  321. immichpy/client/generated/models/sync_album_delete_v1.py +2 -2
  322. immichpy/client/generated/models/sync_album_to_asset_delete_v1.py +3 -3
  323. immichpy/client/generated/models/sync_album_to_asset_v1.py +3 -3
  324. immichpy/client/generated/models/sync_album_user_delete_v1.py +3 -3
  325. immichpy/client/generated/models/sync_album_user_v1.py +4 -4
  326. immichpy/client/generated/models/sync_album_v1.py +13 -9
  327. immichpy/client/generated/models/sync_asset_delete_v1.py +2 -2
  328. immichpy/client/generated/models/sync_asset_exif_v1.py +46 -26
  329. immichpy/client/generated/models/sync_asset_face_delete_v1.py +2 -2
  330. immichpy/client/generated/models/sync_asset_face_v1.py +5 -5
  331. immichpy/client/generated/models/sync_asset_metadata_delete_v1.py +3 -4
  332. immichpy/client/generated/models/sync_asset_metadata_v1.py +4 -5
  333. immichpy/client/generated/models/sync_asset_v1.py +47 -18
  334. immichpy/client/generated/models/sync_auth_user_v1.py +22 -12
  335. immichpy/client/generated/models/sync_entity_type.py +2 -2
  336. immichpy/client/generated/models/sync_memory_asset_delete_v1.py +3 -3
  337. immichpy/client/generated/models/sync_memory_asset_v1.py +3 -3
  338. immichpy/client/generated/models/sync_memory_delete_v1.py +2 -2
  339. immichpy/client/generated/models/sync_memory_v1.py +13 -13
  340. immichpy/client/generated/models/sync_partner_delete_v1.py +5 -3
  341. immichpy/client/generated/models/sync_partner_v1.py +6 -4
  342. immichpy/client/generated/models/sync_person_delete_v1.py +2 -2
  343. immichpy/client/generated/models/sync_person_v1.py +13 -11
  344. immichpy/client/generated/models/sync_request_type.py +2 -2
  345. immichpy/client/generated/models/sync_stack_delete_v1.py +2 -2
  346. immichpy/client/generated/models/sync_stack_v1.py +8 -6
  347. immichpy/client/generated/models/sync_stream_dto.py +4 -4
  348. immichpy/client/generated/models/sync_user_delete_v1.py +2 -2
  349. immichpy/client/generated/models/sync_user_metadata_delete_v1.py +3 -3
  350. immichpy/client/generated/models/sync_user_metadata_v1.py +4 -4
  351. immichpy/client/generated/models/sync_user_v1.py +16 -8
  352. immichpy/client/generated/models/system_config_backups_dto.py +1 -1
  353. immichpy/client/generated/models/system_config_dto.py +1 -1
  354. immichpy/client/generated/models/system_config_f_fmpeg_dto.py +44 -22
  355. immichpy/client/generated/models/system_config_faces_dto.py +2 -2
  356. immichpy/client/generated/models/system_config_generated_fullsize_image_dto.py +13 -7
  357. immichpy/client/generated/models/system_config_generated_image_dto.py +14 -8
  358. immichpy/client/generated/models/system_config_image_dto.py +5 -3
  359. immichpy/client/generated/models/system_config_job_dto.py +9 -1
  360. immichpy/client/generated/models/system_config_library_dto.py +1 -1
  361. immichpy/client/generated/models/system_config_library_scan_dto.py +2 -2
  362. immichpy/client/generated/models/system_config_library_watch_dto.py +3 -3
  363. immichpy/client/generated/models/system_config_logging_dto.py +3 -3
  364. immichpy/client/generated/models/system_config_machine_learning_dto.py +2 -2
  365. immichpy/client/generated/models/system_config_map_dto.py +2 -2
  366. immichpy/client/generated/models/system_config_metadata_dto.py +1 -1
  367. immichpy/client/generated/models/system_config_new_version_check_dto.py +3 -3
  368. immichpy/client/generated/models/system_config_nightly_tasks_dto.py +16 -6
  369. immichpy/client/generated/models/system_config_notifications_dto.py +1 -1
  370. immichpy/client/generated/models/system_config_o_auth_dto.py +28 -18
  371. immichpy/client/generated/models/system_config_password_login_dto.py +3 -3
  372. immichpy/client/generated/models/system_config_reverse_geocoding_dto.py +3 -3
  373. immichpy/client/generated/models/system_config_server_dto.py +8 -4
  374. immichpy/client/generated/models/system_config_smtp_dto.py +8 -4
  375. immichpy/client/generated/models/system_config_smtp_transport_dto.py +9 -7
  376. immichpy/client/generated/models/system_config_storage_template_dto.py +6 -4
  377. immichpy/client/generated/models/system_config_template_emails_dto.py +1 -1
  378. immichpy/client/generated/models/system_config_template_storage_option_dto.py +32 -9
  379. immichpy/client/generated/models/system_config_templates_dto.py +1 -1
  380. immichpy/client/generated/models/system_config_theme_dto.py +4 -2
  381. immichpy/client/generated/models/system_config_trash_dto.py +3 -3
  382. immichpy/client/generated/models/system_config_user_dto.py +4 -2
  383. immichpy/client/generated/models/tag_bulk_assets_dto.py +3 -3
  384. immichpy/client/generated/models/tag_bulk_assets_response_dto.py +3 -3
  385. immichpy/client/generated/models/tag_create_dto.py +8 -4
  386. immichpy/client/generated/models/tag_response_dto.py +10 -8
  387. immichpy/client/generated/models/tag_update_dto.py +3 -3
  388. immichpy/client/generated/models/tag_upsert_dto.py +3 -3
  389. immichpy/client/generated/models/tags_response.py +5 -3
  390. immichpy/client/generated/models/tags_update.py +9 -3
  391. immichpy/client/generated/models/template_dto.py +3 -3
  392. immichpy/client/generated/models/template_response_dto.py +4 -4
  393. immichpy/client/generated/models/test_email_response_dto.py +2 -2
  394. immichpy/client/generated/models/time_bucket_asset_response_dto.py +2 -3
  395. immichpy/client/generated/models/time_buckets_response_dto.py +1 -1
  396. immichpy/client/generated/models/tone_mapping.py +2 -2
  397. immichpy/client/generated/models/transcode_hw_accel.py +2 -2
  398. immichpy/client/generated/models/transcode_policy.py +2 -2
  399. immichpy/client/generated/models/trash_response_dto.py +3 -3
  400. immichpy/client/generated/models/update_album_dto.py +12 -6
  401. immichpy/client/generated/models/update_album_user_dto.py +3 -3
  402. immichpy/client/generated/models/update_asset_dto.py +21 -9
  403. immichpy/client/generated/models/update_library_dto.py +8 -4
  404. immichpy/client/generated/models/usage_by_user_dto.py +16 -9
  405. immichpy/client/generated/models/user_admin_create_dto.py +20 -10
  406. immichpy/client/generated/models/user_admin_delete_dto.py +5 -3
  407. immichpy/client/generated/models/user_admin_response_dto.py +35 -18
  408. immichpy/client/generated/models/user_admin_update_dto.py +20 -10
  409. immichpy/client/generated/models/user_avatar_color.py +2 -2
  410. immichpy/client/generated/models/user_license.py +6 -4
  411. immichpy/client/generated/models/user_metadata_key.py +2 -2
  412. immichpy/client/generated/models/user_preferences_response_dto.py +1 -1
  413. immichpy/client/generated/models/user_preferences_update_dto.py +1 -1
  414. immichpy/client/generated/models/user_response_dto.py +13 -7
  415. immichpy/client/generated/models/user_status.py +2 -2
  416. immichpy/client/generated/models/user_update_me_dto.py +10 -5
  417. immichpy/client/generated/models/validate_access_token_response_dto.py +4 -2
  418. immichpy/client/generated/models/validate_library_dto.py +9 -3
  419. immichpy/client/generated/models/validate_library_import_path_response_dto.py +4 -4
  420. immichpy/client/generated/models/validate_library_response_dto.py +4 -2
  421. immichpy/client/generated/models/version_check_state_response_dto.py +7 -3
  422. immichpy/client/generated/models/video_codec.py +2 -2
  423. immichpy/client/generated/models/video_container.py +2 -2
  424. immichpy/client/generated/models/workflow_action_item_dto.py +7 -3
  425. immichpy/client/generated/models/workflow_action_response_dto.py +10 -6
  426. immichpy/client/generated/models/workflow_create_dto.py +11 -7
  427. immichpy/client/generated/models/workflow_filter_item_dto.py +7 -3
  428. immichpy/client/generated/models/workflow_filter_response_dto.py +10 -6
  429. immichpy/client/generated/models/workflow_response_dto.py +14 -27
  430. immichpy/client/generated/models/workflow_update_dto.py +19 -7
  431. immichpy/client/generated/rest.py +1 -1
  432. immichpy/client/main.py +4 -1
  433. {immichpy-1.6.5.dist-info → immichpy-1.7.6.dist-info}/METADATA +1 -3
  434. immichpy-1.7.6.dist-info/RECORD +464 -0
  435. immichpy-1.6.5.dist-info/RECORD +0 -439
  436. {immichpy-1.6.5.dist-info → immichpy-1.7.6.dist-info}/WHEEL +0 -0
  437. {immichpy-1.6.5.dist-info → immichpy-1.7.6.dist-info}/entry_points.txt +0 -0
  438. {immichpy-1.6.5.dist-info → immichpy-1.7.6.dist-info}/licenses/LICENSE +0 -0
@@ -20,7 +20,9 @@ app = typer.Typer(
20
20
  @app.command("create-profile-image", deprecated=False, rich_help_panel="API commands")
21
21
  def create_profile_image(
22
22
  ctx: typer.Context,
23
- file: Path = typer.Option(..., "--file", help="""""", exists=True),
23
+ file: Path = typer.Option(
24
+ ..., "--file", help="""Profile image file""", exists=True
25
+ ),
24
26
  ) -> None:
25
27
  """Create user profile image
26
28
 
@@ -182,8 +184,12 @@ def search_users(
182
184
  @app.command("set-user-license", deprecated=False, rich_help_panel="API commands")
183
185
  def set_user_license(
184
186
  ctx: typer.Context,
185
- activation_key: str = typer.Option(..., "--activation-key", help=""""""),
186
- license_key: str = typer.Option(..., "--license-key", help=""""""),
187
+ activation_key: str = typer.Option(
188
+ ..., "--activation-key", help="""Activation key"""
189
+ ),
190
+ license_key: str = typer.Option(
191
+ ..., "--license-key", help="""License key (format: IM(SV|CL)(-XXXX){8})"""
192
+ ),
187
193
  ) -> None:
188
194
  """Set user product key
189
195
 
@@ -203,7 +209,9 @@ def set_user_license(
203
209
  @app.command("set-user-onboarding", deprecated=False, rich_help_panel="API commands")
204
210
  def set_user_onboarding(
205
211
  ctx: typer.Context,
206
- is_onboarded: bool = typer.Option(..., "--is-onboarded", help=""""""),
212
+ is_onboarded: bool = typer.Option(
213
+ ..., "--is-onboarded", help="""Is user onboarded"""
214
+ ),
207
215
  ) -> None:
208
216
  """Update user onboarding
209
217
 
@@ -223,65 +231,79 @@ def set_user_onboarding(
223
231
  def update_my_preferences(
224
232
  ctx: typer.Context,
225
233
  albums_default_asset_order: str | None = typer.Option(
226
- None, "--albums-default-asset-order", help=""""""
234
+ None, "--albums-default-asset-order", help="""Asset sort order"""
235
+ ),
236
+ avatar_color: str | None = typer.Option(
237
+ None, "--avatar-color", help="""Avatar color"""
227
238
  ),
228
- avatar_color: str | None = typer.Option(None, "--avatar-color", help=""""""),
229
239
  cast_g_cast_enabled: Literal["true", "false"] | None = typer.Option(
230
- None, "--cast-g-cast-enabled", help=""""""
240
+ None, "--cast-g-cast-enabled", help="""Whether Google Cast is enabled"""
231
241
  ),
232
242
  download_archive_size: int | None = typer.Option(
233
- None, "--download-archive-size", help="""""", min=1
243
+ None, "--download-archive-size", help="""Maximum archive size in bytes""", min=1
234
244
  ),
235
245
  download_include_embedded_videos: Literal["true", "false"] | None = typer.Option(
236
- None, "--download-include-embedded-videos", help=""""""
246
+ None,
247
+ "--download-include-embedded-videos",
248
+ help="""Whether to include embedded videos in downloads""",
237
249
  ),
238
250
  email_notifications_album_invite: Literal["true", "false"] | None = typer.Option(
239
- None, "--email-notifications-album-invite", help=""""""
251
+ None,
252
+ "--email-notifications-album-invite",
253
+ help="""Whether to receive email notifications for album invites""",
240
254
  ),
241
255
  email_notifications_album_update: Literal["true", "false"] | None = typer.Option(
242
- None, "--email-notifications-album-update", help=""""""
256
+ None,
257
+ "--email-notifications-album-update",
258
+ help="""Whether to receive email notifications for album updates""",
243
259
  ),
244
260
  email_notifications_enabled: Literal["true", "false"] | None = typer.Option(
245
- None, "--email-notifications-enabled", help=""""""
261
+ None,
262
+ "--email-notifications-enabled",
263
+ help="""Whether email notifications are enabled""",
246
264
  ),
247
265
  folders_enabled: Literal["true", "false"] | None = typer.Option(
248
- None, "--folders-enabled", help=""""""
266
+ None, "--folders-enabled", help="""Whether folders are enabled"""
249
267
  ),
250
268
  folders_sidebar_web: Literal["true", "false"] | None = typer.Option(
251
- None, "--folders-sidebar-web", help=""""""
269
+ None, "--folders-sidebar-web", help="""Whether folders appear in web sidebar"""
252
270
  ),
253
271
  memories_duration: int | None = typer.Option(
254
- None, "--memories-duration", help="""""", min=1
272
+ None, "--memories-duration", help="""Memory duration in seconds""", min=1
255
273
  ),
256
274
  memories_enabled: Literal["true", "false"] | None = typer.Option(
257
- None, "--memories-enabled", help=""""""
275
+ None, "--memories-enabled", help="""Whether memories are enabled"""
258
276
  ),
259
277
  people_enabled: Literal["true", "false"] | None = typer.Option(
260
- None, "--people-enabled", help=""""""
278
+ None, "--people-enabled", help="""Whether people are enabled"""
261
279
  ),
262
280
  people_sidebar_web: Literal["true", "false"] | None = typer.Option(
263
- None, "--people-sidebar-web", help=""""""
281
+ None, "--people-sidebar-web", help="""Whether people appear in web sidebar"""
264
282
  ),
265
283
  purchase_hide_buy_button_until: str | None = typer.Option(
266
- None, "--purchase-hide-buy-button-until", help=""""""
284
+ None,
285
+ "--purchase-hide-buy-button-until",
286
+ help="""Date until which to hide buy button""",
267
287
  ),
268
288
  purchase_show_support_badge: Literal["true", "false"] | None = typer.Option(
269
- None, "--purchase-show-support-badge", help=""""""
289
+ None, "--purchase-show-support-badge", help="""Whether to show support badge"""
270
290
  ),
271
291
  ratings_enabled: Literal["true", "false"] | None = typer.Option(
272
- None, "--ratings-enabled", help=""""""
292
+ None, "--ratings-enabled", help="""Whether ratings are enabled"""
273
293
  ),
274
294
  shared_links_enabled: Literal["true", "false"] | None = typer.Option(
275
- None, "--shared-links-enabled", help=""""""
295
+ None, "--shared-links-enabled", help="""Whether shared links are enabled"""
276
296
  ),
277
297
  shared_links_sidebar_web: Literal["true", "false"] | None = typer.Option(
278
- None, "--shared-links-sidebar-web", help=""""""
298
+ None,
299
+ "--shared-links-sidebar-web",
300
+ help="""Whether shared links appear in web sidebar""",
279
301
  ),
280
302
  tags_enabled: Literal["true", "false"] | None = typer.Option(
281
- None, "--tags-enabled", help=""""""
303
+ None, "--tags-enabled", help="""Whether tags are enabled"""
282
304
  ),
283
305
  tags_sidebar_web: Literal["true", "false"] | None = typer.Option(
284
- None, "--tags-sidebar-web", help=""""""
306
+ None, "--tags-sidebar-web", help="""Whether tags appear in web sidebar"""
285
307
  ),
286
308
  ) -> None:
287
309
  """Update my preferences
@@ -380,10 +402,16 @@ def update_my_preferences(
380
402
  @app.command("update-my-user", deprecated=False, rich_help_panel="API commands")
381
403
  def update_my_user(
382
404
  ctx: typer.Context,
383
- avatar_color: str | None = typer.Option(None, "--avatar-color", help=""""""),
384
- email: str | None = typer.Option(None, "--email", help=""""""),
385
- name: str | None = typer.Option(None, "--name", help=""""""),
386
- password: str | None = typer.Option(None, "--password", help=""""""),
405
+ avatar_color: str | None = typer.Option(
406
+ None, "--avatar-color", help="""Avatar color"""
407
+ ),
408
+ email: str | None = typer.Option(None, "--email", help="""User email"""),
409
+ name: str | None = typer.Option(None, "--name", help="""User name"""),
410
+ password: str | None = typer.Option(
411
+ None,
412
+ "--password",
413
+ help="""User password (deprecated, use change password endpoint)""",
414
+ ),
387
415
  ) -> None:
388
416
  """Update current user
389
417
 
@@ -19,23 +19,29 @@ app = typer.Typer(
19
19
  @app.command("create-user-admin", deprecated=False, rich_help_panel="API commands")
20
20
  def create_user_admin(
21
21
  ctx: typer.Context,
22
- avatar_color: str | None = typer.Option(None, "--avatar-color", help=""""""),
23
- email: str = typer.Option(..., "--email", help=""""""),
22
+ avatar_color: str | None = typer.Option(
23
+ None, "--avatar-color", help="""Avatar color"""
24
+ ),
25
+ email: str = typer.Option(..., "--email", help="""User email"""),
24
26
  is_admin: Literal["true", "false"] | None = typer.Option(
25
- None, "--is-admin", help=""""""
27
+ None, "--is-admin", help="""Grant admin privileges"""
26
28
  ),
27
- name: str = typer.Option(..., "--name", help=""""""),
29
+ name: str = typer.Option(..., "--name", help="""User name"""),
28
30
  notify: Literal["true", "false"] | None = typer.Option(
29
- None, "--notify", help=""""""
31
+ None, "--notify", help="""Send notification email"""
30
32
  ),
31
- password: str = typer.Option(..., "--password", help=""""""),
33
+ password: str = typer.Option(..., "--password", help="""User password"""),
32
34
  quota_size_in_bytes: int | None = typer.Option(
33
- None, "--quota-size-in-bytes", help="""""", min=0
35
+ None, "--quota-size-in-bytes", help="""Storage quota in bytes""", min=0
34
36
  ),
35
37
  should_change_password: Literal["true", "false"] | None = typer.Option(
36
- None, "--should-change-password", help=""""""
38
+ None,
39
+ "--should-change-password",
40
+ help="""Require password change on next login""",
41
+ ),
42
+ storage_label: str | None = typer.Option(
43
+ None, "--storage-label", help="""Storage label"""
37
44
  ),
38
- storage_label: str | None = typer.Option(None, "--storage-label", help=""""""),
39
45
  ) -> None:
40
46
  """Create a user
41
47
 
@@ -73,7 +79,9 @@ def create_user_admin(
73
79
  def delete_user_admin(
74
80
  ctx: typer.Context,
75
81
  id: str = typer.Argument(..., help=""""""),
76
- force: Literal["true", "false"] | None = typer.Option(None, "--force", help=""""""),
82
+ force: Literal["true", "false"] | None = typer.Option(
83
+ None, "--force", help="""Force delete even if user has assets"""
84
+ ),
77
85
  ) -> None:
78
86
  """Delete a user
79
87
 
@@ -154,13 +162,13 @@ def get_user_statistics_admin(
154
162
  ctx: typer.Context,
155
163
  id: str = typer.Argument(..., help=""""""),
156
164
  is_favorite: Literal["true", "false"] | None = typer.Option(
157
- None, "--is-favorite", help=""""""
165
+ None, "--is-favorite", help="""Filter by favorite status"""
158
166
  ),
159
167
  is_trashed: Literal["true", "false"] | None = typer.Option(
160
- None, "--is-trashed", help=""""""
168
+ None, "--is-trashed", help="""Filter by trash status"""
161
169
  ),
162
170
  visibility: AssetVisibility | None = typer.Option(
163
- None, "--visibility", help=""""""
171
+ None, "--visibility", help="""Filter by visibility"""
164
172
  ),
165
173
  ) -> None:
166
174
  """Retrieve user statistics
@@ -203,9 +211,9 @@ def restore_user_admin(
203
211
  @app.command("search-users-admin", deprecated=False, rich_help_panel="API commands")
204
212
  def search_users_admin(
205
213
  ctx: typer.Context,
206
- id: str | None = typer.Option(None, "--id", help=""""""),
214
+ id: str | None = typer.Option(None, "--id", help="""User ID filter"""),
207
215
  with_deleted: Literal["true", "false"] | None = typer.Option(
208
- None, "--with-deleted", help=""""""
216
+ None, "--with-deleted", help="""Include deleted users"""
209
217
  ),
210
218
  ) -> None:
211
219
  """Search users
@@ -228,21 +236,33 @@ def search_users_admin(
228
236
  def update_user_admin(
229
237
  ctx: typer.Context,
230
238
  id: str = typer.Argument(..., help=""""""),
231
- avatar_color: str | None = typer.Option(None, "--avatar-color", help=""""""),
232
- email: str | None = typer.Option(None, "--email", help=""""""),
239
+ avatar_color: str | None = typer.Option(
240
+ None, "--avatar-color", help="""Avatar color"""
241
+ ),
242
+ email: str | None = typer.Option(None, "--email", help="""User email"""),
233
243
  is_admin: Literal["true", "false"] | None = typer.Option(
234
- None, "--is-admin", help=""""""
244
+ None, "--is-admin", help="""Grant admin privileges"""
245
+ ),
246
+ name: str | None = typer.Option(None, "--name", help="""User name"""),
247
+ password: str | None = typer.Option(None, "--password", help="""User password"""),
248
+ pin_code: str | None = typer.Option(
249
+ None,
250
+ "--pin-code",
251
+ help="""PIN code
252
+
253
+ Example: 123456""",
235
254
  ),
236
- name: str | None = typer.Option(None, "--name", help=""""""),
237
- password: str | None = typer.Option(None, "--password", help=""""""),
238
- pin_code: str | None = typer.Option(None, "--pin-code", help="""Example: 123456"""),
239
255
  quota_size_in_bytes: int | None = typer.Option(
240
- None, "--quota-size-in-bytes", help="""""", min=0
256
+ None, "--quota-size-in-bytes", help="""Storage quota in bytes""", min=0
241
257
  ),
242
258
  should_change_password: Literal["true", "false"] | None = typer.Option(
243
- None, "--should-change-password", help=""""""
259
+ None,
260
+ "--should-change-password",
261
+ help="""Require password change on next login""",
262
+ ),
263
+ storage_label: str | None = typer.Option(
264
+ None, "--storage-label", help="""Storage label"""
244
265
  ),
245
- storage_label: str | None = typer.Option(None, "--storage-label", help=""""""),
246
266
  ) -> None:
247
267
  """Update a user
248
268
 
@@ -287,65 +307,79 @@ def update_user_preferences_admin(
287
307
  ctx: typer.Context,
288
308
  id: str = typer.Argument(..., help=""""""),
289
309
  albums_default_asset_order: str | None = typer.Option(
290
- None, "--albums-default-asset-order", help=""""""
310
+ None, "--albums-default-asset-order", help="""Asset sort order"""
311
+ ),
312
+ avatar_color: str | None = typer.Option(
313
+ None, "--avatar-color", help="""Avatar color"""
291
314
  ),
292
- avatar_color: str | None = typer.Option(None, "--avatar-color", help=""""""),
293
315
  cast_g_cast_enabled: Literal["true", "false"] | None = typer.Option(
294
- None, "--cast-g-cast-enabled", help=""""""
316
+ None, "--cast-g-cast-enabled", help="""Whether Google Cast is enabled"""
295
317
  ),
296
318
  download_archive_size: int | None = typer.Option(
297
- None, "--download-archive-size", help="""""", min=1
319
+ None, "--download-archive-size", help="""Maximum archive size in bytes""", min=1
298
320
  ),
299
321
  download_include_embedded_videos: Literal["true", "false"] | None = typer.Option(
300
- None, "--download-include-embedded-videos", help=""""""
322
+ None,
323
+ "--download-include-embedded-videos",
324
+ help="""Whether to include embedded videos in downloads""",
301
325
  ),
302
326
  email_notifications_album_invite: Literal["true", "false"] | None = typer.Option(
303
- None, "--email-notifications-album-invite", help=""""""
327
+ None,
328
+ "--email-notifications-album-invite",
329
+ help="""Whether to receive email notifications for album invites""",
304
330
  ),
305
331
  email_notifications_album_update: Literal["true", "false"] | None = typer.Option(
306
- None, "--email-notifications-album-update", help=""""""
332
+ None,
333
+ "--email-notifications-album-update",
334
+ help="""Whether to receive email notifications for album updates""",
307
335
  ),
308
336
  email_notifications_enabled: Literal["true", "false"] | None = typer.Option(
309
- None, "--email-notifications-enabled", help=""""""
337
+ None,
338
+ "--email-notifications-enabled",
339
+ help="""Whether email notifications are enabled""",
310
340
  ),
311
341
  folders_enabled: Literal["true", "false"] | None = typer.Option(
312
- None, "--folders-enabled", help=""""""
342
+ None, "--folders-enabled", help="""Whether folders are enabled"""
313
343
  ),
314
344
  folders_sidebar_web: Literal["true", "false"] | None = typer.Option(
315
- None, "--folders-sidebar-web", help=""""""
345
+ None, "--folders-sidebar-web", help="""Whether folders appear in web sidebar"""
316
346
  ),
317
347
  memories_duration: int | None = typer.Option(
318
- None, "--memories-duration", help="""""", min=1
348
+ None, "--memories-duration", help="""Memory duration in seconds""", min=1
319
349
  ),
320
350
  memories_enabled: Literal["true", "false"] | None = typer.Option(
321
- None, "--memories-enabled", help=""""""
351
+ None, "--memories-enabled", help="""Whether memories are enabled"""
322
352
  ),
323
353
  people_enabled: Literal["true", "false"] | None = typer.Option(
324
- None, "--people-enabled", help=""""""
354
+ None, "--people-enabled", help="""Whether people are enabled"""
325
355
  ),
326
356
  people_sidebar_web: Literal["true", "false"] | None = typer.Option(
327
- None, "--people-sidebar-web", help=""""""
357
+ None, "--people-sidebar-web", help="""Whether people appear in web sidebar"""
328
358
  ),
329
359
  purchase_hide_buy_button_until: str | None = typer.Option(
330
- None, "--purchase-hide-buy-button-until", help=""""""
360
+ None,
361
+ "--purchase-hide-buy-button-until",
362
+ help="""Date until which to hide buy button""",
331
363
  ),
332
364
  purchase_show_support_badge: Literal["true", "false"] | None = typer.Option(
333
- None, "--purchase-show-support-badge", help=""""""
365
+ None, "--purchase-show-support-badge", help="""Whether to show support badge"""
334
366
  ),
335
367
  ratings_enabled: Literal["true", "false"] | None = typer.Option(
336
- None, "--ratings-enabled", help=""""""
368
+ None, "--ratings-enabled", help="""Whether ratings are enabled"""
337
369
  ),
338
370
  shared_links_enabled: Literal["true", "false"] | None = typer.Option(
339
- None, "--shared-links-enabled", help=""""""
371
+ None, "--shared-links-enabled", help="""Whether shared links are enabled"""
340
372
  ),
341
373
  shared_links_sidebar_web: Literal["true", "false"] | None = typer.Option(
342
- None, "--shared-links-sidebar-web", help=""""""
374
+ None,
375
+ "--shared-links-sidebar-web",
376
+ help="""Whether shared links appear in web sidebar""",
343
377
  ),
344
378
  tags_enabled: Literal["true", "false"] | None = typer.Option(
345
- None, "--tags-enabled", help=""""""
379
+ None, "--tags-enabled", help="""Whether tags are enabled"""
346
380
  ),
347
381
  tags_sidebar_web: Literal["true", "false"] | None = typer.Option(
348
- None, "--tags-sidebar-web", help=""""""
382
+ None, "--tags-sidebar-web", help="""Whether tags appear in web sidebar"""
349
383
  ),
350
384
  ) -> None:
351
385
  """Update user preferences
@@ -20,14 +20,28 @@ app = typer.Typer(
20
20
  @app.command("create-workflow", deprecated=False, rich_help_panel="API commands")
21
21
  def create_workflow(
22
22
  ctx: typer.Context,
23
- actions: list[str] = typer.Option(..., "--actions", help="""As a JSON string"""),
24
- description: str | None = typer.Option(None, "--description", help=""""""),
23
+ actions: list[str] = typer.Option(
24
+ ...,
25
+ "--actions",
26
+ help="""Workflow actions
27
+
28
+ As a JSON string""",
29
+ ),
30
+ description: str | None = typer.Option(
31
+ None, "--description", help="""Workflow description"""
32
+ ),
25
33
  enabled: Literal["true", "false"] | None = typer.Option(
26
- None, "--enabled", help=""""""
34
+ None, "--enabled", help="""Workflow enabled"""
35
+ ),
36
+ filters: list[str] = typer.Option(
37
+ ...,
38
+ "--filters",
39
+ help="""Workflow filters
40
+
41
+ As a JSON string""",
27
42
  ),
28
- filters: list[str] = typer.Option(..., "--filters", help="""As a JSON string"""),
29
- name: str = typer.Option(..., "--name", help=""""""),
30
- trigger_type: str = typer.Option(..., "--trigger-type", help=""""""),
43
+ name: str = typer.Option(..., "--name", help="""Workflow name"""),
44
+ trigger_type: str = typer.Option(..., "--trigger-type", help="""Trigger type"""),
31
45
  ) -> None:
32
46
  """Create a workflow
33
47
 
@@ -103,16 +117,29 @@ def update_workflow(
103
117
  ctx: typer.Context,
104
118
  id: str = typer.Argument(..., help=""""""),
105
119
  actions: list[str] | None = typer.Option(
106
- None, "--actions", help="""As a JSON string"""
120
+ None,
121
+ "--actions",
122
+ help="""Workflow actions
123
+
124
+ As a JSON string""",
125
+ ),
126
+ description: str | None = typer.Option(
127
+ None, "--description", help="""Workflow description"""
107
128
  ),
108
- description: str | None = typer.Option(None, "--description", help=""""""),
109
129
  enabled: Literal["true", "false"] | None = typer.Option(
110
- None, "--enabled", help=""""""
130
+ None, "--enabled", help="""Workflow enabled"""
111
131
  ),
112
132
  filters: list[str] | None = typer.Option(
113
- None, "--filters", help="""As a JSON string"""
133
+ None,
134
+ "--filters",
135
+ help="""Workflow filters
136
+
137
+ As a JSON string""",
138
+ ),
139
+ name: str | None = typer.Option(None, "--name", help="""Workflow name"""),
140
+ trigger_type: str | None = typer.Option(
141
+ None, "--trigger-type", help="""Trigger type"""
114
142
  ),
115
- name: str | None = typer.Option(None, "--name", help=""""""),
116
143
  ) -> None:
117
144
  """Update a workflow
118
145
 
@@ -133,6 +160,8 @@ def update_workflow(
133
160
  set_nested(json_data, ["filters"], value_filters)
134
161
  if name is not None:
135
162
  set_nested(json_data, ["name"], name)
163
+ if trigger_type is not None:
164
+ set_nested(json_data, ["trigger_type"], trigger_type)
136
165
  workflow_update_dto = WorkflowUpdateDto.model_validate(json_data)
137
166
  kwargs["workflow_update_dto"] = workflow_update_dto
138
167
  client: "AsyncClient" = ctx.obj["client"]
immichpy/cli/main.py CHANGED
@@ -63,6 +63,9 @@ from immichpy.cli.wrapper import users as users_wrapper
63
63
  from immichpy.cli.commands import users_admin as users_admin_commands
64
64
  from immichpy.cli.commands import views as views_commands
65
65
  from immichpy.cli.commands import workflows as workflows_commands
66
+ from immichpy.cli.commands import (
67
+ database_backups_admin as database_backups_admin_commands,
68
+ )
66
69
 
67
70
  # Global state
68
71
  app = typer.Typer(
@@ -135,11 +138,16 @@ app.add_typer(
135
138
  )
136
139
  app.add_typer(views_commands.app, name="views", rich_help_panel="API commands")
137
140
  app.add_typer(workflows_commands.app, name="workflows", rich_help_panel="API commands")
141
+ app.add_typer(
142
+ database_backups_admin_commands.app,
143
+ name="backups",
144
+ rich_help_panel="API commands",
145
+ )
138
146
 
139
147
 
140
148
  def version_callback(value: bool) -> None: # pragma: no cover
141
149
  if value:
142
- print_(f"immich CLI (unofficial) {version('immich')}", type="text")
150
+ print_(f"immichpy CLI {version('immichpy')}", type="text")
143
151
  raise typer.Exit(0)
144
152
 
145
153
 
@@ -212,7 +220,7 @@ def callback(
212
220
  )
213
221
  if not config.base_url:
214
222
  print_(
215
- "No base URL provided. Run 'immich setup' to set up a profile or use '--base-url' to specify a base URL.",
223
+ "No base URL provided. Run 'immichpy setup' to set up a profile or use '--base-url' to specify a base URL.",
216
224
  type="error",
217
225
  )
218
226
  raise typer.Exit(code=1)
immichpy/cli/utils.py CHANGED
@@ -59,7 +59,7 @@ def check_config() -> None:
59
59
  """
60
60
  if not CONFIG_FILE.exists():
61
61
  print_(
62
- "Config file does not exist. Run [bold]immich config set[/bold] to create it.",
62
+ "Config file does not exist. Run [bold]immichpy config set[/bold] to create it.",
63
63
  type="error",
64
64
  )
65
65
  raise typer.Exit(code=1)
@@ -82,7 +82,7 @@ def resolve_client_config(
82
82
 
83
83
  if profile_explicit and profile not in profiles:
84
84
  print_(
85
- f"Profile '{profile}' not found. Run immich config set --profile {profile}.",
85
+ f"Profile '{profile}' not found. Run immichpy config set --profile {profile}.",
86
86
  type="error",
87
87
  )
88
88
  raise typer.Exit(code=1)
@@ -85,6 +85,6 @@ def setup(
85
85
  type="success",
86
86
  )
87
87
  print_(
88
- f"To verify the config, run [bold]immich config get profiles.{profile}[/bold]",
88
+ f"To verify the config, run [bold]immichpy config get profiles.{profile}[/bold]",
89
89
  type="info",
90
90
  )
@@ -6,6 +6,7 @@ generated/api/api_keys_api.py
6
6
  generated/api/assets_api.py
7
7
  generated/api/authentication_admin_api.py
8
8
  generated/api/authentication_api.py
9
+ generated/api/database_backups_admin_api.py
9
10
  generated/api/deprecated_api.py
10
11
  generated/api/download_api.py
11
12
  generated/api/duplicates_api.py
@@ -69,6 +70,13 @@ generated/models/asset_bulk_upload_check_result.py
69
70
  generated/models/asset_copy_dto.py
70
71
  generated/models/asset_delta_sync_dto.py
71
72
  generated/models/asset_delta_sync_response_dto.py
73
+ generated/models/asset_edit_action.py
74
+ generated/models/asset_edit_action_crop.py
75
+ generated/models/asset_edit_action_list_dto.py
76
+ generated/models/asset_edit_action_list_dto_edits_inner.py
77
+ generated/models/asset_edit_action_mirror.py
78
+ generated/models/asset_edit_action_rotate.py
79
+ generated/models/asset_edits_dto.py
72
80
  generated/models/asset_face_create_dto.py
73
81
  generated/models/asset_face_delete_dto.py
74
82
  generated/models/asset_face_response_dto.py
@@ -83,7 +91,11 @@ generated/models/asset_jobs_dto.py
83
91
  generated/models/asset_media_response_dto.py
84
92
  generated/models/asset_media_size.py
85
93
  generated/models/asset_media_status.py
86
- generated/models/asset_metadata_key.py
94
+ generated/models/asset_metadata_bulk_delete_dto.py
95
+ generated/models/asset_metadata_bulk_delete_item_dto.py
96
+ generated/models/asset_metadata_bulk_response_dto.py
97
+ generated/models/asset_metadata_bulk_upsert_dto.py
98
+ generated/models/asset_metadata_bulk_upsert_item_dto.py
87
99
  generated/models/asset_metadata_response_dto.py
88
100
  generated/models/asset_metadata_upsert_dto.py
89
101
  generated/models/asset_metadata_upsert_item_dto.py
@@ -112,7 +124,11 @@ generated/models/cq_mode.py
112
124
  generated/models/create_album_dto.py
113
125
  generated/models/create_library_dto.py
114
126
  generated/models/create_profile_image_response_dto.py
127
+ generated/models/crop_parameters.py
115
128
  generated/models/database_backup_config.py
129
+ generated/models/database_backup_delete_dto.py
130
+ generated/models/database_backup_dto.py
131
+ generated/models/database_backup_list_response_dto.py
116
132
  generated/models/download_archive_info.py
117
133
  generated/models/download_info_dto.py
118
134
  generated/models/download_response.py
@@ -142,7 +158,10 @@ generated/models/logout_response_dto.py
142
158
  generated/models/machine_learning_availability_checks_dto.py
143
159
  generated/models/maintenance_action.py
144
160
  generated/models/maintenance_auth_dto.py
161
+ generated/models/maintenance_detect_install_response_dto.py
162
+ generated/models/maintenance_detect_install_storage_folder_dto.py
145
163
  generated/models/maintenance_login_dto.py
164
+ generated/models/maintenance_status_response_dto.py
146
165
  generated/models/manual_job_name.py
147
166
  generated/models/map_marker_response_dto.py
148
167
  generated/models/map_reverse_geocode_response_dto.py
@@ -156,6 +175,8 @@ generated/models/memory_type.py
156
175
  generated/models/memory_update_dto.py
157
176
  generated/models/merge_person_dto.py
158
177
  generated/models/metadata_search_dto.py
178
+ generated/models/mirror_axis.py
179
+ generated/models/mirror_parameters.py
159
180
  generated/models/notification_create_dto.py
160
181
  generated/models/notification_delete_all_dto.py
161
182
  generated/models/notification_dto.py
@@ -191,9 +212,10 @@ generated/models/pin_code_reset_dto.py
191
212
  generated/models/pin_code_setup_dto.py
192
213
  generated/models/places_response_dto.py
193
214
  generated/models/plugin_action_response_dto.py
194
- generated/models/plugin_context.py
215
+ generated/models/plugin_context_type.py
195
216
  generated/models/plugin_filter_response_dto.py
196
217
  generated/models/plugin_response_dto.py
218
+ generated/models/plugin_trigger_response_dto.py
197
219
  generated/models/plugin_trigger_type.py
198
220
  generated/models/purchase_response.py
199
221
  generated/models/purchase_update.py
@@ -215,6 +237,7 @@ generated/models/ratings_update.py
215
237
  generated/models/reaction_level.py
216
238
  generated/models/reaction_type.py
217
239
  generated/models/reverse_geocoding_state_response_dto.py
240
+ generated/models/rotate_parameters.py
218
241
  generated/models/search_album_response_dto.py
219
242
  generated/models/search_asset_response_dto.py
220
243
  generated/models/search_explore_item.py
@@ -254,6 +277,7 @@ generated/models/stack_create_dto.py
254
277
  generated/models/stack_response_dto.py
255
278
  generated/models/stack_update_dto.py
256
279
  generated/models/statistics_search_dto.py
280
+ generated/models/storage_folder.py
257
281
  generated/models/sync_ack_delete_dto.py
258
282
  generated/models/sync_ack_dto.py
259
283
  generated/models/sync_ack_set_dto.py