smartsheet-python-sdk 3.5.5__tar.gz → 3.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.github/pull_request_template.md +1 -0
  2. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.github/workflows/test-build.yaml +4 -4
  3. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.gitignore +1 -2
  4. smartsheet_python_sdk-3.6.0/.roo/roomotes.yml +25 -0
  5. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/ADVANCED.md +87 -13
  6. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/CHANGELOG.md +24 -0
  7. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/CONTRIBUTING.md +35 -4
  8. smartsheet_python_sdk-3.6.0/ISSUE-FIRST.md +306 -0
  9. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/PKG-INFO +5 -1
  10. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/README.md +4 -0
  11. smartsheet_python_sdk-3.6.0/docs-source/index.rst +141 -0
  12. smartsheet_python_sdk-3.6.0/docs-source/smartsheet_api.rst +186 -0
  13. smartsheet_python_sdk-3.6.0/docs-source/smartsheet_enums.rst +290 -0
  14. smartsheet_python_sdk-3.6.0/docs-source/smartsheet_exceptions.rst +7 -0
  15. smartsheet_python_sdk-3.6.0/docs-source/smartsheet_models.rst +978 -0
  16. smartsheet_python_sdk-3.6.0/docs-source/smartsheet_types.rst +7 -0
  17. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/__init__.py +2 -2
  18. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/attachments.py +1 -1
  19. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/cells.py +1 -1
  20. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/contacts.py +1 -1
  21. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/discussions.py +1 -1
  22. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/events.py +1 -1
  23. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/favorites.py +1 -1
  24. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/folders.py +1 -1
  25. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/groups.py +1 -1
  26. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/home.py +1 -1
  27. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/images.py +1 -1
  28. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/__init__.py +1 -1
  29. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/passthrough.py +1 -1
  30. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/reports.py +1 -1
  31. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/search.py +1 -1
  32. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/server.py +1 -1
  33. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/sharing.py +1 -1
  34. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/sheets.py +1 -1
  35. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/sights.py +1 -1
  36. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/smartsheet.py +57 -25
  37. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/templates.py +1 -1
  38. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/token.py +1 -1
  39. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/users.py +86 -3
  40. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/util.py +20 -0
  41. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/version.py +3 -3
  42. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/webhooks.py +1 -1
  43. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/workspaces.py +4 -3
  44. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet_python_sdk.egg-info/PKG-INFO +5 -1
  45. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet_python_sdk.egg-info/SOURCES.txt +10 -36
  46. smartsheet_python_sdk-3.6.0/tests/mock_api/users/test_deactivate_user.py +64 -0
  47. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/users/test_list_users.py +1 -1
  48. smartsheet_python_sdk-3.6.0/tests/mock_api/users/test_reactivate_user.py +64 -0
  49. smartsheet_python_sdk-3.5.5/docs-source/index.rst +0 -52
  50. smartsheet_python_sdk-3.5.5/tests/integration/README.md +0 -37
  51. smartsheet_python_sdk-3.5.5/tests/integration/conftest.py +0 -174
  52. smartsheet_python_sdk-3.5.5/tests/integration/fixtures/calling_all_curs.txt +0 -1
  53. smartsheet_python_sdk-3.5.5/tests/integration/fixtures/curly.jpg +0 -0
  54. smartsheet_python_sdk-3.5.5/tests/integration/fixtures/moe-curly.jpg +0 -0
  55. smartsheet_python_sdk-3.5.5/tests/integration/fixtures/quote.txt +0 -1
  56. smartsheet_python_sdk-3.5.5/tests/integration/fixtures/stooges_v1.jpg +0 -0
  57. smartsheet_python_sdk-3.5.5/tests/integration/fixtures/stooges_v2.jpg +0 -0
  58. smartsheet_python_sdk-3.5.5/tests/integration/test_attachments.py +0 -99
  59. smartsheet_python_sdk-3.5.5/tests/integration/test_columns.py +0 -91
  60. smartsheet_python_sdk-3.5.5/tests/integration/test_contacts.py +0 -27
  61. smartsheet_python_sdk-3.5.5/tests/integration/test_cross_sheet_references.py +0 -30
  62. smartsheet_python_sdk-3.5.5/tests/integration/test_discussions.py +0 -195
  63. smartsheet_python_sdk-3.5.5/tests/integration/test_events.py +0 -56
  64. smartsheet_python_sdk-3.5.5/tests/integration/test_favorites.py +0 -33
  65. smartsheet_python_sdk-3.5.5/tests/integration/test_folders.py +0 -130
  66. smartsheet_python_sdk-3.5.5/tests/integration/test_groups.py +0 -92
  67. smartsheet_python_sdk-3.5.5/tests/integration/test_home.py +0 -99
  68. smartsheet_python_sdk-3.5.5/tests/integration/test_model_attributes.py +0 -2848
  69. smartsheet_python_sdk-3.5.5/tests/integration/test_multi_picklist.py +0 -66
  70. smartsheet_python_sdk-3.5.5/tests/integration/test_object_value.py +0 -126
  71. smartsheet_python_sdk-3.5.5/tests/integration/test_passthrough.py +0 -37
  72. smartsheet_python_sdk-3.5.5/tests/integration/test_regression.py +0 -240
  73. smartsheet_python_sdk-3.5.5/tests/integration/test_reports.py +0 -134
  74. smartsheet_python_sdk-3.5.5/tests/integration/test_rows.py +0 -196
  75. smartsheet_python_sdk-3.5.5/tests/integration/test_server_info.py +0 -10
  76. smartsheet_python_sdk-3.5.5/tests/integration/test_sharing.py +0 -83
  77. smartsheet_python_sdk-3.5.5/tests/integration/test_sheet_summary.py +0 -64
  78. smartsheet_python_sdk-3.5.5/tests/integration/test_sheets.py +0 -384
  79. smartsheet_python_sdk-3.5.5/tests/integration/test_templates.py +0 -21
  80. smartsheet_python_sdk-3.5.5/tests/integration/test_update_requests.py +0 -61
  81. smartsheet_python_sdk-3.5.5/tests/integration/test_users.py +0 -134
  82. smartsheet_python_sdk-3.5.5/tests/integration/test_webhooks.py +0 -50
  83. smartsheet_python_sdk-3.5.5/tests/integration/test_workspaces.py +0 -271
  84. smartsheet_python_sdk-3.5.5/tests/integration/test_zsearch.py +0 -30
  85. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.gitchangelog.rc +0 -0
  86. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.gitchangelog.tpl +0 -0
  87. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  88. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  89. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.github/workflows/publish-distribution.yaml +0 -0
  90. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.github/workflows/publish-documentation.yaml +0 -0
  91. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/.markdownlint.json +0 -0
  92. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/LICENSE.md +0 -0
  93. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/Makefile +0 -0
  94. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/NOTICE +0 -0
  95. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/docs-source/Makefile +0 -0
  96. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/docs-source/conf.py +0 -0
  97. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/pyproject.toml +0 -0
  98. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/setup.cfg +0 -0
  99. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/exceptions.py +0 -0
  100. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/__init__.py +0 -0
  101. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/access_token.py +0 -0
  102. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/account.py +0 -0
  103. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/alternate_email.py +0 -0
  104. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/asset_share.py +0 -0
  105. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/asset_shares_paginated_result.py +0 -0
  106. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/attachment.py +0 -0
  107. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/auto_number_format.py +0 -0
  108. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/automation_action.py +0 -0
  109. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/automation_rule.py +0 -0
  110. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/boolean_object_value.py +0 -0
  111. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/bulk_item_failure.py +0 -0
  112. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/bulk_item_result.py +0 -0
  113. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/cell.py +0 -0
  114. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/cell_data_item.py +0 -0
  115. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/cell_history.py +0 -0
  116. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/cell_link.py +0 -0
  117. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/cell_link_widget_content.py +0 -0
  118. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/chart_widget_content.py +0 -0
  119. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/column.py +0 -0
  120. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/comment.py +0 -0
  121. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/contact.py +0 -0
  122. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/contact_object_value.py +0 -0
  123. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/container_destination.py +0 -0
  124. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/copy_or_move_row_destination.py +0 -0
  125. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/copy_or_move_row_directive.py +0 -0
  126. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/copy_or_move_row_result.py +0 -0
  127. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/criteria.py +0 -0
  128. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/cross_sheet_reference.py +0 -0
  129. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/currency.py +0 -0
  130. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/date_object_value.py +0 -0
  131. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/datetime_object_value.py +0 -0
  132. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/discussion.py +0 -0
  133. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/downloaded_file.py +0 -0
  134. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/duration.py +0 -0
  135. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/email.py +0 -0
  136. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/access_level.py +0 -0
  137. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/asset_type.py +0 -0
  138. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/attachment_parent_type.py +0 -0
  139. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/attachment_sub_type.py +0 -0
  140. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/attachment_type.py +0 -0
  141. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/automation_action_frequency.py +0 -0
  142. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/automation_action_type.py +0 -0
  143. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/automation_rule_disabled_reason.py +0 -0
  144. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/cell_link_status.py +0 -0
  145. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/column_type.py +0 -0
  146. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/criteria_target.py +0 -0
  147. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/cross_sheet_reference_status.py +0 -0
  148. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/currency_code.py +0 -0
  149. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/day_descriptors.py +0 -0
  150. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/day_ordinal.py +0 -0
  151. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/event_action.py +0 -0
  152. /smartsheet_python_sdk-3.5.5/smartsheet/models/enums/event_obejct_type.py → /smartsheet_python_sdk-3.6.0/smartsheet/models/enums/event_object_type.py +0 -0
  153. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/event_source.py +0 -0
  154. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/global_template.py +0 -0
  155. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/operator.py +0 -0
  156. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/paper_type.py +0 -0
  157. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/predecessor_type.py +0 -0
  158. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/publish_accessible_by.py +0 -0
  159. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/schedule_type.py +0 -0
  160. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/seat_type.py +0 -0
  161. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/share_scope.py +0 -0
  162. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/share_type.py +0 -0
  163. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/sheet_email_format.py +0 -0
  164. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/sheet_filter_operator.py +0 -0
  165. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/sheet_filter_type.py +0 -0
  166. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/sort_direction.py +0 -0
  167. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/symbol.py +0 -0
  168. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/system_column_type.py +0 -0
  169. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/update_request_status.py +0 -0
  170. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/user_status.py +0 -0
  171. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/enums/widget_type.py +0 -0
  172. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/error.py +0 -0
  173. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/error_result.py +0 -0
  174. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/event.py +0 -0
  175. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/event_result.py +0 -0
  176. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/explicit_null.py +0 -0
  177. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/favorite.py +0 -0
  178. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/folder.py +0 -0
  179. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/font_family.py +0 -0
  180. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/format_details.py +0 -0
  181. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/format_tables.py +0 -0
  182. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/group.py +0 -0
  183. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/group_member.py +0 -0
  184. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/home.py +0 -0
  185. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/hyperlink.py +0 -0
  186. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/image.py +0 -0
  187. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/image_url.py +0 -0
  188. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/image_url_map.py +0 -0
  189. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/image_widget_content.py +0 -0
  190. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/index_result.py +0 -0
  191. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/json_object.py +0 -0
  192. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/multi_contact_object_value.py +0 -0
  193. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/multi_picklist_object_value.py +0 -0
  194. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/multi_row_email.py +0 -0
  195. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/number_object_value.py +0 -0
  196. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/o_auth_error.py +0 -0
  197. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/object_value.py +0 -0
  198. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/paginated_children_result.py +0 -0
  199. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/predecessor.py +0 -0
  200. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/predecessor_list.py +0 -0
  201. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/primitive_object_value.py +0 -0
  202. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/profile_image.py +0 -0
  203. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/project_settings.py +0 -0
  204. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/recipient.py +0 -0
  205. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/report.py +0 -0
  206. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/report_cell.py +0 -0
  207. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/report_column.py +0 -0
  208. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/report_publish.py +0 -0
  209. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/report_row.py +0 -0
  210. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/report_widget_content.py +0 -0
  211. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/result.py +0 -0
  212. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/row.py +0 -0
  213. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/row_email.py +0 -0
  214. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/row_mapping.py +0 -0
  215. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/schedule.py +0 -0
  216. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/scope.py +0 -0
  217. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/search_result.py +0 -0
  218. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/search_result_item.py +0 -0
  219. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/selection_range.py +0 -0
  220. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sent_update_request.py +0 -0
  221. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/server_info.py +0 -0
  222. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/share.py +0 -0
  223. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sheet.py +0 -0
  224. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sheet_email.py +0 -0
  225. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sheet_filter.py +0 -0
  226. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sheet_filter_details.py +0 -0
  227. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sheet_publish.py +0 -0
  228. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sheet_summary.py +0 -0
  229. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sheet_user_permissions.py +0 -0
  230. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sheet_user_settings.py +0 -0
  231. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/shortcut_data_item.py +0 -0
  232. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/shortcut_widget_content.py +0 -0
  233. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sight.py +0 -0
  234. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sight_publish.py +0 -0
  235. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sort_criterion.py +0 -0
  236. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/sort_specifier.py +0 -0
  237. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/source.py +0 -0
  238. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/string_object_value.py +0 -0
  239. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/summary_field.py +0 -0
  240. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/template.py +0 -0
  241. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/title_rich_text_widget_content.py +0 -0
  242. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/token_paginated_result.py +0 -0
  243. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/update_request.py +0 -0
  244. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/user.py +0 -0
  245. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/user_model.py +0 -0
  246. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/user_plan.py +0 -0
  247. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/user_profile.py +0 -0
  248. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/version.py +0 -0
  249. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/web_content_widget_content.py +0 -0
  250. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/webhook.py +0 -0
  251. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/webhook_secret.py +0 -0
  252. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/webhook_stats.py +0 -0
  253. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/webhook_subscope.py +0 -0
  254. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/widget.py +0 -0
  255. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/widget_content.py +0 -0
  256. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/widget_hyperlink.py +0 -0
  257. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/models/workspace.py +0 -0
  258. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/object_value.py +0 -0
  259. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/session.py +0 -0
  260. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet/types.py +0 -0
  261. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet_python_sdk.egg-info/dependency_links.txt +0 -0
  262. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet_python_sdk.egg-info/requires.txt +0 -0
  263. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/smartsheet_python_sdk.egg-info/top_level.txt +0 -0
  264. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/__init__.py +0 -0
  265. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/__init__.py +0 -0
  266. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/mock_api_test_helper.py +0 -0
  267. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_api_automation_rules.py +0 -0
  268. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_api_columns.py +0 -0
  269. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_api_folders.py +0 -0
  270. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_api_rows.py +0 -0
  271. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_api_sharing.py +0 -0
  272. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_api_sheets.py +0 -0
  273. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_api_sights.py +0 -0
  274. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_api_workspaces.py +0 -0
  275. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_change_agent.py +0 -0
  276. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/test_mock_serialization.py +0 -0
  277. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/users/common_test_constants.py +0 -0
  278. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/users/test_list_user_plans.py +0 -0
  279. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/users/test_remove_user_from_plan.py +0 -0
  280. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/mock_api/users/test_user_upgrade_downgrade.py +0 -0
  281. {smartsheet_python_sdk-3.5.5 → smartsheet_python_sdk-3.6.0}/tests/test_util_serialize_dict.py +0 -0
