smartsheet-python-sdk 3.5.6__tar.gz → 3.7.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.
- smartsheet_python_sdk-3.7.0/.roo/roomotes.yml +25 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/CHANGELOG.md +15 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/CONTRIBUTING.md +14 -4
- smartsheet_python_sdk-3.7.0/ISSUE-FIRST.md +306 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/PKG-INFO +5 -1
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/README.md +4 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/attachments.py +30 -29
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/cells.py +8 -5
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/contacts.py +7 -4
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/discussions.py +29 -26
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/events.py +5 -2
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/favorites.py +9 -6
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/folders.py +37 -28
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/groups.py +17 -14
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/home.py +12 -11
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/images.py +5 -3
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/asset_shares_paginated_result.py +4 -5
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/bulk_item_result.py +8 -4
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/event_result.py +6 -3
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/index_result.py +6 -3
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/result.py +6 -3
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/token_paginated_result.py +2 -2
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/passthrough.py +10 -9
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/reports.py +27 -24
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/search.py +7 -4
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/server.py +5 -2
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/sharing.py +13 -10
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/sheets.py +135 -134
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/sights.py +28 -26
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/templates.py +7 -4
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/token.py +8 -6
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/users.py +123 -37
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/version.py +3 -3
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/webhooks.py +14 -12
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/workspaces.py +49 -42
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet_python_sdk.egg-info/PKG-INFO +5 -1
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet_python_sdk.egg-info/SOURCES.txt +4 -0
- smartsheet_python_sdk-3.7.0/tests/mock_api/users/test_deactivate_user.py +64 -0
- smartsheet_python_sdk-3.7.0/tests/mock_api/users/test_reactivate_user.py +64 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.gitchangelog.rc +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.gitchangelog.tpl +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.github/pull_request_template.md +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.github/workflows/publish-distribution.yaml +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.github/workflows/publish-documentation.yaml +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.github/workflows/test-build.yaml +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.gitignore +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/.markdownlint.json +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/ADVANCED.md +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/LICENSE.md +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/Makefile +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/NOTICE +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/docs-source/Makefile +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/docs-source/conf.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/docs-source/index.rst +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/docs-source/smartsheet_api.rst +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/docs-source/smartsheet_enums.rst +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/docs-source/smartsheet_exceptions.rst +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/docs-source/smartsheet_models.rst +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/docs-source/smartsheet_types.rst +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/pyproject.toml +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/setup.cfg +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/__init__.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/exceptions.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/__init__.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/access_token.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/account.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/alternate_email.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/asset_share.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/attachment.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/auto_number_format.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/automation_action.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/automation_rule.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/boolean_object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/bulk_item_failure.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/cell.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/cell_data_item.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/cell_history.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/cell_link.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/cell_link_widget_content.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/chart_widget_content.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/column.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/comment.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/contact.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/contact_object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/container_destination.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/copy_or_move_row_destination.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/copy_or_move_row_directive.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/copy_or_move_row_result.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/criteria.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/cross_sheet_reference.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/currency.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/date_object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/datetime_object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/discussion.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/downloaded_file.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/duration.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/email.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/__init__.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/access_level.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/asset_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/attachment_parent_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/attachment_sub_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/attachment_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/automation_action_frequency.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/automation_action_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/automation_rule_disabled_reason.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/cell_link_status.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/column_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/criteria_target.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/cross_sheet_reference_status.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/currency_code.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/day_descriptors.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/day_ordinal.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/event_action.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/event_object_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/event_source.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/global_template.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/operator.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/paper_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/predecessor_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/publish_accessible_by.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/schedule_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/seat_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/share_scope.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/share_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/sheet_email_format.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/sheet_filter_operator.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/sheet_filter_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/sort_direction.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/symbol.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/system_column_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/update_request_status.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/user_status.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/enums/widget_type.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/error.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/error_result.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/event.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/explicit_null.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/favorite.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/folder.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/font_family.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/format_details.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/format_tables.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/group.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/group_member.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/home.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/hyperlink.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/image.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/image_url.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/image_url_map.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/image_widget_content.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/json_object.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/multi_contact_object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/multi_picklist_object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/multi_row_email.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/number_object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/o_auth_error.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/paginated_children_result.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/predecessor.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/predecessor_list.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/primitive_object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/profile_image.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/project_settings.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/recipient.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/report.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/report_cell.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/report_column.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/report_publish.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/report_row.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/report_widget_content.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/row.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/row_email.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/row_mapping.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/schedule.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/scope.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/search_result.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/search_result_item.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/selection_range.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sent_update_request.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/server_info.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/share.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sheet.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sheet_email.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sheet_filter.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sheet_filter_details.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sheet_publish.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sheet_summary.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sheet_user_permissions.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sheet_user_settings.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/shortcut_data_item.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/shortcut_widget_content.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sight.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sight_publish.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sort_criterion.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/sort_specifier.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/source.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/string_object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/summary_field.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/template.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/title_rich_text_widget_content.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/update_request.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/user.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/user_model.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/user_plan.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/user_profile.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/version.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/web_content_widget_content.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/webhook.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/webhook_secret.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/webhook_stats.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/webhook_subscope.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/widget.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/widget_content.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/widget_hyperlink.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/models/workspace.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/object_value.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/session.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/smartsheet.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/types.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet/util.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet_python_sdk.egg-info/dependency_links.txt +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet_python_sdk.egg-info/requires.txt +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/smartsheet_python_sdk.egg-info/top_level.txt +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/__init__.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/__init__.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/mock_api_test_helper.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_api_automation_rules.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_api_columns.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_api_folders.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_api_rows.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_api_sharing.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_api_sheets.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_api_sights.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_api_workspaces.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_change_agent.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/test_mock_serialization.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/users/common_test_constants.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/users/test_list_user_plans.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/users/test_list_users.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/users/test_remove_user_from_plan.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/mock_api/users/test_user_upgrade_downgrade.py +0 -0
- {smartsheet_python_sdk-3.5.6 → smartsheet_python_sdk-3.7.0}/tests/test_util_serialize_dict.py +0 -0
|
@@ -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
|
|
@@ -5,6 +5,21 @@ 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.7.0] - 2025-12-11
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Typing to all SDK service methods
|
|
15
|
+
|
|
16
|
+
## [3.6.0] - 2025-12-04
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Support for POST /2.0/users/{userId}/reactivate endpoint
|
|
21
|
+
- Support for POST /2.0/users/{userId}/deactivate endpoint
|
|
22
|
+
|
|
8
23
|
## [3.5.6] - 2025-11-18
|
|
9
24
|
|
|
10
25
|
### Removed
|
|
@@ -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
|
-
-
|
|
19
|
+
- **First, ensure there is a GitHub issue** describing the bug (see above).
|
|
14
20
|
|
|
15
|
-
-
|
|
21
|
+
- Open a new GitHub pull request with the patch, referencing the issue number.
|
|
22
|
+
|
|
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
|
-
-
|
|
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
|
|
|
@@ -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.
|
|
3
|
+
Version: 3.7.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,
|
|
@@ -19,11 +19,12 @@ from __future__ import absolute_import
|
|
|
19
19
|
|
|
20
20
|
import logging
|
|
21
21
|
import os.path
|
|
22
|
+
from typing import Union
|
|
22
23
|
|
|
23
24
|
import requests
|
|
24
25
|
|
|
25
26
|
from .util import fresh_operation
|
|
26
|
-
from .models import DownloadedFile, Error, ErrorResult
|
|
27
|
+
from .models import Attachment, DownloadedFile, Error, ErrorResult, IndexResult, Result
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
class Attachments:
|
|
@@ -35,7 +36,7 @@ class Attachments:
|
|
|
35
36
|
self._base = smartsheet_obj
|
|
36
37
|
self._log = logging.getLogger(__name__)
|
|
37
38
|
|
|
38
|
-
def attach_file_to_comment(self, sheet_id, comment_id, _file):
|
|
39
|
+
def attach_file_to_comment(self, sheet_id, comment_id, _file) -> Union[Result[Attachment], Error]:
|
|
39
40
|
"""Add a file to a Comment.
|
|
40
41
|
|
|
41
42
|
Args:
|
|
@@ -44,7 +45,7 @@ class Attachments:
|
|
|
44
45
|
_file (file): String or file stream object.
|
|
45
46
|
|
|
46
47
|
Returns:
|
|
47
|
-
Result
|
|
48
|
+
Union[Result[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
48
49
|
"""
|
|
49
50
|
if not all(val is not None for val in ["sheet_id", "comment_id", "_file"]):
|
|
50
51
|
raise ValueError(
|
|
@@ -66,7 +67,7 @@ class Attachments:
|
|
|
66
67
|
|
|
67
68
|
return response
|
|
68
69
|
|
|
69
|
-
def attach_file_to_row(self, sheet_id, row_id, _file):
|
|
70
|
+
def attach_file_to_row(self, sheet_id, row_id, _file) -> Union[Result[Attachment], Error]:
|
|
70
71
|
"""Add a file to the row.
|
|
71
72
|
|
|
72
73
|
Args:
|
|
@@ -75,7 +76,7 @@ class Attachments:
|
|
|
75
76
|
_file (file): String or file stream object.
|
|
76
77
|
|
|
77
78
|
Returns:
|
|
78
|
-
Result
|
|
79
|
+
Union[Result[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
79
80
|
"""
|
|
80
81
|
if not all(val is not None for val in ["sheet_id", "row_id", "_file"]):
|
|
81
82
|
raise ValueError(
|
|
@@ -97,7 +98,7 @@ class Attachments:
|
|
|
97
98
|
|
|
98
99
|
return response
|
|
99
100
|
|
|
100
|
-
def attach_file_to_sheet(self, sheet_id, _file):
|
|
101
|
+
def attach_file_to_sheet(self, sheet_id, _file) -> Union[Result[Attachment], Error]:
|
|
101
102
|
"""Attach a file to the specified Sheet.
|
|
102
103
|
|
|
103
104
|
Args:
|
|
@@ -105,7 +106,7 @@ class Attachments:
|
|
|
105
106
|
_file (file): String or file stream object.
|
|
106
107
|
|
|
107
108
|
Returns:
|
|
108
|
-
Result
|
|
109
|
+
Union[Result[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
109
110
|
"""
|
|
110
111
|
_op = fresh_operation("attach_file_to_sheet")
|
|
111
112
|
_op["method"] = "POST"
|
|
@@ -120,7 +121,7 @@ class Attachments:
|
|
|
120
121
|
|
|
121
122
|
return response
|
|
122
123
|
|
|
123
|
-
def attach_new_version(self, sheet_id, attachment_id, _file):
|
|
124
|
+
def attach_new_version(self, sheet_id, attachment_id, _file) -> Union[Result[Attachment], Error]:
|
|
124
125
|
"""Upload a new version of a file to a Sheet or Row.
|
|
125
126
|
|
|
126
127
|
Args:
|
|
@@ -129,7 +130,7 @@ class Attachments:
|
|
|
129
130
|
_file (file): String or file stream object.
|
|
130
131
|
|
|
131
132
|
Returns:
|
|
132
|
-
Result
|
|
133
|
+
Union[Result[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
133
134
|
"""
|
|
134
135
|
if not all(val is not None for val in ["sheet_id", "attachment_id", "_file"]):
|
|
135
136
|
raise ValueError(
|
|
@@ -155,7 +156,7 @@ class Attachments:
|
|
|
155
156
|
|
|
156
157
|
return response
|
|
157
158
|
|
|
158
|
-
def attach_url_to_comment(self, sheet_id, comment_id, attachment_obj):
|
|
159
|
+
def attach_url_to_comment(self, sheet_id, comment_id, attachment_obj) -> Union[Result[Attachment], Error]:
|
|
159
160
|
"""Add a URL to a Comment.
|
|
160
161
|
|
|
161
162
|
Attachment object for this request should be limited to the
|
|
@@ -185,7 +186,7 @@ class Attachments:
|
|
|
185
186
|
attachment_obj (Attachment): Attachment object.
|
|
186
187
|
|
|
187
188
|
Returns:
|
|
188
|
-
Result
|
|
189
|
+
Union[Result[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
189
190
|
"""
|
|
190
191
|
if not all(
|
|
191
192
|
val is not None for val in ["sheet_id", "comment_id", "attachment_obj"]
|
|
@@ -208,7 +209,7 @@ class Attachments:
|
|
|
208
209
|
|
|
209
210
|
return response
|
|
210
211
|
|
|
211
|
-
def attach_url_to_row(self, sheet_id, row_id, attachment_obj):
|
|
212
|
+
def attach_url_to_row(self, sheet_id, row_id, attachment_obj) -> Union[Result[Attachment], Error]:
|
|
212
213
|
"""Add a URL to a Row.
|
|
213
214
|
|
|
214
215
|
Attachment object for this request should be limited to the
|
|
@@ -238,7 +239,7 @@ class Attachments:
|
|
|
238
239
|
attachment_obj (Attachment): Attachment object.
|
|
239
240
|
|
|
240
241
|
Returns:
|
|
241
|
-
Result
|
|
242
|
+
Union[Result[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
242
243
|
"""
|
|
243
244
|
if not all(val is not None for val in ["sheet_id", "row_id", "attachment_obj"]):
|
|
244
245
|
raise ValueError(
|
|
@@ -259,7 +260,7 @@ class Attachments:
|
|
|
259
260
|
|
|
260
261
|
return response
|
|
261
262
|
|
|
262
|
-
def attach_url_to_sheet(self, sheet_id, attachment_obj):
|
|
263
|
+
def attach_url_to_sheet(self, sheet_id, attachment_obj) -> Union[Result[Attachment], Error]:
|
|
263
264
|
"""Add a URL to a Sheet.
|
|
264
265
|
|
|
265
266
|
Attachment object for this request should be limited to the
|
|
@@ -288,7 +289,7 @@ class Attachments:
|
|
|
288
289
|
attachment_obj (Attachment): Attachment object.
|
|
289
290
|
|
|
290
291
|
Returns:
|
|
291
|
-
Result
|
|
292
|
+
Union[Result[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
292
293
|
"""
|
|
293
294
|
_op = fresh_operation("attach_url_to_sheet")
|
|
294
295
|
_op["method"] = "POST"
|
|
@@ -302,7 +303,7 @@ class Attachments:
|
|
|
302
303
|
|
|
303
304
|
return response
|
|
304
305
|
|
|
305
|
-
def delete_attachment(self, sheet_id, attachment_id):
|
|
306
|
+
def delete_attachment(self, sheet_id, attachment_id) -> Union[Result[None], Error]:
|
|
306
307
|
"""Delete the specified Attachment.
|
|
307
308
|
|
|
308
309
|
Args:
|
|
@@ -310,7 +311,7 @@ class Attachments:
|
|
|
310
311
|
attachment_id (int): Attachment ID
|
|
311
312
|
|
|
312
313
|
Returns:
|
|
313
|
-
Result
|
|
314
|
+
Union[Result[None], Error]: The result of the operation, or an Error object if the request fails.
|
|
314
315
|
"""
|
|
315
316
|
_op = fresh_operation("delete_attachment")
|
|
316
317
|
_op["method"] = "DELETE"
|
|
@@ -322,7 +323,7 @@ class Attachments:
|
|
|
322
323
|
|
|
323
324
|
return response
|
|
324
325
|
|
|
325
|
-
def delete_attachment_versions(self, sheet_id, attachment_id):
|
|
326
|
+
def delete_attachment_versions(self, sheet_id, attachment_id) -> Union[Result[None], Error]:
|
|
326
327
|
"""Delete all versions of the specified Attachment.
|
|
327
328
|
|
|
328
329
|
Delete all versions of the attachment corresponding to the
|
|
@@ -333,7 +334,7 @@ class Attachments:
|
|
|
333
334
|
attachment_id (int): Attachment ID
|
|
334
335
|
|
|
335
336
|
Returns:
|
|
336
|
-
Result
|
|
337
|
+
Union[Result[None], Error]: The result of the operation, or an Error object if the request fails.
|
|
337
338
|
"""
|
|
338
339
|
_op = fresh_operation("delete_attachment_versions")
|
|
339
340
|
_op["method"] = "DELETE"
|
|
@@ -351,7 +352,7 @@ class Attachments:
|
|
|
351
352
|
|
|
352
353
|
return response
|
|
353
354
|
|
|
354
|
-
def get_attachment(self, sheet_id, attachment_id):
|
|
355
|
+
def get_attachment(self, sheet_id, attachment_id) -> Union[Attachment, Error]:
|
|
355
356
|
"""Fetch the specified Attachment.
|
|
356
357
|
|
|
357
358
|
Args:
|
|
@@ -359,7 +360,7 @@ class Attachments:
|
|
|
359
360
|
attachment_id (int): Attachment ID
|
|
360
361
|
|
|
361
362
|
Returns:
|
|
362
|
-
Attachment
|
|
363
|
+
Union[Attachment, Error]: The result of the operation, or an Error object if the request fails.
|
|
363
364
|
"""
|
|
364
365
|
_op = fresh_operation("get_attachment")
|
|
365
366
|
_op["method"] = "GET"
|
|
@@ -373,7 +374,7 @@ class Attachments:
|
|
|
373
374
|
|
|
374
375
|
def list_all_attachments(
|
|
375
376
|
self, sheet_id, page_size=None, page=None, include_all=None
|
|
376
|
-
):
|
|
377
|
+
) -> Union[IndexResult[Attachment], Error]:
|
|
377
378
|
"""Get a list of Attachments for a Sheet.
|
|
378
379
|
|
|
379
380
|
Get a list of all Attachments for the specified Sheet,
|
|
@@ -388,7 +389,7 @@ class Attachments:
|
|
|
388
389
|
(i.e. do not paginate).
|
|
389
390
|
|
|
390
391
|
Returns:
|
|
391
|
-
IndexResult
|
|
392
|
+
Union[IndexResult[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
392
393
|
"""
|
|
393
394
|
_op = fresh_operation("list_all_attachments")
|
|
394
395
|
_op["method"] = "GET"
|
|
@@ -406,7 +407,7 @@ class Attachments:
|
|
|
406
407
|
|
|
407
408
|
def list_attachment_versions(
|
|
408
409
|
self, sheet_id, attachment_id, page_size=None, page=None, include_all=None
|
|
409
|
-
):
|
|
410
|
+
) -> Union[IndexResult[Attachment], Error]:
|
|
410
411
|
"""Get a list of versions for an Attachment.
|
|
411
412
|
|
|
412
413
|
Get a list of all versions of the given Attachment ID, in
|
|
@@ -422,7 +423,7 @@ class Attachments:
|
|
|
422
423
|
(i.e. do not paginate).
|
|
423
424
|
|
|
424
425
|
Returns:
|
|
425
|
-
IndexResult
|
|
426
|
+
Union[IndexResult[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
426
427
|
"""
|
|
427
428
|
_op = fresh_operation("list_attachment_versions")
|
|
428
429
|
_op["method"] = "GET"
|
|
@@ -446,7 +447,7 @@ class Attachments:
|
|
|
446
447
|
|
|
447
448
|
def list_discussion_attachments(
|
|
448
449
|
self, sheet_id, discussion_id, page_size=None, page=None, include_all=None
|
|
449
|
-
):
|
|
450
|
+
) -> Union[IndexResult[Attachment], Error]:
|
|
450
451
|
"""Get a list of Attachments for the Sheet Discussion.
|
|
451
452
|
|
|
452
453
|
Get a list of all Attachments for the specified Sheet
|
|
@@ -462,7 +463,7 @@ class Attachments:
|
|
|
462
463
|
(i.e. do not paginate).
|
|
463
464
|
|
|
464
465
|
Returns:
|
|
465
|
-
IndexResult
|
|
466
|
+
Union[IndexResult[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
466
467
|
"""
|
|
467
468
|
_op = fresh_operation("list_discussion_attachments")
|
|
468
469
|
_op["method"] = "GET"
|
|
@@ -486,7 +487,7 @@ class Attachments:
|
|
|
486
487
|
|
|
487
488
|
def list_row_attachments(
|
|
488
489
|
self, sheet_id, row_id, page_size=None, page=None, include_all=None
|
|
489
|
-
):
|
|
490
|
+
) -> Union[IndexResult[Attachment], Error]:
|
|
490
491
|
"""Get a list of all Attachments for the specified Sheet Row.
|
|
491
492
|
|
|
492
493
|
Args:
|
|
@@ -499,7 +500,7 @@ class Attachments:
|
|
|
499
500
|
(i.e. do not paginate).
|
|
500
501
|
|
|
501
502
|
Returns:
|
|
502
|
-
IndexResult
|
|
503
|
+
Union[IndexResult[Attachment], Error]: The result of the operation, or an Error object if the request fails.
|
|
503
504
|
"""
|
|
504
505
|
_op = fresh_operation("list_row_attachments")
|
|
505
506
|
_op["method"] = "GET"
|