OLD | NEW |
1 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 # for details. All rights reserved. Use of this source code is governed by a | 2 # for details. All rights reserved. Use of this source code is governed by a |
3 # BSD-style license that can be found in the LICENSE file. | 3 # BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 from google.appengine.api import oauth | 5 from google.appengine.api import oauth |
6 from google.appengine.api import users | 6 from google.appengine.api import users |
7 | 7 |
8 import handlers | 8 import handlers |
9 import models | 9 import models |
10 | 10 |
11 class PackageUploaders(object): | 11 class PackageUploaders(object): |
12 """The handler for /api/packages/*/uploaders/*.""" | 12 """The handler for /api/packages/*/uploaders/*.""" |
13 | 13 |
14 @handlers.api(1) | 14 @handlers.api(1) |
15 @handlers.requires_uploader | 15 @handlers.requires_uploader |
16 @models.transactional | 16 @models.transactional |
17 def create(self, package_id, email): | 17 def create(self, package_id, email): |
18 """Add a new uploader for this package. | 18 """Add a new uploader for this package. |
19 | 19 |
20 Only other uploaders may add new uploaders.""" | 20 Only other uploaders may add new uploaders.""" |
21 | 21 |
22 package = handlers.request().package | 22 package = handlers.request().package |
23 user_to_add = users.User(email) | 23 if package.has_uploader_email(email): |
24 if package.has_uploader(user_to_add): | |
25 handlers.http_error( | 24 handlers.http_error( |
26 400, "User '%s' is already an uploader for package '%s'." % | 25 400, "User '%s' is already an uploader for package '%s'." % |
27 (email, package.name)) | 26 (email, package.name)) |
28 | 27 |
29 package.uploaders.append(user_to_add) | 28 package.uploaderEmails.append(email) |
30 package.temp_synchronize_uploaders_to_uploaderemails() | |
31 package.put() | 29 package.put() |
32 package.invalidate_cache() | 30 package.invalidate_cache() |
33 return handlers.json_success( | 31 return handlers.json_success( |
34 "'%s' added as an uploader for package '%s'." % | 32 "'%s' added as an uploader for package '%s'." % |
35 (email, package.name)) | 33 (email, package.name)) |
36 | 34 |
37 @handlers.api(1) | 35 @handlers.api(1) |
38 @handlers.requires_uploader | 36 @handlers.requires_uploader |
39 @models.transactional | 37 @models.transactional |
40 def delete(self, package_id, id, format=None): | 38 def delete(self, package_id, id, format=None): |
41 """Delete one of this package's uploaders. | 39 """Delete one of this package's uploaders. |
42 | 40 |
43 Only uploaders may delete uploaders. If only one uploader remains, that | 41 Only uploaders may delete uploaders. If only one uploader remains, that |
44 uploader may not be deleted until a new one is added. | 42 uploader may not be deleted until a new one is added. |
45 """ | 43 """ |
46 | 44 |
| 45 # TODO: WHAT IS THIS `format` THING ? |
47 if format: id = id + '.' + format | 46 if format: id = id + '.' + format |
48 | 47 |
49 package = handlers.request().package | 48 package = handlers.request().package |
50 user_to_delete = users.User(id) | 49 email = id |
51 if not package.has_uploader(user_to_delete): | 50 if not package.has_uploader_email(email): |
52 handlers.http_error( | 51 handlers.http_error( |
53 400, "'%s' isn't an uploader for package '%s'." % | 52 400, "'%s' isn't an uploader for package '%s'." % |
54 (user_to_delete.nickname(), package.name)) | 53 (email, package.name)) |
55 | 54 |
56 if len(package.uploaders) == 1: | 55 if len(package.uploaderEmails) == 1: |
57 handlers.http_error( | 56 handlers.http_error( |
58 400, ("Package '%s' only has one uploader, so that uploader " + | 57 400, ("Package '%s' only has one uploader, so that uploader " + |
59 "can't be removed.") % package.name) | 58 "can't be removed.") % package.name) |
60 | 59 |
61 email_to_delete = user_to_delete.email().lower() | 60 email_to_delete = email.lower() |
62 package.uploaders = [uploader for uploader in package.uploaders | 61 package.uploaderEmails = [email for email in package.uploaderEmails |
63 if uploader.email().lower() != email_to_delete] | 62 if email.lower() != email_to_delete] |
64 package.temp_synchronize_uploaders_to_uploaderemails() | |
65 package.put() | 63 package.put() |
66 package.invalidate_cache() | 64 package.invalidate_cache() |
67 return handlers.json_success( | 65 return handlers.json_success( |
68 "'%s' is no longer an uploader for package '%s'." % | 66 "'%s' is no longer an uploader for package '%s'." % |
69 (id, package.name)) | 67 (id, package.name)) |
| 68 |
OLD | NEW |