smartsheet-python-sdk 3.0.4__py2.py3-none-any.whl → 3.1.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
smartsheet/cells.py CHANGED
@@ -55,6 +55,7 @@ class Cells:
55
55
  page (int): Which page to return.
56
56
  include_all (bool): If true, include all results
57
57
  (i.e. do not paginate).
58
+ level (int): compatibility level
58
59
 
59
60
  Returns:
60
61
  IndexResult
smartsheet/folders.py CHANGED
@@ -22,6 +22,7 @@ import os.path
22
22
 
23
23
  from . import fresh_operation
24
24
  from .models.folder import Folder
25
+ from .util import deprecated
25
26
 
26
27
 
27
28
  class Folders:
@@ -173,9 +174,13 @@ class Folders:
173
174
 
174
175
  return response
175
176
 
177
+ @deprecated
176
178
  def get_folder(self, folder_id, include=None):
177
179
  """Get the specified Folder (and list its contents).
178
180
 
181
+ Deprecated: 3.1.0
182
+ Use `get_folder_metadata` and `get_folder_children` instead.
183
+
179
184
  Args:
180
185
  folder_id (int): Folder ID
181
186
  include (list[str]): A comma-separated list of
@@ -196,9 +201,13 @@ class Folders:
196
201
 
197
202
  return response
198
203
 
204
+ @deprecated
199
205
  def list_folders(self, folder_id, page_size=None, page=None, include_all=None):
200
206
  """Get a list of top-level child Folders within the specified Folder.
201
207
 
208
+ Deprecated: 3.1.0
209
+ Use `get_folder_children` with children_resource_types=['folders'] instead.
210
+
202
211
  Args:
203
212
  folder_id (int): Folder ID
204
213
  page_size (int): The maximum number of items to
@@ -272,6 +281,59 @@ class Folders:
272
281
 
273
282
  return response
274
283
 
