smartsheet-python-sdk 3.5.3__tar.gz → 3.5.4__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 (270) hide show
  1. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/CHANGELOG.md +6 -0
  2. {smartsheet_python_sdk-3.5.3/smartsheet_python_sdk.egg-info → smartsheet_python_sdk-3.5.4}/PKG-INFO +1 -1
  3. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/setup.py +1 -1
  4. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/version.py +2 -2
  5. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4/smartsheet_python_sdk.egg-info}/PKG-INFO +1 -1
  6. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet_python_sdk.egg-info/SOURCES.txt +5 -1
  7. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet_python_sdk.egg-info/top_level.txt +0 -1
  8. smartsheet_python_sdk-3.5.4/tests/mock_api/users/common_test_constants.py +4 -0
  9. smartsheet_python_sdk-3.5.4/tests/mock_api/users/test_list_user_plans.py +110 -0
  10. smartsheet_python_sdk-3.5.4/tests/mock_api/users/test_list_users.py +147 -0
  11. smartsheet_python_sdk-3.5.4/tests/mock_api/users/test_user_upgrade_downgrade.py +147 -0
  12. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.gitchangelog.rc +0 -0
  13. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.gitchangelog.tpl +0 -0
  14. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  15. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  16. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.github/pull_request_template.md +0 -0
  17. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.github/workflows/publish-distribution.yaml +0 -0
  18. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.github/workflows/publish-documentation.yaml +0 -0
  19. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.github/workflows/test-build.yaml +0 -0
  20. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.gitignore +0 -0
  21. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/.markdownlint.json +0 -0
  22. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/ADVANCED.md +0 -0
  23. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/CONTRIBUTING.md +0 -0
  24. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/LICENSE.md +0 -0
  25. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/Makefile +0 -0
  26. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/NOTICE +0 -0
  27. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/README.md +0 -0
  28. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/docs-source/Makefile +0 -0
  29. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/docs-source/conf.py +0 -0
  30. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/docs-source/index.rst +0 -0
  31. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/pylintrc +0 -0
  32. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/setup.cfg +0 -0
  33. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/__init__.py +0 -0
  34. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/attachments.py +0 -0
  35. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/cells.py +0 -0
  36. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/contacts.py +0 -0
  37. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/discussions.py +0 -0
  38. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/events.py +0 -0
  39. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/exceptions.py +0 -0
  40. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/favorites.py +0 -0
  41. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/folders.py +0 -0
  42. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/groups.py +0 -0
  43. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/home.py +0 -0
  44. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/images.py +0 -0
  45. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/__init__.py +0 -0
  46. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/access_token.py +0 -0
  47. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/account.py +0 -0
  48. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/alternate_email.py +0 -0
  49. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/asset_share.py +0 -0
  50. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/asset_shares_paginated_result.py +0 -0
  51. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/attachment.py +0 -0
  52. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/auto_number_format.py +0 -0
  53. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/automation_action.py +0 -0
  54. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/automation_rule.py +0 -0
  55. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/boolean_object_value.py +0 -0
  56. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/bulk_item_failure.py +0 -0
  57. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/bulk_item_result.py +0 -0
  58. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/cell.py +0 -0
  59. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/cell_data_item.py +0 -0
  60. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/cell_history.py +0 -0
  61. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/cell_link.py +0 -0
  62. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/cell_link_widget_content.py +0 -0
  63. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/chart_widget_content.py +0 -0
  64. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/column.py +0 -0
  65. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/comment.py +0 -0
  66. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/contact.py +0 -0
  67. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/contact_object_value.py +0 -0
  68. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/container_destination.py +0 -0
  69. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/copy_or_move_row_destination.py +0 -0
  70. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/copy_or_move_row_directive.py +0 -0
  71. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/copy_or_move_row_result.py +0 -0
  72. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/criteria.py +0 -0
  73. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/cross_sheet_reference.py +0 -0
  74. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/currency.py +0 -0
  75. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/date_object_value.py +0 -0
  76. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/datetime_object_value.py +0 -0
  77. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/discussion.py +0 -0
  78. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/downloaded_file.py +0 -0
  79. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/duration.py +0 -0
  80. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/email.py +0 -0
  81. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/__init__.py +0 -0
  82. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/access_level.py +0 -0
  83. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/asset_type.py +0 -0
  84. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/attachment_parent_type.py +0 -0
  85. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/attachment_sub_type.py +0 -0
  86. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/attachment_type.py +0 -0
  87. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/automation_action_frequency.py +0 -0
  88. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/automation_action_type.py +0 -0
  89. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/automation_rule_disabled_reason.py +0 -0
  90. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/cell_link_status.py +0 -0
  91. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/column_type.py +0 -0
  92. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/criteria_target.py +0 -0
  93. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/cross_sheet_reference_status.py +0 -0
  94. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/currency_code.py +0 -0
  95. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/day_descriptors.py +0 -0
  96. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/day_ordinal.py +0 -0
  97. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/event_action.py +0 -0
  98. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/event_obejct_type.py +0 -0
  99. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/event_source.py +0 -0
  100. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/global_template.py +0 -0
  101. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/operator.py +0 -0
  102. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/paper_type.py +0 -0
  103. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/predecessor_type.py +0 -0
  104. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/publish_accessible_by.py +0 -0
  105. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/schedule_type.py +0 -0
  106. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/seat_type.py +0 -0
  107. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/share_scope.py +0 -0
  108. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/share_type.py +0 -0
  109. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/sheet_email_format.py +0 -0
  110. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/sheet_filter_operator.py +0 -0
  111. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/sheet_filter_type.py +0 -0
  112. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/sort_direction.py +0 -0
  113. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/symbol.py +0 -0
  114. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/system_column_type.py +0 -0
  115. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/update_request_status.py +0 -0
  116. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/user_status.py +0 -0
  117. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/enums/widget_type.py +0 -0
  118. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/error.py +0 -0
  119. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/error_result.py +0 -0
  120. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/event.py +0 -0
  121. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/event_result.py +0 -0
  122. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/explicit_null.py +0 -0
  123. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/favorite.py +0 -0
  124. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/folder.py +0 -0
  125. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/font_family.py +0 -0
  126. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/format_details.py +0 -0
  127. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/format_tables.py +0 -0
  128. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/group.py +0 -0
  129. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/group_member.py +0 -0
  130. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/home.py +0 -0
  131. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/hyperlink.py +0 -0
  132. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/image.py +0 -0
  133. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/image_url.py +0 -0
  134. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/image_url_map.py +0 -0
  135. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/image_widget_content.py +0 -0
  136. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/index_result.py +0 -0
  137. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/json_object.py +0 -0
  138. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/multi_contact_object_value.py +0 -0
  139. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/multi_picklist_object_value.py +0 -0
  140. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/multi_row_email.py +0 -0
  141. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/number_object_value.py +0 -0
  142. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/o_auth_error.py +0 -0
  143. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/object_value.py +0 -0
  144. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/paginated_children_result.py +0 -0
  145. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/predecessor.py +0 -0
  146. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/predecessor_list.py +0 -0
  147. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/primitive_object_value.py +0 -0
  148. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/profile_image.py +0 -0
  149. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/project_settings.py +0 -0
  150. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/recipient.py +0 -0
  151. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/report.py +0 -0
  152. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/report_cell.py +0 -0
  153. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/report_column.py +0 -0
  154. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/report_publish.py +0 -0
  155. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/report_row.py +0 -0
  156. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/report_widget_content.py +0 -0
  157. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/result.py +0 -0
  158. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/row.py +0 -0
  159. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/row_email.py +0 -0
  160. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/row_mapping.py +0 -0
  161. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/schedule.py +0 -0
  162. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/scope.py +0 -0
  163. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/search_result.py +0 -0
  164. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/search_result_item.py +0 -0
  165. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/selection_range.py +0 -0
  166. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sent_update_request.py +0 -0
  167. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/server_info.py +0 -0
  168. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/share.py +0 -0
  169. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sheet.py +0 -0
  170. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sheet_email.py +0 -0
  171. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sheet_filter.py +0 -0
  172. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sheet_filter_details.py +0 -0
  173. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sheet_publish.py +0 -0
  174. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sheet_summary.py +0 -0
  175. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sheet_user_permissions.py +0 -0
  176. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sheet_user_settings.py +0 -0
  177. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/shortcut_data_item.py +0 -0
  178. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/shortcut_widget_content.py +0 -0
  179. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sight.py +0 -0
  180. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sight_publish.py +0 -0
  181. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sort_criterion.py +0 -0
  182. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/sort_specifier.py +0 -0
  183. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/source.py +0 -0
  184. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/string_object_value.py +0 -0
  185. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/summary_field.py +0 -0
  186. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/template.py +0 -0
  187. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/title_rich_text_widget_content.py +0 -0
  188. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/token_paginated_result.py +0 -0
  189. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/update_request.py +0 -0
  190. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/user.py +0 -0
  191. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/user_model.py +0 -0
  192. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/user_plan.py +0 -0
  193. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/user_profile.py +0 -0
  194. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/version.py +0 -0
  195. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/web_content_widget_content.py +0 -0
  196. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/webhook.py +0 -0
  197. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/webhook_secret.py +0 -0
  198. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/webhook_stats.py +0 -0
  199. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/webhook_subscope.py +0 -0
  200. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/widget.py +0 -0
  201. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/widget_content.py +0 -0
  202. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/widget_hyperlink.py +0 -0
  203. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/models/workspace.py +0 -0
  204. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/object_value.py +0 -0
  205. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/passthrough.py +0 -0
  206. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/reports.py +0 -0
  207. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/search.py +0 -0
  208. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/server.py +0 -0
  209. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/session.py +0 -0
  210. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/sharing.py +0 -0
  211. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/sheets.py +0 -0
  212. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/sights.py +0 -0
  213. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/smartsheet.py +0 -0
  214. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/templates.py +0 -0
  215. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/token.py +0 -0
  216. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/types.py +0 -0
  217. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/users.py +0 -0
  218. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/util.py +0 -0
  219. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/webhooks.py +0 -0
  220. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet/workspaces.py +0 -0
  221. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet_python_sdk.egg-info/dependency_links.txt +0 -0
  222. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/smartsheet_python_sdk.egg-info/requires.txt +0 -0
  223. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/__init__.py +0 -0
  224. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/README.md +0 -0
  225. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/conftest.py +0 -0
  226. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/fixtures/calling_all_curs.txt +0 -0
  227. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/fixtures/curly.jpg +0 -0
  228. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/fixtures/moe-curly.jpg +0 -0
  229. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/fixtures/quote.txt +0 -0
  230. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/fixtures/stooges_v1.jpg +0 -0
  231. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/fixtures/stooges_v2.jpg +0 -0
  232. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_attachments.py +0 -0
  233. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_columns.py +0 -0
  234. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_contacts.py +0 -0
  235. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_cross_sheet_references.py +0 -0
  236. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_discussions.py +0 -0
  237. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_events.py +0 -0
  238. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_favorites.py +0 -0
  239. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_folders.py +0 -0
  240. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_groups.py +0 -0
  241. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_home.py +0 -0
  242. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_model_attributes.py +0 -0
  243. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_multi_picklist.py +0 -0
  244. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_object_value.py +0 -0
  245. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_passthrough.py +0 -0
  246. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_regression.py +0 -0
  247. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_reports.py +0 -0
  248. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_rows.py +0 -0
  249. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_server_info.py +0 -0
  250. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_sharing.py +0 -0
  251. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_sheet_summary.py +0 -0
  252. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_sheets.py +0 -0
  253. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_templates.py +0 -0
  254. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_update_requests.py +0 -0
  255. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_users.py +0 -0
  256. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_webhooks.py +0 -0
  257. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_workspaces.py +0 -0
  258. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/integration/test_zsearch.py +0 -0
  259. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/__init__.py +0 -0
  260. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/mock_api_test_helper.py +0 -0
  261. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_api_automation_rules.py +0 -0
  262. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_api_columns.py +0 -0
  263. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_api_folders.py +0 -0
  264. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_api_rows.py +0 -0
  265. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_api_sharing.py +0 -0
  266. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_api_sheets.py +0 -0
  267. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_api_sights.py +0 -0
  268. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_api_workspaces.py +0 -0
  269. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_change_agent.py +0 -0
  270. {smartsheet_python_sdk-3.5.3 → smartsheet_python_sdk-3.5.4}/tests/mock_api/test_mock_serialization.py +0 -0
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.5.4] - 2025-10-31
9
+
10
+ ### Fixed
11
+
12
+ - [Issue-92](https://github.com/smartsheet/smartsheet-python-sdk/issues/92): Only include the `smartsheet` package in the build.
13
+
8
14
  ## [3.5.3] - 2025-10-31
9
15
 
10
16
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smartsheet_python_sdk
3
- Version: 3.5.3
3
+ Version: 3.5.4
4
4
  Summary: Library that uses Python to connect to Smartsheet services (using API 2.0).
5
5
  Home-page: http://smartsheet-platform.github.io/api-docs/
6
6
  Author: Smartsheet
@@ -65,7 +65,7 @@ setup(
65
65
  },
66
66
  setup_requires=['setuptools_scm==7.0.1'],
67
67
  install_requires=REQUIRES,
68
- packages=find_packages(),
68
+ packages=find_packages(include=['smartsheet', 'smartsheet.*']),
69
69
  include_package_data=True,
70
70
  long_description=open('README.md').read(),
71
71
  long_description_content_type='text/markdown',
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '3.5.3'
4
- __version_tuple__ = version_tuple = (3, 5, 3)
3
+ __version__ = version = '3.5.4'
4
+ __version_tuple__ = version_tuple = (3, 5, 4)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smartsheet_python_sdk
3
- Version: 3.5.3
3
+ Version: 3.5.4
4
4
  Summary: Library that uses Python to connect to Smartsheet services (using API 2.0).
5
5
  Home-page: http://smartsheet-platform.github.io/api-docs/
6
6
  Author: Smartsheet
@@ -262,4 +262,8 @@ tests/mock_api/test_mock_api_sheets.py
262
262
  tests/mock_api/test_mock_api_sights.py
263
263
  tests/mock_api/test_mock_api_workspaces.py
264
264
  tests/mock_api/test_mock_change_agent.py
265
- tests/mock_api/test_mock_serialization.py
265
+ tests/mock_api/test_mock_serialization.py
266
+ tests/mock_api/users/common_test_constants.py
267
+ tests/mock_api/users/test_list_user_plans.py
268
+ tests/mock_api/users/test_list_users.py
269
+ tests/mock_api/users/test_user_upgrade_downgrade.py
@@ -0,0 +1,4 @@
1
+ TEST_USER_ID = 1234567890
2
+ TEST_PLAN_ID = 1234567890123456
3
+ TEST_SUCCESS_MESSAGE = "SUCCESS"
4
+ TEST_RESULT_CODE = 0
@@ -0,0 +1,110 @@
1
+ import uuid
2
+
3
+ from urllib.parse import urlparse, parse_qs
4
+ from dateutil import parser
5
+ from smartsheet.models.enums import seat_type
6
+ from smartsheet.models.token_paginated_result import TokenPaginatedResult
7
+ from smartsheet.models.error import Error
8
+ from tests.mock_api.users.common_test_constants import TEST_USER_ID, TEST_PLAN_ID
9
+ from tests.mock_api.mock_api_test_helper import (
10
+ get_mock_api_client,
11
+ get_wiremock_request,
12
+ )
13
+
14
+ TEST_LAST_KEY = '12345678901234569'
15
+ TEST_MAX_ITEMS = 100
16
+ TEST_SEAT_TYPE = seat_type.SeatType.MEMBER
17
+
18
+ def test_list_user_plans_generated_url_is_correct():
19
+ request_id = uuid.uuid4().hex
20
+ client = get_mock_api_client(
21
+ "/users/list-user-plans/all-response-body-properties", request_id
22
+ )
23
+
24
+ client.Users.list_user_plans(
25
+ user_id=TEST_USER_ID,
26
+ last_key=TEST_LAST_KEY,
27
+ max_items=TEST_MAX_ITEMS
28
+ )
29
+
30
+ wiremock_request = get_wiremock_request(request_id)
31
+ url = urlparse(wiremock_request["absoluteUrl"])
32
+ query = parse_qs(url.query)
33
+ assert query == {
34
+ "lastKey": [TEST_LAST_KEY],
35
+ "maxItems": [str(TEST_MAX_ITEMS)]
36
+ }
37
+ assert url.path == f"/2.0/users/{TEST_USER_ID}/plans"
38
+
39
+
40
+ def test_list_user_plans_all_response_properties():
41
+ request_id = uuid.uuid4().hex
42
+ client = get_mock_api_client(
43
+ "/users/list-user-plans/all-response-body-properties", request_id
44
+ )
45
+
46
+ response = client.Users.list_user_plans(
47
+ user_id=TEST_USER_ID,
48
+ last_key=TEST_LAST_KEY,
49
+ max_items=TEST_MAX_ITEMS
50
+ )
51
+
52
+ assert isinstance(response, TokenPaginatedResult)
53
+ assert response.last_key == TEST_LAST_KEY
54
+ assert response.data[0].plan_id == TEST_PLAN_ID
55
+ assert response.data[0].seat_type == TEST_SEAT_TYPE.value
56
+ assert response.data[0].seat_type_last_changed_at == parser.isoparse(
57
+ "2025-01-01T00:00:00.123456789Z")
58
+ assert response.data[0].provisional_expiration_date == parser.isoparse(
59
+ "2026-12-13T12:17:52.525696Z")
60
+ assert response.data[0].is_internal is False
61
+
62
+
63
+ def test_list_user_plans_required_response_properties():
64
+ request_id = uuid.uuid4().hex
65
+ client = get_mock_api_client(
66
+ "/users/list-user-plans/required-response-body-properties", request_id
67
+ )
68
+
69
+ response = client.Users.list_user_plans(
70
+ user_id=TEST_USER_ID,
71
+ last_key=TEST_LAST_KEY,
72
+ max_items=TEST_MAX_ITEMS
73
+ )
74
+
75
+ assert isinstance(response, TokenPaginatedResult)
76
+ assert response.data[0].plan_id == TEST_PLAN_ID
77
+ assert response.data[0].seat_type == TEST_SEAT_TYPE.value
78
+ assert response.data[0].seat_type_last_changed_at is None
79
+ assert response.data[0].provisional_expiration_date is None
80
+ assert response.data[0].is_internal is False
81
+
82
+
83
+ def test_list_user_plans_error_400_response():
84
+ request_id = uuid.uuid4().hex
85
+ client = get_mock_api_client(
86
+ "/errors/400-response", request_id
87
+ )
88
+
89
+ response = client.Users.list_user_plans(
90
+ user_id=TEST_USER_ID,
91
+ last_key=TEST_LAST_KEY,
92
+ max_items=TEST_MAX_ITEMS
93
+ )
94
+
95
+ assert isinstance(response, Error)
96
+
97
+
98
+ def test_list_user_plans_error_500_reponse():
99
+ request_id = uuid.uuid4().hex
100
+ client = get_mock_api_client(
101
+ "/errors/500-response", request_id
102
+ )
103
+
104
+ response = client.Users.list_user_plans(
105
+ user_id=TEST_USER_ID,
106
+ last_key=TEST_LAST_KEY,
107
+ max_items=TEST_MAX_ITEMS
108
+ )
109
+
110
+ assert isinstance(response, Error)
@@ -0,0 +1,147 @@
1
+ import uuid
2
+
3
+ from urllib.parse import urlparse, parse_qs
4
+ from dateutil import parser
5
+ from smartsheet.models.enums import seat_type
6
+ from smartsheet.models.index_result import IndexResult
7
+ from smartsheet.models.error import Error
8
+ from tests.mock_api.users.common_test_constants import TEST_PLAN_ID
9
+ from tests.mock_api.mock_api_test_helper import (
10
+ get_mock_api_client,
11
+ get_wiremock_request,
12
+ )
13
+
14
+ TEST_EMAIL = "test.user@smartsheet.com"
15
+ TEST_SEAT_TYPE = seat_type.SeatType.MEMBER
16
+ TEST_PAGE = 1
17
+ TEST_PAGE_SIZE = 100
18
+ TEST_INCLUDE_ALL = False
19
+ TEST_FIRST_NAME = "Test"
20
+ TEST_LAST_NAME = "User"
21
+ TEST_NAME = "Test User"
22
+ TEST_ADMIN = True
23
+ TEST_LICENSED_SHEET_CREATOR = True
24
+ TEST_RESOURCE_VIEWER = True
25
+ TEST_GROUP_ADMIN = True
26
+ TEST_STATUS = "ACTIVE"
27
+ TEST_SHEET_COUNT = -1
28
+ TEST_ID_VALUE = TEST_PLAN_ID
29
+ TEST_SEAT_TYPE_LAST_CHANGED_AT = parser.isoparse("2025-06-14T09:55:30Z")
30
+ TEST_PROVISIONAL_EXPIRATION_DATE = parser.isoparse("2026-12-13T12:17:52.525696Z")
31
+ TEST_IS_INTERNAL_TRUE = True
32
+ TEST_IS_INTERNAL_FALSE = False
33
+ TEST_LAST_LOGIN = parser.isoparse("2020-10-04T18:32:47Z")
34
+ TEST_CUSTOM_WELCOME_SCREEN_VIEWED = parser.isoparse("2020-08-25T12:15:47Z")
35
+
36
+ def test_list_users_generated_url_is_correct():
37
+ request_id = uuid.uuid4().hex
38
+
39
+ client = get_mock_api_client(
40
+ "/users/list-users/required-response-body-properties", request_id
41
+ )
42
+
43
+ client.Users.list_users(
44
+ email=TEST_EMAIL,
45
+ seat_type=TEST_SEAT_TYPE.value,
46
+ page=TEST_PAGE,
47
+ page_size=TEST_PAGE_SIZE,
48
+ include_all=TEST_INCLUDE_ALL
49
+ )
50
+
51
+ wiremock_request = get_wiremock_request(request_id)
52
+ url = urlparse(wiremock_request["absoluteUrl"])
53
+ query = parse_qs(url.query)
54
+ assert query == {
55
+ "email": [TEST_EMAIL],
56
+ "seatType": [TEST_SEAT_TYPE.value],
57
+ "page": [str(TEST_PAGE)],
58
+ "pageSize": [str(TEST_PAGE_SIZE)],
59
+ "includeAll": [str(TEST_INCLUDE_ALL)]
60
+ }
61
+ assert url.path == "/2.0/users"
62
+
63
+
64
+ def test_list_users_all_response_properties():
65
+ request_id = uuid.uuid4().hex
66
+ client = get_mock_api_client(
67
+ "/users/list-users/all-response-body-properties", request_id
68
+ )
69
+
70
+ response = client.Users.list_users(
71
+ plan_id=TEST_PLAN_ID
72
+ )
73
+
74
+ assert isinstance(response, IndexResult)
75
+ assert response.data[0].seat_type == TEST_SEAT_TYPE.value
76
+ assert response.data[0].seat_type_last_changed_at == TEST_SEAT_TYPE_LAST_CHANGED_AT
77
+ assert response.data[0].provisional_expiration_date == TEST_PROVISIONAL_EXPIRATION_DATE
78
+ assert response.data[0].is_internal is TEST_IS_INTERNAL_TRUE
79
+ assert response.data[0].first_name == TEST_FIRST_NAME
80
+ assert response.data[0].last_name == TEST_LAST_NAME
81
+ assert response.data[0].name == TEST_NAME
82
+ assert response.data[0].email == TEST_EMAIL
83
+ assert response.data[0].admin is TEST_ADMIN
84
+ assert response.data[0].licensed_sheet_creator is TEST_LICENSED_SHEET_CREATOR
85
+ assert response.data[0].resource_viewer is TEST_RESOURCE_VIEWER
86
+ assert response.data[0].group_admin is TEST_GROUP_ADMIN
87
+ assert response.data[0].status == TEST_STATUS
88
+ assert response.data[0].sheet_count == TEST_SHEET_COUNT
89
+ assert response.data[0].last_login == TEST_LAST_LOGIN
90
+ assert response.data[0].custom_welcome_screen_viewed == TEST_CUSTOM_WELCOME_SCREEN_VIEWED
91
+ assert response.data[0].id == TEST_ID_VALUE
92
+
93
+
94
+ def test_list_users_required_response_properties():
95
+ request_id = uuid.uuid4().hex
96
+ client = get_mock_api_client(
97
+ "/users/list-users/required-response-body-properties", request_id
98
+ )
99
+
100
+ response = client.Users.list_users(
101
+ plan_id=TEST_PLAN_ID
102
+ )
103
+
104
+ assert isinstance(response, IndexResult)
105
+ assert response.data[0].seat_type == TEST_SEAT_TYPE.value
106
+ assert response.data[0].seat_type_last_changed_at is None
107
+ assert response.data[0].provisional_expiration_date is None
108
+ assert response.data[0].is_internal is TEST_IS_INTERNAL_TRUE
109
+ assert response.data[0].first_name == TEST_FIRST_NAME
110
+ assert response.data[0].last_name == TEST_LAST_NAME
111
+ assert response.data[0].name == TEST_NAME
112
+ assert response.data[0].email == TEST_EMAIL
113
+ assert response.data[0].admin is TEST_ADMIN
114
+ assert response.data[0].licensed_sheet_creator is TEST_LICENSED_SHEET_CREATOR
115
+ assert response.data[0].resource_viewer is TEST_RESOURCE_VIEWER
116
+ assert response.data[0].group_admin is TEST_GROUP_ADMIN
117
+ assert response.data[0].status == TEST_STATUS
118
+ assert response.data[0].sheet_count == TEST_SHEET_COUNT
119
+ assert response.data[0].last_login is None
120
+ assert response.data[0].custom_welcome_screen_viewed is None
121
+ assert response.data[0].id == TEST_ID_VALUE
122
+
123
+
124
+ def test_list_users_error_400_response():
125
+ request_id = uuid.uuid4().hex
126
+ client = get_mock_api_client(
127
+ "/errors/400-response", request_id
128
+ )
129
+
130
+ response = client.Users.list_users(
131
+ plan_id=TEST_PLAN_ID
132
+ )
133
+
134
+ assert isinstance(response, Error)
135
+
136
+
137
+ def test_list_users_error_500_response():
138
+ request_id = uuid.uuid4().hex
139
+ client = get_mock_api_client(
140
+ "/errors/500-response", request_id
141
+ )
142
+
143
+ response = client.Users.list_users(
144
+ plan_id=TEST_PLAN_ID
145
+ )
146
+
147
+ assert isinstance(response, Error)
@@ -0,0 +1,147 @@
1
+ import json
2
+ import uuid
3
+ from urllib.parse import urlparse
4
+
5
+ from smartsheet.models import Error
6
+ from smartsheet.models.enums import UpgradeSeatType, DowngradeSeatType
7
+ from tests.mock_api.users.common_test_constants import TEST_USER_ID, TEST_PLAN_ID, TEST_SUCCESS_MESSAGE, TEST_RESULT_CODE
8
+ from tests.mock_api.mock_api_test_helper import (
9
+ get_mock_api_client,
10
+ get_wiremock_request,
11
+ )
12
+
13
+ TEST_UPGRADE_SEAT_TYPE = UpgradeSeatType.MEMBER
14
+ TEST_DOWNGRADE_SEAT_TYPE = DowngradeSeatType.VIEWER
15
+
16
+
17
+ def test_upgrade_user_generated_url_is_correct():
18
+ request_id = uuid.uuid4().hex
19
+ client = get_mock_api_client(
20
+ "/users/upgrade-user/all-response-body-properties", request_id
21
+ )
22
+
23
+ client.Users.upgrade_user(
24
+ user_id=TEST_USER_ID,
25
+ plan_id=TEST_PLAN_ID,
26
+ seat_type=TEST_UPGRADE_SEAT_TYPE,
27
+ )
28
+
29
+ wiremock_request = get_wiremock_request(request_id)
30
+ url = urlparse(wiremock_request["absoluteUrl"])
31
+ assert url.path == f'/2.0/users/{TEST_USER_ID}/plans/{TEST_PLAN_ID}/upgrade'
32
+
33
+
34
+ def test_upgrade_user_all_response_properties():
35
+ request_id = uuid.uuid4().hex
36
+ client = get_mock_api_client(
37
+ "/users/upgrade-user/all-response-body-properties", request_id
38
+ )
39
+
40
+ response = client.Users.upgrade_user(
41
+ user_id=TEST_USER_ID,
42
+ plan_id=TEST_PLAN_ID,
43
+ seat_type=TEST_UPGRADE_SEAT_TYPE,
44
+ )
45
+
46
+ assert response.message == TEST_SUCCESS_MESSAGE
47
+ assert response.result_code == TEST_RESULT_CODE
48
+
49
+ wiremock_request = get_wiremock_request(request_id)
50
+ body = json.loads(wiremock_request["body"])
51
+ assert body == {"seatType": TEST_UPGRADE_SEAT_TYPE.value}
52
+
53
+ def test_upgrade_user_error_4xx():
54
+ request_id = uuid.uuid4().hex
55
+ client = get_mock_api_client(
56
+ "/errors/400-response", request_id
57
+ )
58
+
59
+ response = client.Users.upgrade_user(
60
+ user_id=TEST_USER_ID,
61
+ plan_id=TEST_PLAN_ID,
62
+ seat_type=TEST_UPGRADE_SEAT_TYPE,
63
+ )
64
+
65
+ assert isinstance(response, Error)
66
+
67
+
68
+ def test_upgrade_user_error_5xx():
69
+ request_id = uuid.uuid4().hex
70
+ client = get_mock_api_client(
71
+ "/errors/500-response", request_id
72
+ )
73
+
74
+ response = client.Users.upgrade_user(
75
+ user_id=TEST_USER_ID,
76
+ plan_id=TEST_PLAN_ID,
77
+ seat_type=TEST_UPGRADE_SEAT_TYPE,
78
+ )
79
+
80
+ assert isinstance(response, Error)
81
+
82
+
83
+ def test_downgrade_user_generated_url_is_correct():
84
+ request_id = uuid.uuid4().hex
85
+ client = get_mock_api_client(
86
+ "/users/downgrade-user/all-response-body-properties", request_id
87
+ )
88
+
89
+ client.Users.downgrade_user(
90
+ user_id=TEST_USER_ID,
91
+ plan_id=TEST_PLAN_ID,
92
+ seat_type=TEST_DOWNGRADE_SEAT_TYPE,
93
+ )
94
+
95
+ wiremock_request = get_wiremock_request(request_id)
96
+ url = urlparse(wiremock_request["absoluteUrl"])
97
+ assert url.path == f'/2.0/users/{TEST_USER_ID}/plans/{TEST_PLAN_ID}/downgrade'
98
+
99
+
100
+ def test_downgrade_user_all_response_properties():
101
+ request_id = uuid.uuid4().hex
102
+ client = get_mock_api_client(
103
+ "/users/downgrade-user/all-response-body-properties", request_id
104
+ )
105
+
106
+ response = client.Users.downgrade_user(
107
+ user_id=TEST_USER_ID,
108
+ plan_id=TEST_PLAN_ID,
109
+ seat_type=TEST_DOWNGRADE_SEAT_TYPE,
110
+ )
111
+
112
+ assert response.message == TEST_SUCCESS_MESSAGE
113
+ assert response.result_code == TEST_RESULT_CODE
114
+
115
+ wiremock_request = get_wiremock_request(request_id)
116
+ body = json.loads(wiremock_request["body"])
117
+ assert body == {"seatType": TEST_DOWNGRADE_SEAT_TYPE.value}
118
+
119
+
120
+ def test_downgrade_user_error_4xx():
121
+ request_id = uuid.uuid4().hex
122
+ client = get_mock_api_client(
123
+ "/errors/400-response", request_id
124
+ )
125
+
126
+ response = client.Users.downgrade_user(
127
+ user_id=TEST_USER_ID,
128
+ plan_id=TEST_PLAN_ID,
129
+ seat_type=TEST_DOWNGRADE_SEAT_TYPE,
130
+ )
131
+
132
+ assert isinstance(response, Error)
133
+
134
+
135
+ def test_downgrade_user_error_5xx():
136
+ request_id = uuid.uuid4().hex
137
+ client = get_mock_api_client(
138
+ "/errors/500-response", request_id
139
+ )
140
+
141
+ response = client.Users.downgrade_user(
142
+ user_id=TEST_USER_ID,
143
+ plan_id=TEST_PLAN_ID,
144
+ seat_type=TEST_DOWNGRADE_SEAT_TYPE,
145
+ )
146
+
147
+ assert isinstance(response, Error)