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 packages/*/uploaders/*. | 12 """The handler for packages/*/uploaders/*. |
13 | 13 |
14 This handler is in charge of the list of users that are allowed to upload a | 14 This handler is in charge of the list of users that are allowed to upload a |
15 given package. | 15 given package. |
16 """ | 16 """ |
17 | 17 |
18 @handlers.json_action | 18 @handlers.json_action |
19 @handlers.requires_uploader | 19 @handlers.requires_uploader |
20 @models.transactional | 20 @models.transactional |
21 def create(self, package_id, format, email): | 21 def create(self, package_id, format, email): |
22 """Add a new uploader for this package. | 22 """Add a new uploader for this package. |
23 | 23 |
24 Only other uploaders may add new uploaders.""" | 24 Only other uploaders may add new uploaders.""" |
25 | 25 |
26 package = handlers.request().package | 26 package = handlers.request().package |
27 user_to_add = users.User(email) | 27 if package.has_uploader_email(email): |
28 if package.has_uploader(user_to_add): | |
29 handlers.http_error( | 28 handlers.http_error( |
30 400, "User '%s' is already an uploader for package '%s'." % | 29 400, "User '%s' is already an uploader for package '%s'." % |
31 (email, package.name)) | 30 (email, package.name)) |
32 | 31 |
33 package.uploaders.append(user_to_add) | 32 package.uploaderEmails.append(email) |
34 package.temp_synchronize_uploaders_to_uploaderemails() | |
35 package.put() | 33 package.put() |
36 package.invalidate_cache() | 34 package.invalidate_cache() |
37 return handlers.json_success( | 35 return handlers.json_success( |
38 "'%s' added as an uploader for package '%s'." % | 36 "'%s' added as an uploader for package '%s'." % |
39 (email, package.name)) | 37 (email, package.name)) |
40 | 38 |
41 @handlers.json_action | 39 @handlers.json_action |
42 @handlers.requires_uploader | 40 @handlers.requires_uploader |
43 @models.transactional | 41 @models.transactional |
44 def delete(self, package_id, id, format): | 42 def delete(self, package_id, id, format): |
45 """Delete one of this package's uploaders. | 43 """Delete one of this package's uploaders. |
46 | 44 |
47 Only uploaders may delete uploaders. If only one uploader remains, that | 45 Only uploaders may delete uploaders. If only one uploader remains, that |
48 uploader may not be deleted until a new one is added. | 46 uploader may not be deleted until a new one is added. |
49 """ | 47 """ |
50 | 48 |
51 package = handlers.request().package | 49 package = handlers.request().package |
52 user_to_delete = users.User(id) | 50 email = id |
53 if not package.has_uploader(user_to_delete): | 51 if not package.has_uploader_email(email): |
54 handlers.http_error( | 52 handlers.http_error( |
55 400, "'%s' isn't an uploader for package '%s'." % | 53 400, "'%s' isn't an uploader for package '%s'." % |
56 (user_to_delete.nickname(), package.name)) | 54 (email, package.name)) |
57 | 55 |
58 if len(package.uploaders) == 1: | 56 if len(package.uploaderEmails) == 1: |
59 handlers.http_error( | 57 handlers.http_error( |
60 400, ("Package '%s' only has one uploader, so that uploader " + | 58 400, ("Package '%s' only has one uploader, so that uploader " + |
61 "can't be removed.") % package.name) | 59 "can't be removed.") % package.name) |
62 | 60 |
63 email_to_delete = user_to_delete.email().lower() | 61 email_to_delete = email.lower() |
64 package.uploaders = [uploader for uploader in package.uploaders | 62 package.uploaderEmails = [email for email in package.uploaderEmails |
65 if uploader.email().lower() != email_to_delete] | 63 if email.lower() != email_to_delete] |
66 package.temp_synchronize_uploaders_to_uploaderemails() | |
67 package.put() | 64 package.put() |
68 package.invalidate_cache() | 65 package.invalidate_cache() |
69 return handlers.json_success( | 66 return handlers.json_success( |
70 "'%s' is no longer an uploader for package '%s'." % | 67 "'%s' is no longer an uploader for package '%s'." % |
71 (id, package.name)) | 68 (id, package.name)) |
| 69 |
OLD | NEW |