Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(325)

Side by Side Diff: appengine/chrome_infra_packages/cipd/api.py

Issue 1194803002: Add a package listing API to cipd. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Cloud Endpoints API for Package Repository service.""" 5 """Cloud Endpoints API for Package Repository service."""
6 6
7 import functools 7 import functools
8 8
9 import endpoints 9 import endpoints
10 10
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 status = messages.EnumField(Status, 1, required=True) 213 status = messages.EnumField(Status, 1, required=True)
214 error_message = messages.StringField(2, required=False) 214 error_message = messages.StringField(2, required=False)
215 215
216 # For SUCCESS, information about the package. 216 # For SUCCESS, information about the package.
217 package = messages.MessageField(Package, 3, required=False) 217 package = messages.MessageField(Package, 3, required=False)
218 218
219 219
220 ################################################################################ 220 ################################################################################
221 221
222 222
223 class ListPackagesResponse(messages.Message):
224 """Results of listPackage call."""
225
226 status = messages.EnumField(Status, 1, required=True)
227 error_message = messages.StringField(2, required=False)
228
229 # For SUCCESS, names of the packages and names of directories.
230 packages = messages.StringField(3, repeated=True)
231 directories = messages.StringField(4, repeated=True)
232
233
234 ################################################################################
235
236
223 class RegisterPackageResponse(messages.Message): 237 class RegisterPackageResponse(messages.Message):
224 """Results of registerPackage call.""" 238 """Results of registerPackage call."""
225 status = messages.EnumField(Status, 1, required=True) 239 status = messages.EnumField(Status, 1, required=True)
226 error_message = messages.StringField(2, required=False) 240 error_message = messages.StringField(2, required=False)
227 241
228 # For REGISTERED or ALREADY_REGISTERED, information about the package. 242 # For REGISTERED or ALREADY_REGISTERED, information about the package.
229 package = messages.MessageField(Package, 3, required=False) 243 package = messages.MessageField(Package, 3, required=False)
230 244
231 245
232 ################################################################################ 246 ################################################################################
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 544
531 caller = auth.get_current_identity() 545 caller = auth.get_current_identity()
532 if not acl.can_register_package(package_name, caller): 546 if not acl.can_register_package(package_name, caller):
533 raise auth.AuthorizationError() 547 raise auth.AuthorizationError()
534 548
535 pkg, registered = self.service.register_package(package_name, caller) 549 pkg, registered = self.service.register_package(package_name, caller)
536 return RegisterPackageResponse( 550 return RegisterPackageResponse(
537 status=Status.REGISTERED if registered else Status.ALREADY_REGISTERED, 551 status=Status.REGISTERED if registered else Status.ALREADY_REGISTERED,
538 package=package_to_proto(pkg)) 552 package=package_to_proto(pkg))
539 553
554 @endpoints_method(
555 endpoints.ResourceContainer(
556 message_types.VoidMessage,
557 path=messages.StringField(1, required=False),
558 recursive=messages.BooleanField(2, required=False)),
559 ListPackagesResponse,
560 http_method='GET',
561 path='package/search',
562 name='listPackages')
563 def list_packages(self, request):
564 """Returns packages in the given directory and possibly subdirectories."""
565 path = request.path or ''
566 recursive = request.recursive or False
567
568 pkgs, dirs = self.service.list_packages(path, recursive)
569 caller = auth.get_current_identity()
570 visible_pkgs = [p for p in pkgs if acl.can_fetch_package(p, caller)]
571 visible_dirs = [d for d in dirs if acl.can_fetch_package(d, caller)]
572
573 return ListPackagesResponse(packages=visible_pkgs, directories=visible_dirs)
574
540 575
541 ### PackageInstance methods. 576 ### PackageInstance methods.
542 577
543 578
544 @endpoints_method( 579 @endpoints_method(
545 endpoints.ResourceContainer( 580 endpoints.ResourceContainer(
546 message_types.VoidMessage, 581 message_types.VoidMessage,
547 package_name=messages.StringField(1, required=True), 582 package_name=messages.StringField(1, required=True),
548 instance_id=messages.StringField(2, required=True)), 583 instance_id=messages.StringField(2, required=True)),
549 FetchInstanceResponse, 584 FetchInstanceResponse,
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 return FetchClientBinaryResponse( 921 return FetchClientBinaryResponse(
887 status=Status.NOT_EXTRACTED_YET, 922 status=Status.NOT_EXTRACTED_YET,
888 instance=instance_to_proto(instance)) 923 instance=instance_to_proto(instance))
889 924
890 return FetchClientBinaryResponse( 925 return FetchClientBinaryResponse(
891 instance=instance_to_proto(instance), 926 instance=instance_to_proto(instance),
892 client_binary=FetchClientBinaryResponse.ClientBinary( 927 client_binary=FetchClientBinaryResponse.ClientBinary(
893 sha1=client_info.sha1, 928 sha1=client_info.sha1,
894 size=client_info.size, 929 size=client_info.size,
895 fetch_url=client_info.fetch_url)) 930 fetch_url=client_info.fetch_url))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698