@@ -35,6 +35,7 @@
35
35
  - [ ] I have performed a self-review of my own code
36
36
  - [ ] I have commented my code, particularly in hard-to-understand areas
37
37
  - [ ] I have made corresponding changes to the documentation
38
+ - [ ] I have updated the relevant files in `docs-source/` (see [Documentation guidelines](../../../CONTRIBUTING.md#documentation))
38
39
  - [ ] My changes generate no new warnings
39
40
  - [ ] I have added tests that prove my fix is effective or that my feature works
40
41
  - [ ] New and existing unit tests pass locally with my changes
@@ -25,7 +25,7 @@ jobs:
25
25
  run: |
26
26
  pylint smartsheet
27
27
 
28
- mock-api-test:
28
+ test:
29
29
  needs: lint
30
30
  runs-on: ubuntu-latest
31
31
  strategy:
@@ -53,9 +53,9 @@ jobs:
53
53
  - name: Setup Mock API
54
54
  run: |
55
55
  docker compose -f smartsheet-sdk-tests/docker-compose.yml up -d --wait
56
- - name: Run mock API tests
56
+ - name: Run tests
57
57
  run: |
58
- coverage run --source=smartsheet -m pytest tests/mock_api/
58
+ coverage run --source=smartsheet -m pytest
59
59
  coverage lcov
60
60
  - name: Coveralls Parallel
61
61
  uses: coverallsapp/github-action@master
@@ -67,7 +67,7 @@ jobs:
67
67
 
68
68
  build-packages-test:
69
69
  runs-on: ubuntu-latest
70
- needs: [mock-api-test]
70
+ needs: [test]
71
71
  steps:
72
72
  - uses: actions/checkout@v4
73
73
  - name: Set up Python
@@ -12,8 +12,7 @@ smartsheet*.egg-info/
12
12
  # Ignore SDK reference docs artifacts
13
13
  gh-pages/
14
14
  docs-source/_build/
15
- docs-source/modules.rst
16
- docs-source/smartsheet*.rst
15
+ docs-source/_static/
17
16
 
18
17
  # Ignore the test cases log files
19
18
  *.log
@@ -0,0 +1,25 @@
1
+ version: "1.0"
2
+
3
+ commands:
4
+ - name: Pull latest changes
5
+ run: git pull
6
+ timeout: 60
7
+ execution_phase: task_run
8
+ - name: Install dependencies
9
+ run: pip install -e .[test,develop]
10
+ timeout: 60
11
+ execution_phase: task_run
12
+
13
+ github_events:
14
+ - event: issues.opened
15
+ action:
16
+ name: github.issue.fix
17
+ - event: issue_comment.created
18
+ action:
19
+ name: github.issue.comment.respond
20
+ - event: pull_request.opened
21
+ action:
22
+ name: github.pr.review
23
+ - event: pull_request_review_comment.created
24
+ action:
25
+ name: github.pr.comment.respond
@@ -4,9 +4,9 @@
4
4
 
5
5
  The following packages are required.
6
6
 
7
- * [setuptools](https://pypi.org/project/setuptools/)
8
- * [six](https://pypi.python.org/pypi/six)
9
- * [requests](https://pypi.python.org/pypi/requests)
7
+ - [setuptools](https://pypi.org/project/setuptools/)
8
+ - [six](https://pypi.python.org/pypi/six)
9
+ - [requests](https://pypi.python.org/pypi/requests)
10
10
 
11
11
  To install this SDK manually:
12
12
 
@@ -55,9 +55,9 @@ To invoke the passthrough, your code can call one of the following four methods:
55
55
 
56
56
  `response = client.Passthrough.delete(endpoint)`
57
57
 
58
- * `endpoint`: The specific API endpoint you wish to invoke. The client object base URL gets prepended to the caller’s endpoint URL argument, so in the above `get` example, if endpoint is `'/sheets'` an HTTP GET is requested from the URL `https://api.smartsheet.com/2.0/sheets`
59
- * `payload`: The data to be passed through, can be either a dictionary or string.
60
- * `query_params`: An optional dictionary of query parameters.
58
+ - `endpoint`: The specific API endpoint you wish to invoke. The client object base URL gets prepended to the caller’s endpoint URL argument, so in the above `get` example, if endpoint is `'/sheets'` an HTTP GET is requested from the URL `https://api.smartsheet.com/2.0/sheets`
59
+ - `payload`: The data to be passed through, can be either a dictionary or string.
60
+ - `query_params`: An optional dictionary of query parameters.
61
61
 
62
62
  All calls to passthrough methods return a JSON result. The `data` attribute contains the JSON result as a dictionary. For example, after a PUT operation the API's result message will be contained in `response.data['message']`. If you prefer raw JSON instead of a dictionary, you can use the `to_json()` method, for example `response.to_json()`.
63
63
 
@@ -78,17 +78,91 @@ response = client.Passthrough.post('/sheets', payload)
78
78
 
79
79
  ## Testing
80
80
 
81
- ### Integration Tests
81
+ ### Mock API Tests
82
82
 
83
- 1. Follow the [Integration test instructions](tests/integration/README.md)
84
- 2. Run `pytest tests/integration`
83
+ We use WireMock for API contract testing. This allows us to simulate Smartsheet API responses and run tests without relying on the live API.
84
+ The [smartsheet-sdk-tests](https://github.com/smartsheet/smartsheet-sdk-tests) repo provides a standalone WireMock server with JSON mappings that simulate the Smartsheet API.
85
+ Each mapping defines a request to match and a response to return.
86
+
87
+ Common test cases use catch-all path patterns (e.g., /errors/500-response).
88
+
89
+ We use two custom headers:
90
+
91
+ - x-test-name: Used for exact mapping match, allowing different mock responses for the same HTTP method and endpoint.
92
+ - x-request-id: A UUID generated for each request, used to verify request URLs and search for requests in WireMock admin history.
93
+
94
+ To run the mock API tests:
95
+
96
+ 1. Clone the [smartsheet-sdk-tests](https://github.com/smartsheet/smartsheet-sdk-tests) repo and follow the instructions from the readme to start the mock server.
97
+
98
+ 2. `pytest tests/mock_api`
99
+
100
+ To add new mock API tests:
101
+
102
+ 1. Add a WireMock Mapping (JSON) in the [smartsheet-sdk-tests](https://github.com/smartsheet/smartsheet-sdk-tests):
103
+
104
+ ```json
105
+ {
106
+ "request": {
107
+ "urlPathTemplate": "/2.0/users/{userId}/plans",
108
+ "method": "GET",
109
+ "headers": {
110
+ "Authorization": {
111
+ "matches": "Bearer .*"
112
+ },
113
+ "x-test-name": {
114
+ "equalTo": "/users/list-user-plans/all-response-body-properties"
115
+ },
116
+ "x-request-id": {
117
+ "matches": ".*"
118
+ }
119
+ }
120
+ },
121
+ "response": {
122
+ "statusMessage": "OK",
123
+ "status": 200,
124
+ "jsonBody": {
125
+ "lastKey": "12345678901234569",
126
+ "data": [
127
+ {
128
+ "planId": 1234567890123456,
129
+ "seatType": "MEMBER",
130
+ "seatTypeLastChangedAt": "2025-01-01T00:00:00.123456789Z",
131
+ "provisionalExpirationDate": "2026-12-13T12:17:52.525696Z",
132
+ "isInternal": false
133
+ }
134
+ ]
135
+ },
136
+ "headers": {
137
+ "Content-Type": "application/json"
138
+ }
139
+ }
140
+ }
141
+ ```
85
142
 
86
- ### Mock API Tests
143
+ <!-- markdownlint-disable MD029 -->
144
+ 2. Write a Test in the SDK:
145
+ <!-- markdownlint-enable MD029 -->
87
146
 
88
- **NOTE:** the mock API tests will fail unless the mock server is running.
147
+ - Always use x-test-name to target specific mock responses.
148
+ - Use x-request-id for traceability in WireMock admin.
149
+ - Keep mappings in the smartsheet-sdk-tests repository organized and descriptive
89
150
 
90
- 1. Clone the [Smartsheet SDK tests](https://github.com/smartsheet-platform/smartsheet-sdk-tests) repo and follow the instructions from the README to start the mock server
91
- 2. Run `pytest tests/mock_api`
151
+ ```python
152
+ def test_list_user_plans_all_response_properties():
153
+ request_id = uuid.uuid4().hex
154
+ client = get_mock_api_client(
155
+ "/users/list-user-plans/all-response-body-properties", request_id
156
+ )
157
+
158
+ response = client.Users.list_user_plans(
159
+ user_id=TEST_USER_ID,
160
+ last_key=TEST_LAST_KEY,
161
+ max_items=TEST_MAX_ITEMS
162
+ )
163
+
164
+ assert isinstance(response, TokenPaginatedResult)
165
+ ```
92
166
 
93
167
  ## HTTP Proxy
94
168
 
@@ -5,6 +5,30 @@ 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
+ ## [x.x.x] - Unreleased
9
+
10
+ ## [3.6.0] - 2025-12-04
11
+
12
+ ### Added
13
+
14
+ - Support for POST /2.0/users/{userId}/reactivate endpoint
15
+ - Support for POST /2.0/users/{userId}/deactivate endpoint
16
+
17
+ ## [3.5.6] - 2025-11-18
18
+
19
+ ### Removed
20
+
21
+ - Remove integration tests from the sdk test suite
22
+
23
+ ### Added
24
+
25
+ - Add support for code completion. Now code editors will be able to recognize and complete expressions like `smart.Users` and `smart.Users.list_users`.
26
+
27
+ ### Updated
28
+
29
+ - Improved the generated reference documentation.
30
+ - ADVANCED.md integration and mock api testing documentation
31
+
8
32
  ## [3.5.5] - 2025-11-11
9
33
 
10
34
  ### Fixed
@@ -1,5 +1,11 @@
1
1
  # Contributing to Smartsheet Python SDK
2
2
 
3
+ ## Issue First Approach
4
+
5
+ **All contributions to the Smartsheet Python SDK must begin with a GitHub Issue.** This includes bug fixes, new features, and documentation improvements.
6
+
7
+ For detailed guidance on creating effective issues that work well with both human reviewers and AI-powered Cloud Agents, see our [Issue First documentation](ISSUE-FIRST.md).
8
+
3
9
  ## Did you find a bug?
4
10
 
5
11
  - **Send all security related bugs to our maintainer email, <sdk-python@smartsheet.com>**.
@@ -10,19 +16,23 @@
10
16
 
11
17
  ## Did you write a patch that fixes a bug?
12
18
 
13
- - Open a new GitHub pull request with the patch.
19
+ - **First, ensure there is a GitHub issue** describing the bug (see above).
20
+
21
+ - Open a new GitHub pull request with the patch, referencing the issue number.
14
22
 
15
- - Ensure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable.
23
+ - Ensure the PR description clearly describes the problem and solution. Include the relevant issue number.
16
24
 
17
25
  - A maintainer should review your PR within the next few days. If the PR has been dormant for more than a week, consider sending an email to <sdk-python@smartsheet.com>
18
26
 
19
27
  ## Did you fix whitespace, format code, or make a purely cosmetic patch?
20
28
 
21
- Changes that are cosmetic in nature and do not add anything substantial to the stability, functionality, or testability may take longer to review, but are still welcome.
29
+ Changes that are cosmetic in nature and do not add anything substantial to the stability, functionality, or testability may take longer to review, but are still welcome. Please create an issue first describing the cosmetic changes you'd like to make.
22
30
 
23
31
  ## Do you intend to add a new feature or change an existing one?
24
32
 
25
- - Suggest your change as an issue with the label #enhancement. Make sure that your new feature description outlines why this would be helpful for users, and how difficult a change it would be to make.
33
+ - **First, create an issue** with the label #enhancement. Make sure that your new feature description outlines why this would be helpful for users, and how difficult a change it would be to make.
34
+
35
+ - Once the feature is discussed and approved in the issue, you can submit a pull request implementing it.
26
36
 
27
37
  ## Code Style and Quality
28
38
 
@@ -36,6 +46,27 @@ Changes that are cosmetic in nature and do not add anything substantial to the s
36
46
 
37
47
  - Write unit tests for new features and bug fixes. All tests should pass before submitting a PR.
38
48
 
49
+ ## Documentation
50
+
51
+ - If your changes affect the public API, you must update the corresponding Sphinx documentation files in `docs-source/`:
52
+ - **API Resources** (modules in `smartsheet/`): Update `docs-source/smartsheet_api.rst`
53
+ - **Models** (classes in `smartsheet/models/`): Update `docs-source/smartsheet_models.rst`
54
+ - **Enums** (enums in `smartsheet/models/enums/`): Update `docs-source/smartsheet_enums.rst`
55
+ - **Types** (type definitions in `smartsheet/types.py`): Update `docs-source/smartsheet_types.rst`
56
+ - **Exceptions** (exceptions in `smartsheet/exceptions.py`): Update `docs-source/smartsheet_exceptions.rst`
57
+ - **General documentation** (installation, quickstart, examples): Update `docs-source/index.rst`
58
+
59
+ - The documentation uses Sphinx with autodoc to generate API documentation from docstrings. Ensure your docstrings follow Google-style format as configured in `docs-source/conf.py`.
60
+
61
+ - After making changes to `docs-source/`, you can build the documentation locally to verify your changes:
62
+
63
+ ```bash
64
+ cd docs-source
65
+ make html
66
+ ```
67
+
68
+ - The built documentation will be in `docs-source/_build/html/`. Open `index.html` in a browser to review your changes.
69
+
39
70
  ## Running Tests
40
71
 
41
72
  - To run the test suite, use the following command:
@@ -0,0 +1,306 @@
1
+ # Issue First Approach for Smartsheet Python SDK
2
+
3
+ ## What is "Issue First"?
4
+
5
+ The "Issue First" approach is a collaborative development methodology where **all contributions to the Smartsheet Python SDK must begin with a GitHub Issue** before any code changes are made. This means that whether you're fixing a bug, adding a new feature, or improving documentation, you first create or identify an existing issue that describes what needs to be done.
6
+
7
+ ## Why Issue First Matters for Cloud Agents
8
+
9
+ With the integration of Roo Code Cloud Agents in the Smartsheet Python SDK repository, the Issue First approach becomes even more critical. Here's why:
10
+
11
+ ### 1. **Clear Communication with AI Agents**
12
+
13
+ Cloud Agents are AI-powered assistants that can understand natural language and translate it into code changes. A well-written GitHub Issue serves as a **high-quality prompt** that gives the Cloud Agent all the context it needs to:
14
+
15
+ - Understand the problem or feature request
16
+ - Identify which parts of the Smartsheet Python SDK codebase need to be modified
17
+ - Generate appropriate Python code that follows the SDK's patterns and conventions
18
+ - Create comprehensive tests and documentation
19
+
20
+ ### 2. **Structured Problem Definition**
21
+
22
+ Issues provide a structured format that helps both humans and AI agents understand:
23
+
24
+ - **What** needs to change (the goal)
25
+ - **Why** it needs to change (the motivation)
26
+ - **How** it should work (expected behavior)
27
+ - **Context** about the Smartsheet Python SDK codebase
28
+
29
+ ### 3. **Trackable Progress**
30
+
31
+ Issues create a clear audit trail of:
32
+
33
+ - What work was requested
34
+ - Who is working on it (human or Cloud Agent)
35
+ - The discussion and decisions made
36
+ - The resulting code changes via linked Pull Requests
37
+
38
+ ### 4. **Quality Control**
39
+
40
+ By requiring an issue first, we ensure that:
41
+
42
+ - The proposed change aligns with the SDK's goals and architecture
43
+ - Duplicate work is avoided
44
+ - The community can provide input before code is written
45
+ - Cloud Agents have sufficient context to generate high-quality code
46
+
47
+ ## How to Use Issue First with Roo Cloud Agents
48
+
49
+ ### Step 1: Create a Quality Issue
50
+
51
+ When creating an issue that will be used by a Roo Cloud Agent, provide comprehensive details:
52
+
53
+ #### For Bug Reports
54
+
55
+ ```markdown
56
+ **Description**: Clear description of the bug in the Smartsheet Python SDK
57
+
58
+ **Steps to Reproduce**:
59
+ 1. Import the SDK: `import smartsheet`
60
+ 2. Call the specific method: `client.Sheets.get_sheet(sheet_id)`
61
+ 3. Observe the error
62
+
63
+ **Expected Behavior**: What should happen when using the SDK
64
+
65
+ **Actual Behavior**: What actually happens
66
+
67
+ **Environment**:
68
+ - SDK Version: (e.g., 3.0.0)
69
+ - Python Version: (e.g., 3.9.0)
70
+ - Operating System: (e.g., Ubuntu 22.04)
71
+
72
+ **Code Sample** (if applicable):
73
+ ```python
74
+ import smartsheet
75
+ client = smartsheet.Smartsheet('your_token')
76
+ # Your code that demonstrates the issue
77
+ \`\`\`
78
+
79
+ **Additional Context**: Any relevant details about the Smartsheet API, error messages, or stack traces
80
+ \`\`\`
81
+
82
+ #### For Feature Requests
83
+
84
+ ```markdown
85
+ **Feature Description**: Clear description of the new functionality needed in the Smartsheet Python SDK
86
+
87
+ **Use Case**: Why this feature is needed and how it will be used
88
+
89
+ **Proposed API**:
90
+ ```python
91
+ # Example of how the feature would be used
92
+ client.Sheets.new_method(parameters)
93
+ ```
94
+
95
+ **Smartsheet API Reference**: Link to relevant Smartsheet API documentation if applicable
96
+
97
+ **Implementation Considerations**:
98
+
99
+ - Which SDK modules would be affected (e.g., `smartsheet/sheets.py`, `smartsheet/models/`)
100
+ - Any dependencies or related features
101
+ - Backwards compatibility concerns
102
+
103
+ **Alternatives Considered**: Other approaches that were considered
104
+ \`\`\`
105
+
106
+ #### For Documentation Improvements
107
+
108
+ ```markdown
109
+ **Documentation Issue**: What documentation is missing, unclear, or incorrect
110
+
111
+ **Location**: Which file or section needs improvement (e.g., `README.md`, `ADVANCED.md`)
112
+
113
+ **Suggested Improvement**: What should be added or changed
114
+
115
+ **Context**: Why this documentation is important for SDK users
116
+ \`\`\`
117
+
118
+ ### Step 2: Let the Cloud Agent Work
119
+
120
+ Once your issue is well-defined:
121
+
122
+ 1. **The Cloud Agent reads your issue** as its primary prompt
123
+ 2. **It analyzes the Smartsheet Python SDK codebase** to understand:
124
+ - Existing patterns and conventions
125
+ - Related code that may need updates
126
+ - Test files that need modifications
127
+ - Documentation that should be updated
128
+
129
+ 3. **It generates the necessary changes**:
130
+ - Python code following the SDK's style
131
+ - Unit tests using the project's testing framework
132
+ - Updated documentation
133
+ - Appropriate error handling
134
+
135
+ 4. **It creates a Pull Request** linked to your issue with all the changes
136
+
137
+ ### Step 3: Review and Iterate
138
+
139
+ After the Cloud Agent creates a PR:
140
+
141
+ 1. Review the generated code for correctness and quality
142
+ 2. Test the changes locally with the Smartsheet API
143
+ 3. Provide feedback in the PR comments
144
+ 4. The Cloud Agent can iterate based on your feedback
145
+ 5. Once approved, the changes are merged
146
+
147
+ ## Best Practices for Writing Issues
148
+
149
+ ### Be Specific and Detailed
150
+
151
+ **Poor Issue**: "Fix the sheet method"
152
+
153
+ **Good Issue**: "Fix TypeError in `Sheets.get_sheet()` when sheet contains cell links - occurs when a sheet has cells with links to other sheets, the SDK raises a TypeError during deserialization of the Cell model"
154
+
155
+ ### Include Code Examples
156
+
157
+ Show how the SDK is being used and what's not working:
158
+
159
+ ```python
160
+ import smartsheet
161
+
162
+ client = smartsheet.Smartsheet(access_token='your_token')
163
+
164
+ # This raises an error
165
+ sheet = client.Sheets.get_sheet(1234567890)
166
+ print(sheet.rows[0].cells[0].value) # TypeError here
167
+ ```
168
+
169
+ ### Reference Smartsheet API Documentation
170
+
171
+ Link to relevant Smartsheet API documentation to help the Cloud Agent understand the expected behavior:
172
+
173
+ ```markdown
174
+ According to the [Smartsheet API documentation for Get Sheet](https://developers.smartsheet.com/api/smartsheet/openapi/sheets/get-sheet),
175
+ the response should include...
176
+ ```
177
+
178
+ ### Specify the Scope
179
+
180
+ Be clear about what should and shouldn't be changed:
181
+
182
+ ```markdown
183
+ **In Scope**:
184
+ - Update the `Cell` model in `smartsheet/models/cell.py`
185
+ - Add handling for cell link objects
186
+ - Update tests in `tests/mock_api/test_mock_api_sheets.py`
187
+
188
+ **Out of Scope**:
189
+ - Changes to other models
190
+ - API authentication changes
191
+ ```
192
+
193
+ ### Tag Appropriately
194
+
195
+ Use GitHub labels to help categorize your issue:
196
+
197
+ - `bug` - Something isn't working correctly
198
+ - `enhancement` - New feature or improvement
199
+ - `documentation` - Documentation improvements
200
+ - `good first issue` - Good for newcomers
201
+ - `help wanted` - Extra attention needed
202
+
203
+ ## Examples of Well-Written Issues
204
+
205
+ ### Example 1: Bug Report
206
+
207
+ ```markdown
208
+ **Title**: Cell deserialization fails when cell contains hyperlink with null url
209
+
210
+ **Description**:
211
+ When using the Smartsheet Python SDK to retrieve a sheet that contains cells with hyperlinks
212
+ where the url property is null, the SDK raises an AttributeError during deserialization.
213
+
214
+ **Steps to Reproduce**:
215
+
216
+ 1. Create a sheet in Smartsheet with a cell containing a hyperlink with no URL
217
+ 2. Use the SDK to get the sheet:
218
+
219
+ \`\`\`python
220
+ import smartsheet
221
+ client = smartsheet.Smartsheet('token')
222
+ sheet = client.Sheets.get_sheet(sheet_id)
223
+ \`\`\`
224
+
225
+ 3. Observe the AttributeError
226
+
227
+ **Expected Behavior**:
228
+ The SDK should handle null hyperlink URLs gracefully, either by setting the url to None
229
+ or providing a default value.
230
+
231
+ **Actual Behavior**:
232
+
233
+ \`\`\`text
234
+ AttributeError: 'NoneType' object has no attribute 'strip'
235
+ File "smartsheet/models/hyperlink.py", line 45, in __init__
236
+ \`\`\`
237
+
238
+ **Environment**:
239
+
240
+ - SDK Version: 2.105.1
241
+ - Python Version: 3.9.7
242
+ - OS: macOS 12.6
243
+
244
+ **Smartsheet API Reference**:
245
+ <https://developers.smartsheet.com/api/smartsheet/openapi/sheets/get-sheet>
246
+
247
+ \`\`\`
248
+
249
+ ### Example 2: Feature Request
250
+
251
+ ```markdown
252
+ **Title**: Add support for Sheet Summary Fields API
253
+
254
+ **Description**:
255
+ The Smartsheet Python SDK currently does not support the Sheet Summary Fields API endpoints.
256
+ This feature would allow users to programmatically read and update sheet summary fields.
257
+
258
+ **Use Case**:
259
+ Users need to automate updating project metadata stored in sheet summaries, such as
260
+ project status, start dates, and custom KPIs.
261
+
262
+ **Proposed API**:
263
+
264
+ \`\`\`python
265
+ # Get summary fields
266
+ summary = client.Sheets.get_sheet_summary(sheet_id)
267
+ for field in summary.fields:
268
+ print(f"{field.title}: {field.value}")
269
+
270
+ # Update a summary field
271
+ client.Sheets.update_summary_field(
272
+ sheet_id=sheet_id,
273
+ field_id=field_id,
274
+ value="Updated value"
275
+ )
276
+ \`\`\`
277
+
278
+ **Smartsheet API Reference**:
279
+
280
+ - <https://developers.smartsheet.com/api/smartsheet/openapi/sheetsummary/list-summary-fields>
281
+ - <https://developers.smartsheet.com/api/smartsheet/openapi/sheetsummary/get-sheet-summary>
282
+
283
+ **Implementation Considerations**:
284
+
285
+ - Add new methods to `smartsheet/sheets.py`
286
+ - Create `SummaryField` model in `smartsheet/models/`
287
+ - Add tests to verify API integration
288
+ - Update documentation in `README.md` or `ADVANCED.md`
289
+
290
+ **Related Issues**: None
291
+
292
+ **Alternatives Considered**:
293
+ Using direct API calls with the `Passthrough` module, but a native SDK implementation
294
+ would provide better type hints and error handling.
295
+ \`\`\`
296
+
297
+ ## Conclusion
298
+
299
+ The Issue First approach, combined with Roo Code Cloud Agents, creates a powerful workflow for contributing to the Smartsheet Python SDK. By writing clear, detailed issues, you provide Cloud Agents with the context they need to generate high-quality code changes. This approach ensures that:
300
+
301
+ - All changes are well-documented and justified
302
+ - The community can provide input and avoid duplicate work
303
+ - Cloud Agents have the information they need to be effective
304
+ - The SDK maintains high quality and consistency
305
+
306
+ Remember: **A well-written issue is the foundation for successful automation with Cloud Agents.**
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smartsheet-python-sdk
3
- Version: 3.5.5
3
+ Version: 3.6.0
4
4
  Summary: Library that uses Python to connect to Smartsheet services (using API 2.0).
5
5
  License-Expression: Apache-2.0
6
6
  Classifier: Development Status :: 5 - Production/Stable
@@ -100,6 +100,10 @@ Use the following resources to learn more about the SDK capabilities:
100
100
  2. [Python SDK documentation](https://smartsheet.github.io/smartsheet-python-sdk/)
101
101
  3. [Smartsheet API Documentation](https://developers.smartsheet.com/api/smartsheet/)
102
102
 
103
+ ## Contributing
104
+
105
+ We welcome contributions! Before submitting code changes, please review our [Issue First approach](ISSUE-FIRST.md) for creating effective issues that work well with both human reviewers and AI-powered Cloud Agents. For additional contribution guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
106
+
103
107
  ## Advanced Topics
104
108
 
105
109
  For details about logging, testing, how to use a passthrough option, and how to override HTTP client behavior,
@@ -47,6 +47,10 @@ Use the following resources to learn more about the SDK capabilities:
47
47
  2. [Python SDK documentation](https://smartsheet.github.io/smartsheet-python-sdk/)
48
48
  3. [Smartsheet API Documentation](https://developers.smartsheet.com/api/smartsheet/)
49
49
 
50
+ ## Contributing
51
+
52
+ We welcome contributions! Before submitting code changes, please review our [Issue First approach](ISSUE-FIRST.md) for creating effective issues that work well with both human reviewers and AI-powered Cloud Agents. For additional contribution guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
53
+
50
54
  ## Advanced Topics
51
55
 
52
56
  For details about logging, testing, how to use a passthrough option, and how to override HTTP client behavior,