284
+ def get_folder_metadata(self, folder_id, include=None):
285
+ """Get the metadata of a folder.
286
+
287
+ Args:
288
+ folder_id (int): Folder ID
289
+ include (list[str]): A list of optional elements to include
290
+ in the response. Valid list values: source.
291
+
292
+ Returns:
293
+ Folder
294
+ """
295
+ _op = fresh_operation("get_folder_metadata")
296
+ _op["method"] = "GET"
297
+ _op["path"] = "/folders/" + str(folder_id) + "/metadata"
298
+ _op["query_params"]["include"] = include
299
+
300
+ expected = "Folder"
301
+ prepped_request = self._base.prepare_request(_op)
302
+ response = self._base.request(prepped_request, expected, _op)
303
+
304
+ return response
305
+
306
+ def get_folder_children(self, folder_id, children_resource_types=None, include=None, last_key=None, max_items=None):
307
+ """Get the children of a folder.
308
+
309
+ Args:
310
+ folder_id (int): Folder ID
311
+ children_resource_types (list[str]): The types of the children resources.
312
+ If not provided, returns children of all types.
313
+ Valid list values: sheets, reports, sights, folders.
314
+ include (list[str]): A list of optional elements to include in the
315
+ response. Valid list values: source, ownerInfo.
316
+ last_key (str): The token from a previous request that will allow this one
317
+ to fetch the next page of results.
318
+ max_items (int): The maximum number of items to return in the response.
319
+
320
+ Returns:
321
+ PaginatedChildrenResult
322
+ """
323
+ _op = fresh_operation("get_folder_children")
324
+ _op["method"] = "GET"
325
+ _op["path"] = "/folders/" + str(folder_id) + "/children"
326
+ _op["query_params"]["childrenResourceTypes"] = children_resource_types
327
+ _op["query_params"]["include"] = include
328
+ _op["query_params"]["lastKey"] = last_key
329
+ _op["query_params"]["maxItems"] = max_items
330
+
331
+ expected = "PaginatedChildrenResult"
332
+ prepped_request = self._base.prepare_request(_op)
333
+ response = self._base.request(prepped_request, expected, _op)
334
+
335
+ return response
336
+
275
337
  def import_csv_sheet(
276
338
  self,
277
339
  folder_id,
smartsheet/home.py CHANGED
@@ -22,6 +22,7 @@ import logging
22
22
  from . import fresh_operation
23
23
  from .models.folder import Folder
24
24
  from .models.sheet import Sheet
25
+ from .util import deprecated
25
26
 
26
27
 
27
28
  class Home:
@@ -33,6 +34,7 @@ class Home:
33
34
  self._base = smartsheet_obj
34
35
  self._log = logging.getLogger(__name__)
35
36
 
37
+ @deprecated
36
38
  def create_folder(self, folder_obj):
37
39
  """Creates a Folder in the user's Sheets folder (Home).
38
40
 
@@ -57,6 +59,7 @@ class Home:
57
59
 
58
60
  return response
59
61
 
62
+ @deprecated
60
63
  def create_sheet(self, sheet_obj):
61
64
  """Create a Sheet from scratch in the user's Sheets folder within
62
65
  Home.
@@ -82,6 +85,7 @@ class Home:
82
85
 
83
86
  return response
84
87
 
88
+ @deprecated
85
89
  def create_sheet_from_template(self, sheet_obj, include=None):
86
90
  """Create a Sheet in the Sheets folder from the specified Template.
87
91
 
@@ -118,6 +122,7 @@ class Home:
118
122
 
119
123
  return response
120
124
 
125
+ @deprecated
121
126
  def list_all_contents(self, include=None, exclude=None):
122
127
  """Get a nested list of all Home objects, including Sheets,
123
128
  Workspaces, Folders, Reports and Templates.
@@ -145,6 +150,7 @@ class Home:
145
150
 
146
151
  return response
147
152
 
153
+ @deprecated
148
154
  def list_folders(self, page_size=None, page=None, include_all=None):
149
155
  """Gets a list of top-level child Folders within the user's Sheets
150
156
  folder.
@@ -73,6 +73,8 @@ from .multi_row_email import MultiRowEmail
73
73
  from .number_object_value import NumberObjectValue
74
74
  from .o_auth_error import OAuthError
75
75
  from .object_value import ObjectValue
76
+ from .paginated_children_result import PaginatedChildrenResult
77
+ from .token_paginated_result import TokenPaginatedResult
76
78
  from .predecessor import Predecessor
77
79
  from .predecessor_list import PredecessorList
78
80
  from .project_settings import ProjectSettings
@@ -26,10 +26,10 @@ from .object_value import ObjectValue, six
26
26
 
27
27
 
28
28
  class DatetimeObjectValue(ObjectValue):
29
- """Smartsheet DateObjectValue data model."""
29
+ """Smartsheet DatetimeObjectValue data model."""
30
30
 
31
31
  def __init__(self, props=None, object_type=None, base_obj=None):
32
- """Initialize the DateObjectValue model."""
32
+ """Initialize the DatetimeObjectValue model."""
33
33
  super().__init__(object_type, base_obj)
34
34
  self._base = None
35
35
  if base_obj is not None:
@@ -17,11 +17,12 @@
17
17
 
18
18
  from __future__ import absolute_import
19
19
 
20
- from ..types import Boolean, Number, String, TypedList, json
20
+ from ..types import Boolean, Number, String, Timestamp, TypedList, TypedObject, json
21
21
  from ..util import deserialize, serialize
22
22
  from .report import Report
23
23
  from .sheet import Sheet
24
24
  from .sight import Sight
25
+ from .source import Source
25
26
  from .template import Template
26
27
 
27
28
 
@@ -35,14 +36,17 @@ class Folder:
35
36
  if base_obj is not None:
36
37
  self._base = base_obj
37
38
 
39
+ self._created_at = Timestamp()
38
40
  self._favorite = Boolean()
39
41
  self._folders = TypedList(Folder)
40
42
  self._id_ = Number()
43
+ self._modified_at = Timestamp()
41
44
  self._name = String()
42
45
  self._permalink = String()
43
46
  self._reports = TypedList(Report)
44
47
  self._sheets = TypedList(Sheet)
45
48
  self._sights = TypedList(Sight)
49
+ self._source = TypedObject(Source)
46
50
  self._templates = TypedList(Template)
47
51
 
48
52
  if props:
@@ -64,6 +68,14 @@ class Folder:
64
68
  else:
65
69
  super().__setattr__(key, value)
66
70
 
71
+ @property
72
+ def created_at(self):
73
+ return self._created_at.value
74
+
75
+ @created_at.setter
76
+ def created_at(self, value):
77
+ self._created_at.value = value
78
+
67
79
  @property
68
80
  def favorite(self):
69
81
  return self._favorite.value
@@ -88,6 +100,14 @@ class Folder:
88
100
  def id_(self, value):
89
101
  self._id_.value = value
90
102
 
103
+ @property
104
+ def modified_at(self):
105
+ return self._modified_at.value
106
+
107
+ @modified_at.setter
108
+ def modified_at(self, value):
109
+ self._modified_at.value = value
110
+
91
111
  @property
92
112
  def name(self):
93
113
  return self._name.value
@@ -128,6 +148,14 @@ class Folder:
128
148
  def sights(self, value):
129
149
  self._sights.load(value)
130
150
 
151
+ @property
152
+ def source(self):
153
+ return self._source.value
154
+
155
+ @source.setter
156
+ def source(self, value):
157
+ self._source.value = value
158
+
131
159
  @property
132
160
  def templates(self):
133
161
  return self._templates
@@ -17,7 +17,7 @@
17
17
 
18
18
  from __future__ import absolute_import
19
19
 
20
- from ..types import Number, TypedList, importlib, json
20
+ from ..types import Number, TypedList, importlib, json, String
21
21
  from ..util import deserialize, serialize
22
22
 
23
23
 
@@ -40,6 +40,7 @@ class IndexResult:
40
40
  self._page_size = Number()
41
41
  self._total_count = Number()
42
42
  self._total_pages = Number()
43
+ self._last_key = String()
43
44
 
44
45
  if props:
45
46
  deserialize(self, props)
@@ -94,6 +95,14 @@ class IndexResult:
94
95
  def total_pages(self, value):
95
96
  self._total_pages.value = value
96
97
 
98
+ @property
99
+ def last_key(self):
100
+ return self._last_key.value
101
+
102
+ @last_key.setter
103
+ def last_key(self, value):
104
+ self._last_key.value = value
105
+
97
106
  @property
98
107
  def result(self):
99
108
  """Simplify difference between Result and IndexResult"""
@@ -0,0 +1,80 @@
1
+ # pylint: disable=C0111,R0902,R0904,R0912,R0913,R0915,E1101
2
+ # Smartsheet Python SDK.
3
+ #
4
+ # Copyright 2018 Smartsheet.com, Inc.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License"): you may
7
+ # not use this file except in compliance with the License. You may obtain
8
+ # a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15
+ # License for the specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ from __future__ import absolute_import
19
+
20
+ from typing import Union
21
+ from ..util import deserialize
22
+ from .token_paginated_result import TokenPaginatedResult
23
+ from .folder import Folder
24
+ from .sheet import Sheet
25
+ from .sight import Sight
26
+ from .report import Report
27
+
28
+ # Type alias for children that can be any of these types
29
+ ChildType = Union[Folder, Sheet, Sight, Report]
30
+
31
+
32
+ class PaginatedChildrenResult(TokenPaginatedResult[ChildType]):
33
+ """Smartsheet PaginatedChildrenResult that deserializes mixed children based on resourceType."""
34
+
35
+ def __init__(self, props=None, base_obj=None):
36
+ """Initialize the PaginatedChildrenResult model."""
37
+ super().__init__(props=None, base_obj=base_obj)
38
+
39
+ if props:
40
+ self._deserialize_data(props)
41
+ deserialize(self, props)
42
+
43
+ def _deserialize_data(self, props):
44
+ """Custom deserialization for data array based on resourceType."""
45
+ if 'data' in props:
46
+ self._data = []
47
+ for item in props['data']:
48
+ self.append_data(item)
49
+
50
+ def append_data(self, item):
51
+ """Append data item, converting to appropriate model based on resourceType."""
52
+ # Get resource type from either dict or object
53
+ if isinstance(item, dict):
54
+ resource_type = item.get('resourceType', '').lower()
55
+ else:
56
+ resource_type = getattr(item, 'resourceType', '').lower()
57
+
58
+ # Convert to appropriate model object based on resource type
59
+ if resource_type == 'folder':
60
+ self._data.append(Folder(item, self._base))
61
+ elif resource_type == 'sheet':
62
+ self._data.append(Sheet(item, self._base))
63
+ elif resource_type == 'sight':
64
+ self._data.append(Sight(item, self._base))
65
+ elif resource_type == 'report':
66
+ self._data.append(Report(item, self._base))
67
+ else:
68
+ # If no resource type or unknown type, append as-is
69
+ self._data.append(item)
70
+
71
+ @property
72
+ def data(self):
73
+ return self._data
74
+
75
+ @data.setter
76
+ def data(self, value):
77
+ """Custom setter that handles deserialization of mixed resource types."""
78
+ self._data = []
79
+ for item in value:
80
+ self.append_data(item)
@@ -31,7 +31,7 @@ class Source:
31
31
  if base_obj is not None:
32
32
  self._base = base_obj
33
33
 
34
- self.allowed_values = {"_type": ["report", "sheet", "sight", "template"]}
34
+ self.allowed_values = {"_type": ["folder", "report", "sheet", "sight", "template", "workspace"]}
35
35
 
36
36
  self._id_ = Number()
37
37
  self._type_ = String(accept=self.allowed_values["_type"])
@@ -0,0 +1,68 @@
1
+ # pylint: disable=C0111,R0902,R0904,R0912,R0913,R0915,E1101
2
+ # Smartsheet Python SDK.
3
+ #
4
+ # Copyright 2018 Smartsheet.com, Inc.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License"): you may
7
+ # not use this file except in compliance with the License. You may obtain
8
+ # a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15
+ # License for the specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ from __future__ import absolute_import
19
+
20
+ from typing import TypeVar, Generic, List
21
+ from ..types import String, json
22
+ from ..util import deserialize, serialize
23
+
24
+ T = TypeVar('T')
25
+
26
+
27
+ class TokenPaginatedResult(Generic[T]):
28
+ """Smartsheet TokenPaginatedResult data model with generic type support."""
29
+
30
+ def __init__(self, props=None, base_obj=None):
31
+ """Initialize the TokenPaginatedResult model."""
32
+ self._base = None
33
+ if base_obj is not None:
34
+ self._base = base_obj
35
+
36
+ self._data = []
37
+ self._last_key = String()
38
+
39
+ if props:
40
+ deserialize(self, props)
41
+
42
+ self.request_response = None
43
+ self.__initialized = True
44
+
45
+ @property
46
+ def data(self) -> List[T]:
47
+ return self._data
48
+
49
+ @data.setter
50
+ def data(self, value):
51
+ self._data = value
52
+
53
+ @property
54
+ def last_key(self):
55
+ return self._last_key.value
56
+
57
+ @last_key.setter
58
+ def last_key(self, value):
59
+ self._last_key.value = value
60
+
61
+ def to_dict(self):
62
+ return serialize(self)
63
+
64
+ def to_json(self):
65
+ return json.dumps(self.to_dict())
66
+
67
+ def __str__(self):
68
+ return self.to_json()
@@ -17,13 +17,14 @@
17
17
 
18
18
  from __future__ import absolute_import
19
19
 
20
- from ..types import Boolean, EnumeratedValue, Number, String, TypedList, json
20
+ from ..types import Boolean, EnumeratedValue, Number, String, Timestamp, TypedList, TypedObject, json
21
21
  from ..util import deserialize, serialize
22
22
  from .enums import AccessLevel
23
23
  from .folder import Folder
24
24
  from .report import Report
25
25
  from .sheet import Sheet
26
26
  from .sight import Sight
27
+ from .source import Source
27
28
  from .template import Template
28
29
 
29
30
 
@@ -38,14 +39,17 @@ class Workspace:
38
39
  self._base = base_obj
39
40
 
40
41
  self._access_level = EnumeratedValue(AccessLevel)
42
+ self._created_at = Timestamp()
41
43
  self._favorite = Boolean()
42
44
  self._folders = TypedList(Folder)
43
45
  self._id_ = Number()
46
+ self._modified_at = Timestamp()
44
47
  self._name = String()
45
48
  self._permalink = String()
46
49
  self._reports = TypedList(Report)
47
50
  self._sheets = TypedList(Sheet)
48
51
  self._sights = TypedList(Sight)
52
+ self._source = TypedObject(Source)
49
53
  self._templates = TypedList(Template)
50
54
 
51
55
  if props:
@@ -75,6 +79,14 @@ class Workspace:
75
79
  def access_level(self, value):
76
80
  self._access_level.set(value)
77
81
 
82
+ @property
83
+ def created_at(self):
84
+ return self._created_at.value
85
+
86
+ @created_at.setter
87
+ def created_at(self, value):
88
+ self._created_at.value = value
89
+
78
90
  @property
79
91
  def favorite(self):
80
92
  return self._favorite.value
@@ -99,6 +111,14 @@ class Workspace:
99
111
  def id_(self, value):
100
112
  self._id_.value = value
101
113
 
114
+ @property
115
+ def modified_at(self):
116
+ return self._modified_at.value
117
+
118
+ @modified_at.setter
119
+ def modified_at(self, value):
120
+ self._modified_at.value = value
121
+
102
122
  @property
103
123
  def name(self):
104
124
  return self._name.value
@@ -139,6 +159,14 @@ class Workspace:
139
159
  def sights(self, value):
140
160
  self._sights.load(value)
141
161
 
162
+ @property
163
+ def source(self):
164
+ return self._source.value
165
+
166
+ @source.setter
167
+ def source(self, value):
168
+ self._source.value = value
169
+
142
170
  @property
143
171
  def templates(self):
144
172
  return self._templates
smartsheet/reports.py CHANGED
@@ -69,6 +69,7 @@ class Reports:
69
69
  include (list[str]): A comma-separated list of
70
70
  optional elements to include in the response. Valid list values:
71
71
  attachments, discussions, format, objectValue, scope, source, sourceSheets.
72
+ level (int): compatibility level
72
73
 
73
74
  Returns:
74
75
  Report
smartsheet/sheets.py CHANGED
@@ -534,6 +534,7 @@ class Sheets:
534
534
  page (int): Which page to return.
535
535
  if_version_after (int): only fetch Sheet if more recent version
536
536
  available.
537
+ level (int): compatibility level
537
538
  rows_modified_since: Date should be in ISO-8601 format, for example, rowsModifiedSince=2020-01-30T13:25:32-07:00.
538
539
  filter_id (int): Applies the given filter (if accessible by the calling user)
539
540
  and marks the affected rows as "filteredOut": true
@@ -1620,6 +1621,7 @@ class Sheets:
1620
1621
  Args:
1621
1622
  sheet_id (int): Sheet ID
1622
1623
  sort_specifier_obj (SortSpecifier): SortSpecifier object
1624
+ level (int): compatibility level
1623
1625
 
1624
1626
  Returns:
1625
1627
  Sheet
smartsheet/smartsheet.py CHANGED
@@ -520,9 +520,25 @@ class OperationResult:
520
520
  if expected != "DownloadedFile":
521
521
  data = self.resp.json()
522
522
  else:
523
- filename = re.findall(
524
- 'filename="(.+)";', self.resp.headers["Content-Disposition"]
525
- )
523
+ # default
524
+ filename = ["download"]
525
+
526
+ if "Content-Disposition" in self.resp.headers:
527
+ # use the provided filename
528
+ filename = re.findall(
529
+ 'filename="(.+)";', self.resp.headers["Content-Disposition"]
530
+ )
531
+ else:
532
+ content_type = self.resp.headers.get("Content-Type", "")
533
+ if content_type in [
534
+ "application/vnd.ms-excel",
535
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
536
+ ]:
537
+ filename[0] += ".xlsx"
538
+ elif content_type == "application/pdf":
539
+ filename[0] += ".pdf"
540
+ elif content_type == "text/csv":
541
+ filename[0] += ".csv"
526
542
 
527
543
  data = {
528
544
  "resultCode": 0,
smartsheet/version.py CHANGED
@@ -1,16 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- TYPE_CHECKING = False
4
- if TYPE_CHECKING:
5
- from typing import Tuple, Union
6
- VERSION_TUPLE = Tuple[Union[int, str], ...]
7
- else:
8
- VERSION_TUPLE = object
9
-
10
- version: str
11
- __version__: str
12
- __version_tuple__: VERSION_TUPLE
13
- version_tuple: VERSION_TUPLE
14
-
15
- __version__ = version = '3.0.4'
16
- __version_tuple__ = version_tuple = (3, 0, 4)
3
+ __version__ = version = '3.1.0'
4
+ __version_tuple__ = version_tuple = (3, 1, 0)
smartsheet/workspaces.py CHANGED
@@ -19,9 +19,12 @@ from __future__ import absolute_import
19
19
 
20
20
  import logging
21
21
  import os.path
22
+ import warnings
23
+ from typing import Optional, Union
22
24
 
23
25
  from . import fresh_operation
24
26
  from .models.folder import Folder
27
+ from .util import deprecated
25
28
 
26
29
 
27
30
  class Workspaces:
@@ -235,9 +238,13 @@ class Workspaces:
235
238
 
236
239
  return response
237
240
 
241
+ @deprecated
238
242
  def get_workspace(self, workspace_id, load_all=False, include=None):
239
243
  """Get the specified Workspace and list its contents.
240
244
 
245
+ Deprecated: 3.1.0
246
+ Use `get_workspace_metadata` and `get_workspace_children` instead.
247
+
241
248
  Get the specified Workspace and list its contents. By
242
249
  default, this operation only returns top-level items in the
243
250
  Workspace. To load all of the contents, including nested Folders,
@@ -266,10 +273,14 @@ class Workspaces:
266
273
 
267
274
  return response
268
275
 
276
+ @deprecated
269
277
  def list_folders(self, workspace_id, page_size=None, page=None, include_all=None):
270
278
  """Get a list of top-level child Folders within the specified
271
279
  Workspace.
272
280
 
281
+ Deprecated: 3.1.0
282
+ Use `get_workspace_children` with children_resource_types=['folders'] instead.
283
+
273
284
  Args:
274
285
  workspace_id (int): Workspace ID
275
286
  page_size (int): The maximum number of items to
@@ -323,25 +334,75 @@ class Workspaces:
323
334
 
324
335
  return response
325
336
 
326
- def list_workspaces(self, page_size=None, page=None, include_all=None):
337
+ def list_workspaces(
338
+ self,
339
+ page_size: Optional[int] = None,
340
+ page: Optional[int] = None,
341
+ include_all: Optional[bool] = None,
342
+ last_key: Optional[str] = None,
343
+ max_items: Optional[int] = None,
344
+ pagination_type: Optional[str] = None
345
+ ):
327
346
  """Get the list of Workspaces the authenticated User may access.
328
-
329
347
  Args:
330
- page_size (int): The maximum number of items to
331
- return per page.
332
- page (int): Which page to return.
333
- include_all (bool): If true, include all results
334
- (i.e. do not paginate).
348
+ page_size (int, optional): [DEPRECATED] The maximum number of items to
349
+ return per page. Use pagination_type='token' with max_items instead.
350
+ page (int, optional): [DEPRECATED] Which page to return.
351
+ Use pagination_type='token' with last_key instead.
352
+ include_all (bool, optional): [DEPRECATED] If true, include all results
353
+ (i.e. do not paginate). Use pagination_type='token' instead.
354
+ last_key (str, optional): Pagination cursor for next page (token pagination only).
355
+ max_items (int, optional): Maximum items per page (token pagination only).
356
+ Must be a positive integer.
357
+ pagination_type (str, optional): Use 'token' for efficient cursor-based pagination.
358
+ Defaults to legacy offset-based pagination if not specified.
335
359
 
336
360
  Returns:
337
- IndexResult
361
+ IndexResult: When pagination_type='token', contains 'data' and 'last_key' attributes.
362
+ When using legacy pagination, contains paginated results with
363
+ total_count, total_pages, etc.
364
+
365
+ Raises:
366
+ ValueError: If pagination_type is not 'token' or None, or if max_items <= 0
367
+ when using token pagination.
338
368
  """
369
+ # Parameter validation
370
+ if pagination_type is not None and pagination_type not in ['token']:
371
+ raise ValueError("pagination_type must be 'token' or None")
372
+ if pagination_type == 'token' and max_items is not None and max_items <= 0:
373
+ raise ValueError("max_items must be a positive integer")
339
374
  _op = fresh_operation("list_workspaces")
340
375
  _op["method"] = "GET"
341
376
  _op["path"] = "/workspaces"
342
- _op["query_params"]["pageSize"] = page_size
343
- _op["query_params"]["page"] = page
344
- _op["query_params"]["includeAll"] = include_all
377
+
378
+ # Issue deprecation warnings for old parameters when used
379
+ if page_size is not None:
380
+ warnings.warn(
381
+ "page_size parameter is deprecated. Use pagination_type='token' with max_items instead.",
382
+ DeprecationWarning,
383
+ stacklevel=2
384
+ )
385
+ if page is not None:
386
+ warnings.warn(
387
+ "page parameter is deprecated. Use pagination_type='token' with last_key instead.",
388
+ DeprecationWarning,
389
+ stacklevel=2
390
+ )
391
+ if include_all is not None:
392
+ warnings.warn(
393
+ "include_all parameter is deprecated. Use pagination_type='token' instead.",
394
+ DeprecationWarning,
395
+ stacklevel=2
396
+ )
397
+
398
+ if pagination_type == "token":
399
+ _op["query_params"]["lastKey"] = last_key
400
+ _op["query_params"]["maxItems"] = max_items
401
+ _op["query_params"]["paginationType"] = pagination_type
402
+ else:
403
+ _op["query_params"]["pageSize"] = page_size
404
+ _op["query_params"]["page"] = page
405
+ _op["query_params"]["includeAll"] = include_all
345
406
 
346
407
  expected = ["IndexResult", "Workspace"]
347
408
 
@@ -429,6 +490,59 @@ class Workspaces:
429
490
 
430
491
  return response
431
492
 
493
+ def get_workspace_metadata(self, workspace_id, include=None):
494
+ """Get metadata of a workspace.
495
+
496
+ Args:
497
+ workspace_id (int): Workspace ID
498
+ include (list[str]): A list of optional elements to include
499
+ in the response. Valid list values: source
500
+
501
+ Returns:
502
+ Workspace
503
+ """
504
+ _op = fresh_operation("get_workspace_metadata")
505
+ _op["method"] = "GET"
506
+ _op["path"] = "/workspaces/" + str(workspace_id) + "/metadata"
507
+ _op["query_params"]["include"] = include
508
+
509
+ expected = "Workspace"
510
+ prepped_request = self._base.prepare_request(_op)
511
+ response = self._base.request(prepped_request, expected, _op)
512
+
513
+ return response
514
+
515
+ def get_workspace_children(self, workspace_id, children_resource_types=None, include=None, last_key=None, max_items=None):
516
+ """Get children of a workspace.
517
+
518
+ Args:
519
+ workspace_id (int): Workspace ID
520
+ children_resource_types (list[str]): The types of the children resources.
521
+ If not provided, returns children of all types.
522
+ Valid list values: sheets, reports, sights, folders.
523
+ include (list[str]): A list of optional elements to include in the response.
524
+ Valid list values: source, ownerInfo.
525
+ last_key (str): The token from a previous request that will allow this one
526
+ to fetch the next page of results.
527
+ max_items (int): The maximum number of items to return in the response.
528
+
529
+ Returns:
530
+ PaginatedChildrenResult
531
+ """
532
+ _op = fresh_operation("get_workspace_children")
533
+ _op["method"] = "GET"
534
+ _op["path"] = "/workspaces/" + str(workspace_id) + "/children"
535
+ _op["query_params"]["childrenResourceTypes"] = children_resource_types
536
+ _op["query_params"]["include"] = include
537
+ _op["query_params"]["lastKey"] = last_key
538
+ _op["query_params"]["maxItems"] = max_items
539
+
540
+ expected = "PaginatedChildrenResult"
541
+ prepped_request = self._base.prepare_request(_op)
542
+ response = self._base.request(prepped_request, expected, _op)
543
+
544
+ return response
545
+
432
546
  def import_csv_sheet(
433
547
  self,
434
548
  workspace_id,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: smartsheet-python-sdk
3
- Version: 3.0.4
3
+ Version: 3.1.0
4
4
  Summary: Library that uses Python to connect to Smartsheet services (using API 2.0).
5
5
  Home-page: http://smartsheet-platform.github.io/api-docs/
6
6
  Author: Smartsheet
@@ -24,18 +24,18 @@ License-File: LICENSE.md
24
24
  License-File: NOTICE
25
25
  Requires-Dist: requests
26
26
  Requires-Dist: requests-toolbelt
27
- Requires-Dist: six >=1.9
27
+ Requires-Dist: six>=1.9
28
28
  Requires-Dist: certifi
29
29
  Requires-Dist: python-dateutil
30
30
  Provides-Extra: develop
31
- Requires-Dist: coverage ; extra == 'develop'
32
- Requires-Dist: coveralls[yaml] ; extra == 'develop'
33
- Requires-Dist: pytest ; extra == 'develop'
34
- Requires-Dist: pytest-instafail ; extra == 'develop'
31
+ Requires-Dist: coverage; extra == "develop"
32
+ Requires-Dist: coveralls[yaml]; extra == "develop"
33
+ Requires-Dist: pytest; extra == "develop"
34
+ Requires-Dist: pytest-instafail; extra == "develop"
35
35
  Provides-Extra: test
36
- Requires-Dist: coverage ; extra == 'test'
37
- Requires-Dist: coveralls ; extra == 'test'
38
- Requires-Dist: pytest ; extra == 'test'
36
+ Requires-Dist: coverage; extra == "test"
37
+ Requires-Dist: coveralls; extra == "test"
38
+ Requires-Dist: pytest; extra == "test"
39
39
 
40
40
  # Smartsheet Python SDK
41
41
 
@@ -1,33 +1,33 @@
1
1
  smartsheet/__init__.py,sha256=h2TD_nYTxqa7lcKb_mOIa-DMQN-pYaGk1Du0U3IVMyA,1152
2
2
  smartsheet/attachments.py,sha256=eZ1y5jS_TJSyZzzapc68ol1qhrLxCXc2sY8l8oY1Gvo,17865
3
- smartsheet/cells.py,sha256=juLA85Zdyt5KfvDLdFkvEJ6S635JMTJs8Xhb2CchCPw,4800
3
+ smartsheet/cells.py,sha256=1BCBps0mV9FV_nmdtsP5j7jT0avTVIfbYSAhnOqzlwM,4845
4
4
  smartsheet/contacts.py,sha256=IBV3ncoP7R7GmzQI0H1CIwq4scGk9iBC1ayyQ927YrQ,2383
5
5
  smartsheet/discussions.py,sha256=n0mbARczzdBkw83ZPKcNABp5j6AQLZPUHkKAZOK5q1Y,13110
6
6
  smartsheet/events.py,sha256=MKASwB9BF5AeEMC7Qx-YPKpd9yjs6UCWwilBC8RZDgA,3417
7
7
  smartsheet/exceptions.py,sha256=ISCV4fIAkYgcYMsZL62zDr48qIPPok6N4myifej2M4c,3894
8
8
  smartsheet/favorites.py,sha256=8D1o1YCmzie43cNvSVwuDKdUnRaEV8-1PiIimNcQkp0,3921
9
- smartsheet/folders.py,sha256=GLFtMe7IXQmaf7jhrWWwnSrDn60sueG-oISspsY5e_A,12011
9
+ smartsheet/folders.py,sha256=GemtQiqLnuc2beU-VKqbGRAz5Ec8brUWfhyFeAFoIPY,14441
10
10
  smartsheet/groups.py,sha256=Sk9mhsR9KtIKTTX8SzqIyagz93rSr5z_5G19fn1eAoI,5325
11
- smartsheet/home.py,sha256=KDCUQMj-AWkZa2Eshm0rNdbQ614UsxMgfH7picSSNHI,5541
11
+ smartsheet/home.py,sha256=u0Ioz59TiNQRf-u5N6s3ZQTuaW3Ck4FJIT04nbSoJt8,5650
12
12
  smartsheet/images.py,sha256=Pts20YXCsZ06JGC6av3mk2je_kbcM11b9lO7L11mJoc,1872
13
13
  smartsheet/object_value.py,sha256=dcPFZEPpqAiZsBRUawozLSSlVjxGBWTT3VXvsRYso8Q,3129
14
14
  smartsheet/passthrough.py,sha256=k4p_3Kk7ISApNNFLDicVN5KYL0ll2AA4eAgX2cjnlzg,3950
15
- smartsheet/reports.py,sha256=6lGoF0aijgwHCPcPeLhwUiWqYFmoR2xkbJg3YHQ0UCM,12790
15
+ smartsheet/reports.py,sha256=0B5bdQwVJHwu-V04aMSJ-Y7HaILK4rgjjMtn0--kcig,12835
16
16
  smartsheet/search.py,sha256=ffy1dkVl3GtuYgCxvuR-vwahOBWIehGv_zwzLoJMimA,3394
17
17
  smartsheet/server.py,sha256=9wySsa_y_G-VO88tEHGHp919zRVFS0kCFIhiM6crWEU,1429
18
18
  smartsheet/session.py,sha256=TQ3IgVZ64r7Dszwo8rMISFezWxuwFYshhW9QhzoA428,2125
19
- smartsheet/sheets.py,sha256=Tk1-llyfoTaVZybpBCOskR75cTF_tFhE3EIducCumsA,70060
19
+ smartsheet/sheets.py,sha256=0JVg4N3u3z9ngnIeRnjo8fUejfXhcQLYmQXCyw207dk,70150
20
20
  smartsheet/sights.py,sha256=IZgy8CJZBJ-pQo6vNwkDSBuoLCv5RAW39kNUMMNJ-oc,11569
21
- smartsheet/smartsheet.py,sha256=01NgYLZkn83BrOhuoPYkNEnjRacJniLrMJ-jIxgVs4E,22658
21
+ smartsheet/smartsheet.py,sha256=wOBejFgIh_xQu1KuIlh9ZAsq2OxG8EIWUqtBQpmz1y4,23408
22
22
  smartsheet/templates.py,sha256=z_Tj-4jZsu3RkLNbCAZWM2W05Zbio9T_uyU33rUPxzE,2898
23
23
  smartsheet/token.py,sha256=5uz-IG5adx_zr2-uepH-W8ATv0dq9aZNjYLeZNwldqI,4703
24
24
  smartsheet/types.py,sha256=aIdRJ89jwclmiZ4RH3hnZHJTFWFxgNKW3d8fghm21eM,9126
25
25
  smartsheet/users.py,sha256=3LyC7BsPLa3dAg5EXaGswgXq0O8s77nsE0sSkjLfRe8,12775
26
26
  smartsheet/util.py,sha256=12Y6eluecB8k4Ns-at81AEM18ND2TCKa9bF4BlNRrKM,5633
27
- smartsheet/version.py,sha256=yyqcyuVbO5Bq7rMS_oAT4a92vlOM2Jk4fCNagNkWYJk,411
27
+ smartsheet/version.py,sha256=PYsCm3eHh5hgAf1b_gyIJMMHI2nMMwbcDKC3cw7zARs,160
28
28
  smartsheet/webhooks.py,sha256=7F7g4Ks0GyS3QxsNWm1SFtrOr00jBisCjj7-hcToHM8,4637
29
- smartsheet/workspaces.py,sha256=u67WtvWFEgXRBNVFPXeNHnim2BymFaBz3v6q6wDHYOg,17550
30
- smartsheet/models/__init__.py,sha256=gdk_4O22uy8m4yStECUiGzNnxqMqFonPskJGbB5AIwo,4602
29
+ smartsheet/workspaces.py,sha256=r81xh3HfYsX--ll5pQ-h7kSSJELokYV-bSjuD0WloeU,22651
30
+ smartsheet/models/__init__.py,sha256=8Jq9aT_mTbqla7BDuHCiTDB1mhATq0TbNFKQGgaxgcc,4722
31
31
  smartsheet/models/access_token.py,sha256=sKHL5cFRWPTjymX06ZIXaCDp8ZJQEVpXN8mns1DAvGM,2564
32
32
  smartsheet/models/account.py,sha256=nLg_5O4Vnc7aNf9p1kIcsgdAm23IC2H7cKkxjLxwS9U,1941
33
33
  smartsheet/models/alternate_email.py,sha256=n8zqWkY-uzSw_CVKBvYUc6pGSR0v4yTx8S5PaIiX_AU,2263
@@ -56,7 +56,7 @@ smartsheet/models/criteria.py,sha256=zk6Zxq1JkO3TVRGhenKPdupxlFJYLXRLe_eM0yns4IY
56
56
  smartsheet/models/cross_sheet_reference.py,sha256=rh5vhbkPGf20wOqQoGamERju0TkzMUXzcqYjw6ydOU8,3476
57
57
  smartsheet/models/currency.py,sha256=XHaEaLAvM5J8WRphwMc1ldY94Qfk_cFmmghx2uooeOA,1692
58
58
  smartsheet/models/date_object_value.py,sha256=YEKtiaY9yb-PzK1RlFA3yqYd932XAlVYuoXBVPcUsd0,1616
59
- smartsheet/models/datetime_object_value.py,sha256=zQkxrlMGeiXbdpRbplQxmLalh-BIud5Z-JBOnB4Hx2s,1644
59
+ smartsheet/models/datetime_object_value.py,sha256=uWH-YSOjy5P-BiavVMJFMkbcb5MEFTmyeqTAH5X25_k,1652
60
60
  smartsheet/models/discussion.py,sha256=ndazqRPjrmE1FV42czM9NDI1VFE78y8v8KhOlylJpd8,4790
61
61
  smartsheet/models/downloaded_file.py,sha256=8o6namCzPceSV_FbTzgywFu2JdOWiwll94pRFXftnGM,2869
62
62
  smartsheet/models/duration.py,sha256=jaHSGFUiAxbvQ1-McK3U1kKicgIHam4dV6DSAymL9r8,2767
@@ -67,7 +67,7 @@ smartsheet/models/event.py,sha256=GFs2nK2wPfPOCiRlu6qhn0Teu_b2-JcIdA7nlo_TDf0,40
67
67
  smartsheet/models/event_result.py,sha256=XN1TYx6RUPlXq6qHYvbRI2Pfm2-HcBs8WNmB5gzoGVQ,2560
68
68
  smartsheet/models/explicit_null.py,sha256=ajwJRTseizgnf2ZY0qf5k97zvNTm033bKduA1OGCm0M,774
69
69
  smartsheet/models/favorite.py,sha256=BTQumH0o-MQ93AS02qymyIxEVCR_CrwMWfuT0H051dc,2157
70
- smartsheet/models/folder.py,sha256=4pyUB13fyPEGfrhcgDXmpMjDQYxyX1EWQ2dQMFHln40,3642
70
+ smartsheet/models/folder.py,sha256=WOLaECb18w07tn5PuRpF0aNiovZ9I3B9oH5-1QMgoi8,4325
71
71
  smartsheet/models/font_family.py,sha256=32tBgd0w58dWco3goN4NZ9eMafaU3szzXYdQudGmeUM,1646
72
72
  smartsheet/models/format_details.py,sha256=DwVi1XpXq__lFa1WQHzciE9s8nJltUmfq9l7xTM4uec,1542
73
73
  smartsheet/models/format_tables.py,sha256=FwoZBr030PDZ1s2Z2Prfob1csHao5TyNKB2vlOttGPU,4765
@@ -79,7 +79,7 @@ smartsheet/models/image.py,sha256=EkoTNgg8dTo2cHBd1TmBI0l735nrxGiTMEM1cVRNFcQ,24
79
79
  smartsheet/models/image_url.py,sha256=NmUotfupHxj6F3UvqykhgjzhcSrtPYUXRfxxOovDqGQ,2261
80
80
  smartsheet/models/image_url_map.py,sha256=k3U1mykrlMsSPQxGa9AAC-erFfEMpvaL5nGp7stBZz0,1927
81
81
  smartsheet/models/image_widget_content.py,sha256=lWmhK9rIoG62rIGXDMnSswn09qPBICeCEk5lYxRCqdw,3098
82
- smartsheet/models/index_result.py,sha256=Bvkm-q1t9ykMzwAjvahZ8XmsMBTcUwFVHj5rky1fBDE,3028
82
+ smartsheet/models/index_result.py,sha256=OzLE8Hd57CJSbTCJSpHS5equd0N1HW9_NrrEaQivS_4,3235
83
83
  smartsheet/models/json_object.py,sha256=HDJeFcPhlLrhUyb2nMO2ARE9AaCmWXHJ_O3YUQ1vl3s,1572
84
84
  smartsheet/models/multi_contact_object_value.py,sha256=m59rDL0a3QXPYJ4Lz27ECeVji7IP5ptrCwhZBHFoBzc,1538
85
85
  smartsheet/models/multi_picklist_object_value.py,sha256=jDwPLZZYaFTob74r2SeJSp_4bFL7BAr_zjfPkZhyz7E,1475
@@ -87,6 +87,7 @@ smartsheet/models/multi_row_email.py,sha256=LXvLY7b9KIqubaFX9uLjh4JsUHIQgPg0O_oC
87
87
  smartsheet/models/number_object_value.py,sha256=m4s9dsDxIl-t6jPB0_sZtCL82EHBcc8yatXjyCCDGZY,1241
88
88
  smartsheet/models/o_auth_error.py,sha256=svDzW9mqdUnRD4g0lhrr0QQVvBHPqY6C1nZj7oPw8p4,2340
89
89
  smartsheet/models/object_value.py,sha256=YeKhWcL_y_lsSRdXEFdc14K9HG3FHFPJvAKGypWDAtE,3444
90
+ smartsheet/models/paginated_children_result.py,sha256=zcFUp7k8AQDbDLw-UWTZYkf6Gp8Z-v7LQWy9FPJ5ry4,2913
90
91
  smartsheet/models/predecessor.py,sha256=UjmBW_bTD7cAySPL-p5BrkcjNEQxkDizdgcr-KCuvM8,2629
91
92
  smartsheet/models/predecessor_list.py,sha256=OYfrr_P4YkdDRNU6IUGL1ZN75yWyejCNx_q7rGdzIx0,1523
92
93
  smartsheet/models/primitive_object_value.py,sha256=LaO7zBnVPZIXXEqS_oGSLi6XaulTiw9dK6-bM8pEYXc,1563
@@ -125,11 +126,12 @@ smartsheet/models/sight.py,sha256=braCa6b4GX-3XS7PpNJxnLUcoFxRy1XsauGjs_lVKTE,43
125
126
  smartsheet/models/sight_publish.py,sha256=kzYJ2v4Klw28bOZmnlDG0c5HkUXZ5R7F_mc7DXB6oX0,2342
126
127
  smartsheet/models/sort_criterion.py,sha256=VwQwDZrqeEqoahpAqf7PJWEUogqcEhH-owV89EAbqsQ,1757
127
128
  smartsheet/models/sort_specifier.py,sha256=1wR3RX7xSQni2jzSkid1OS7swSUyDJay46nWOeN_zTQ,1566
128
- smartsheet/models/source.py,sha256=L1fx9027hoPyd7NefYTaqaDGUY7QwqYCmoR6CM_eQCE,2179
129
+ smartsheet/models/source.py,sha256=9Yko05-2BaTZBG8JgQWqZyvTOFMmWI9yndBak12_D1Q,2202
129
130
  smartsheet/models/string_object_value.py,sha256=GPMIAA1utIefw4VVsHWcT5y5GBK9Z9FC4dc3qua4Px0,1241
130
131
  smartsheet/models/summary_field.py,sha256=QdVYD2XleUKkprVAxOJ6dfTbZo8w7sSTj2p_wj2Ue2E,6341
131
132
  smartsheet/models/template.py,sha256=Up5yM3Q02-8QM8j74_WWWN-AwCValM3xnAiOzmmQiDE,4207
132
133
  smartsheet/models/title_rich_text_widget_content.py,sha256=zdHd_RdPPO7flnOmKqIkkqo_CSDtOg0Z4hj0vAK7-ZU,2018
134
+ smartsheet/models/token_paginated_result.py,sha256=OHn8mqEiLirKhBn8mWi0QvxwJryVtQtNvGd7-8lqfhc,1841
133
135
  smartsheet/models/update_request.py,sha256=5CkaSfhPLUPqtU6O9EuwFsyccpeBB3rnLLtvyxPmrpM,2881
134
136
  smartsheet/models/user.py,sha256=CKMjNusL7_TU0V07vqoxruL6gQbXHctBNItJJIsSQHI,1553
135
137
  smartsheet/models/user_model.py,sha256=OPwJlCZ7RIB7ghRE6YuvNPw_vRaygKYkYh0zgPH_Mm4,6139
@@ -143,7 +145,7 @@ smartsheet/models/webhook_subscope.py,sha256=h65vj3vww4GsnBreDRKJcgg76XbC0-2K0PB
143
145
  smartsheet/models/widget.py,sha256=G5UKR1latGSuXqm-MCRQxn9W7IJgo2FsUWJ9heEW0RA,6099
144
146
  smartsheet/models/widget_content.py,sha256=hxv3DJWO8YPe4ND-HUZ59eOVU9LAy02owU-KQVWUsDU,1525
145
147
  smartsheet/models/widget_hyperlink.py,sha256=JPjaSftHFHiFj48tfOckGWzrew_CLKmE2k9lUA_RQSk,2059
146
- smartsheet/models/workspace.py,sha256=I8SQaF8X_C5zx645dG5h8XCdoM_9rdT8TMRpJRznpuI,3839
148
+ smartsheet/models/workspace.py,sha256=_YT4i4DEK32kEyqlWixZUQSQyBiZkNtwtSmuhc98H2s,4522
147
149
  smartsheet/models/enums/__init__.py,sha256=IcAbtVOBw57xrIeuKgQK2pvyZKildMKFko0AG0DqeP8,2254
148
150
  smartsheet/models/enums/access_level.py,sha256=LvKh3Z2LrFeLm-R-dT0qOVinBsA4jEOxM02flg0LFaY,816
149
151
  smartsheet/models/enums/attachment_parent_type.py,sha256=EFcrHg8xpx_ZxrrGb3vkk9Ji8PD74Q8GeWhXZMquVEw,770
@@ -179,9 +181,9 @@ smartsheet/models/enums/system_column_type.py,sha256=UfhNUBGD_0K1Pas7fujGEuax55O
179
181
  smartsheet/models/enums/update_request_status.py,sha256=xYF84x1dTFhJMYVi1q3G1T9u1IGN3szlR1jj5HHC0hE,777
180
182
  smartsheet/models/enums/user_status.py,sha256=SB7qRcA0dhdRimsOKHCGF3CB6fL0XuifxQEWZGNNS8Q,766
181
183
  smartsheet/models/enums/widget_type.py,sha256=VfVq59fLZsT4ks_ZBrtv52u2Cl60iAdlA6mGD_elz-k,1072
182
- smartsheet_python_sdk-3.0.4.dist-info/LICENSE.md,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
183
- smartsheet_python_sdk-3.0.4.dist-info/METADATA,sha256=EtQ9wKIN5l365kGm1R0Nc5upU_n7cdrUsj3X12ELJzg,4701
184
- smartsheet_python_sdk-3.0.4.dist-info/NOTICE,sha256=mXr2ryVjnCjykeW0J79kFfVXQG_Z9SV4BV_QPNENW1U,420
185
- smartsheet_python_sdk-3.0.4.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
186
- smartsheet_python_sdk-3.0.4.dist-info/top_level.txt,sha256=kozWEYiKjyJmSXzd6p5ugkQ5bhoHS9V3NnvLagUfcNw,11
187
- smartsheet_python_sdk-3.0.4.dist-info/RECORD,,
184
+ smartsheet_python_sdk-3.1.0.dist-info/LICENSE.md,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
185
+ smartsheet_python_sdk-3.1.0.dist-info/METADATA,sha256=GZlKD4SFsKPNebCR2JaZHby28GDwJhgVntp1TMQMXyM,4693
186
+ smartsheet_python_sdk-3.1.0.dist-info/NOTICE,sha256=mXr2ryVjnCjykeW0J79kFfVXQG_Z9SV4BV_QPNENW1U,420
187
+ smartsheet_python_sdk-3.1.0.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
188
+ smartsheet_python_sdk-3.1.0.dist-info/top_level.txt,sha256=kozWEYiKjyJmSXzd6p5ugkQ5bhoHS9V3NnvLagUfcNw,11
189
+ smartsheet_python_sdk-3.1.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.45.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any