1# --------------------------------------------------------------------------------------------
2# Copyright (c) Microsoft Corporation. All rights reserved.
3# Licensed under the MIT License. See License.txt in the project root for license information.
4# --------------------------------------------------------------------------------------------
5# Generated file, DO NOT EDIT
6# Changes may cause incorrect behavior and will be lost if the code is regenerated.
7# --------------------------------------------------------------------------------------------
8
9from msrest import Serializer, Deserializer
10from ...vss_client import VssClient
11from . import models
12
13
14class TfvcClient(VssClient):
15    """Tfvc
16    :param str base_url: Service URL
17    :param Authentication creds: Authenticated credentials.
18    """
19
20    def __init__(self, base_url=None, creds=None):
21        super(TfvcClient, self).__init__(base_url, creds)
22        client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)}
23        self._serialize = Serializer(client_models)
24        self._deserialize = Deserializer(client_models)
25
26    resource_area_identifier = '8aa40520-446d-40e6-89f6-9c9f9ce44c48'
27
28    def get_branch(self, path, project=None, include_parent=None, include_children=None):
29        """GetBranch.
30        Get a single branch hierarchy at the given path with parents or children (if specified)
31        :param str path:
32        :param str project: Project ID or project name
33        :param bool include_parent:
34        :param bool include_children:
35        :rtype: :class:`<TfvcBranch> <tfvc.v4_0.models.TfvcBranch>`
36        """
37        route_values = {}
38        if project is not None:
39            route_values['project'] = self._serialize.url('project', project, 'str')
40        query_parameters = {}
41        if path is not None:
42            query_parameters['path'] = self._serialize.query('path', path, 'str')
43        if include_parent is not None:
44            query_parameters['includeParent'] = self._serialize.query('include_parent', include_parent, 'bool')
45        if include_children is not None:
46            query_parameters['includeChildren'] = self._serialize.query('include_children', include_children, 'bool')
47        response = self._send(http_method='GET',
48                              location_id='bc1f417e-239d-42e7-85e1-76e80cb2d6eb',
49                              version='4.0',
50                              route_values=route_values,
51                              query_parameters=query_parameters)
52        return self._deserialize('TfvcBranch', response)
53
54    def get_branches(self, project=None, include_parent=None, include_children=None, include_deleted=None, include_links=None):
55        """GetBranches.
56        Get a collection of branch roots -- first-level children, branches with no parents
57        :param str project: Project ID or project name
58        :param bool include_parent:
59        :param bool include_children:
60        :param bool include_deleted:
61        :param bool include_links:
62        :rtype: [TfvcBranch]
63        """
64        route_values = {}
65        if project is not None:
66            route_values['project'] = self._serialize.url('project', project, 'str')
67        query_parameters = {}
68        if include_parent is not None:
69            query_parameters['includeParent'] = self._serialize.query('include_parent', include_parent, 'bool')
70        if include_children is not None:
71            query_parameters['includeChildren'] = self._serialize.query('include_children', include_children, 'bool')
72        if include_deleted is not None:
73            query_parameters['includeDeleted'] = self._serialize.query('include_deleted', include_deleted, 'bool')
74        if include_links is not None:
75            query_parameters['includeLinks'] = self._serialize.query('include_links', include_links, 'bool')
76        response = self._send(http_method='GET',
77                              location_id='bc1f417e-239d-42e7-85e1-76e80cb2d6eb',
78                              version='4.0',
79                              route_values=route_values,
80                              query_parameters=query_parameters)
81        return self._deserialize('[TfvcBranch]', self._unwrap_collection(response))
82
83    def get_branch_refs(self, scope_path, project=None, include_deleted=None, include_links=None):
84        """GetBranchRefs.
85        Get branch hierarchies below the specified scopePath
86        :param str scope_path:
87        :param str project: Project ID or project name
88        :param bool include_deleted:
89        :param bool include_links:
90        :rtype: [TfvcBranchRef]
91        """
92        route_values = {}
93        if project is not None:
94            route_values['project'] = self._serialize.url('project', project, 'str')
95        query_parameters = {}
96        if scope_path is not None:
97            query_parameters['scopePath'] = self._serialize.query('scope_path', scope_path, 'str')
98        if include_deleted is not None:
99            query_parameters['includeDeleted'] = self._serialize.query('include_deleted', include_deleted, 'bool')
100        if include_links is not None:
101            query_parameters['includeLinks'] = self._serialize.query('include_links', include_links, 'bool')
102        response = self._send(http_method='GET',
103                              location_id='bc1f417e-239d-42e7-85e1-76e80cb2d6eb',
104                              version='4.0',
105                              route_values=route_values,
106                              query_parameters=query_parameters)
107        return self._deserialize('[TfvcBranchRef]', self._unwrap_collection(response))
108
109    def get_changeset_changes(self, id=None, skip=None, top=None):
110        """GetChangesetChanges.
111        Retrieve Tfvc changes for a given changeset
112        :param int id:
113        :param int skip:
114        :param int top:
115        :rtype: [TfvcChange]
116        """
117        route_values = {}
118        if id is not None:
119            route_values['id'] = self._serialize.url('id', id, 'int')
120        query_parameters = {}
121        if skip is not None:
122            query_parameters['$skip'] = self._serialize.query('skip', skip, 'int')
123        if top is not None:
124            query_parameters['$top'] = self._serialize.query('top', top, 'int')
125        response = self._send(http_method='GET',
126                              location_id='f32b86f2-15b9-4fe6-81b1-6f8938617ee5',
127                              version='4.0',
128                              route_values=route_values,
129                              query_parameters=query_parameters)
130        return self._deserialize('[TfvcChange]', self._unwrap_collection(response))
131
132    def create_changeset(self, changeset, project=None):
133        """CreateChangeset.
134        Create a new changeset.
135        :param :class:`<TfvcChangeset> <tfvc.v4_0.models.TfvcChangeset>` changeset:
136        :param str project: Project ID or project name
137        :rtype: :class:`<TfvcChangesetRef> <tfvc.v4_0.models.TfvcChangesetRef>`
138        """
139        route_values = {}
140        if project is not None:
141            route_values['project'] = self._serialize.url('project', project, 'str')
142        content = self._serialize.body(changeset, 'TfvcChangeset')
143        response = self._send(http_method='POST',
144                              location_id='0bc8f0a4-6bfb-42a9-ba84-139da7b99c49',
145                              version='4.0',
146                              route_values=route_values,
147                              content=content)
148        return self._deserialize('TfvcChangesetRef', response)
149
150    def get_changeset(self, id, project=None, max_change_count=None, include_details=None, include_work_items=None, max_comment_length=None, include_source_rename=None, skip=None, top=None, orderby=None, search_criteria=None):
151        """GetChangeset.
152        Retrieve a Tfvc Changeset
153        :param int id:
154        :param str project: Project ID or project name
155        :param int max_change_count:
156        :param bool include_details:
157        :param bool include_work_items:
158        :param int max_comment_length:
159        :param bool include_source_rename:
160        :param int skip:
161        :param int top:
162        :param str orderby:
163        :param :class:`<TfvcChangesetSearchCriteria> <tfvc.v4_0.models.TfvcChangesetSearchCriteria>` search_criteria:
164        :rtype: :class:`<TfvcChangeset> <tfvc.v4_0.models.TfvcChangeset>`
165        """
166        route_values = {}
167        if project is not None:
168            route_values['project'] = self._serialize.url('project', project, 'str')
169        if id is not None:
170            route_values['id'] = self._serialize.url('id', id, 'int')
171        query_parameters = {}
172        if max_change_count is not None:
173            query_parameters['maxChangeCount'] = self._serialize.query('max_change_count', max_change_count, 'int')
174        if include_details is not None:
175            query_parameters['includeDetails'] = self._serialize.query('include_details', include_details, 'bool')
176        if include_work_items is not None:
177            query_parameters['includeWorkItems'] = self._serialize.query('include_work_items', include_work_items, 'bool')
178        if max_comment_length is not None:
179            query_parameters['maxCommentLength'] = self._serialize.query('max_comment_length', max_comment_length, 'int')
180        if include_source_rename is not None:
181            query_parameters['includeSourceRename'] = self._serialize.query('include_source_rename', include_source_rename, 'bool')
182        if skip is not None:
183            query_parameters['$skip'] = self._serialize.query('skip', skip, 'int')
184        if top is not None:
185            query_parameters['$top'] = self._serialize.query('top', top, 'int')
186        if orderby is not None:
187            query_parameters['$orderby'] = self._serialize.query('orderby', orderby, 'str')
188        if search_criteria is not None:
189            if search_criteria.item_path is not None:
190                query_parameters['searchCriteria.itemPath'] = search_criteria.item_path
191            if search_criteria.author is not None:
192                query_parameters['searchCriteria.author'] = search_criteria.author
193            if search_criteria.from_date is not None:
194                query_parameters['searchCriteria.fromDate'] = search_criteria.from_date
195            if search_criteria.to_date is not None:
196                query_parameters['searchCriteria.toDate'] = search_criteria.to_date
197            if search_criteria.from_id is not None:
198                query_parameters['searchCriteria.fromId'] = search_criteria.from_id
199            if search_criteria.to_id is not None:
200                query_parameters['searchCriteria.toId'] = search_criteria.to_id
201            if search_criteria.follow_renames is not None:
202                query_parameters['searchCriteria.followRenames'] = search_criteria.follow_renames
203            if search_criteria.include_links is not None:
204                query_parameters['searchCriteria.includeLinks'] = search_criteria.include_links
205        response = self._send(http_method='GET',
206                              location_id='0bc8f0a4-6bfb-42a9-ba84-139da7b99c49',
207                              version='4.0',
208                              route_values=route_values,
209                              query_parameters=query_parameters)
210        return self._deserialize('TfvcChangeset', response)
211
212    def get_changesets(self, project=None, max_comment_length=None, skip=None, top=None, orderby=None, search_criteria=None):
213        """GetChangesets.
214        Retrieve Tfvc changesets Note: This is a new version of the GetChangesets API that doesn't expose the unneeded queryParams present in the 1.0 version of the API.
215        :param str project: Project ID or project name
216        :param int max_comment_length:
217        :param int skip:
218        :param int top:
219        :param str orderby:
220        :param :class:`<TfvcChangesetSearchCriteria> <tfvc.v4_0.models.TfvcChangesetSearchCriteria>` search_criteria:
221        :rtype: [TfvcChangesetRef]
222        """
223        route_values = {}
224        if project is not None:
225            route_values['project'] = self._serialize.url('project', project, 'str')
226        query_parameters = {}
227        if max_comment_length is not None:
228            query_parameters['maxCommentLength'] = self._serialize.query('max_comment_length', max_comment_length, 'int')
229        if skip is not None:
230            query_parameters['$skip'] = self._serialize.query('skip', skip, 'int')
231        if top is not None:
232            query_parameters['$top'] = self._serialize.query('top', top, 'int')
233        if orderby is not None:
234            query_parameters['$orderby'] = self._serialize.query('orderby', orderby, 'str')
235        if search_criteria is not None:
236            if search_criteria.item_path is not None:
237                query_parameters['searchCriteria.itemPath'] = search_criteria.item_path
238            if search_criteria.author is not None:
239                query_parameters['searchCriteria.author'] = search_criteria.author
240            if search_criteria.from_date is not None:
241                query_parameters['searchCriteria.fromDate'] = search_criteria.from_date
242            if search_criteria.to_date is not None:
243                query_parameters['searchCriteria.toDate'] = search_criteria.to_date
244            if search_criteria.from_id is not None:
245                query_parameters['searchCriteria.fromId'] = search_criteria.from_id
246            if search_criteria.to_id is not None:
247                query_parameters['searchCriteria.toId'] = search_criteria.to_id
248            if search_criteria.follow_renames is not None:
249                query_parameters['searchCriteria.followRenames'] = search_criteria.follow_renames
250            if search_criteria.include_links is not None:
251                query_parameters['searchCriteria.includeLinks'] = search_criteria.include_links
252        response = self._send(http_method='GET',
253                              location_id='0bc8f0a4-6bfb-42a9-ba84-139da7b99c49',
254                              version='4.0',
255                              route_values=route_values,
256                              query_parameters=query_parameters)
257        return self._deserialize('[TfvcChangesetRef]', self._unwrap_collection(response))
258
259    def get_batched_changesets(self, changesets_request_data):
260        """GetBatchedChangesets.
261        :param :class:`<TfvcChangesetsRequestData> <tfvc.v4_0.models.TfvcChangesetsRequestData>` changesets_request_data:
262        :rtype: [TfvcChangesetRef]
263        """
264        content = self._serialize.body(changesets_request_data, 'TfvcChangesetsRequestData')
265        response = self._send(http_method='POST',
266                              location_id='b7e7c173-803c-4fea-9ec8-31ee35c5502a',
267                              version='4.0',
268                              content=content)
269        return self._deserialize('[TfvcChangesetRef]', self._unwrap_collection(response))
270
271    def get_changeset_work_items(self, id=None):
272        """GetChangesetWorkItems.
273        :param int id:
274        :rtype: [AssociatedWorkItem]
275        """
276        route_values = {}
277        if id is not None:
278            route_values['id'] = self._serialize.url('id', id, 'int')
279        response = self._send(http_method='GET',
280                              location_id='64ae0bea-1d71-47c9-a9e5-fe73f5ea0ff4',
281                              version='4.0',
282                              route_values=route_values)
283        return self._deserialize('[AssociatedWorkItem]', self._unwrap_collection(response))
284
285    def get_items_batch(self, item_request_data, project=None):
286        """GetItemsBatch.
287        Post for retrieving a set of items given a list of paths or a long path. Allows for specifying the recursionLevel and version descriptors for each path.
288        :param :class:`<TfvcItemRequestData> <tfvc.v4_0.models.TfvcItemRequestData>` item_request_data:
289        :param str project: Project ID or project name
290        :rtype: [[TfvcItem]]
291        """
292        route_values = {}
293        if project is not None:
294            route_values['project'] = self._serialize.url('project', project, 'str')
295        content = self._serialize.body(item_request_data, 'TfvcItemRequestData')
296        response = self._send(http_method='POST',
297                              location_id='fe6f827b-5f64-480f-b8af-1eca3b80e833',
298                              version='4.0',
299                              route_values=route_values,
300                              content=content)
301        return self._deserialize('[[TfvcItem]]', self._unwrap_collection(response))
302
303    def get_items_batch_zip(self, item_request_data, project=None, **kwargs):
304        """GetItemsBatchZip.
305        Post for retrieving a set of items given a list of paths or a long path. Allows for specifying the recursionLevel and version descriptors for each path.
306        :param :class:`<TfvcItemRequestData> <tfvc.v4_0.models.TfvcItemRequestData>` item_request_data:
307        :param str project: Project ID or project name
308        :rtype: object
309        """
310        route_values = {}
311        if project is not None:
312            route_values['project'] = self._serialize.url('project', project, 'str')
313        content = self._serialize.body(item_request_data, 'TfvcItemRequestData')
314        response = self._send(http_method='POST',
315                              location_id='fe6f827b-5f64-480f-b8af-1eca3b80e833',
316                              version='4.0',
317                              route_values=route_values,
318                              content=content,
319                              accept_media_type='application/zip')
320        if "callback" in kwargs:
321            callback = kwargs["callback"]
322        else:
323            callback = None
324        return self._client.stream_download(response, callback=callback)
325
326    def get_item(self, path, project=None, file_name=None, download=None, scope_path=None, recursion_level=None, version_descriptor=None):
327        """GetItem.
328        Get Item Metadata and/or Content for a single item. The download parameter is to indicate whether the content should be available as a download or just sent as a stream in the response. Doesn't apply to zipped content which is always returned as a download.
329        :param str path:
330        :param str project: Project ID or project name
331        :param str file_name:
332        :param bool download:
333        :param str scope_path:
334        :param str recursion_level:
335        :param :class:`<TfvcVersionDescriptor> <tfvc.v4_0.models.TfvcVersionDescriptor>` version_descriptor:
336        :rtype: :class:`<TfvcItem> <tfvc.v4_0.models.TfvcItem>`
337        """
338        route_values = {}
339        if project is not None:
340            route_values['project'] = self._serialize.url('project', project, 'str')
341        query_parameters = {}
342        if path is not None:
343            query_parameters['path'] = self._serialize.query('path', path, 'str')
344        if file_name is not None:
345            query_parameters['fileName'] = self._serialize.query('file_name', file_name, 'str')
346        if download is not None:
347            query_parameters['download'] = self._serialize.query('download', download, 'bool')
348        if scope_path is not None:
349            query_parameters['scopePath'] = self._serialize.query('scope_path', scope_path, 'str')
350        if recursion_level is not None:
351            query_parameters['recursionLevel'] = self._serialize.query('recursion_level', recursion_level, 'str')
352        if version_descriptor is not None:
353            if version_descriptor.version_option is not None:
354                query_parameters['versionDescriptor.versionOption'] = version_descriptor.version_option
355            if version_descriptor.version_type is not None:
356                query_parameters['versionDescriptor.versionType'] = version_descriptor.version_type
357            if version_descriptor.version is not None:
358                query_parameters['versionDescriptor.version'] = version_descriptor.version
359        response = self._send(http_method='GET',
360                              location_id='ba9fc436-9a38-4578-89d6-e4f3241f5040',
361                              version='4.0',
362                              route_values=route_values,
363                              query_parameters=query_parameters)
364        return self._deserialize('TfvcItem', response)
365
366    def get_item_content(self, path, project=None, file_name=None, download=None, scope_path=None, recursion_level=None, version_descriptor=None, **kwargs):
367        """GetItemContent.
368        Get Item Metadata and/or Content for a single item. The download parameter is to indicate whether the content should be available as a download or just sent as a stream in the response. Doesn't apply to zipped content which is always returned as a download.
369        :param str path:
370        :param str project: Project ID or project name
371        :param str file_name:
372        :param bool download:
373        :param str scope_path:
374        :param str recursion_level:
375        :param :class:`<TfvcVersionDescriptor> <tfvc.v4_0.models.TfvcVersionDescriptor>` version_descriptor:
376        :rtype: object
377        """
378        route_values = {}
379        if project is not None:
380            route_values['project'] = self._serialize.url('project', project, 'str')
381        query_parameters = {}
382        if path is not None:
383            query_parameters['path'] = self._serialize.query('path', path, 'str')
384        if file_name is not None:
385            query_parameters['fileName'] = self._serialize.query('file_name', file_name, 'str')
386        if download is not None:
387            query_parameters['download'] = self._serialize.query('download', download, 'bool')
388        if scope_path is not None:
389            query_parameters['scopePath'] = self._serialize.query('scope_path', scope_path, 'str')
390        if recursion_level is not None:
391            query_parameters['recursionLevel'] = self._serialize.query('recursion_level', recursion_level, 'str')
392        if version_descriptor is not None:
393            if version_descriptor.version_option is not None:
394                query_parameters['versionDescriptor.versionOption'] = version_descriptor.version_option
395            if version_descriptor.version_type is not None:
396                query_parameters['versionDescriptor.versionType'] = version_descriptor.version_type
397            if version_descriptor.version is not None:
398                query_parameters['versionDescriptor.version'] = version_descriptor.version
399        response = self._send(http_method='GET',
400                              location_id='ba9fc436-9a38-4578-89d6-e4f3241f5040',
401                              version='4.0',
402                              route_values=route_values,
403                              query_parameters=query_parameters,
404                              accept_media_type='application/octet-stream')
405        if "callback" in kwargs:
406            callback = kwargs["callback"]
407        else:
408            callback = None
409        return self._client.stream_download(response, callback=callback)
410
411    def get_items(self, project=None, scope_path=None, recursion_level=None, include_links=None, version_descriptor=None):
412        """GetItems.
413        Get a list of Tfvc items
414        :param str project: Project ID or project name
415        :param str scope_path:
416        :param str recursion_level:
417        :param bool include_links:
418        :param :class:`<TfvcVersionDescriptor> <tfvc.v4_0.models.TfvcVersionDescriptor>` version_descriptor:
419        :rtype: [TfvcItem]
420        """
421        route_values = {}
422        if project is not None:
423            route_values['project'] = self._serialize.url('project', project, 'str')
424        query_parameters = {}
425        if scope_path is not None:
426            query_parameters['scopePath'] = self._serialize.query('scope_path', scope_path, 'str')
427        if recursion_level is not None:
428            query_parameters['recursionLevel'] = self._serialize.query('recursion_level', recursion_level, 'str')
429        if include_links is not None:
430            query_parameters['includeLinks'] = self._serialize.query('include_links', include_links, 'bool')
431        if version_descriptor is not None:
432            if version_descriptor.version_option is not None:
433                query_parameters['versionDescriptor.versionOption'] = version_descriptor.version_option
434            if version_descriptor.version_type is not None:
435                query_parameters['versionDescriptor.versionType'] = version_descriptor.version_type
436            if version_descriptor.version is not None:
437                query_parameters['versionDescriptor.version'] = version_descriptor.version
438        response = self._send(http_method='GET',
439                              location_id='ba9fc436-9a38-4578-89d6-e4f3241f5040',
440                              version='4.0',
441                              route_values=route_values,
442                              query_parameters=query_parameters)
443        return self._deserialize('[TfvcItem]', self._unwrap_collection(response))
444
445    def get_item_text(self, path, project=None, file_name=None, download=None, scope_path=None, recursion_level=None, version_descriptor=None, **kwargs):
446        """GetItemText.
447        Get Item Metadata and/or Content for a single item. The download parameter is to indicate whether the content should be available as a download or just sent as a stream in the response. Doesn't apply to zipped content which is always returned as a download.
448        :param str path:
449        :param str project: Project ID or project name
450        :param str file_name:
451        :param bool download:
452        :param str scope_path:
453        :param str recursion_level:
454        :param :class:`<TfvcVersionDescriptor> <tfvc.v4_0.models.TfvcVersionDescriptor>` version_descriptor:
455        :rtype: object
456        """
457        route_values = {}
458        if project is not None:
459            route_values['project'] = self._serialize.url('project', project, 'str')
460        query_parameters = {}
461        if path is not None:
462            query_parameters['path'] = self._serialize.query('path', path, 'str')
463        if file_name is not None:
464            query_parameters['fileName'] = self._serialize.query('file_name', file_name, 'str')
465        if download is not None:
466            query_parameters['download'] = self._serialize.query('download', download, 'bool')
467        if scope_path is not None:
468            query_parameters['scopePath'] = self._serialize.query('scope_path', scope_path, 'str')
469        if recursion_level is not None:
470            query_parameters['recursionLevel'] = self._serialize.query('recursion_level', recursion_level, 'str')
471        if version_descriptor is not None:
472            if version_descriptor.version_option is not None:
473                query_parameters['versionDescriptor.versionOption'] = version_descriptor.version_option
474            if version_descriptor.version_type is not None:
475                query_parameters['versionDescriptor.versionType'] = version_descriptor.version_type
476            if version_descriptor.version is not None:
477                query_parameters['versionDescriptor.version'] = version_descriptor.version
478        response = self._send(http_method='GET',
479                              location_id='ba9fc436-9a38-4578-89d6-e4f3241f5040',
480                              version='4.0',
481                              route_values=route_values,
482                              query_parameters=query_parameters,
483                              accept_media_type='text/plain')
484        if "callback" in kwargs:
485            callback = kwargs["callback"]
486        else:
487            callback = None
488        return self._client.stream_download(response, callback=callback)
489
490    def get_item_zip(self, path, project=None, file_name=None, download=None, scope_path=None, recursion_level=None, version_descriptor=None, **kwargs):
491        """GetItemZip.
492        Get Item Metadata and/or Content for a single item. The download parameter is to indicate whether the content should be available as a download or just sent as a stream in the response. Doesn't apply to zipped content which is always returned as a download.
493        :param str path:
494        :param str project: Project ID or project name
495        :param str file_name:
496        :param bool download:
497        :param str scope_path:
498        :param str recursion_level:
499        :param :class:`<TfvcVersionDescriptor> <tfvc.v4_0.models.TfvcVersionDescriptor>` version_descriptor:
500        :rtype: object
501        """
502        route_values = {}
503        if project is not None:
504            route_values['project'] = self._serialize.url('project', project, 'str')
505        query_parameters = {}
506        if path is not None:
507            query_parameters['path'] = self._serialize.query('path', path, 'str')
508        if file_name is not None:
509            query_parameters['fileName'] = self._serialize.query('file_name', file_name, 'str')
510        if download is not None:
511            query_parameters['download'] = self._serialize.query('download', download, 'bool')
512        if scope_path is not None:
513            query_parameters['scopePath'] = self._serialize.query('scope_path', scope_path, 'str')
514        if recursion_level is not None:
515            query_parameters['recursionLevel'] = self._serialize.query('recursion_level', recursion_level, 'str')
516        if version_descriptor is not None:
517            if version_descriptor.version_option is not None:
518                query_parameters['versionDescriptor.versionOption'] = version_descriptor.version_option
519            if version_descriptor.version_type is not None:
520                query_parameters['versionDescriptor.versionType'] = version_descriptor.version_type
521            if version_descriptor.version is not None:
522                query_parameters['versionDescriptor.version'] = version_descriptor.version
523        response = self._send(http_method='GET',
524                              location_id='ba9fc436-9a38-4578-89d6-e4f3241f5040',
525                              version='4.0',
526                              route_values=route_values,
527                              query_parameters=query_parameters,
528                              accept_media_type='application/zip')
529        if "callback" in kwargs:
530            callback = kwargs["callback"]
531        else:
532            callback = None
533        return self._client.stream_download(response, callback=callback)
534
535    def get_label_items(self, label_id, top=None, skip=None):
536        """GetLabelItems.
537        Get items under a label.
538        :param str label_id: Unique identifier of label
539        :param int top: Max number of items to return
540        :param int skip: Number of items to skip
541        :rtype: [TfvcItem]
542        """
543        route_values = {}
544        if label_id is not None:
545            route_values['labelId'] = self._serialize.url('label_id', label_id, 'str')
546        query_parameters = {}
547        if top is not None:
548            query_parameters['$top'] = self._serialize.query('top', top, 'int')
549        if skip is not None:
550            query_parameters['$skip'] = self._serialize.query('skip', skip, 'int')
551        response = self._send(http_method='GET',
552                              location_id='06166e34-de17-4b60-8cd1-23182a346fda',
553                              version='4.0',
554                              route_values=route_values,
555                              query_parameters=query_parameters)
556        return self._deserialize('[TfvcItem]', self._unwrap_collection(response))
557
558    def get_label(self, label_id, request_data, project=None):
559        """GetLabel.
560        Get a single deep label.
561        :param str label_id: Unique identifier of label
562        :param :class:`<TfvcLabelRequestData> <tfvc.v4_0.models.TfvcLabelRequestData>` request_data: maxItemCount
563        :param str project: Project ID or project name
564        :rtype: :class:`<TfvcLabel> <tfvc.v4_0.models.TfvcLabel>`
565        """
566        route_values = {}
567        if project is not None:
568            route_values['project'] = self._serialize.url('project', project, 'str')
569        if label_id is not None:
570            route_values['labelId'] = self._serialize.url('label_id', label_id, 'str')
571        query_parameters = {}
572        if request_data is not None:
573            if request_data.label_scope is not None:
574                query_parameters['requestData.labelScope'] = request_data.label_scope
575            if request_data.name is not None:
576                query_parameters['requestData.name'] = request_data.name
577            if request_data.owner is not None:
578                query_parameters['requestData.owner'] = request_data.owner
579            if request_data.item_label_filter is not None:
580                query_parameters['requestData.itemLabelFilter'] = request_data.item_label_filter
581            if request_data.max_item_count is not None:
582                query_parameters['requestData.maxItemCount'] = request_data.max_item_count
583            if request_data.include_links is not None:
584                query_parameters['requestData.includeLinks'] = request_data.include_links
585        response = self._send(http_method='GET',
586                              location_id='a5d9bd7f-b661-4d0e-b9be-d9c16affae54',
587                              version='4.0',
588                              route_values=route_values,
589                              query_parameters=query_parameters)
590        return self._deserialize('TfvcLabel', response)
591
592    def get_labels(self, request_data, project=None, top=None, skip=None):
593        """GetLabels.
594        Get a collection of shallow label references.
595        :param :class:`<TfvcLabelRequestData> <tfvc.v4_0.models.TfvcLabelRequestData>` request_data: labelScope, name, owner, and itemLabelFilter
596        :param str project: Project ID or project name
597        :param int top: Max number of labels to return
598        :param int skip: Number of labels to skip
599        :rtype: [TfvcLabelRef]
600        """
601        route_values = {}
602        if project is not None:
603            route_values['project'] = self._serialize.url('project', project, 'str')
604        query_parameters = {}
605        if request_data is not None:
606            if request_data.label_scope is not None:
607                query_parameters['requestData.labelScope'] = request_data.label_scope
608            if request_data.name is not None:
609                query_parameters['requestData.name'] = request_data.name
610            if request_data.owner is not None:
611                query_parameters['requestData.owner'] = request_data.owner
612            if request_data.item_label_filter is not None:
613                query_parameters['requestData.itemLabelFilter'] = request_data.item_label_filter
614            if request_data.max_item_count is not None:
615                query_parameters['requestData.maxItemCount'] = request_data.max_item_count
616            if request_data.include_links is not None:
617                query_parameters['requestData.includeLinks'] = request_data.include_links
618        if top is not None:
619            query_parameters['$top'] = self._serialize.query('top', top, 'int')
620        if skip is not None:
621            query_parameters['$skip'] = self._serialize.query('skip', skip, 'int')
622        response = self._send(http_method='GET',
623                              location_id='a5d9bd7f-b661-4d0e-b9be-d9c16affae54',
624                              version='4.0',
625                              route_values=route_values,
626                              query_parameters=query_parameters)
627        return self._deserialize('[TfvcLabelRef]', self._unwrap_collection(response))
628
629    def get_shelveset_changes(self, shelveset_id, top=None, skip=None):
630        """GetShelvesetChanges.
631        Get changes included in a shelveset.
632        :param str shelveset_id: Shelveset's unique ID
633        :param int top: Max number of changes to return
634        :param int skip: Number of changes to skip
635        :rtype: [TfvcChange]
636        """
637        query_parameters = {}
638        if shelveset_id is not None:
639            query_parameters['shelvesetId'] = self._serialize.query('shelveset_id', shelveset_id, 'str')
640        if top is not None:
641            query_parameters['$top'] = self._serialize.query('top', top, 'int')
642        if skip is not None:
643            query_parameters['$skip'] = self._serialize.query('skip', skip, 'int')
644        response = self._send(http_method='GET',
645                              location_id='dbaf075b-0445-4c34-9e5b-82292f856522',
646                              version='4.0',
647                              query_parameters=query_parameters)
648        return self._deserialize('[TfvcChange]', self._unwrap_collection(response))
649
650    def get_shelveset(self, shelveset_id, request_data=None):
651        """GetShelveset.
652        Get a single deep shelveset.
653        :param str shelveset_id: Shelveset's unique ID
654        :param :class:`<TfvcShelvesetRequestData> <tfvc.v4_0.models.TfvcShelvesetRequestData>` request_data: includeDetails, includeWorkItems, maxChangeCount, and maxCommentLength
655        :rtype: :class:`<TfvcShelveset> <tfvc.v4_0.models.TfvcShelveset>`
656        """
657        query_parameters = {}
658        if shelveset_id is not None:
659            query_parameters['shelvesetId'] = self._serialize.query('shelveset_id', shelveset_id, 'str')
660        if request_data is not None:
661            if request_data.name is not None:
662                query_parameters['requestData.name'] = request_data.name
663            if request_data.owner is not None:
664                query_parameters['requestData.owner'] = request_data.owner
665            if request_data.max_comment_length is not None:
666                query_parameters['requestData.maxCommentLength'] = request_data.max_comment_length
667            if request_data.max_change_count is not None:
668                query_parameters['requestData.maxChangeCount'] = request_data.max_change_count
669            if request_data.include_details is not None:
670                query_parameters['requestData.includeDetails'] = request_data.include_details
671            if request_data.include_work_items is not None:
672                query_parameters['requestData.includeWorkItems'] = request_data.include_work_items
673            if request_data.include_links is not None:
674                query_parameters['requestData.includeLinks'] = request_data.include_links
675        response = self._send(http_method='GET',
676                              location_id='e36d44fb-e907-4b0a-b194-f83f1ed32ad3',
677                              version='4.0',
678                              query_parameters=query_parameters)
679        return self._deserialize('TfvcShelveset', response)
680
681    def get_shelvesets(self, request_data=None, top=None, skip=None):
682        """GetShelvesets.
683        Return a collection of shallow shelveset references.
684        :param :class:`<TfvcShelvesetRequestData> <tfvc.v4_0.models.TfvcShelvesetRequestData>` request_data: name, owner, and maxCommentLength
685        :param int top: Max number of shelvesets to return
686        :param int skip: Number of shelvesets to skip
687        :rtype: [TfvcShelvesetRef]
688        """
689        query_parameters = {}
690        if request_data is not None:
691            if request_data.name is not None:
692                query_parameters['requestData.name'] = request_data.name
693            if request_data.owner is not None:
694                query_parameters['requestData.owner'] = request_data.owner
695            if request_data.max_comment_length is not None:
696                query_parameters['requestData.maxCommentLength'] = request_data.max_comment_length
697            if request_data.max_change_count is not None:
698                query_parameters['requestData.maxChangeCount'] = request_data.max_change_count
699            if request_data.include_details is not None:
700                query_parameters['requestData.includeDetails'] = request_data.include_details
701            if request_data.include_work_items is not None:
702                query_parameters['requestData.includeWorkItems'] = request_data.include_work_items
703            if request_data.include_links is not None:
704                query_parameters['requestData.includeLinks'] = request_data.include_links
705        if top is not None:
706            query_parameters['$top'] = self._serialize.query('top', top, 'int')
707        if skip is not None:
708            query_parameters['$skip'] = self._serialize.query('skip', skip, 'int')
709        response = self._send(http_method='GET',
710                              location_id='e36d44fb-e907-4b0a-b194-f83f1ed32ad3',
711                              version='4.0',
712                              query_parameters=query_parameters)
713        return self._deserialize('[TfvcShelvesetRef]', self._unwrap_collection(response))
714
715    def get_shelveset_work_items(self, shelveset_id):
716        """GetShelvesetWorkItems.
717        Get work items associated with a shelveset.
718        :param str shelveset_id: Shelveset's unique ID
719        :rtype: [AssociatedWorkItem]
720        """
721        query_parameters = {}
722        if shelveset_id is not None:
723            query_parameters['shelvesetId'] = self._serialize.query('shelveset_id', shelveset_id, 'str')
724        response = self._send(http_method='GET',
725                              location_id='a7a0c1c1-373e-425a-b031-a519474d743d',
726                              version='4.0',
727                              query_parameters=query_parameters)
728        return self._deserialize('[AssociatedWorkItem]', self._unwrap_collection(response))
729
730