Merge lp:~dobey/ubuntu/lucid/ubuntuone-storage-protocol/trunk into lp:ubuntu/lucid/ubuntuone-storage-protocol
- Lucid (10.04)
- trunk
- Merge into lucid
Proposed by
dobey
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~dobey/ubuntu/lucid/ubuntuone-storage-protocol/trunk |
Merge into: | lp:ubuntu/lucid/ubuntuone-storage-protocol |
Diff against target: |
4871 lines (+3459/-357) 16 files modified
PKG-INFO (+1/-1) debian/changelog (+6/-0) setup.py (+1/-1) tests/test_client.py (+467/-0) tests/test_dircontent.py (+13/-9) tests/test_throttling.py (+58/-120) tests/test_volumes.py (+164/-0) ubuntuone/storageprotocol/client.py (+375/-170) ubuntuone/storageprotocol/dircontent.proto (+3/-0) ubuntuone/storageprotocol/dircontent.py (+1/-1) ubuntuone/storageprotocol/dircontent_pb2.py (+105/-0) ubuntuone/storageprotocol/protocol.proto (+79/-19) ubuntuone/storageprotocol/protocol_pb2.py (+2018/-0) ubuntuone/storageprotocol/request.py (+3/-2) ubuntuone/storageprotocol/sharersp.py (+24/-34) ubuntuone/storageprotocol/volumes.py (+141/-0) |
To merge this branch: | bzr merge lp:~dobey/ubuntu/lucid/ubuntuone-storage-protocol/trunk |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ubuntu branches | Pending | ||
Review via email: mp+19552@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'PKG-INFO' |
2 | --- PKG-INFO 2009-12-07 17:00:00 +0000 |
3 | +++ PKG-INFO 2010-02-17 23:29:10 +0000 |
4 | @@ -1,6 +1,6 @@ |
5 | Metadata-Version: 1.0 |
6 | Name: ubuntuone-storage-protocol |
7 | -Version: 1.1.0 |
8 | +Version: 1.1.2 |
9 | Summary: UNKNOWN |
10 | Home-page: UNKNOWN |
11 | Author: UNKNOWN |
12 | |
13 | === modified file 'debian/changelog' |
14 | --- debian/changelog 2009-12-07 17:00:00 +0000 |
15 | +++ debian/changelog 2010-02-17 23:29:10 +0000 |
16 | @@ -1,3 +1,9 @@ |
17 | +ubuntuone-storage-protocol (1.1.2-0ubuntu1) UNRELEASED; urgency=low |
18 | + |
19 | + * New upstream release. |
20 | + |
21 | + -- Rodney Dawes <rodney.dawes@canonical.com> Wed, 17 Feb 2010 18:23:53 -0500 |
22 | + |
23 | ubuntuone-storage-protocol (1.1.0-0ubuntu1) lucid; urgency=low |
24 | |
25 | * New upstream release |
26 | |
27 | === modified file 'setup.py' |
28 | --- setup.py 2009-12-07 17:00:00 +0000 |
29 | +++ setup.py 2010-02-17 23:29:10 +0000 |
30 | @@ -119,7 +119,7 @@ |
31 | |
32 | |
33 | setup(name='ubuntuone-storage-protocol', |
34 | - version='1.1.0', |
35 | + version='1.1.2', |
36 | packages=['ubuntuone', |
37 | 'ubuntuone.storageprotocol'], |
38 | data_files=[('/etc/ssl/certs', |
39 | |
40 | === added file 'tests/test_client.py' |
41 | --- tests/test_client.py 1970-01-01 00:00:00 +0000 |
42 | +++ tests/test_client.py 2010-02-17 23:29:10 +0000 |
43 | @@ -0,0 +1,467 @@ |
44 | +# coding=utf-8 |
45 | +# |
46 | +# Author: Natalia B. Bidart <natalia.bidart@canonical.com> |
47 | +# |
48 | +# Copyright (C) 2009 Canonical Ltd. |
49 | +# |
50 | +# This program is free software: you can redistribute it and/or modify it |
51 | +# under the terms of the GNU Affero General Public License version 3, |
52 | +# as published by the Free Software Foundation. |
53 | +# |
54 | +# This program is distributed in the hope that it will be useful, but |
55 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
56 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
57 | +# PURPOSE. See the GNU Affero General Public License for more details. |
58 | +# |
59 | +# You should have received a copy of the GNU Affero General Public License |
60 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
61 | +"""Tests for the protocol client.""" |
62 | + |
63 | +import unittest |
64 | +import uuid |
65 | + |
66 | +from twisted.internet.defer import Deferred |
67 | + |
68 | +from ubuntuone.storageprotocol import protocol_pb2 |
69 | +from ubuntuone.storageprotocol.client import ( |
70 | + StorageClient, CreateUDF, ListVolumes, DeleteVolume |
71 | +) |
72 | +from ubuntuone.storageprotocol import volumes |
73 | + |
74 | +PATH = u'~/Documents/pdfs/moño/' |
75 | +NAME = u'UDF-me' |
76 | +VOLUME = uuid.UUID('12345678-1234-1234-1234-123456789abc') |
77 | +NODE = uuid.UUID('FEDCBA98-7654-3211-2345-6789ABCDEF12') |
78 | +USER = u'Dude' |
79 | + |
80 | +class FakedError(Exception): |
81 | + """Stub to replace Request.error.""" |
82 | + |
83 | + |
84 | +def stub_function(*args, **kwargs): |
85 | + """Stub to replace non-related functions.""" |
86 | + return None |
87 | + |
88 | +def faked_error(message): |
89 | + """Stub to replace Request.error.""" |
90 | + raise FakedError |
91 | + |
92 | +def was_called(self, flag): |
93 | + """Helper to assert a function was called.""" |
94 | + assert not getattr(self, flag) |
95 | + def set_flag(*args, **kwargs): |
96 | + """Record the calling was made.""" |
97 | + setattr(self, flag, True) |
98 | + return set_flag |
99 | + |
100 | +def build_list_volumes(): |
101 | + """Build a LIST_VOLUMES message.""" |
102 | + message = protocol_pb2.Message() |
103 | + message.type = protocol_pb2.Message.VOLUMES_INFO |
104 | + return message |
105 | + |
106 | +def build_volume_created(): |
107 | + """Build VOLUME_CREATED message.""" |
108 | + message = protocol_pb2.Message() |
109 | + message.type = protocol_pb2.Message.VOLUME_CREATED |
110 | + return message |
111 | + |
112 | +def build_volume_deleted(): |
113 | + """Build VOLUME_DELETED message.""" |
114 | + message = protocol_pb2.Message() |
115 | + message.type = protocol_pb2.Message.VOLUME_DELETED |
116 | + return message |
117 | + |
118 | +def set_root_message(message): |
119 | + """Set a simple Root message.""" |
120 | + message.type = protocol_pb2.Volumes.ROOT |
121 | + message.root.node = str(NODE) |
122 | + |
123 | +def set_udf_message(message): |
124 | + """Set a simple UDFs message.""" |
125 | + message.type = protocol_pb2.Volumes.UDF |
126 | + message.udf.volume = str(VOLUME) |
127 | + message.udf.node = str(NODE) |
128 | + message.udf.suggested_path = PATH |
129 | + |
130 | +def set_share_message(message): |
131 | + """Set a simple Share message.""" |
132 | + message.type = protocol_pb2.Volumes.SHARE |
133 | + message.share.share_id = str(VOLUME) |
134 | + message.share.direction = 0 |
135 | + message.share.subtree = str(NODE) |
136 | + message.share.share_name = u'test' |
137 | + message.share.other_username = USER |
138 | + message.share.other_visible_name = USER |
139 | + message.share.accepted = False |
140 | + message.share.access_level = 0 |
141 | + |
142 | + |
143 | +class DummyAttribute(object): |
144 | + """Helper class to replace non-related classes.""" |
145 | + |
146 | + def __getattribute__(self, name): |
147 | + """Attributes can be whatever we need.""" |
148 | + return stub_function |
149 | + |
150 | + |
151 | +class FakedProtocol(StorageClient): |
152 | + """Fake StorageClient to avoid twisted.""" |
153 | + |
154 | + def __init__(self, *args, **kwargs): |
155 | + """Override transports and keep track of messages.""" |
156 | + StorageClient.__init__(self, *args, **kwargs) |
157 | + self.transport = DummyAttribute() |
158 | + self.messages = [] |
159 | + |
160 | + def sendMessage(self, message): |
161 | + """Keep track of messages.""" |
162 | + self.messages.append(message) |
163 | + |
164 | + |
165 | +class ClientTestCase(unittest.TestCase): |
166 | + """Check that MultiQuery works using an iterator.""" |
167 | + |
168 | + def setUp(self): |
169 | + """Initialize testing client.""" |
170 | + self.client = FakedProtocol() |
171 | + self.called = False |
172 | + self.volume = None |
173 | + |
174 | + def tearDown(self): |
175 | + """Clean up.""" |
176 | + self.client = None |
177 | + |
178 | + # client to server |
179 | + def test_create_udf(self): |
180 | + """Test create_udf.""" |
181 | + original = CreateUDF.start |
182 | + CreateUDF.start = was_called(self, 'called') |
183 | + |
184 | + try: |
185 | + result = self.client.create_udf(path=PATH, name=NAME) |
186 | + self.assertTrue(self.called, 'CreateUDF.start() was called') |
187 | + self.assertTrue(isinstance(result, Deferred)) |
188 | + finally: |
189 | + CreateUDF.start = original |
190 | + |
191 | + def test_list_volumes(self): |
192 | + """Test list_volumes.""" |
193 | + original = ListVolumes.start |
194 | + ListVolumes.start = was_called(self, 'called') |
195 | + |
196 | + try: |
197 | + result = self.client.list_volumes() |
198 | + self.assertTrue(self.called, 'ListVolumes.start() was called') |
199 | + self.assertTrue(isinstance(result, Deferred)) |
200 | + finally: |
201 | + ListVolumes.start = original |
202 | + |
203 | + def test_delete_volume(self): |
204 | + """Test delete_volume.""" |
205 | + original = DeleteVolume.start |
206 | + DeleteVolume.start = was_called(self, 'called') |
207 | + |
208 | + try: |
209 | + result = self.client.delete_volume(volume_id=VOLUME) |
210 | + self.assertTrue(self.called, 'DeleteVolume.start() was called') |
211 | + self.assertTrue(isinstance(result, Deferred)) |
212 | + finally: |
213 | + DeleteVolume.start = original |
214 | + |
215 | + def test_set_volume_deleted_callback(self): |
216 | + """Test callback setting.""" |
217 | + a_callback = lambda x: None |
218 | + self.client.set_volume_deleted_callback(a_callback) |
219 | + # pylint: disable-msg= W0212 |
220 | + self.assertTrue(self.client._volume_deleted_callback is a_callback) |
221 | + |
222 | + def test_callback_must_be_callable(self): |
223 | + """Test set callback parameters.""" |
224 | + self.assertRaises(TypeError, self.client.set_volume_created_callback, |
225 | + 'hello') |
226 | + |
227 | + self.assertRaises(TypeError, self.client.set_volume_deleted_callback, |
228 | + 'world') |
229 | + |
230 | + def test_set_volume_created_callback(self): |
231 | + """Test callback setting.""" |
232 | + a_callback = lambda y, z: None |
233 | + self.client.set_volume_created_callback(a_callback) |
234 | + # pylint: disable-msg= W0212 |
235 | + self.assertTrue(self.client._volume_created_callback is a_callback) |
236 | + |
237 | + # server to client |
238 | + def test_handle_volume_created(self): |
239 | + """Test handle_VOLUME_CREATED.""" |
240 | + a_callback = was_called(self, 'called') |
241 | + self.client.set_volume_created_callback(a_callback) |
242 | + |
243 | + message = build_volume_created() |
244 | + set_root_message(message.volume_created) |
245 | + self.client.handle_VOLUME_CREATED(message) |
246 | + |
247 | + self.assertTrue(self.called) |
248 | + |
249 | + def test_handle_root_created_passes_a_root(self): |
250 | + """Test handle_VOLUME_CREATED parameter passing.""" |
251 | + self.volume = None |
252 | + a_callback = lambda vol: setattr(self, 'volume', vol) |
253 | + self.client.set_volume_created_callback(a_callback) |
254 | + |
255 | + message = build_volume_created() |
256 | + set_root_message(message.volume_created) |
257 | + root = volumes.RootVolume.from_msg(message.volume_created.root) |
258 | + |
259 | + self.client.handle_VOLUME_CREATED(message) |
260 | + self.assertEquals(root, self.volume) |
261 | + |
262 | + def test_handle_udf_created_passes_a_udf(self): |
263 | + """Test handle_VOLUME_CREATED parameter passing.""" |
264 | + self.volume = None |
265 | + a_callback = lambda vol: setattr(self, 'volume', vol) |
266 | + self.client.set_volume_created_callback(a_callback) |
267 | + |
268 | + message = build_volume_created() |
269 | + set_udf_message(message.volume_created) |
270 | + udf = volumes.UDFVolume.from_msg(message.volume_created.udf) |
271 | + |
272 | + self.client.handle_VOLUME_CREATED(message) |
273 | + self.assertEquals(udf, self.volume) |
274 | + |
275 | + def test_handle_share_created_passes_a_share(self): |
276 | + """Test handle_VOLUME_CREATED parameter passing.""" |
277 | + self.volume = None |
278 | + a_callback = lambda vol: setattr(self, 'volume', vol) |
279 | + self.client.set_volume_created_callback(a_callback) |
280 | + |
281 | + message = build_volume_created() |
282 | + set_share_message(message.volume_created) |
283 | + share = volumes.ShareVolume.from_msg(message.volume_created.share) |
284 | + |
285 | + self.client.handle_VOLUME_CREATED(message) |
286 | + self.assertEquals(share, self.volume) |
287 | + |
288 | + def test_handle_volume_created_if_volume_is_buggy(self): |
289 | + """Test handle_VOLUME_CREATED if the volume is buggy.""" |
290 | + message = build_volume_created() |
291 | + message.volume_created.type = -1 # invalid type! |
292 | + self.client.set_volume_created_callback(lambda vol: None) |
293 | + self.assertRaises(TypeError, self.client.handle_VOLUME_CREATED, |
294 | + message) |
295 | + |
296 | + def test_handle_volume_created_if_callback_is_none(self): |
297 | + """Test handle_VOLUME_CREATED if callback is none.""" |
298 | + message = build_volume_created() |
299 | + self.client.handle_VOLUME_CREATED(message) |
300 | + |
301 | + def test_handle_volume_deleted(self): |
302 | + """Test handle_VOLUME_DELETED.""" |
303 | + a_callback = was_called(self, 'called') |
304 | + self.client.set_volume_deleted_callback(a_callback) |
305 | + |
306 | + message = build_volume_deleted() |
307 | + message.volume_deleted.volume = str(VOLUME) |
308 | + self.client.handle_VOLUME_DELETED(message) |
309 | + |
310 | + self.assertTrue(self.called) |
311 | + |
312 | + def test_handle_volume_deleted_passes_the_id(self): |
313 | + """Test handle_VOLUME_DELETED.""" |
314 | + self.volume = None |
315 | + a_callback = lambda vol_id: setattr(self, 'volume', vol_id) |
316 | + self.client.set_volume_deleted_callback(a_callback) |
317 | + |
318 | + message = build_volume_deleted() |
319 | + message.volume_deleted.volume = str(VOLUME) |
320 | + self.client.handle_VOLUME_DELETED(message) |
321 | + |
322 | + self.assertEquals(VOLUME, self.volume) |
323 | + |
324 | + def test_handle_volume_deleted_if_none(self): |
325 | + """Test handle_VOLUME_DELETED if callback is none.""" |
326 | + message = build_volume_deleted() |
327 | + self.client.handle_VOLUME_DELETED(message) |
328 | + |
329 | + |
330 | +class CreateUDFTestCase(unittest.TestCase): |
331 | + """Test cases for CreateUDF op.""" |
332 | + |
333 | + def setUp(self): |
334 | + """Initialize testing protocol.""" |
335 | + self.protocol = FakedProtocol() |
336 | + self.request = CreateUDF(self.protocol, path=PATH, name=NAME) |
337 | + self.request.error = faked_error |
338 | + self.done_called = False |
339 | + self.request.done = was_called(self, 'done_called') |
340 | + |
341 | + def tearDown(self): |
342 | + """Clean up.""" |
343 | + self.protocol = None |
344 | + self.request = None |
345 | + |
346 | + def test_init(self): |
347 | + """Test request creation.""" |
348 | + self.assertEquals(PATH, self.request.path) |
349 | + self.assertEquals(NAME, self.request.name) |
350 | + self.assertTrue(self.request.volume_id is None) |
351 | + self.assertTrue(self.request.node_id is None) |
352 | + |
353 | + def test_start(self): |
354 | + """Test request start.""" |
355 | + self.request.start() |
356 | + |
357 | + self.assertEquals(1, len(self.request.protocol.messages)) |
358 | + actual_msg, = self.request.protocol.messages |
359 | + self.assertEquals(protocol_pb2.Message.CREATE_UDF, actual_msg.type) |
360 | + self.assertEquals(self.request.path, actual_msg.create_udf.path) |
361 | + self.assertEquals(self.request.name, actual_msg.create_udf.name) |
362 | + |
363 | + def test_process_message_error(self): |
364 | + """Test request processMessage on error.""" |
365 | + message = protocol_pb2.Message() |
366 | + self.assertRaises(FakedError, self.request.processMessage, message) |
367 | + |
368 | + def test_process_message_volume_created(self): |
369 | + """Test request processMessage on sucess.""" |
370 | + message = protocol_pb2.Message() |
371 | + message.type = protocol_pb2.Message.VOLUME_CREATED |
372 | + message.volume_created.type = protocol_pb2.Volumes.UDF |
373 | + message.volume_created.udf.volume = str(VOLUME) |
374 | + message.volume_created.udf.node = str(NODE) |
375 | + self.request.processMessage(message) |
376 | + |
377 | + self.assertEquals(str(VOLUME), self.request.volume_id, 'volume set') |
378 | + self.assertEquals(str(NODE), self.request.node_id, 'node set') |
379 | + self.assertTrue(self.done_called, 'done() was called') |
380 | + |
381 | + |
382 | +class ListVolumesTestCase(unittest.TestCase): |
383 | + """Test cases for ListVolumes op.""" |
384 | + |
385 | + def setUp(self): |
386 | + """Initialize testing protocol.""" |
387 | + self.protocol = FakedProtocol() |
388 | + self.request = ListVolumes(self.protocol) |
389 | + self.request.error = faked_error |
390 | + self.done_called = False |
391 | + self.request.done = was_called(self, 'done_called') |
392 | + |
393 | + def tearDown(self): |
394 | + """Clean up.""" |
395 | + self.protocol = None |
396 | + self.request = None |
397 | + |
398 | + def test_init(self): |
399 | + """Test request creation.""" |
400 | + self.assertEquals([], self.request.volumes) |
401 | + |
402 | + def test_start(self): |
403 | + """Test request start.""" |
404 | + self.request.start() |
405 | + |
406 | + self.assertEquals(1, len(self.request.protocol.messages)) |
407 | + actual_msg, = self.request.protocol.messages |
408 | + self.assertEquals(protocol_pb2.Message.LIST_VOLUMES, actual_msg.type) |
409 | + |
410 | + def test_process_message_error(self): |
411 | + """Test request processMessage on error.""" |
412 | + message = protocol_pb2.Message() |
413 | + self.assertRaises(FakedError, self.request.processMessage, message) |
414 | + |
415 | + def test_process_message_error_when_incorrect_volume(self): |
416 | + """Test error condition when incorrect volume type.""" |
417 | + message = build_list_volumes() |
418 | + message.list_volumes.type = -1 |
419 | + self.assertRaises(FakedError, self.request.processMessage, message) |
420 | + |
421 | + def test_process_message_volume_created(self): |
422 | + """Test request processMessage on sucess.""" |
423 | + message = build_list_volumes() |
424 | + set_udf_message(message.list_volumes) |
425 | + udf = volumes.UDFVolume.from_msg(message.list_volumes.udf) |
426 | + self.request.processMessage(message) |
427 | + |
428 | + message = build_list_volumes() |
429 | + set_share_message(message.list_volumes) |
430 | + share = volumes.ShareVolume.from_msg(message.list_volumes.share) |
431 | + self.request.processMessage(message) |
432 | + |
433 | + message = build_list_volumes() |
434 | + set_root_message(message.list_volumes) |
435 | + root = volumes.RootVolume.from_msg(message.list_volumes.root) |
436 | + self.request.processMessage(message) |
437 | + |
438 | + self.assertEquals(3, len(self.request.volumes), |
439 | + '3 volumes stored') |
440 | + self.assertEquals([udf, share, root], self.request.volumes, |
441 | + 'volumes stored') |
442 | + |
443 | + message = protocol_pb2.Message() |
444 | + message.type = protocol_pb2.Message.VOLUMES_END |
445 | + self.request.processMessage(message) |
446 | + |
447 | + self.assertTrue(self.done_called, 'done() was called') |
448 | + |
449 | + def test_start_cleanups_volumes(self): |
450 | + """Test start() is idempotent.""" |
451 | + self.request.start() |
452 | + |
453 | + message = build_list_volumes() |
454 | + set_udf_message(message.list_volumes) |
455 | + self.request.processMessage(message) |
456 | + |
457 | + message = protocol_pb2.Message() |
458 | + message.type = protocol_pb2.Message.VOLUMES_END |
459 | + self.request.processMessage(message) |
460 | + |
461 | + self.request.start() |
462 | + self.assertEquals([], self.request.volumes) |
463 | + |
464 | + |
465 | +class DeleteVolumeTestCase(unittest.TestCase): |
466 | + """Test cases for DeleteVolume op.""" |
467 | + |
468 | + def setUp(self): |
469 | + """Initialize testing protocol.""" |
470 | + self.protocol = FakedProtocol() |
471 | + self.request = DeleteVolume(self.protocol, volume_id=VOLUME) |
472 | + self.request.error = faked_error |
473 | + self.done_called = False |
474 | + self.request.done = was_called(self, 'done_called') |
475 | + |
476 | + def tearDown(self): |
477 | + """Clean up.""" |
478 | + self.protocol = None |
479 | + self.request = None |
480 | + |
481 | + def test_init(self): |
482 | + """Test request creation.""" |
483 | + self.assertEquals(str(VOLUME), self.request.volume_id) |
484 | + |
485 | + def test_start(self): |
486 | + """Test request start.""" |
487 | + self.request.start() |
488 | + |
489 | + self.assertEquals(1, len(self.request.protocol.messages)) |
490 | + actual_msg, = self.request.protocol.messages |
491 | + self.assertEquals(protocol_pb2.Message.DELETE_VOLUME, actual_msg.type) |
492 | + self.assertEquals(self.request.volume_id, |
493 | + actual_msg.delete_volume.volume) |
494 | + |
495 | + def test_process_message_error(self): |
496 | + """Test request processMessage on error.""" |
497 | + message = protocol_pb2.Message() |
498 | + self.assertRaises(FakedError, self.request.processMessage, message) |
499 | + |
500 | + def test_process_message_ok(self): |
501 | + """Test request processMessage on sucess.""" |
502 | + message = protocol_pb2.Message() |
503 | + message.type = protocol_pb2.Message.OK |
504 | + self.request.processMessage(message) |
505 | + |
506 | + self.assertTrue(self.done_called, 'done() was called') |
507 | + |
508 | + |
509 | +if __name__ == '__main__': |
510 | + unittest.main() |
511 | |
512 | === modified file 'tests/test_dircontent.py' |
513 | --- tests/test_dircontent.py 2009-08-11 16:00:00 +0000 |
514 | +++ tests/test_dircontent.py 2010-02-17 23:29:10 +0000 |
515 | @@ -41,17 +41,21 @@ |
516 | self.assertRaises(InvalidFilename, normalize_filename, "..") |
517 | self.assertRaises(InvalidFilename, validate_filename, "..") |
518 | |
519 | + def test_valid_characters(self): |
520 | + """Tests that all weird but valid characters are accepted.""" |
521 | + for n in range(1, 32): |
522 | + filename = u"xy" + unichr(n) + u"zzy" |
523 | + normalize_filename(filename) |
524 | + validate_filename(filename) |
525 | + for c in [u':', u';', u'*', u'?', u'\\', u'\x7f']: |
526 | + filename = u"xy" + c + u"zzy" |
527 | + normalize_filename(filename) |
528 | + validate_filename(filename) |
529 | + |
530 | def test_excluded_character(self): |
531 | """Tests that all excluded characters are banned.""" |
532 | - for n in range(0, 32): |
533 | - name = u"xyz" + unicode(chr(n)) |
534 | - try: |
535 | - self.assertRaises(InvalidFilename, normalize_filename, name) |
536 | - self.assertRaises(InvalidFilename, validate_filename, name) |
537 | - except AssertionError, e: |
538 | - raise AssertionError(u"%s for %s" % (unicode(e), name)) |
539 | - for c in [u':', u';', u'*', u'?', u'\\', u'/', u'\x7f']: |
540 | - name = u"xyz" + c |
541 | + for c in [u'/', unichr(0)]: |
542 | + name = u"xy" + c + u"zzy" |
543 | try: |
544 | self.assertRaises(InvalidFilename, normalize_filename, name) |
545 | self.assertRaises(InvalidFilename, validate_filename, name) |
546 | |
547 | === modified file 'tests/test_throttling.py' |
548 | --- tests/test_throttling.py 2009-12-07 17:00:00 +0000 |
549 | +++ tests/test_throttling.py 2010-02-17 23:29:10 +0000 |
550 | @@ -20,7 +20,7 @@ |
551 | |
552 | from __future__ import with_statement |
553 | |
554 | -from twisted.internet import defer, reactor |
555 | +from twisted.internet import task |
556 | from twisted.trial.unittest import TestCase as TwistedTestCase |
557 | |
558 | from ubuntuone.storageprotocol import client |
559 | @@ -48,168 +48,106 @@ |
560 | self.events.append("unthW") |
561 | |
562 | |
563 | -class TestProducingState(TwistedTestCase): |
564 | +class BaseThrottlingTestCase(TwistedTestCase): |
565 | + """Base test case for ThrottlingStorageClientFactory.""" |
566 | + |
567 | + def setUp(self): |
568 | + self.client = FakeClient() |
569 | + self.factories = [] |
570 | + self.clock = task.Clock() |
571 | + # use task.Clock instead of the reactor for the callLater |
572 | + self.old_callLater = client.ThrottlingStorageClientFactory.callLater |
573 | + client.ThrottlingStorageClientFactory.callLater = self.clock.callLater |
574 | + |
575 | + def tearDown(self): |
576 | + for f in self.factories: |
577 | + f.unregisterProtocol(None) |
578 | + client.ThrottlingStorageClientFactory.callLater = self.old_callLater |
579 | + |
580 | + def create_factory(self, read_limit, write_limit): |
581 | + """Create a ThrottlingStorageClientFactory with the specified args.""" |
582 | + tscf = client.ThrottlingStorageClientFactory(read_limit, write_limit) |
583 | + tscf.client = self.client |
584 | + self.factories.append(tscf) |
585 | + return tscf |
586 | + |
587 | + |
588 | +class TestProducingState(BaseThrottlingTestCase): |
589 | """Test for filename validation and normalization.""" |
590 | |
591 | timeout = 5 |
592 | |
593 | def setUp(self): |
594 | - self.client = FakeClient() |
595 | - self.tscf = client.ThrottlingStorageClientFactory(3, 3) |
596 | - self.tscf.client = self.client |
597 | - |
598 | - def tearDown(self): |
599 | - self.tscf.unregisterProtocol(None) |
600 | + BaseThrottlingTestCase.setUp(self) |
601 | + self.tscf = self.create_factory(3, 3) |
602 | |
603 | def test_under_write_limit(self): |
604 | """Don't pas the write limit, no event.""" |
605 | - d = defer.Deferred() |
606 | self.tscf.registerWritten(2) |
607 | - |
608 | - def check(): |
609 | - """Check for the correct events.""" |
610 | - self.assertEqual(self.client.events, []) |
611 | - d.callback(True) |
612 | - |
613 | - reactor.callLater(.1, check) |
614 | - return d |
615 | + self.clock.advance(.1) |
616 | + self.assertEqual(self.client.events, []) |
617 | |
618 | def test_under_read_limit(self): |
619 | """Don't pas the read limit, no event.""" |
620 | - d = defer.Deferred() |
621 | self.tscf.registerRead(2) |
622 | - |
623 | - def check(): |
624 | - """Check for the correct events.""" |
625 | - self.assertEqual(self.client.events, []) |
626 | - d.callback(True) |
627 | - |
628 | - reactor.callLater(.1, check) |
629 | - return d |
630 | + self.clock.advance(.1) |
631 | + self.assertEqual(self.client.events, []) |
632 | |
633 | def test_above_write_throttles(self): |
634 | """Above the write limit, throttles.""" |
635 | - d = defer.Deferred() |
636 | self.tscf.registerWritten(4) |
637 | - |
638 | - def check(): |
639 | - """Check for the correct events.""" |
640 | - self.assertEqual(self.client.events, ["thW"]) |
641 | - d.callback(True) |
642 | - |
643 | - reactor.callLater(.1, check) |
644 | - return d |
645 | + self.clock.advance(.1) |
646 | + self.assertEqual(self.client.events, ["thW"]) |
647 | |
648 | def test_above_read_throttles(self): |
649 | """Above the read limit, throttles.""" |
650 | - d = defer.Deferred() |
651 | self.tscf.registerRead(4) |
652 | - |
653 | - def check(): |
654 | - """Check for the correct events.""" |
655 | - self.assertEqual(self.client.events, ["thR"]) |
656 | - d.callback(True) |
657 | - |
658 | - reactor.callLater(.1, check) |
659 | - return d |
660 | + self.clock.advance(.1) |
661 | + self.assertEqual(self.client.events, ["thR"]) |
662 | |
663 | def test_above_write_throttles_unthrottles(self): |
664 | """Above the write limit, throttles and unthrottles after 1s.""" |
665 | - d = defer.Deferred() |
666 | self.tscf.registerWritten(4) |
667 | - |
668 | - def check(): |
669 | - """Check for the correct events.""" |
670 | - self.assertEqual(self.client.events, ["thW", "unthW"]) |
671 | - d.callback(True) |
672 | - |
673 | - reactor.callLater(1.1, check) |
674 | - return d |
675 | + self.clock.advance(1.1) |
676 | + self.assertEqual(self.client.events, ["thW", "unthW"]) |
677 | |
678 | def test_above_read_throttles_unthrottles(self): |
679 | """Above the read limit, throttles and unthrottles after 1s.""" |
680 | - d = defer.Deferred() |
681 | self.tscf.registerRead(4) |
682 | - |
683 | - def check(): |
684 | - """Check for the correct events.""" |
685 | - self.assertEqual(self.client.events, ["thR", "unthR"]) |
686 | - d.callback(True) |
687 | - |
688 | - reactor.callLater(1.1, check) |
689 | - return d |
690 | + self.clock.advance(1.1) |
691 | + self.assertEqual(self.client.events, ["thR", "unthR"]) |
692 | |
693 | def test_very_above_write_throttles_unthrottles(self): |
694 | """A lot above the write limit, throttles and unthrottles.""" |
695 | - d = defer.Deferred() |
696 | self.tscf.registerWritten(8) |
697 | - |
698 | - def check1(): |
699 | - """Check for the correct events.""" |
700 | - self.assertEqual(self.client.events, ["thW"]) |
701 | - reactor.callLater(1, check2) |
702 | - |
703 | - def check2(): |
704 | - """Check for the correct events.""" |
705 | - self.assertEqual(self.client.events, ["thW", "unthW"]) |
706 | - d.callback(True) |
707 | - |
708 | - reactor.callLater(1.1, check1) |
709 | - return d |
710 | + self.clock.advance(1.1) |
711 | + self.assertEqual(self.client.events, ["thW"]) |
712 | + self.clock.advance(1) |
713 | + self.assertEqual(self.client.events, ["thW", "unthW"]) |
714 | |
715 | def test_very_above_read_throttles_unthrottles(self): |
716 | """A lot above the read limit, throttles and unthrottles.""" |
717 | - d = defer.Deferred() |
718 | self.tscf.registerRead(8) |
719 | - |
720 | - def check1(): |
721 | - """Check for the correct events.""" |
722 | - self.assertEqual(self.client.events, ["thR"]) |
723 | - reactor.callLater(1, check2) |
724 | - |
725 | - def check2(): |
726 | - """Check for the correct events.""" |
727 | - self.assertEqual(self.client.events, ["thR", "unthR"]) |
728 | - d.callback(True) |
729 | - |
730 | - reactor.callLater(1.1, check1) |
731 | - return d |
732 | + self.clock.advance(1.1) |
733 | + self.assertEqual(self.client.events, ["thR"]) |
734 | + self.clock.advance(1) |
735 | + self.assertEqual(self.client.events, ["thR", "unthR"]) |
736 | |
737 | def test_double_write(self): |
738 | """Two writes on a row while throttling.""" |
739 | - d = defer.Deferred() |
740 | self.tscf.registerWritten(4) |
741 | - |
742 | - def check1(): |
743 | - """Check for the correct events.""" |
744 | - self.assertEqual(self.client.events, ["thW"]) |
745 | - self.tscf.registerWritten(1) |
746 | - reactor.callLater(2, check2) |
747 | - |
748 | - def check2(): |
749 | - """Check for the correct events.""" |
750 | - self.assertEqual(self.client.events, ["thW", "unthW"]) |
751 | - d.callback(True) |
752 | - |
753 | - reactor.callLater(.1, check1) |
754 | - return d |
755 | + self.clock.advance(.1) |
756 | + self.assertEqual(self.client.events, ["thW"]) |
757 | + self.tscf.registerWritten(1) |
758 | + self.clock.advance(2) |
759 | + self.assertEqual(self.client.events, ["thW", "unthW"]) |
760 | |
761 | def test_double_read(self): |
762 | """Two read on a row while throttling.""" |
763 | - d = defer.Deferred() |
764 | self.tscf.registerRead(4) |
765 | - |
766 | - def check1(): |
767 | - """Check for the correct events.""" |
768 | - self.assertEqual(self.client.events, ["thR"]) |
769 | - self.tscf.registerWritten(1) |
770 | - reactor.callLater(2, check2) |
771 | - |
772 | - def check2(): |
773 | - """Check for the correct events.""" |
774 | - self.assertEqual(self.client.events, ["thR", "unthR"]) |
775 | - d.callback(True) |
776 | - |
777 | - reactor.callLater(.1, check1) |
778 | - return d |
779 | + self.clock.advance(.1) |
780 | + self.assertEqual(self.client.events, ["thR"]) |
781 | + self.tscf.registerWritten(1) |
782 | + self.clock.advance(2) |
783 | + self.assertEqual(self.client.events, ["thR", "unthR"]) |
784 | |
785 | |
786 | === added file 'tests/test_volumes.py' |
787 | --- tests/test_volumes.py 1970-01-01 00:00:00 +0000 |
788 | +++ tests/test_volumes.py 2010-02-17 23:29:10 +0000 |
789 | @@ -0,0 +1,164 @@ |
790 | +# coding=utf-8 |
791 | +# |
792 | +# Author: Natalia B. Bidart <natalia.bidart@canonical.com> |
793 | +# |
794 | +# Copyright (C) 2009 Canonical Ltd. |
795 | +# |
796 | +# This program is free software: you can redistribute it and/or modify it |
797 | +# under the terms of the GNU Affero General Public License version 3, |
798 | +# as published by the Free Software Foundation. |
799 | +# |
800 | +# This program is distributed in the hope that it will be useful, but |
801 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
802 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
803 | +# PURPOSE. See the GNU Affero General Public License for more details. |
804 | +# |
805 | +# You should have received a copy of the GNU Affero General Public License |
806 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
807 | +"""Tests for volume data type.""" |
808 | + |
809 | +import unittest |
810 | +import uuid |
811 | + |
812 | +from copy import copy |
813 | + |
814 | +from ubuntuone.storageprotocol import protocol_pb2, volumes |
815 | + |
816 | +PATH = u'~/Documents/pdfs/moño/' |
817 | +NAME = u'What a beatiful volume' |
818 | +VOLUME = uuid.UUID('12345678-1234-1234-1234-123456789abc') |
819 | +NODE = uuid.UUID('FEDCBA98-7654-3211-2345-6789ABCDEF12') |
820 | +USER = u'dude' |
821 | + |
822 | +class VolumeTestCase(unittest.TestCase): |
823 | + """Check Volume data type.""" |
824 | + |
825 | + volume_class = volumes.Volume |
826 | + kwargs = dict(volume_id=VOLUME, node_id=NODE) |
827 | + |
828 | + def setUp(self): |
829 | + """Initialize testing volume.""" |
830 | + self.volume = self.volume_class(**self.kwargs) |
831 | + |
832 | + def tearDown(self): |
833 | + """Clean up.""" |
834 | + self.volume = None |
835 | + |
836 | + def assert_correct_attributes(self): |
837 | + """Assert over attribute correctness.""" |
838 | + self.assertEquals(VOLUME, self.volume.volume_id) |
839 | + self.assertEquals(NODE, self.volume.node_id) |
840 | + |
841 | + def test_creation(self): |
842 | + """Test creation.""" |
843 | + self.assert_correct_attributes() |
844 | + |
845 | + def test_is_a_volume(self): |
846 | + """Test class inheritance.""" |
847 | + self.assertTrue(isinstance(self.volume, volumes.Volume)) |
848 | + |
849 | + |
850 | + def test_from_params(self): |
851 | + """Test creation using from_params.""" |
852 | + self.volume = self.volume_class.from_params(**self.kwargs) |
853 | + self.assert_correct_attributes() |
854 | + |
855 | + def test_from_msg(self): |
856 | + """Test creation using from_msg.""" |
857 | + self.assertRaises(NotImplementedError, self.volume_class.from_msg, None) |
858 | + |
859 | + def test_is_equal(self): |
860 | + """Test object equality.""" |
861 | + other = copy(self.volume) |
862 | + self.assertEquals(other, self.volume) |
863 | + |
864 | + for attr, value in self.kwargs.iteritems(): |
865 | + setattr(other, attr, None) |
866 | + self.assertNotEquals(other, self.volume, |
867 | + 'not equal when %s differ' % attr) |
868 | + setattr(other, attr, value) |
869 | + |
870 | + self.assertEquals(other, self.volume) |
871 | + |
872 | + |
873 | +class ShareTestCase(VolumeTestCase): |
874 | + """Check Share data type.""" |
875 | + |
876 | + # pylint: disable-msg=W0212 |
877 | + to_me = volumes._direction_prot2nice[protocol_pb2.Shares.TO_ME] |
878 | + only_view = volumes._access_prot2nice[protocol_pb2.Shares.VIEW] |
879 | + |
880 | + volume_class = volumes.ShareVolume |
881 | + kwargs = dict(volume_id=VOLUME, node_id=NODE, |
882 | + direction=to_me, |
883 | + share_name=NAME, other_username=USER, |
884 | + other_visible_name=USER, accepted=False, |
885 | + access_level=only_view) |
886 | + |
887 | + def assert_correct_attributes(self): |
888 | + """Assert over attribute correctness.""" |
889 | + super(ShareTestCase, self).assert_correct_attributes() |
890 | + self.assertEquals(self.to_me, self.volume.direction) |
891 | + self.assertEquals(NAME, self.volume.share_name) |
892 | + self.assertEquals(USER, self.volume.other_username) |
893 | + self.assertEquals(USER, self.volume.other_visible_name) |
894 | + self.assertEquals(False, self.volume.accepted) |
895 | + self.assertEquals(self.only_view, self.volume.access_level) |
896 | + |
897 | + def test_from_msg(self): |
898 | + """Test creation using from_msg.""" |
899 | + message = protocol_pb2.Shares() |
900 | + # pylint: disable-msg=W0201 |
901 | + message.share_id = str(VOLUME) |
902 | + message.subtree = str(NODE) |
903 | + message.share_name = NAME |
904 | + message.other_username = USER |
905 | + message.other_visible_name = USER |
906 | + self.volume = self.volume_class.from_msg(message) |
907 | + self.assert_correct_attributes() |
908 | + |
909 | + |
910 | +class UDFTestCase(VolumeTestCase): |
911 | + """Check UDF data type.""" |
912 | + |
913 | + volume_class = volumes.UDFVolume |
914 | + kwargs = dict(volume_id=VOLUME, node_id=NODE, suggested_path=PATH) |
915 | + |
916 | + def assert_correct_attributes(self): |
917 | + """Assert over attribute correctness.""" |
918 | + super(UDFTestCase, self).assert_correct_attributes() |
919 | + self.assertEquals(PATH, self.volume.suggested_path) |
920 | + |
921 | + def test_from_msg(self): |
922 | + """Test creation using from_msg.""" |
923 | + message = protocol_pb2.UDFs() |
924 | + # pylint: disable-msg=W0201 |
925 | + message.volume = str(VOLUME) |
926 | + message.node = str(NODE) |
927 | + message.suggested_path = PATH |
928 | + self.volume = self.volume_class.from_msg(message) |
929 | + self.assert_correct_attributes() |
930 | + |
931 | + |
932 | +class RootTestCase(VolumeTestCase): |
933 | + """Check Root data type.""" |
934 | + |
935 | + volume_class = volumes.RootVolume |
936 | + kwargs = dict(node_id=NODE) |
937 | + |
938 | + def assert_correct_attributes(self): |
939 | + """Assert over attribute correctness.""" |
940 | + self.assertEquals(None, self.volume.volume_id) |
941 | + self.assertEquals(NODE, self.volume.node_id) |
942 | + |
943 | + def test_from_msg(self): |
944 | + """Test creation using from_msg.""" |
945 | + message = protocol_pb2.Root() |
946 | + # pylint: disable-msg=W0201 |
947 | + message.node = str(NODE) |
948 | + self.volume = self.volume_class.from_msg(message) |
949 | + self.assert_correct_attributes() |
950 | + |
951 | + |
952 | +if __name__ == '__main__': |
953 | + unittest.main() |
954 | |
955 | === modified file 'ubuntuone/storageprotocol/client.py' |
956 | --- ubuntuone/storageprotocol/client.py 2009-12-07 17:00:00 +0000 |
957 | +++ ubuntuone/storageprotocol/client.py 2010-02-17 23:29:10 +0000 |
958 | @@ -1,6 +1,7 @@ |
959 | # ubuntuone.storageprotocol.client - the storage protocol client |
960 | # |
961 | # Author: Lucio Torre <lucio.torre@canonical.com> |
962 | +# Author: Natalia B. Bidart <natalia.bidart@canonical.com> |
963 | # |
964 | # Copyright 2009 Canonical Ltd. |
965 | # |
966 | @@ -15,28 +16,27 @@ |
967 | # |
968 | # You should have received a copy of the GNU Affero General Public License |
969 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
970 | -""" |
971 | -The storage protocol client. |
972 | - |
973 | -""" |
974 | -from twisted.internet.protocol import ClientFactory |
975 | -from twisted.internet import reactor, defer |
976 | -from twisted.python import log |
977 | - |
978 | +"""The storage protocol client.""" |
979 | + |
980 | +import logging |
981 | import uuid |
982 | + |
983 | from functools import partial |
984 | from itertools import chain |
985 | -import logging |
986 | from oauth import oauth |
987 | -from ubuntuone.storageprotocol import protocol_pb2 |
988 | -from ubuntuone.storageprotocol import request |
989 | -from ubuntuone.storageprotocol import sharersp |
990 | - |
991 | + |
992 | +from twisted.internet.protocol import ClientFactory |
993 | +from twisted.internet import reactor, defer |
994 | +from twisted.python import log |
995 | + |
996 | +from ubuntuone.storageprotocol import ( |
997 | + protocol_pb2, request, sharersp, volumes |
998 | +) |
999 | |
1000 | log_debug = partial(log.msg, loglevel=logging.DEBUG) |
1001 | |
1002 | class StorageClient(request.RequestHandler): |
1003 | - """ A Basic Storage Protocol client.""" |
1004 | + """A Basic Storage Protocol client.""" |
1005 | |
1006 | # we are a client, we do odd requests |
1007 | REQUEST_ID_START = 1 |
1008 | @@ -46,28 +46,34 @@ |
1009 | request.RequestHandler.__init__(self) |
1010 | self.root_id = None |
1011 | self.root_id_defers = [] |
1012 | + |
1013 | self._node_state_callback = None |
1014 | self._share_change_callback = None |
1015 | self._share_answer_callback = None |
1016 | self._free_space_callback = None |
1017 | self._account_info_callback = None |
1018 | + self._volume_created_callback = None |
1019 | + self._volume_deleted_callback = None |
1020 | + |
1021 | self.line_mode = True |
1022 | |
1023 | def protocol_version(self): |
1024 | - """ask for the protocol version |
1025 | + """Ask for the protocol version |
1026 | |
1027 | will return a deferred that will get called with |
1028 | - the request object when completed |
1029 | + the request object when completed. |
1030 | + |
1031 | """ |
1032 | p = ProtocolVersion(self) |
1033 | p.start() |
1034 | return p.deferred |
1035 | |
1036 | def dataReceived(self, data): |
1037 | - """extends dataReceived. |
1038 | - |
1039 | - this method first reads the protocol hello line then switches back to |
1040 | - len+data.""" |
1041 | + """Extend dataReceived. |
1042 | + |
1043 | + First reads the protocol hello line then switch back to len+data. |
1044 | + |
1045 | + """ |
1046 | if self.line_mode: |
1047 | # first read the hello line, then back to binary. |
1048 | try: |
1049 | @@ -82,8 +88,9 @@ |
1050 | def dummy_authenticate(self, credentials): |
1051 | """Authenticate to a server using the 'dummy auth' provider. |
1052 | |
1053 | - Returns a deferred that will get called with the request |
1054 | + Return a deferred that will get called with the request |
1055 | object when completed. |
1056 | + |
1057 | """ |
1058 | p = Authenticate(self, {'dummy_token': credentials}) |
1059 | p.start() |
1060 | @@ -97,8 +104,9 @@ |
1061 | @param token: a previously acquired OAuth access token. |
1062 | @type consumer: `oauth.OAuthToken` |
1063 | |
1064 | - Returns a deferred that will get called with the request |
1065 | + Return a deferred that will get called with the request |
1066 | object when completed. |
1067 | + |
1068 | """ |
1069 | request = oauth.OAuthRequest.from_consumer_and_token( |
1070 | oauth_consumer=consumer, |
1071 | @@ -116,9 +124,10 @@ |
1072 | return p.deferred |
1073 | |
1074 | def handle_ROOT(self, message): |
1075 | - """handle incoming ROOT message |
1076 | - |
1077 | - will notify if someone is waiting for this information |
1078 | + """Handle incoming ROOT message. |
1079 | + |
1080 | + Will notify if someone is waiting for this information. |
1081 | + |
1082 | """ |
1083 | self.root_id = message.root.node |
1084 | if self.root_id_defers: |
1085 | @@ -127,40 +136,66 @@ |
1086 | self.root_id_defers = [] |
1087 | |
1088 | def handle_NODE_STATE(self, message): |
1089 | - """handle incoming NODE_STATE""" |
1090 | + """Handle incoming NODE_STATE.""" |
1091 | self.notify_node_state(message.node_state) |
1092 | |
1093 | def handle_NOTIFY_SHARE(self, message): |
1094 | - """handle incoming NOTIFY_SHARE""" |
1095 | + """Handle incoming NOTIFY_SHARE.""" |
1096 | self.notify_share_change(message) |
1097 | |
1098 | def handle_SHARE_DELETED(self, message): |
1099 | - """handle incoming SHARE_DELETED""" |
1100 | + """Handle incoming SHARE_DELETED.""" |
1101 | self.notify_share_change(message) |
1102 | |
1103 | def handle_SHARE_ACCEPTED(self, message): |
1104 | - """handle incoming SHARE_ACCEPTED""" |
1105 | + """Handle incoming SHARE_ACCEPTED.""" |
1106 | self.notify_share_answer(message.share_accepted) |
1107 | |
1108 | + def handle_VOLUME_CREATED(self, message): |
1109 | + """Handle incoming VOLUME_CREATED""" |
1110 | + assert message.type == protocol_pb2.Message.VOLUME_CREATED |
1111 | + msg = message.volume_created |
1112 | + vol = None |
1113 | + if self._volume_created_callback is not None: |
1114 | + if msg.type == protocol_pb2.Volumes.ROOT: |
1115 | + vol = volumes.RootVolume.from_msg(msg.root) |
1116 | + elif msg.type == protocol_pb2.Volumes.SHARE: |
1117 | + vol = volumes.ShareVolume.from_msg(msg.share) |
1118 | + elif msg.type == protocol_pb2.Volumes.UDF: |
1119 | + vol = volumes.UDFVolume.from_msg(msg.udf) |
1120 | + else: |
1121 | + raise TypeError("Message.volume_created's type is not valid: %s" % |
1122 | + message.volume_created.type) |
1123 | + |
1124 | + self._volume_created_callback(vol) |
1125 | + |
1126 | + def handle_VOLUME_DELETED(self, message): |
1127 | + """Handle incoming VOLUME_DELETED.""" |
1128 | + assert message.type == protocol_pb2.Message.VOLUME_DELETED |
1129 | + if self._volume_deleted_callback is not None: |
1130 | + vol_id = uuid.UUID(message.volume_deleted.volume) |
1131 | + self._volume_deleted_callback(vol_id) |
1132 | + |
1133 | def handle_BEGIN_CONTENT(self, message): |
1134 | - """Accepts and discards a misplaced BEGIN_CONTENT. |
1135 | + """Accept and discard a misplaced BEGIN_CONTENT. |
1136 | |
1137 | It can happen that while the server receives a PUT_CONTENT request |
1138 | and that it tells us to BEGIN_CONTENT, we cancelled the request, |
1139 | received the OK, and this side's request is gone, so receive this |
1140 | message here. |
1141 | + |
1142 | """ |
1143 | |
1144 | def handle_FREE_SPACE_INFO(self, message): |
1145 | - """handle unsolicited FREE_SPACE_INFO""" |
1146 | + """Handle unsolicited FREE_SPACE_INFO.""" |
1147 | self.notify_free_space(message.free_space_info) |
1148 | |
1149 | def handle_ACCOUNT_INFO(self, message): |
1150 | - """handle unsolicited ACCOUNT_INFO""" |
1151 | + """Handle unsolicited ACCOUNT_INFO.""" |
1152 | self.notify_account_info(message.account_info) |
1153 | |
1154 | def get_root(self): |
1155 | - """get the root id through a deferred""" |
1156 | + """Get the root id through a deferred.""" |
1157 | if self.root_id is not None: |
1158 | return defer.succeed(self.root_id) |
1159 | else: |
1160 | @@ -169,43 +204,44 @@ |
1161 | return d |
1162 | |
1163 | def make_dir(self, share, parent, name): |
1164 | - """ create a directory named name on the node parent |
1165 | - |
1166 | - the new node id will be on request.new_dir_id |
1167 | + """Create a directory named name on the node parent |
1168 | + |
1169 | + the new node id will be on request.new_dir_id. |
1170 | + |
1171 | """ |
1172 | p = MakeDir(self, share, parent, name) |
1173 | p.start() |
1174 | return p.deferred |
1175 | |
1176 | def make_file(self, share, parent, name): |
1177 | - """ create a file named name on the node parent |
1178 | - |
1179 | - the new node id will be on request.new_file_id |
1180 | + """Create a file named name on the node parent |
1181 | + |
1182 | + the new node id will be on request.new_file_id. |
1183 | + |
1184 | """ |
1185 | p = MakeFile(self, share, parent, name) |
1186 | p.start() |
1187 | return p.deferred |
1188 | |
1189 | def move(self, share, node, new_parent, new_name): |
1190 | - """ move a node |
1191 | - """ |
1192 | + """Move a node.""" |
1193 | p = Move(self, share, node, new_parent, new_name) |
1194 | p.start() |
1195 | return p.deferred |
1196 | |
1197 | def unlink(self, share, node): |
1198 | - """ unlink a node |
1199 | - """ |
1200 | + """Unlink a node.""" |
1201 | p = Unlink(self, share, node) |
1202 | p.start() |
1203 | return p.deferred |
1204 | |
1205 | def get_content(self, share, node, hash, offset=0, |
1206 | callback=None, node_attr_callback=None): |
1207 | - """ get the content of node with hash |
1208 | + """Get the content of node with hash |
1209 | |
1210 | the content will be on request.content |
1211 | - or callback will be called for every piece that arrives |
1212 | + or callback will be called for every piece that arrives. |
1213 | + |
1214 | """ |
1215 | req = self.get_content_request(share, node, hash, offset, |
1216 | callback, node_attr_callback) |
1217 | @@ -213,10 +249,11 @@ |
1218 | |
1219 | def get_content_request(self, share, node, hash, offset=0, |
1220 | callback=None, node_attr_callback=None): |
1221 | - """ get the content of node with hash, returns the request |
1222 | - |
1223 | - the content will be on request.content |
1224 | - or callback will be called for every piece that arrives |
1225 | + """Get the content of node with hash, return the request. |
1226 | + |
1227 | + The content will be on request.content, or callback will be |
1228 | + called for every piece that arrives. |
1229 | + |
1230 | """ |
1231 | p = GetContent(self, share, node, hash, offset, |
1232 | callback, node_attr_callback) |
1233 | @@ -225,33 +262,31 @@ |
1234 | |
1235 | def put_content(self, share, node, previous_hash, hash, |
1236 | crc32, size, deflated_size, fd): |
1237 | - """ put the content of fd into file node |
1238 | - """ |
1239 | + """Put the content of fd into file node.""" |
1240 | req = self.put_content_request(share, node, previous_hash, |
1241 | hash, crc32, size, deflated_size, fd) |
1242 | return req.deferred |
1243 | |
1244 | def put_content_request(self, share, node, previous_hash, hash, |
1245 | crc32, size, deflated_size, fd): |
1246 | - """ put the content of fd into file node, return the request |
1247 | - """ |
1248 | + """Put the content of fd into file node, return the request.""" |
1249 | p = PutContent(self, share, node, previous_hash, hash, crc32, size, |
1250 | deflated_size, fd) |
1251 | p.start() |
1252 | return p |
1253 | |
1254 | def query(self, items): |
1255 | - """ get the current hash for items if changed |
1256 | - |
1257 | - items is a list of (node, hash) tuples |
1258 | + """Get the current hash for items if changed |
1259 | + |
1260 | + items is a list of (node, hash) tuples. |
1261 | + |
1262 | """ |
1263 | r = MultiQuery(self, items) |
1264 | r.start() |
1265 | return r.deferred |
1266 | |
1267 | def get_free_space(self, share_id): |
1268 | - """Get quota information for the given share (or the user's own |
1269 | - space).""" |
1270 | + """Get quota info for the given share (or the user's own space).""" |
1271 | r = FreeSpaceInquiry(self, share_id) |
1272 | r.start() |
1273 | return r.deferred |
1274 | @@ -263,9 +298,10 @@ |
1275 | return r.deferred |
1276 | |
1277 | def set_node_state_callback(self, callback): |
1278 | - """define the function to be called when a node_state message arrives |
1279 | - |
1280 | - the function will be called with the message as argument |
1281 | + """Define the function to be called when a node_state message arrives |
1282 | + |
1283 | + The function will be called with the message as argument. |
1284 | + |
1285 | """ |
1286 | self._node_state_callback = callback |
1287 | |
1288 | @@ -281,8 +317,9 @@ |
1289 | node_state.hash) |
1290 | |
1291 | def set_free_space_callback(self, callback): |
1292 | - """Sets the quota notification callback, which will be called |
1293 | - with the share id and free bytes. |
1294 | + """Set the quota notification callback. |
1295 | + |
1296 | + It will be called with the share id and free bytes. |
1297 | |
1298 | """ |
1299 | self._free_space_callback = callback |
1300 | @@ -299,8 +336,10 @@ |
1301 | free_space_info.free_bytes) |
1302 | |
1303 | def set_account_info_callback(self, callback): |
1304 | - """Sets the account info notification callback; the callback |
1305 | - will be passed a raw AccountInfo structure when it is called.""" |
1306 | + """Set the account info notification callback; the callback |
1307 | + will be passed a raw AccountInfo structure when it is called. |
1308 | + |
1309 | + """ |
1310 | self._account_info_callback = callback |
1311 | |
1312 | def notify_account_info(self, account_info): |
1313 | @@ -309,9 +348,7 @@ |
1314 | self._account_info_callback(account_info) |
1315 | |
1316 | def set_share_change_callback(self, callback): |
1317 | - """Define the function to be called when something changed regarding |
1318 | - a share. |
1319 | - """ |
1320 | + """Set the callback when something changed regarding a share.""" |
1321 | self._share_change_callback = callback |
1322 | |
1323 | def notify_share_change(self, msg): |
1324 | @@ -319,6 +356,7 @@ |
1325 | notify info. |
1326 | |
1327 | @param msg: - a (raw) NotifyShare message |
1328 | + |
1329 | """ |
1330 | if not self._share_change_callback: |
1331 | return |
1332 | @@ -340,6 +378,7 @@ |
1333 | """Call the current share answer callback, if any, with the info. |
1334 | |
1335 | @param msg: - a (raw) ShareAccepted message |
1336 | + |
1337 | """ |
1338 | if self._share_answer_callback: |
1339 | if msg.answer == protocol_pb2.ShareAccepted.YES: |
1340 | @@ -350,8 +389,22 @@ |
1341 | raise ValueError("Not supported ShareAccepted answer") |
1342 | self._share_answer_callback(uuid.UUID(msg.share_id), answer) |
1343 | |
1344 | + def set_volume_created_callback(self, callback): |
1345 | + """Set the callback for volume creation notification.""" |
1346 | + if callable(callback): |
1347 | + self._volume_created_callback = callback |
1348 | + else: |
1349 | + raise TypeError('callback for volume_created must be callable') |
1350 | + |
1351 | + def set_volume_deleted_callback(self, callback): |
1352 | + """Set the callback for volume deletion notification.""" |
1353 | + if callable(callback): |
1354 | + self._volume_deleted_callback = callback |
1355 | + else: |
1356 | + raise TypeError('callback for volume_deleted must be callable') |
1357 | + |
1358 | def create_share(self, node, share_to, name, access_level): |
1359 | - """Creates a share to other user. |
1360 | + """Create a share to other user. |
1361 | |
1362 | node: which node to share. |
1363 | share_to: the id of the receiving user. |
1364 | @@ -360,25 +413,28 @@ |
1365 | |
1366 | There's no need to indicate where the node lives, as it only can be |
1367 | in own root (there's no re-sharing). |
1368 | + |
1369 | """ |
1370 | r = CreateShare(self, node, share_to, name, access_level) |
1371 | r.start() |
1372 | return r.deferred |
1373 | |
1374 | def delete_share(self, share_id): |
1375 | - """Deletes a share we have offered. |
1376 | + """Delete a share we have offered. |
1377 | |
1378 | @param share_id: the id of the share to delete |
1379 | + |
1380 | """ |
1381 | r = DeleteShare(self, share_id) |
1382 | r.start() |
1383 | return r.deferred |
1384 | |
1385 | def accept_share(self, share_id, answer): |
1386 | - """Accepts (or not) a share from other user. |
1387 | + """Accept (or not) a share from other user. |
1388 | |
1389 | share_id: the share id |
1390 | answer: if it was accepted ("Yes") or not ("No") |
1391 | + |
1392 | """ |
1393 | r = AcceptShare(self, share_id, answer) |
1394 | r.start() |
1395 | @@ -389,16 +445,52 @@ |
1396 | |
1397 | This includes the shares the user created, and those that were |
1398 | shared to her. |
1399 | + |
1400 | """ |
1401 | p = ListShares(self) |
1402 | p.start() |
1403 | return p.deferred |
1404 | |
1405 | + def create_udf(self, path, name): |
1406 | + """Create a User Defined Folder. |
1407 | + |
1408 | + @param path: the path in disk to the UDF. |
1409 | + @param name: the name of the UDF. |
1410 | + |
1411 | + """ |
1412 | + p = CreateUDF(self, path, name) |
1413 | + p.start() |
1414 | + return p.deferred |
1415 | + |
1416 | + def list_volumes(self): |
1417 | + """List all the volumes the user has. |
1418 | + |
1419 | + This includes the volumes: |
1420 | + - all the user's UDFs. |
1421 | + - all the shares the user has accepted. |
1422 | + - the root-root volume. |
1423 | + |
1424 | + """ |
1425 | + p = ListVolumes(self) |
1426 | + p.start() |
1427 | + return p.deferred |
1428 | + |
1429 | + def delete_volume(self, volume_id): |
1430 | + """Delete 'volume' on the server, removing the associated tree. |
1431 | + |
1432 | + @param volume: the id of the volume to delete. |
1433 | + |
1434 | + """ |
1435 | + p = DeleteVolume(self, volume_id) |
1436 | + p.start() |
1437 | + return p.deferred |
1438 | + |
1439 | def query_caps(self, caps): |
1440 | """Query the server to discover its capabilitis. |
1441 | |
1442 | The server should answer if it supports or not all the given |
1443 | caps. |
1444 | + |
1445 | """ |
1446 | r = QuerySetCaps(self, caps) |
1447 | r.start() |
1448 | @@ -412,14 +504,15 @@ |
1449 | |
1450 | |
1451 | class GetContent(request.Request): |
1452 | - """A Request to get the content of a node id |
1453 | + """A Request to get the content of a node id. |
1454 | |
1455 | @ivar data: the content of the node (available upon success) |
1456 | + |
1457 | """ |
1458 | |
1459 | def __init__(self, protocol, share, node_id, hash, |
1460 | offset=0, callback=None, node_attr_callback=None): |
1461 | - """ request the content of node with hash |
1462 | + """Request the content of node with hash. |
1463 | |
1464 | @param protocol: the request handler |
1465 | @param share: the share node or root |
1466 | @@ -439,7 +532,7 @@ |
1467 | self.parts = [] |
1468 | |
1469 | def _start(self): |
1470 | - "send GET_CONTENT" |
1471 | + """Send GET_CONTENT.""" |
1472 | message = protocol_pb2.Message() |
1473 | message.type = protocol_pb2.Message.GET_CONTENT |
1474 | message.get_content.node = str(self.node_id) |
1475 | @@ -449,8 +542,7 @@ |
1476 | self.sendMessage(message) |
1477 | |
1478 | def processMessage(self, message): |
1479 | - """process messages |
1480 | - """ |
1481 | + """Process messages.""" |
1482 | # pylint: disable-msg=W0201 |
1483 | if message.type == protocol_pb2.Message.NODE_ATTR: |
1484 | if self.node_attr_callback is not None: |
1485 | @@ -486,20 +578,22 @@ |
1486 | self.error(request.StorageProtocolProtocolError(message)) |
1487 | |
1488 | def _cancel(self): |
1489 | - """Cancels the current download.""" |
1490 | + """Cancel the current download.""" |
1491 | message = protocol_pb2.Message() |
1492 | message.type = protocol_pb2.Message.CANCEL_REQUEST |
1493 | self.sendMessage(message) |
1494 | |
1495 | + |
1496 | class ListShares(request.Request): |
1497 | """List all the shares the user is involved. |
1498 | |
1499 | This includes the shares the user created, and those that were |
1500 | shared to her. |
1501 | + |
1502 | """ |
1503 | |
1504 | def _start(self): |
1505 | - '''Sends the LIST_SHARES message to the server.''' |
1506 | + """Send the LIST_SHARES message to the server.""" |
1507 | # pylint: disable-msg=W0201 |
1508 | message = protocol_pb2.Message() |
1509 | message.type = protocol_pb2.Message.LIST_SHARES |
1510 | @@ -507,7 +601,7 @@ |
1511 | self.shares = [] |
1512 | |
1513 | def processMessage(self, message): |
1514 | - '''Process the answer from the server.''' |
1515 | + """Process the answer from the server.""" |
1516 | if message.type == protocol_pb2.Message.SHARES_INFO: |
1517 | share = sharersp.ShareResponse.load_from_msg(message.shares) |
1518 | self.shares.append(share) |
1519 | @@ -516,8 +610,9 @@ |
1520 | else: |
1521 | self.error(request.StorageRequestError(self, message)) |
1522 | |
1523 | + |
1524 | class CreateShare(request.Request): |
1525 | - """Creates a share.""" |
1526 | + """Create a share.""" |
1527 | |
1528 | # these are the valid access levels and their translation to the |
1529 | # protocol message |
1530 | @@ -527,7 +622,7 @@ |
1531 | } |
1532 | |
1533 | def __init__(self, protocol, node_id, share_to, name, access_level): |
1534 | - """Creates a share. |
1535 | + """Create a share. |
1536 | |
1537 | @param node_id: which node will be root to share. |
1538 | @param share_to: the id of the receiving user. |
1539 | @@ -543,7 +638,7 @@ |
1540 | self.share_id = None |
1541 | |
1542 | def _start(self): |
1543 | - '''Sends the CREATE_SHARE message to the server.''' |
1544 | + """Send the CREATE_SHARE message to the server.""" |
1545 | message = protocol_pb2.Message() |
1546 | message.type = protocol_pb2.Message.CREATE_SHARE |
1547 | message.create_share.node = self.node |
1548 | @@ -562,7 +657,7 @@ |
1549 | self.sendMessage(message) |
1550 | |
1551 | def processMessage(self, message): |
1552 | - '''Process the answer from the server.''' |
1553 | + """Process the answer from the server.""" |
1554 | if message.type == protocol_pb2.Message.SHARE_CREATED: |
1555 | self.share_id = message.share_created.share_id |
1556 | self.done() |
1557 | @@ -574,7 +669,7 @@ |
1558 | |
1559 | |
1560 | class AcceptShare(request.Request): |
1561 | - """Acceptss a share (or not).""" |
1562 | + """Accept a share (or not).""" |
1563 | |
1564 | # these are the valid answers and their translation to the |
1565 | # protocol message |
1566 | @@ -584,17 +679,18 @@ |
1567 | } |
1568 | |
1569 | def __init__(self, protocol, share_id, answer): |
1570 | - """Accepts (or not) a share from other user. |
1571 | + """Accept (or not) a share from other user. |
1572 | |
1573 | @param share_id: the share id |
1574 | @param answer: if it was accepted ("Yes") or not ("No") |
1575 | + |
1576 | """ |
1577 | request.Request.__init__(self, protocol) |
1578 | self.share_id = share_id |
1579 | self.answer = answer |
1580 | |
1581 | def _start(self): |
1582 | - '''Sends the SHARE_ACCEPTED message to the server.''' |
1583 | + """Send the SHARE_ACCEPTED message to the server.""" |
1584 | message = protocol_pb2.Message() |
1585 | message.type = protocol_pb2.Message.SHARE_ACCEPTED |
1586 | message.share_accepted.share_id = str(self.share_id) |
1587 | @@ -610,7 +706,7 @@ |
1588 | self.sendMessage(message) |
1589 | |
1590 | def processMessage(self, message): |
1591 | - '''Process the answer from the server.''' |
1592 | + """Process the answer from the server.""" |
1593 | if message.type == protocol_pb2.Message.OK: |
1594 | self.done() |
1595 | else: |
1596 | @@ -618,18 +714,19 @@ |
1597 | |
1598 | |
1599 | class DeleteShare(request.Request): |
1600 | - """Deletes a share.""" |
1601 | + """Delete a share.""" |
1602 | |
1603 | def __init__(self, protocol, share_id): |
1604 | - """Deletes a share we had offered to someone else. |
1605 | + """Delete a share we had offered to someone else. |
1606 | |
1607 | @param share_id: the share id |
1608 | + |
1609 | """ |
1610 | request.Request.__init__(self, protocol) |
1611 | self.share_id = share_id |
1612 | |
1613 | def _start(self): |
1614 | - """Sends the DELETE_SHARE message to the server.""" |
1615 | + """Send the DELETE_SHARE message to the server.""" |
1616 | message = protocol_pb2.Message() |
1617 | message.type = protocol_pb2.Message.DELETE_SHARE |
1618 | message.delete_share.share_id = str(self.share_id) |
1619 | @@ -644,13 +741,117 @@ |
1620 | self.error(request.StorageRequestError(self, message)) |
1621 | |
1622 | |
1623 | +class CreateUDF(request.Request): |
1624 | + """Create a UDF.""" |
1625 | + |
1626 | + def __init__(self, protocol, path, name): |
1627 | + """Create a UDF. |
1628 | + |
1629 | + @param path: which node will be root to be UDF. |
1630 | + @param name: the name of the UDF |
1631 | + |
1632 | + """ |
1633 | + request.Request.__init__(self, protocol) |
1634 | + self.path = path |
1635 | + self.name = name |
1636 | + self.volume_id = None |
1637 | + self.node_id = None |
1638 | + |
1639 | + def _start(self): |
1640 | + """Send the CREATE_UDF message to the server.""" |
1641 | + message = protocol_pb2.Message() |
1642 | + message.type = protocol_pb2.Message.CREATE_UDF |
1643 | + message.create_udf.path = self.path |
1644 | + message.create_udf.name = self.name |
1645 | + self.sendMessage(message) |
1646 | + |
1647 | + def processMessage(self, message): |
1648 | + """Process the answer from the server.""" |
1649 | + if (message.type == protocol_pb2.Message.VOLUME_CREATED and |
1650 | + message.volume_created.type == protocol_pb2.Volumes.UDF): |
1651 | + self.volume_id = message.volume_created.udf.volume |
1652 | + self.node_id = message.volume_created.udf.node |
1653 | + self.done() |
1654 | + else: |
1655 | + self.error(request.StorageRequestError(self, message)) |
1656 | + |
1657 | + |
1658 | +class ListVolumes(request.Request): |
1659 | + """List all the volumes the user has. |
1660 | + |
1661 | + Including: |
1662 | + - the UDFs the user created. |
1663 | + - the shares the user has accepted. |
1664 | + - the user's root-root. |
1665 | + |
1666 | + """ |
1667 | + |
1668 | + def __init__(self, protocol): |
1669 | + """List volumes.""" |
1670 | + request.Request.__init__(self, protocol) |
1671 | + self.volumes = [] |
1672 | + |
1673 | + def _start(self): |
1674 | + """Send the LIST_VOLUMES message to the server.""" |
1675 | + self.volumes = [] |
1676 | + message = protocol_pb2.Message() |
1677 | + message.type = protocol_pb2.Message.LIST_VOLUMES |
1678 | + self.sendMessage(message) |
1679 | + |
1680 | + def processMessage(self, message): |
1681 | + """Process the answer from the server.""" |
1682 | + if message.type == protocol_pb2.Message.VOLUMES_INFO: |
1683 | + if message.list_volumes.type == protocol_pb2.Volumes.SHARE: |
1684 | + vol = volumes.ShareVolume.from_msg(message.list_volumes.share) |
1685 | + self.volumes.append(vol) |
1686 | + elif message.list_volumes.type == protocol_pb2.Volumes.UDF: |
1687 | + vol = volumes.UDFVolume.from_msg(message.list_volumes.udf) |
1688 | + self.volumes.append(vol) |
1689 | + elif message.list_volumes.type == protocol_pb2.Volumes.ROOT: |
1690 | + vol = volumes.RootVolume.from_msg(message.list_volumes.root) |
1691 | + self.volumes.append(vol) |
1692 | + else: |
1693 | + self.error(request.StorageRequestError(self, message)) |
1694 | + elif message.type == protocol_pb2.Message.VOLUMES_END: |
1695 | + self.done() |
1696 | + else: |
1697 | + self.error(request.StorageRequestError(self, message)) |
1698 | + |
1699 | + |
1700 | +class DeleteVolume(request.Request): |
1701 | + """Delete a volume.""" |
1702 | + |
1703 | + def __init__(self, protocol, volume_id): |
1704 | + """Delete a volume. |
1705 | + |
1706 | + @param volume_id: the volume id |
1707 | + |
1708 | + """ |
1709 | + request.Request.__init__(self, protocol) |
1710 | + self.volume_id = str(volume_id) |
1711 | + |
1712 | + def _start(self): |
1713 | + """Send the DELETE_VOLUME message to the server.""" |
1714 | + message = protocol_pb2.Message() |
1715 | + message.type = protocol_pb2.Message.DELETE_VOLUME |
1716 | + message.delete_volume.volume = self.volume_id |
1717 | + |
1718 | + self.sendMessage(message) |
1719 | + |
1720 | + def processMessage(self, message): |
1721 | + """Process the answer from the server.""" |
1722 | + if message.type == protocol_pb2.Message.OK: |
1723 | + self.done() |
1724 | + else: |
1725 | + self.error(request.StorageRequestError(self, message)) |
1726 | + |
1727 | + |
1728 | class Unlink(request.Request): |
1729 | - """ unlink a node |
1730 | - """ |
1731 | + """Unlink a node.""" |
1732 | # pylint: disable-msg=C0111 |
1733 | |
1734 | def __init__(self, protocol, share, node_id): |
1735 | - """ request that node_id be unlinked |
1736 | + """Request that node_id be unlinked |
1737 | |
1738 | @param protocol: the request handler |
1739 | @param share: the share node or root |
1740 | @@ -677,10 +878,10 @@ |
1741 | |
1742 | |
1743 | class Move(request.Request): |
1744 | - """ move a node |
1745 | - """ |
1746 | + """Move a node.""" |
1747 | + |
1748 | def __init__(self, protocol, share, node_id, new_parent_id, new_name): |
1749 | - """create the move request |
1750 | + """Create the move request |
1751 | |
1752 | @param protocol: the request handler |
1753 | @param share: the share node or root |
1754 | @@ -697,7 +898,7 @@ |
1755 | self.new_name = new_name |
1756 | |
1757 | def _start(self): |
1758 | - """send MOVE""" |
1759 | + """Send MOVE.""" |
1760 | message = protocol_pb2.Message() |
1761 | message.type = protocol_pb2.Message.MOVE |
1762 | message.move.share = self.share |
1763 | @@ -708,7 +909,7 @@ |
1764 | self.sendMessage(message) |
1765 | |
1766 | def processMessage(self, message): |
1767 | - """process messages""" |
1768 | + """Process messages.""" |
1769 | if message.type == protocol_pb2.Message.OK: |
1770 | self.done() |
1771 | else: |
1772 | @@ -718,16 +919,19 @@ |
1773 | self.error(request.StorageRequestError(self, message)) |
1774 | |
1775 | class MultiQuery(object): |
1776 | - """Creates a Request-like object that encapsulates many Query requests |
1777 | - |
1778 | - we may need to split this request into many Query rests if the list of items |
1779 | - to query is to big to fit in one message |
1780 | + """Create a Request-like object that encapsulates many Query requests |
1781 | + |
1782 | + We may need to split this request into many Query rests if the list of |
1783 | + items to query is to big to fit in one message. |
1784 | + |
1785 | """ |
1786 | + |
1787 | def __init__(self, protocol, items): |
1788 | - """ create a multiquery |
1789 | + """Create a multiquery. |
1790 | |
1791 | @param protocol: the request handler |
1792 | @param items: a list of (node, hash) tuples |
1793 | + |
1794 | """ |
1795 | items = iter(items) |
1796 | defers = [] |
1797 | @@ -745,27 +949,28 @@ |
1798 | self.deferred = defer.DeferredList(defers, consumeErrors=True) |
1799 | |
1800 | def start(self): |
1801 | - """start the queries""" |
1802 | + """Start the queries.""" |
1803 | for q in self.queries: |
1804 | q.start() |
1805 | |
1806 | class Query(request.Request): |
1807 | - """query about the hash of a node_id |
1808 | + """Query about the hash of a node_id. |
1809 | |
1810 | @ivar remains: the items that could not fit in the query |
1811 | @ivar response: the node state messages that were received |
1812 | + |
1813 | """ |
1814 | |
1815 | def __init__(self, protocol, items): |
1816 | - """ generates a query message to send to the server |
1817 | + """Generate a query message to send to the server. |
1818 | |
1819 | - puts as much items as it can inside the message |
1820 | - whats left is left in self.remainder |
1821 | + Put as much items as it can inside the message whats left is |
1822 | + left in self.remainder. |
1823 | |
1824 | @param protocol: the request handler |
1825 | @param items: a list of (node, hash, share) tuples |
1826 | + |
1827 | """ |
1828 | - |
1829 | request.Request.__init__(self, protocol) |
1830 | self.query_message = qm = protocol_pb2.Message() |
1831 | qm.id = 0 # just to have something in the field when calculating size |
1832 | @@ -775,7 +980,7 @@ |
1833 | items_that_fit = [] |
1834 | |
1835 | def add_items(msg, *args): |
1836 | - """add items to query""" |
1837 | + """Add items to query.""" |
1838 | for share, node, hash in args: |
1839 | qi = msg.query.add() |
1840 | qi.share = share |
1841 | @@ -794,11 +999,11 @@ |
1842 | add_items(qm, *items_that_fit) |
1843 | |
1844 | def _start(self): |
1845 | - """send QUERY""" |
1846 | + """Send QUERY.""" |
1847 | self.sendMessage(self.query_message) |
1848 | |
1849 | def processMessage(self, message): |
1850 | - """handle messages""" |
1851 | + """Handle messages.""" |
1852 | if message.type == protocol_pb2.Message.NODE_STATE: |
1853 | self.response.append(message.node_state) |
1854 | self.protocol.notify_node_state(message.node_state) |
1855 | @@ -838,8 +1043,9 @@ |
1856 | def go(self): |
1857 | """While producing, generates data. |
1858 | |
1859 | - Reads a little from the file, generates a BYTES message, and pass the |
1860 | - control to the reactor. If no more data, it finishes with EOF. |
1861 | + Read a little from the file, generates a BYTES message, and pass the |
1862 | + control to the reactor. If no more data, finish with EOF. |
1863 | + |
1864 | """ |
1865 | if not self.producing or self.request.cancelled or self.finished: |
1866 | return |
1867 | @@ -864,11 +1070,12 @@ |
1868 | |
1869 | |
1870 | class PutContent(request.Request): |
1871 | - """PUT content request""" |
1872 | + """Put content request.""" |
1873 | + |
1874 | def __init__(self, protocol, share, node_id, |
1875 | previous_hash, hash, crc32, size, |
1876 | deflated_size, fd): |
1877 | - """ put content into a node |
1878 | + """Put content into a node. |
1879 | |
1880 | @param protocol: the request handler |
1881 | @param share: the share node or root |
1882 | @@ -891,7 +1098,7 @@ |
1883 | self.fd = fd |
1884 | |
1885 | def _start(self): |
1886 | - """send PUT_CONTENT""" |
1887 | + """Send PUT_CONTENT.""" |
1888 | message = protocol_pb2.Message() |
1889 | message.type = protocol_pb2.Message.PUT_CONTENT |
1890 | message.put_content.share = self.share |
1891 | @@ -904,7 +1111,7 @@ |
1892 | self.sendMessage(message) |
1893 | |
1894 | def processMessage(self, message): |
1895 | - """handle messages""" |
1896 | + """Handle messages.""" |
1897 | if message.type == protocol_pb2.Message.BEGIN_CONTENT: |
1898 | message_producer = BytesMessageProducer( |
1899 | self, self.fd, message.begin_content.offset) |
1900 | @@ -917,7 +1124,7 @@ |
1901 | self.error(request.StorageRequestError(self, message)) |
1902 | |
1903 | def _cancel(self): |
1904 | - """Cancels the current upload.""" |
1905 | + """Cancel the current upload.""" |
1906 | if self.producer is not None: |
1907 | self.producer.stopProducing() |
1908 | message = protocol_pb2.Message() |
1909 | @@ -926,10 +1133,10 @@ |
1910 | |
1911 | |
1912 | class MakeObject(request.Request): |
1913 | - """ Handles the creation of new objects |
1914 | + """Handle the creation of new objects. |
1915 | |
1916 | - on completion it will have the attribute 'new_id' with the |
1917 | - node id of the created object |
1918 | + On completion it will have the attribute 'new_id' with the |
1919 | + node id of the created object. |
1920 | |
1921 | @cvar create_message: must be overridden with the correct creation message |
1922 | to send |
1923 | @@ -939,10 +1146,11 @@ |
1924 | @ivar new_id: the id of the node that was created (available upon success) |
1925 | @ivar new_parent_id: the parent id the node now exists under |
1926 | @ivar new_name: the name the node now exists under |
1927 | + |
1928 | """ |
1929 | |
1930 | def __init__(self, protocol, share, parent_id, name): |
1931 | - """ create a node |
1932 | + """Create a node. |
1933 | |
1934 | @param protocol: the request handler |
1935 | @param share: the share node or root |
1936 | @@ -956,7 +1164,7 @@ |
1937 | self.name = name |
1938 | |
1939 | def _start(self): |
1940 | - """send $MAKE message""" |
1941 | + """Send MAKE message.""" |
1942 | message = protocol_pb2.Message() |
1943 | message.type = self.create_message |
1944 | |
1945 | @@ -966,7 +1174,7 @@ |
1946 | self.sendMessage(message) |
1947 | |
1948 | def processMessage(self, message): |
1949 | - """handle messages""" |
1950 | + """Handle messages.""" |
1951 | # pylint: disable-msg=W0201 |
1952 | if message.type == self.create_response: |
1953 | self.new_id = message.new.node |
1954 | @@ -977,36 +1185,39 @@ |
1955 | self.error(request.StorageRequestError(self, message)) |
1956 | |
1957 | class MakeDir(MakeObject): |
1958 | - """Extends MakeObject to make directories""" |
1959 | + """Extend MakeObject to make directories.""" |
1960 | + |
1961 | create_message = protocol_pb2.Message.MAKE_DIR |
1962 | create_response = protocol_pb2.Message.NEW_DIR |
1963 | |
1964 | |
1965 | class MakeFile(MakeObject): |
1966 | - """Extends MakeObject to make files""" |
1967 | + """Extend MakeObject to make files.""" |
1968 | + |
1969 | create_message = protocol_pb2.Message.MAKE_FILE |
1970 | create_response = protocol_pb2.Message.NEW_FILE |
1971 | |
1972 | |
1973 | class ProtocolVersion(request.Request): |
1974 | - """ Handles the protocol version query |
1975 | + """Handle the protocol version query. |
1976 | |
1977 | when completed will contain the servers protocol version |
1978 | on `other_protocol_version` |
1979 | |
1980 | @ivar other_protocol_version: the other peer's protocol version (available |
1981 | upon success) |
1982 | + |
1983 | """ |
1984 | |
1985 | def _start(self): |
1986 | - """send PROTOCOL_VERSION""" |
1987 | + """Send PROTOCOL_VERSION.""" |
1988 | message = protocol_pb2.Message() |
1989 | message.type = protocol_pb2.Message.PROTOCOL_VERSION |
1990 | message.protocol.version = self.protocol.PROTOCOL_VERSION |
1991 | self.sendMessage(message) |
1992 | |
1993 | def processMessage(self, message): |
1994 | - """handle messages""" |
1995 | + """Handle messages.""" |
1996 | # pylint: disable-msg=W0201 |
1997 | if message.type == protocol_pb2.Message.PROTOCOL_VERSION: |
1998 | self.other_protocol_version = message.protocol.version |
1999 | @@ -1015,20 +1226,20 @@ |
2000 | self.error(request.StorageRequestError(self, message)) |
2001 | |
2002 | class Authenticate(request.Request): |
2003 | - """ Request to authenticate the user |
2004 | - """ |
2005 | + """Request to authenticate the user.""" |
2006 | |
2007 | def __init__(self, protocol, auth_parameters): |
2008 | - """create an authentication request |
2009 | + """Create an authentication request. |
2010 | |
2011 | @param protocol: the request handler |
2012 | @param auth_parameters: a dictionary of authentication parameters. |
2013 | + |
2014 | """ |
2015 | request.Request.__init__(self, protocol) |
2016 | self.auth_parameters = auth_parameters |
2017 | |
2018 | def _start(self): |
2019 | - """send AUTH_REQUEST""" |
2020 | + """Send AUTH_REQUEST.""" |
2021 | message = protocol_pb2.Message() |
2022 | message.type = protocol_pb2.Message.AUTH_REQUEST |
2023 | for key, value in self.auth_parameters.items(): |
2024 | @@ -1038,7 +1249,7 @@ |
2025 | self.sendMessage(message) |
2026 | |
2027 | def processMessage(self, message): |
2028 | - """handle messages""" |
2029 | + """Handle messages.""" |
2030 | if message.type == protocol_pb2.Message.AUTH_AUTHENTICATED: |
2031 | self.done() |
2032 | elif message.type == protocol_pb2.Message.ERROR: |
2033 | @@ -1050,13 +1261,14 @@ |
2034 | |
2035 | |
2036 | class QuerySetCaps(request.Request): |
2037 | - """Queries or Sets the server to use capabilities.""" |
2038 | + """Query or Set the server to use capabilities.""" |
2039 | |
2040 | def __init__(self, protocol, caps, set_mode=False): |
2041 | - """Generates a query_caps or set_caps message to send to the server. |
2042 | + """Generate a query_caps or set_caps message to send to the server. |
2043 | |
2044 | @param protocol: the request handler |
2045 | @param caps: a list of capabilities to ask for or to set |
2046 | + |
2047 | """ |
2048 | request.Request.__init__(self, protocol) |
2049 | self.caps = caps |
2050 | @@ -1067,7 +1279,7 @@ |
2051 | self.set_mode = set_mode |
2052 | |
2053 | def _start(self): |
2054 | - """Send QUERY_CAPS or SET_CAPS""" |
2055 | + """Send QUERY_CAPS or SET_CAPS.""" |
2056 | message = protocol_pb2.Message() |
2057 | if self.set_mode: |
2058 | message.type = protocol_pb2.Message.SET_CAPS |
2059 | @@ -1083,7 +1295,7 @@ |
2060 | self.sendMessage(message) |
2061 | |
2062 | def processMessage(self, message): |
2063 | - """Handle the message""" |
2064 | + """Handle the message.""" |
2065 | if message.type == protocol_pb2.Message.ACCEPT_CAPS: |
2066 | self.accepted = message.accept_caps.accepted |
2067 | self.redirect_hostname = message.accept_caps.redirect_hostname |
2068 | @@ -1098,12 +1310,12 @@ |
2069 | """Query available space.""" |
2070 | |
2071 | def __init__(self, protocol, share_id): |
2072 | - '''Initializes the request.''' |
2073 | + """Initialize the request.""" |
2074 | request.Request.__init__(self, protocol) |
2075 | self.share_id = share_id |
2076 | |
2077 | def _start(self): |
2078 | - '''Sends the FREE_SPACE_INQUIRY message to the server.''' |
2079 | + """Send the FREE_SPACE_INQUIRY message to the server.""" |
2080 | # pylint: disable-msg=W0201 |
2081 | message = protocol_pb2.Message() |
2082 | message.type = protocol_pb2.Message.FREE_SPACE_INQUIRY |
2083 | @@ -1112,7 +1324,7 @@ |
2084 | self.free_bytes = None |
2085 | |
2086 | def processMessage(self, message): |
2087 | - '''Process the answer from the server.''' |
2088 | + """Process the answer from the server.""" |
2089 | if message.type == protocol_pb2.Message.FREE_SPACE_INFO: |
2090 | self.free_bytes = message.free_space_info.free_bytes |
2091 | self.done() |
2092 | @@ -1124,7 +1336,7 @@ |
2093 | """Query account information.""" |
2094 | |
2095 | def _start(self): |
2096 | - '''Sends the FREE_SPACE_INQUIRY message to the server.''' |
2097 | + """Send the FREE_SPACE_INQUIRY message to the server.""" |
2098 | # pylint: disable-msg=W0201 |
2099 | message = protocol_pb2.Message() |
2100 | message.type = protocol_pb2.Message.ACCOUNT_INQUIRY |
2101 | @@ -1132,7 +1344,7 @@ |
2102 | self.purchased_bytes = None |
2103 | |
2104 | def processMessage(self, message): |
2105 | - '''Process the answer from the server.''' |
2106 | + """Process the answer from the server.""" |
2107 | if message.type == protocol_pb2.Message.ACCOUNT_INFO: |
2108 | self.purchased_bytes = message.account_info.purchased_bytes |
2109 | self.done() |
2110 | @@ -1141,19 +1353,18 @@ |
2111 | |
2112 | |
2113 | class ThrottlingStorageClient(StorageClient): |
2114 | - """ |
2115 | - This is the throttling version of the StorageClient protocol. |
2116 | - """ |
2117 | + """The throttling version of the StorageClient protocol.""" |
2118 | + |
2119 | factory = None |
2120 | |
2121 | def connectionMade(self): |
2122 | - """Handle connection Made.""" |
2123 | + """Handle connectionMade.""" |
2124 | if self.factory.client is None: |
2125 | self.factory.client = self |
2126 | StorageClient.connectionMade(self) |
2127 | |
2128 | def connectionLost(self, reason=None): |
2129 | - """Handle connection lost.""" |
2130 | + """Handle connectionLost.""" |
2131 | if self.factory.client is self: |
2132 | self.factory.unregisterProtocol(self) |
2133 | StorageClient.connectionLost(self, reason=reason) |
2134 | @@ -1194,20 +1405,19 @@ |
2135 | |
2136 | |
2137 | class StorageClientFactory(ClientFactory): |
2138 | - """StorageClient factory""" |
2139 | + """StorageClient factory.""" |
2140 | # pylint: disable-msg=W0232 |
2141 | protocol = StorageClient |
2142 | |
2143 | |
2144 | class ThrottlingStorageClientFactory(StorageClientFactory): |
2145 | - """ |
2146 | - This is the throttling version of StorageClientFactory. |
2147 | - """ |
2148 | + """The throttling version of StorageClientFactory.""" |
2149 | |
2150 | protocol = ThrottlingStorageClient |
2151 | + client = None |
2152 | |
2153 | def __init__(self, read_limit=None, write_limit=None): |
2154 | - """creates the instance""" |
2155 | + """Create the instance.""" |
2156 | self.readLimit = read_limit # max bytes we should read per second |
2157 | self.writeLimit = write_limit # max bytes we should write per second |
2158 | self.readThisSecond = 0 |
2159 | @@ -1219,14 +1429,13 @@ |
2160 | self.stopped = True |
2161 | |
2162 | def callLater(self, period, func, *args, **kwargs): |
2163 | - """ |
2164 | - Wrapper around L{reactor.callLater} for test purpose. |
2165 | - """ |
2166 | + """Wrapper around L{reactor.callLater} for test purpose.""" |
2167 | return reactor.callLater(period, func, *args, **kwargs) |
2168 | |
2169 | def maybeCallLater(self, id, period, func): |
2170 | - """do a callLater only if we don't have a DelayedCall with the |
2171 | + """Do a callLater only if we don't have a DelayedCall with the |
2172 | specified id already running. |
2173 | + |
2174 | """ |
2175 | delayed_call = getattr(self, id) |
2176 | # check if we already have a DelayedCall running |
2177 | @@ -1236,21 +1445,17 @@ |
2178 | return delayed_call |
2179 | |
2180 | def registerWritten(self, length): |
2181 | - """ |
2182 | - Called by protocol to tell us more bytes were written. |
2183 | - """ |
2184 | + """Called by protocol to tell us more bytes were written.""" |
2185 | self.writtenThisSecond += length |
2186 | self.checkWriteBandwidth() |
2187 | |
2188 | def registerRead(self, length): |
2189 | - """ |
2190 | - Called by protocol to tell us more bytes were read. |
2191 | - """ |
2192 | + """Called by protocol to tell us more bytes were read.""" |
2193 | self.readThisSecond += length |
2194 | self.checkReadBandwidth() |
2195 | |
2196 | def checkReadBandwidth(self): |
2197 | - """Checks if we've passed bandwidth limits.""" |
2198 | + """Check if we've passed bandwidth limits.""" |
2199 | if self.readLimit is not None and \ |
2200 | self.readThisSecond > self.readLimit and \ |
2201 | self.unthrottleReadsID is None: |
2202 | @@ -1262,7 +1467,7 @@ |
2203 | self.unthrottleReads) |
2204 | |
2205 | def checkWriteBandwidth(self): |
2206 | - """Checks if we've passed bandwidth limits.""" |
2207 | + """Check if we've passed bandwidth limits.""" |
2208 | if self.writeLimit is not None and \ |
2209 | self.writtenThisSecond > self.writeLimit and \ |
2210 | self.unthrottleWritesID is None: |
2211 | @@ -1275,14 +1480,14 @@ |
2212 | self.unthrottleWrites) |
2213 | |
2214 | def _resetReadThisSecond(self): |
2215 | - """reset the counter named with 'name' every 1 second""" |
2216 | + """Reset the counter named with 'name' every 1 second.""" |
2217 | # check the bandwidth limits |
2218 | self.readThisSecond = 0 |
2219 | self.resetReadThisSecondID = self.callLater(1, |
2220 | self._resetReadThisSecond) |
2221 | |
2222 | def _resetWrittenThisSecond (self): |
2223 | - """reset the counter named with 'name' every 1 second""" |
2224 | + """Reset the counter named with 'name' every 1 second.""" |
2225 | self.writtenThisSecond = 0 |
2226 | self.resetWriteThisSecondID = self.callLater(1, |
2227 | self._resetWrittenThisSecond) |
2228 | @@ -1310,7 +1515,7 @@ |
2229 | self.client.unthrottleWrites() |
2230 | |
2231 | def buildProtocol(self, addr): |
2232 | - """build the protocol and start the counters reset loops""" |
2233 | + """Build the protocol and start the counters reset loops.""" |
2234 | if self.readLimit is not None: |
2235 | self._resetReadThisSecond() |
2236 | if self.writeLimit is not None: |
2237 | @@ -1319,7 +1524,7 @@ |
2238 | return StorageClientFactory.buildProtocol(self, addr) |
2239 | |
2240 | def unregisterProtocol(self, protocol): |
2241 | - """Stop all DelayedCall we have around""" |
2242 | + """Stop all DelayedCall we have around.""" |
2243 | for delayed in [self.unthrottleReadsID, self.resetReadThisSecondID, |
2244 | self.unthrottleWritesID, self.resetWriteThisSecondID]: |
2245 | self._cancel_delayed_call(delayed) |
2246 | |
2247 | === modified file 'ubuntuone/storageprotocol/dircontent.proto' |
2248 | --- ubuntuone/storageprotocol/dircontent.proto 2009-06-30 12:00:00 +0000 |
2249 | +++ ubuntuone/storageprotocol/dircontent.proto 2010-02-17 23:29:10 +0000 |
2250 | @@ -17,6 +17,9 @@ |
2251 | */ |
2252 | package ubuntuone.storageprotocol; |
2253 | |
2254 | +option java_package = "com.ubuntuone.storageprotocol"; |
2255 | +option java_outer_classname = "DirectoryContentProtocol"; |
2256 | + |
2257 | enum NodeType { |
2258 | DIRECTORY = 0; |
2259 | FILE = 1; |
2260 | |
2261 | === modified file 'ubuntuone/storageprotocol/dircontent.py' |
2262 | --- ubuntuone/storageprotocol/dircontent.py 2009-08-11 16:00:00 +0000 |
2263 | +++ ubuntuone/storageprotocol/dircontent.py 2010-02-17 23:29:10 +0000 |
2264 | @@ -27,7 +27,7 @@ |
2265 | DirectoryContent, DIRECTORY, FILE, SYMLINK |
2266 | |
2267 | ILLEGAL_FILENAMES = [u".", u".."] |
2268 | -ILLEGAL_FILENAME_CHARS_RE_SOURCE = r'[\000-\037:;*?\\/\177]' |
2269 | +ILLEGAL_FILENAME_CHARS_RE_SOURCE = r'[\000/]' |
2270 | ILLEGAL_FILENAME_CHARS_RE = re.compile(ILLEGAL_FILENAME_CHARS_RE_SOURCE) |
2271 | |
2272 | class InvalidFilename(Exception): |
2273 | |
2274 | === added file 'ubuntuone/storageprotocol/dircontent_pb2.py' |
2275 | --- ubuntuone/storageprotocol/dircontent_pb2.py 1970-01-01 00:00:00 +0000 |
2276 | +++ ubuntuone/storageprotocol/dircontent_pb2.py 2010-02-17 23:29:10 +0000 |
2277 | @@ -0,0 +1,105 @@ |
2278 | +# Generated by the protocol buffer compiler. DO NOT EDIT! |
2279 | + |
2280 | +from google.protobuf import descriptor |
2281 | +from google.protobuf import message |
2282 | +from google.protobuf import reflection |
2283 | +from google.protobuf import service |
2284 | +from google.protobuf import service_reflection |
2285 | +from google.protobuf import descriptor_pb2 |
2286 | +_NODETYPE = descriptor.EnumDescriptor( |
2287 | + name='NodeType', |
2288 | + full_name='ubuntuone.storageprotocol.NodeType', |
2289 | + filename='NodeType', |
2290 | + values=[ |
2291 | + descriptor.EnumValueDescriptor( |
2292 | + name='DIRECTORY', index=0, number=0, |
2293 | + options=None, |
2294 | + type=None), |
2295 | + descriptor.EnumValueDescriptor( |
2296 | + name='FILE', index=1, number=1, |
2297 | + options=None, |
2298 | + type=None), |
2299 | + descriptor.EnumValueDescriptor( |
2300 | + name='SYMLINK', index=2, number=2, |
2301 | + options=None, |
2302 | + type=None), |
2303 | + ], |
2304 | + options=None, |
2305 | +) |
2306 | + |
2307 | + |
2308 | +DIRECTORY = 0 |
2309 | +FILE = 1 |
2310 | +SYMLINK = 2 |
2311 | + |
2312 | + |
2313 | + |
2314 | +_DIRECTORYENTRY = descriptor.Descriptor( |
2315 | + name='DirectoryEntry', |
2316 | + full_name='ubuntuone.storageprotocol.DirectoryEntry', |
2317 | + filename='ubuntuone/storageprotocol/dircontent.proto', |
2318 | + containing_type=None, |
2319 | + fields=[ |
2320 | + descriptor.FieldDescriptor( |
2321 | + name='name', full_name='ubuntuone.storageprotocol.DirectoryEntry.name', index=0, |
2322 | + number=1, type=9, cpp_type=9, label=1, |
2323 | + default_value=unicode("", "utf-8"), |
2324 | + message_type=None, enum_type=None, containing_type=None, |
2325 | + is_extension=False, extension_scope=None, |
2326 | + options=None), |
2327 | + descriptor.FieldDescriptor( |
2328 | + name='node', full_name='ubuntuone.storageprotocol.DirectoryEntry.node', index=1, |
2329 | + number=2, type=12, cpp_type=9, label=1, |
2330 | + default_value="", |
2331 | + message_type=None, enum_type=None, containing_type=None, |
2332 | + is_extension=False, extension_scope=None, |
2333 | + options=None), |
2334 | + descriptor.FieldDescriptor( |
2335 | + name='node_type', full_name='ubuntuone.storageprotocol.DirectoryEntry.node_type', index=2, |
2336 | + number=3, type=14, cpp_type=8, label=1, |
2337 | + default_value=0, |
2338 | + message_type=None, enum_type=None, containing_type=None, |
2339 | + is_extension=False, extension_scope=None, |
2340 | + options=None), |
2341 | + ], |
2342 | + extensions=[ |
2343 | + ], |
2344 | + nested_types=[], # TODO(robinson): Implement. |
2345 | + enum_types=[ |
2346 | + ], |
2347 | + options=None) |
2348 | + |
2349 | + |
2350 | +_DIRECTORYCONTENT = descriptor.Descriptor( |
2351 | + name='DirectoryContent', |
2352 | + full_name='ubuntuone.storageprotocol.DirectoryContent', |
2353 | + filename='ubuntuone/storageprotocol/dircontent.proto', |
2354 | + containing_type=None, |
2355 | + fields=[ |
2356 | + descriptor.FieldDescriptor( |
2357 | + name='entries', full_name='ubuntuone.storageprotocol.DirectoryContent.entries', index=0, |
2358 | + number=1, type=11, cpp_type=10, label=3, |
2359 | + default_value=[], |
2360 | + message_type=None, enum_type=None, containing_type=None, |
2361 | + is_extension=False, extension_scope=None, |
2362 | + options=None), |
2363 | + ], |
2364 | + extensions=[ |
2365 | + ], |
2366 | + nested_types=[], # TODO(robinson): Implement. |
2367 | + enum_types=[ |
2368 | + ], |
2369 | + options=None) |
2370 | + |
2371 | + |
2372 | +_DIRECTORYENTRY.fields_by_name['node_type'].enum_type = _NODETYPE |
2373 | +_DIRECTORYCONTENT.fields_by_name['entries'].message_type = _DIRECTORYENTRY |
2374 | + |
2375 | +class DirectoryEntry(message.Message): |
2376 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
2377 | + DESCRIPTOR = _DIRECTORYENTRY |
2378 | + |
2379 | +class DirectoryContent(message.Message): |
2380 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
2381 | + DESCRIPTOR = _DIRECTORYCONTENT |
2382 | + |
2383 | |
2384 | === modified file 'ubuntuone/storageprotocol/protocol.proto' |
2385 | --- ubuntuone/storageprotocol/protocol.proto 2009-08-26 12:00:00 +0000 |
2386 | +++ ubuntuone/storageprotocol/protocol.proto 2010-02-17 23:29:10 +0000 |
2387 | @@ -17,9 +17,12 @@ |
2388 | */ |
2389 | package ubuntuone.storageprotocol; |
2390 | |
2391 | +option java_package = "com.ubuntuone.storageprotocol"; |
2392 | +option java_outer_classname = "StorageProtocol"; |
2393 | + |
2394 | message Message { |
2395 | required int32 id = 1; // A session-unique number identifying the |
2396 | - // request that started this exchange |
2397 | + // request that started this exchange |
2398 | |
2399 | enum MessageType { |
2400 | NOOP = 0; |
2401 | @@ -35,8 +38,8 @@ |
2402 | ROOT = 10; |
2403 | MAKE_DIR = 11; |
2404 | MAKE_FILE = 12; |
2405 | - NEW_DIR = 13; // answer to MAKE_DIR |
2406 | - NEW_FILE = 14; // answer to MAKE_FILE |
2407 | + NEW_DIR = 13; // answer to MAKE_DIR |
2408 | + NEW_FILE = 14; // answer to MAKE_FILE |
2409 | QUERY = 15; |
2410 | NODE_STATE = 16; |
2411 | QUERY_END = 17; |
2412 | @@ -47,24 +50,34 @@ |
2413 | EOF = 22; |
2414 | MOVE = 23; |
2415 | UNLINK = 24; |
2416 | - CREATE_SHARE = 25; |
2417 | - LIST_SHARES = 26; |
2418 | - SHARES_INFO = 27; // answer to LIST_SHARES, one message per share |
2419 | - SHARES_END = 28; // no more SHARES_INFO |
2420 | - NOTIFY_SHARE = 29; |
2421 | - SHARE_ACCEPTED = 30; |
2422 | - SHARE_DELETED = 31; |
2423 | + |
2424 | + CREATE_SHARE = 25; // enable the sharing for a given node |
2425 | + LIST_SHARES = 26; // list all the shares |
2426 | + SHARES_INFO = 27; // answer to LIST_SHARES, one message per share |
2427 | + SHARES_END = 28; // no more SHARES_INFO |
2428 | + NOTIFY_SHARE = 29; // notifies the presence of a new share |
2429 | + SHARE_ACCEPTED = 30; // notifies whether a share was accepted or not |
2430 | + SHARE_DELETED = 31; // answer to DELETE_SHARE (the share was disabled) |
2431 | + SHARE_CREATED = 34; // answer to CREATE_SHARE, returns share id |
2432 | + DELETE_SHARE = 36; // disable the sharing for a given node |
2433 | + |
2434 | + CREATE_UDF = 44; // register a new UDF against the server |
2435 | + LIST_VOLUMES = 45; // list all volumes (UDFs plus accepted shares) |
2436 | + VOLUMES_INFO = 46; // answer to LIST_VOLUMES, one message per volume |
2437 | + VOLUMES_END = 47; // no more VOLUMES_INFO |
2438 | + VOLUME_DELETED = 48; // answer to DELETE_VOLUME (the volume was deleted) |
2439 | + VOLUME_CREATED = 49; // answer to CREATE_UDF or a share was accepted |
2440 | + DELETE_VOLUME = 50; // removes the UDF and its files from the server |
2441 | + |
2442 | CANCEL_REQUEST = 32; |
2443 | NODE_ATTR = 33; |
2444 | - SHARE_CREATED = 34; |
2445 | CANCELLED = 35; |
2446 | - DELETE_SHARE = 36; |
2447 | - QUERY_CAPS = 37; // client2server, no commitment |
2448 | - SET_CAPS = 38; // client2server, commitment from the server |
2449 | - ACCEPT_CAPS = 39; // server2client, the answer for previous two |
2450 | - FREE_SPACE_INFO = 40; // answer to FREE_SPACE_INQUIRY |
2451 | + QUERY_CAPS = 37; // client2server, no commitment |
2452 | + SET_CAPS = 38; // client2server, commitment from the server |
2453 | + ACCEPT_CAPS = 39; // server2client, the answer for previous two |
2454 | + FREE_SPACE_INFO = 40; // answer to FREE_SPACE_INQUIRY |
2455 | FREE_SPACE_INQUIRY = 41; |
2456 | - ACCOUNT_INFO = 42; // answer to ACCOUNT_INQUIRY |
2457 | + ACCOUNT_INFO = 42; // answer to ACCOUNT_INQUIRY |
2458 | ACCOUNT_INQUIRY = 43; |
2459 | } |
2460 | |
2461 | @@ -91,7 +104,7 @@ |
2462 | optional CancelRequest cancel_request = 17; |
2463 | optional NodeAttr node_attr = 18; |
2464 | |
2465 | - // share management |
2466 | + // share, UDf and volume management |
2467 | optional CreateShare create_share = 19; |
2468 | optional Shares shares = 20; |
2469 | optional NotifyShare notify_share = 21; |
2470 | @@ -100,6 +113,12 @@ |
2471 | optional ShareCreated share_created = 24; |
2472 | optional DeleteShare delete_share = 25; |
2473 | |
2474 | + optional CreateUDF create_udf = 33; |
2475 | + optional Volumes list_volumes = 34; |
2476 | + optional VolumeDeleted volume_deleted = 35; |
2477 | + optional Volumes volume_created = 36; |
2478 | + optional DeleteVolume delete_volume = 37; |
2479 | + |
2480 | // caps |
2481 | repeated QueryCaps query_caps = 26; |
2482 | repeated SetCaps set_caps = 27; |
2483 | @@ -149,7 +168,7 @@ |
2484 | } |
2485 | |
2486 | message Make { |
2487 | - optional bytes share = 1; |
2488 | + optional bytes share = 1; // share is actually a volume id |
2489 | optional bytes parent_node = 2; |
2490 | optional string name = 3; |
2491 | } |
2492 | @@ -303,6 +322,47 @@ |
2493 | optional string share_id = 1; |
2494 | } |
2495 | |
2496 | +message CreateUDF { |
2497 | + // path and name should be encoded with utf8 |
2498 | + optional string path = 1; |
2499 | + optional string name = 2; |
2500 | +} |
2501 | + |
2502 | +message UDFs { |
2503 | + optional bytes volume = 1; |
2504 | + optional bytes node = 2; |
2505 | + // suggested path should be encoded with utf8 |
2506 | + optional string suggested_path = 3; |
2507 | +} |
2508 | + |
2509 | +message VolumeDeleted { |
2510 | + optional bytes volume = 1; |
2511 | +} |
2512 | + |
2513 | +message DeleteVolume { |
2514 | + optional bytes volume = 1; |
2515 | +} |
2516 | + |
2517 | +message Volumes { |
2518 | + |
2519 | + enum VolumeType { |
2520 | + ROOT = 1; |
2521 | + SHARE = 2; |
2522 | + UDF = 3; |
2523 | + } |
2524 | + |
2525 | + optional VolumeType type = 1; |
2526 | + |
2527 | + // specific for a Root |
2528 | + optional Root root = 3; |
2529 | + |
2530 | + // specific for a UDF |
2531 | + optional UDFs udf = 4; |
2532 | + |
2533 | + // specific for share with direction "to me" and already accepted |
2534 | + optional Shares share = 5; |
2535 | +} |
2536 | + |
2537 | message QueryCaps { |
2538 | optional string capability = 1; |
2539 | } |
2540 | |
2541 | === added file 'ubuntuone/storageprotocol/protocol_pb2.py' |
2542 | --- ubuntuone/storageprotocol/protocol_pb2.py 1970-01-01 00:00:00 +0000 |
2543 | +++ ubuntuone/storageprotocol/protocol_pb2.py 2010-02-17 23:29:10 +0000 |
2544 | @@ -0,0 +1,2018 @@ |
2545 | +# Generated by the protocol buffer compiler. DO NOT EDIT! |
2546 | + |
2547 | +from google.protobuf import descriptor |
2548 | +from google.protobuf import message |
2549 | +from google.protobuf import reflection |
2550 | +from google.protobuf import service |
2551 | +from google.protobuf import service_reflection |
2552 | +from google.protobuf import descriptor_pb2 |
2553 | + |
2554 | + |
2555 | +_MESSAGE_MESSAGETYPE = descriptor.EnumDescriptor( |
2556 | + name='MessageType', |
2557 | + full_name='ubuntuone.storageprotocol.Message.MessageType', |
2558 | + filename='MessageType', |
2559 | + values=[ |
2560 | + descriptor.EnumValueDescriptor( |
2561 | + name='NOOP', index=0, number=0, |
2562 | + options=None, |
2563 | + type=None), |
2564 | + descriptor.EnumValueDescriptor( |
2565 | + name='ERROR', index=1, number=1, |
2566 | + options=None, |
2567 | + type=None), |
2568 | + descriptor.EnumValueDescriptor( |
2569 | + name='OK', index=2, number=2, |
2570 | + options=None, |
2571 | + type=None), |
2572 | + descriptor.EnumValueDescriptor( |
2573 | + name='PING', index=3, number=3, |
2574 | + options=None, |
2575 | + type=None), |
2576 | + descriptor.EnumValueDescriptor( |
2577 | + name='PONG', index=4, number=4, |
2578 | + options=None, |
2579 | + type=None), |
2580 | + descriptor.EnumValueDescriptor( |
2581 | + name='PROTOCOL_VERSION', index=5, number=5, |
2582 | + options=None, |
2583 | + type=None), |
2584 | + descriptor.EnumValueDescriptor( |
2585 | + name='AUTH_REQUEST', index=6, number=6, |
2586 | + options=None, |
2587 | + type=None), |
2588 | + descriptor.EnumValueDescriptor( |
2589 | + name='AUTH_REQUEST_TOKEN', index=7, number=7, |
2590 | + options=None, |
2591 | + type=None), |
2592 | + descriptor.EnumValueDescriptor( |
2593 | + name='AUTH_REQUEST_TOKEN_READY', index=8, number=8, |
2594 | + options=None, |
2595 | + type=None), |
2596 | + descriptor.EnumValueDescriptor( |
2597 | + name='AUTH_AUTHENTICATED', index=9, number=9, |
2598 | + options=None, |
2599 | + type=None), |
2600 | + descriptor.EnumValueDescriptor( |
2601 | + name='ROOT', index=10, number=10, |
2602 | + options=None, |
2603 | + type=None), |
2604 | + descriptor.EnumValueDescriptor( |
2605 | + name='MAKE_DIR', index=11, number=11, |
2606 | + options=None, |
2607 | + type=None), |
2608 | + descriptor.EnumValueDescriptor( |
2609 | + name='MAKE_FILE', index=12, number=12, |
2610 | + options=None, |
2611 | + type=None), |
2612 | + descriptor.EnumValueDescriptor( |
2613 | + name='NEW_DIR', index=13, number=13, |
2614 | + options=None, |
2615 | + type=None), |
2616 | + descriptor.EnumValueDescriptor( |
2617 | + name='NEW_FILE', index=14, number=14, |
2618 | + options=None, |
2619 | + type=None), |
2620 | + descriptor.EnumValueDescriptor( |
2621 | + name='QUERY', index=15, number=15, |
2622 | + options=None, |
2623 | + type=None), |
2624 | + descriptor.EnumValueDescriptor( |
2625 | + name='NODE_STATE', index=16, number=16, |
2626 | + options=None, |
2627 | + type=None), |
2628 | + descriptor.EnumValueDescriptor( |
2629 | + name='QUERY_END', index=17, number=17, |
2630 | + options=None, |
2631 | + type=None), |
2632 | + descriptor.EnumValueDescriptor( |
2633 | + name='GET_CONTENT', index=18, number=18, |
2634 | + options=None, |
2635 | + type=None), |
2636 | + descriptor.EnumValueDescriptor( |
2637 | + name='PUT_CONTENT', index=19, number=19, |
2638 | + options=None, |
2639 | + type=None), |
2640 | + descriptor.EnumValueDescriptor( |
2641 | + name='BEGIN_CONTENT', index=20, number=20, |
2642 | + options=None, |
2643 | + type=None), |
2644 | + descriptor.EnumValueDescriptor( |
2645 | + name='BYTES', index=21, number=21, |
2646 | + options=None, |
2647 | + type=None), |
2648 | + descriptor.EnumValueDescriptor( |
2649 | + name='EOF', index=22, number=22, |
2650 | + options=None, |
2651 | + type=None), |
2652 | + descriptor.EnumValueDescriptor( |
2653 | + name='MOVE', index=23, number=23, |
2654 | + options=None, |
2655 | + type=None), |
2656 | + descriptor.EnumValueDescriptor( |
2657 | + name='UNLINK', index=24, number=24, |
2658 | + options=None, |
2659 | + type=None), |
2660 | + descriptor.EnumValueDescriptor( |
2661 | + name='CREATE_SHARE', index=25, number=25, |
2662 | + options=None, |
2663 | + type=None), |
2664 | + descriptor.EnumValueDescriptor( |
2665 | + name='LIST_SHARES', index=26, number=26, |
2666 | + options=None, |
2667 | + type=None), |
2668 | + descriptor.EnumValueDescriptor( |
2669 | + name='SHARES_INFO', index=27, number=27, |
2670 | + options=None, |
2671 | + type=None), |
2672 | + descriptor.EnumValueDescriptor( |
2673 | + name='SHARES_END', index=28, number=28, |
2674 | + options=None, |
2675 | + type=None), |
2676 | + descriptor.EnumValueDescriptor( |
2677 | + name='NOTIFY_SHARE', index=29, number=29, |
2678 | + options=None, |
2679 | + type=None), |
2680 | + descriptor.EnumValueDescriptor( |
2681 | + name='SHARE_ACCEPTED', index=30, number=30, |
2682 | + options=None, |
2683 | + type=None), |
2684 | + descriptor.EnumValueDescriptor( |
2685 | + name='SHARE_DELETED', index=31, number=31, |
2686 | + options=None, |
2687 | + type=None), |
2688 | + descriptor.EnumValueDescriptor( |
2689 | + name='SHARE_CREATED', index=32, number=34, |
2690 | + options=None, |
2691 | + type=None), |
2692 | + descriptor.EnumValueDescriptor( |
2693 | + name='DELETE_SHARE', index=33, number=36, |
2694 | + options=None, |
2695 | + type=None), |
2696 | + descriptor.EnumValueDescriptor( |
2697 | + name='CREATE_UDF', index=34, number=44, |
2698 | + options=None, |
2699 | + type=None), |
2700 | + descriptor.EnumValueDescriptor( |
2701 | + name='LIST_VOLUMES', index=35, number=45, |
2702 | + options=None, |
2703 | + type=None), |
2704 | + descriptor.EnumValueDescriptor( |
2705 | + name='VOLUMES_INFO', index=36, number=46, |
2706 | + options=None, |
2707 | + type=None), |
2708 | + descriptor.EnumValueDescriptor( |
2709 | + name='VOLUMES_END', index=37, number=47, |
2710 | + options=None, |
2711 | + type=None), |
2712 | + descriptor.EnumValueDescriptor( |
2713 | + name='VOLUME_DELETED', index=38, number=48, |
2714 | + options=None, |
2715 | + type=None), |
2716 | + descriptor.EnumValueDescriptor( |
2717 | + name='VOLUME_CREATED', index=39, number=49, |
2718 | + options=None, |
2719 | + type=None), |
2720 | + descriptor.EnumValueDescriptor( |
2721 | + name='DELETE_VOLUME', index=40, number=50, |
2722 | + options=None, |
2723 | + type=None), |
2724 | + descriptor.EnumValueDescriptor( |
2725 | + name='CANCEL_REQUEST', index=41, number=32, |
2726 | + options=None, |
2727 | + type=None), |
2728 | + descriptor.EnumValueDescriptor( |
2729 | + name='NODE_ATTR', index=42, number=33, |
2730 | + options=None, |
2731 | + type=None), |
2732 | + descriptor.EnumValueDescriptor( |
2733 | + name='CANCELLED', index=43, number=35, |
2734 | + options=None, |
2735 | + type=None), |
2736 | + descriptor.EnumValueDescriptor( |
2737 | + name='QUERY_CAPS', index=44, number=37, |
2738 | + options=None, |
2739 | + type=None), |
2740 | + descriptor.EnumValueDescriptor( |
2741 | + name='SET_CAPS', index=45, number=38, |
2742 | + options=None, |
2743 | + type=None), |
2744 | + descriptor.EnumValueDescriptor( |
2745 | + name='ACCEPT_CAPS', index=46, number=39, |
2746 | + options=None, |
2747 | + type=None), |
2748 | + descriptor.EnumValueDescriptor( |
2749 | + name='FREE_SPACE_INFO', index=47, number=40, |
2750 | + options=None, |
2751 | + type=None), |
2752 | + descriptor.EnumValueDescriptor( |
2753 | + name='FREE_SPACE_INQUIRY', index=48, number=41, |
2754 | + options=None, |
2755 | + type=None), |
2756 | + descriptor.EnumValueDescriptor( |
2757 | + name='ACCOUNT_INFO', index=49, number=42, |
2758 | + options=None, |
2759 | + type=None), |
2760 | + descriptor.EnumValueDescriptor( |
2761 | + name='ACCOUNT_INQUIRY', index=50, number=43, |
2762 | + options=None, |
2763 | + type=None), |
2764 | + ], |
2765 | + options=None, |
2766 | +) |
2767 | + |
2768 | +_ERROR_ERRORTYPE = descriptor.EnumDescriptor( |
2769 | + name='ErrorType', |
2770 | + full_name='ubuntuone.storageprotocol.Error.ErrorType', |
2771 | + filename='ErrorType', |
2772 | + values=[ |
2773 | + descriptor.EnumValueDescriptor( |
2774 | + name='UNSUPPORTED_VERSION', index=0, number=0, |
2775 | + options=None, |
2776 | + type=None), |
2777 | + descriptor.EnumValueDescriptor( |
2778 | + name='AUTHENTICATION_FAILED', index=1, number=1, |
2779 | + options=None, |
2780 | + type=None), |
2781 | + descriptor.EnumValueDescriptor( |
2782 | + name='INTERNAL_ERROR', index=2, number=2, |
2783 | + options=None, |
2784 | + type=None), |
2785 | + descriptor.EnumValueDescriptor( |
2786 | + name='AUTHENTICATION_REQUIRED', index=3, number=3, |
2787 | + options=None, |
2788 | + type=None), |
2789 | + descriptor.EnumValueDescriptor( |
2790 | + name='NO_PERMISSION', index=4, number=4, |
2791 | + options=None, |
2792 | + type=None), |
2793 | + descriptor.EnumValueDescriptor( |
2794 | + name='ALREADY_EXISTS', index=5, number=5, |
2795 | + options=None, |
2796 | + type=None), |
2797 | + descriptor.EnumValueDescriptor( |
2798 | + name='DOES_NOT_EXIST', index=6, number=6, |
2799 | + options=None, |
2800 | + type=None), |
2801 | + descriptor.EnumValueDescriptor( |
2802 | + name='NOT_A_DIRECTORY', index=7, number=7, |
2803 | + options=None, |
2804 | + type=None), |
2805 | + descriptor.EnumValueDescriptor( |
2806 | + name='NOT_EMPTY', index=8, number=8, |
2807 | + options=None, |
2808 | + type=None), |
2809 | + descriptor.EnumValueDescriptor( |
2810 | + name='NOT_AVAILABLE', index=9, number=9, |
2811 | + options=None, |
2812 | + type=None), |
2813 | + descriptor.EnumValueDescriptor( |
2814 | + name='UPLOAD_IN_PROGRESS', index=10, number=10, |
2815 | + options=None, |
2816 | + type=None), |
2817 | + descriptor.EnumValueDescriptor( |
2818 | + name='UPLOAD_CORRUPT', index=11, number=11, |
2819 | + options=None, |
2820 | + type=None), |
2821 | + descriptor.EnumValueDescriptor( |
2822 | + name='UPLOAD_CANCELED', index=12, number=12, |
2823 | + options=None, |
2824 | + type=None), |
2825 | + descriptor.EnumValueDescriptor( |
2826 | + name='CONFLICT', index=13, number=13, |
2827 | + options=None, |
2828 | + type=None), |
2829 | + descriptor.EnumValueDescriptor( |
2830 | + name='TRY_AGAIN', index=14, number=14, |
2831 | + options=None, |
2832 | + type=None), |
2833 | + descriptor.EnumValueDescriptor( |
2834 | + name='PROTOCOL_ERROR', index=15, number=15, |
2835 | + options=None, |
2836 | + type=None), |
2837 | + descriptor.EnumValueDescriptor( |
2838 | + name='QUOTA_EXCEEDED', index=16, number=16, |
2839 | + options=None, |
2840 | + type=None), |
2841 | + descriptor.EnumValueDescriptor( |
2842 | + name='INVALID_FILENAME', index=17, number=17, |
2843 | + options=None, |
2844 | + type=None), |
2845 | + ], |
2846 | + options=None, |
2847 | +) |
2848 | + |
2849 | +_CREATESHARE_ACCESSLEVEL = descriptor.EnumDescriptor( |
2850 | + name='AccessLevel', |
2851 | + full_name='ubuntuone.storageprotocol.CreateShare.AccessLevel', |
2852 | + filename='AccessLevel', |
2853 | + values=[ |
2854 | + descriptor.EnumValueDescriptor( |
2855 | + name='VIEW', index=0, number=0, |
2856 | + options=None, |
2857 | + type=None), |
2858 | + descriptor.EnumValueDescriptor( |
2859 | + name='MODIFY', index=1, number=1, |
2860 | + options=None, |
2861 | + type=None), |
2862 | + ], |
2863 | + options=None, |
2864 | +) |
2865 | + |
2866 | +_SHARES_DIRECTION = descriptor.EnumDescriptor( |
2867 | + name='Direction', |
2868 | + full_name='ubuntuone.storageprotocol.Shares.Direction', |
2869 | + filename='Direction', |
2870 | + values=[ |
2871 | + descriptor.EnumValueDescriptor( |
2872 | + name='TO_ME', index=0, number=0, |
2873 | + options=None, |
2874 | + type=None), |
2875 | + descriptor.EnumValueDescriptor( |
2876 | + name='FROM_ME', index=1, number=1, |
2877 | + options=None, |
2878 | + type=None), |
2879 | + ], |
2880 | + options=None, |
2881 | +) |
2882 | + |
2883 | +_SHARES_ACCESSLEVEL = descriptor.EnumDescriptor( |
2884 | + name='AccessLevel', |
2885 | + full_name='ubuntuone.storageprotocol.Shares.AccessLevel', |
2886 | + filename='AccessLevel', |
2887 | + values=[ |
2888 | + descriptor.EnumValueDescriptor( |
2889 | + name='VIEW', index=0, number=0, |
2890 | + options=None, |
2891 | + type=None), |
2892 | + descriptor.EnumValueDescriptor( |
2893 | + name='MODIFY', index=1, number=1, |
2894 | + options=None, |
2895 | + type=None), |
2896 | + ], |
2897 | + options=None, |
2898 | +) |
2899 | + |
2900 | +_NOTIFYSHARE_ACCESSLEVEL = descriptor.EnumDescriptor( |
2901 | + name='AccessLevel', |
2902 | + full_name='ubuntuone.storageprotocol.NotifyShare.AccessLevel', |
2903 | + filename='AccessLevel', |
2904 | + values=[ |
2905 | + descriptor.EnumValueDescriptor( |
2906 | + name='VIEW', index=0, number=0, |
2907 | + options=None, |
2908 | + type=None), |
2909 | + descriptor.EnumValueDescriptor( |
2910 | + name='MODIFY', index=1, number=1, |
2911 | + options=None, |
2912 | + type=None), |
2913 | + ], |
2914 | + options=None, |
2915 | +) |
2916 | + |
2917 | +_SHAREACCEPTED_ANSWER = descriptor.EnumDescriptor( |
2918 | + name='Answer', |
2919 | + full_name='ubuntuone.storageprotocol.ShareAccepted.Answer', |
2920 | + filename='Answer', |
2921 | + values=[ |
2922 | + descriptor.EnumValueDescriptor( |
2923 | + name='YES', index=0, number=0, |
2924 | + options=None, |
2925 | + type=None), |
2926 | + descriptor.EnumValueDescriptor( |
2927 | + name='NO', index=1, number=1, |
2928 | + options=None, |
2929 | + type=None), |
2930 | + ], |
2931 | + options=None, |
2932 | +) |
2933 | + |
2934 | +_VOLUMES_VOLUMETYPE = descriptor.EnumDescriptor( |
2935 | + name='VolumeType', |
2936 | + full_name='ubuntuone.storageprotocol.Volumes.VolumeType', |
2937 | + filename='VolumeType', |
2938 | + values=[ |
2939 | + descriptor.EnumValueDescriptor( |
2940 | + name='ROOT', index=0, number=1, |
2941 | + options=None, |
2942 | + type=None), |
2943 | + descriptor.EnumValueDescriptor( |
2944 | + name='SHARE', index=1, number=2, |
2945 | + options=None, |
2946 | + type=None), |
2947 | + descriptor.EnumValueDescriptor( |
2948 | + name='UDF', index=2, number=3, |
2949 | + options=None, |
2950 | + type=None), |
2951 | + ], |
2952 | + options=None, |
2953 | +) |
2954 | + |
2955 | + |
2956 | +_MESSAGE = descriptor.Descriptor( |
2957 | + name='Message', |
2958 | + full_name='ubuntuone.storageprotocol.Message', |
2959 | + filename='ubuntuone/storageprotocol/protocol.proto', |
2960 | + containing_type=None, |
2961 | + fields=[ |
2962 | + descriptor.FieldDescriptor( |
2963 | + name='id', full_name='ubuntuone.storageprotocol.Message.id', index=0, |
2964 | + number=1, type=5, cpp_type=1, label=2, |
2965 | + default_value=0, |
2966 | + message_type=None, enum_type=None, containing_type=None, |
2967 | + is_extension=False, extension_scope=None, |
2968 | + options=None), |
2969 | + descriptor.FieldDescriptor( |
2970 | + name='type', full_name='ubuntuone.storageprotocol.Message.type', index=1, |
2971 | + number=2, type=14, cpp_type=8, label=2, |
2972 | + default_value=0, |
2973 | + message_type=None, enum_type=None, containing_type=None, |
2974 | + is_extension=False, extension_scope=None, |
2975 | + options=None), |
2976 | + descriptor.FieldDescriptor( |
2977 | + name='error', full_name='ubuntuone.storageprotocol.Message.error', index=2, |
2978 | + number=3, type=11, cpp_type=10, label=1, |
2979 | + default_value=None, |
2980 | + message_type=None, enum_type=None, containing_type=None, |
2981 | + is_extension=False, extension_scope=None, |
2982 | + options=None), |
2983 | + descriptor.FieldDescriptor( |
2984 | + name='protocol', full_name='ubuntuone.storageprotocol.Message.protocol', index=3, |
2985 | + number=4, type=11, cpp_type=10, label=1, |
2986 | + default_value=None, |
2987 | + message_type=None, enum_type=None, containing_type=None, |
2988 | + is_extension=False, extension_scope=None, |
2989 | + options=None), |
2990 | + descriptor.FieldDescriptor( |
2991 | + name='auth_parameters', full_name='ubuntuone.storageprotocol.Message.auth_parameters', index=4, |
2992 | + number=5, type=11, cpp_type=10, label=3, |
2993 | + default_value=[], |
2994 | + message_type=None, enum_type=None, containing_type=None, |
2995 | + is_extension=False, extension_scope=None, |
2996 | + options=None), |
2997 | + descriptor.FieldDescriptor( |
2998 | + name='root', full_name='ubuntuone.storageprotocol.Message.root', index=5, |
2999 | + number=6, type=11, cpp_type=10, label=1, |
3000 | + default_value=None, |
3001 | + message_type=None, enum_type=None, containing_type=None, |
3002 | + is_extension=False, extension_scope=None, |
3003 | + options=None), |
3004 | + descriptor.FieldDescriptor( |
3005 | + name='query', full_name='ubuntuone.storageprotocol.Message.query', index=6, |
3006 | + number=7, type=11, cpp_type=10, label=3, |
3007 | + default_value=[], |
3008 | + message_type=None, enum_type=None, containing_type=None, |
3009 | + is_extension=False, extension_scope=None, |
3010 | + options=None), |
3011 | + descriptor.FieldDescriptor( |
3012 | + name='node_state', full_name='ubuntuone.storageprotocol.Message.node_state', index=7, |
3013 | + number=8, type=11, cpp_type=10, label=1, |
3014 | + default_value=None, |
3015 | + message_type=None, enum_type=None, containing_type=None, |
3016 | + is_extension=False, extension_scope=None, |
3017 | + options=None), |
3018 | + descriptor.FieldDescriptor( |
3019 | + name='make', full_name='ubuntuone.storageprotocol.Message.make', index=8, |
3020 | + number=9, type=11, cpp_type=10, label=1, |
3021 | + default_value=None, |
3022 | + message_type=None, enum_type=None, containing_type=None, |
3023 | + is_extension=False, extension_scope=None, |
3024 | + options=None), |
3025 | + descriptor.FieldDescriptor( |
3026 | + name='new', full_name='ubuntuone.storageprotocol.Message.new', index=9, |
3027 | + number=10, type=11, cpp_type=10, label=1, |
3028 | + default_value=None, |
3029 | + message_type=None, enum_type=None, containing_type=None, |
3030 | + is_extension=False, extension_scope=None, |
3031 | + options=None), |
3032 | + descriptor.FieldDescriptor( |
3033 | + name='move', full_name='ubuntuone.storageprotocol.Message.move', index=10, |
3034 | + number=11, type=11, cpp_type=10, label=1, |
3035 | + default_value=None, |
3036 | + message_type=None, enum_type=None, containing_type=None, |
3037 | + is_extension=False, extension_scope=None, |
3038 | + options=None), |
3039 | + descriptor.FieldDescriptor( |
3040 | + name='get_content', full_name='ubuntuone.storageprotocol.Message.get_content', index=11, |
3041 | + number=12, type=11, cpp_type=10, label=1, |
3042 | + default_value=None, |
3043 | + message_type=None, enum_type=None, containing_type=None, |
3044 | + is_extension=False, extension_scope=None, |
3045 | + options=None), |
3046 | + descriptor.FieldDescriptor( |
3047 | + name='put_content', full_name='ubuntuone.storageprotocol.Message.put_content', index=12, |
3048 | + number=13, type=11, cpp_type=10, label=1, |
3049 | + default_value=None, |
3050 | + message_type=None, enum_type=None, containing_type=None, |
3051 | + is_extension=False, extension_scope=None, |
3052 | + options=None), |
3053 | + descriptor.FieldDescriptor( |
3054 | + name='upload_in_progress', full_name='ubuntuone.storageprotocol.Message.upload_in_progress', index=13, |
3055 | + number=14, type=11, cpp_type=10, label=1, |
3056 | + default_value=None, |
3057 | + message_type=None, enum_type=None, containing_type=None, |
3058 | + is_extension=False, extension_scope=None, |
3059 | + options=None), |
3060 | + descriptor.FieldDescriptor( |
3061 | + name='bytes', full_name='ubuntuone.storageprotocol.Message.bytes', index=14, |
3062 | + number=15, type=11, cpp_type=10, label=1, |
3063 | + default_value=None, |
3064 | + message_type=None, enum_type=None, containing_type=None, |
3065 | + is_extension=False, extension_scope=None, |
3066 | + options=None), |
3067 | + descriptor.FieldDescriptor( |
3068 | + name='unlink', full_name='ubuntuone.storageprotocol.Message.unlink', index=15, |
3069 | + number=16, type=11, cpp_type=10, label=1, |
3070 | + default_value=None, |
3071 | + message_type=None, enum_type=None, containing_type=None, |
3072 | + is_extension=False, extension_scope=None, |
3073 | + options=None), |
3074 | + descriptor.FieldDescriptor( |
3075 | + name='cancel_request', full_name='ubuntuone.storageprotocol.Message.cancel_request', index=16, |
3076 | + number=17, type=11, cpp_type=10, label=1, |
3077 | + default_value=None, |
3078 | + message_type=None, enum_type=None, containing_type=None, |
3079 | + is_extension=False, extension_scope=None, |
3080 | + options=None), |
3081 | + descriptor.FieldDescriptor( |
3082 | + name='node_attr', full_name='ubuntuone.storageprotocol.Message.node_attr', index=17, |
3083 | + number=18, type=11, cpp_type=10, label=1, |
3084 | + default_value=None, |
3085 | + message_type=None, enum_type=None, containing_type=None, |
3086 | + is_extension=False, extension_scope=None, |
3087 | + options=None), |
3088 | + descriptor.FieldDescriptor( |
3089 | + name='create_share', full_name='ubuntuone.storageprotocol.Message.create_share', index=18, |
3090 | + number=19, type=11, cpp_type=10, label=1, |
3091 | + default_value=None, |
3092 | + message_type=None, enum_type=None, containing_type=None, |
3093 | + is_extension=False, extension_scope=None, |
3094 | + options=None), |
3095 | + descriptor.FieldDescriptor( |
3096 | + name='shares', full_name='ubuntuone.storageprotocol.Message.shares', index=19, |
3097 | + number=20, type=11, cpp_type=10, label=1, |
3098 | + default_value=None, |
3099 | + message_type=None, enum_type=None, containing_type=None, |
3100 | + is_extension=False, extension_scope=None, |
3101 | + options=None), |
3102 | + descriptor.FieldDescriptor( |
3103 | + name='notify_share', full_name='ubuntuone.storageprotocol.Message.notify_share', index=20, |
3104 | + number=21, type=11, cpp_type=10, label=1, |
3105 | + default_value=None, |
3106 | + message_type=None, enum_type=None, containing_type=None, |
3107 | + is_extension=False, extension_scope=None, |
3108 | + options=None), |
3109 | + descriptor.FieldDescriptor( |
3110 | + name='share_accepted', full_name='ubuntuone.storageprotocol.Message.share_accepted', index=21, |
3111 | + number=22, type=11, cpp_type=10, label=1, |
3112 | + default_value=None, |
3113 | + message_type=None, enum_type=None, containing_type=None, |
3114 | + is_extension=False, extension_scope=None, |
3115 | + options=None), |
3116 | + descriptor.FieldDescriptor( |
3117 | + name='share_deleted', full_name='ubuntuone.storageprotocol.Message.share_deleted', index=22, |
3118 | + number=23, type=11, cpp_type=10, label=1, |
3119 | + default_value=None, |
3120 | + message_type=None, enum_type=None, containing_type=None, |
3121 | + is_extension=False, extension_scope=None, |
3122 | + options=None), |
3123 | + descriptor.FieldDescriptor( |
3124 | + name='share_created', full_name='ubuntuone.storageprotocol.Message.share_created', index=23, |
3125 | + number=24, type=11, cpp_type=10, label=1, |
3126 | + default_value=None, |
3127 | + message_type=None, enum_type=None, containing_type=None, |
3128 | + is_extension=False, extension_scope=None, |
3129 | + options=None), |
3130 | + descriptor.FieldDescriptor( |
3131 | + name='delete_share', full_name='ubuntuone.storageprotocol.Message.delete_share', index=24, |
3132 | + number=25, type=11, cpp_type=10, label=1, |
3133 | + default_value=None, |
3134 | + message_type=None, enum_type=None, containing_type=None, |
3135 | + is_extension=False, extension_scope=None, |
3136 | + options=None), |
3137 | + descriptor.FieldDescriptor( |
3138 | + name='create_udf', full_name='ubuntuone.storageprotocol.Message.create_udf', index=25, |
3139 | + number=33, type=11, cpp_type=10, label=1, |
3140 | + default_value=None, |
3141 | + message_type=None, enum_type=None, containing_type=None, |
3142 | + is_extension=False, extension_scope=None, |
3143 | + options=None), |
3144 | + descriptor.FieldDescriptor( |
3145 | + name='list_volumes', full_name='ubuntuone.storageprotocol.Message.list_volumes', index=26, |
3146 | + number=34, type=11, cpp_type=10, label=1, |
3147 | + default_value=None, |
3148 | + message_type=None, enum_type=None, containing_type=None, |
3149 | + is_extension=False, extension_scope=None, |
3150 | + options=None), |
3151 | + descriptor.FieldDescriptor( |
3152 | + name='volume_deleted', full_name='ubuntuone.storageprotocol.Message.volume_deleted', index=27, |
3153 | + number=35, type=11, cpp_type=10, label=1, |
3154 | + default_value=None, |
3155 | + message_type=None, enum_type=None, containing_type=None, |
3156 | + is_extension=False, extension_scope=None, |
3157 | + options=None), |
3158 | + descriptor.FieldDescriptor( |
3159 | + name='volume_created', full_name='ubuntuone.storageprotocol.Message.volume_created', index=28, |
3160 | + number=36, type=11, cpp_type=10, label=1, |
3161 | + default_value=None, |
3162 | + message_type=None, enum_type=None, containing_type=None, |
3163 | + is_extension=False, extension_scope=None, |
3164 | + options=None), |
3165 | + descriptor.FieldDescriptor( |
3166 | + name='delete_volume', full_name='ubuntuone.storageprotocol.Message.delete_volume', index=29, |
3167 | + number=37, type=11, cpp_type=10, label=1, |
3168 | + default_value=None, |
3169 | + message_type=None, enum_type=None, containing_type=None, |
3170 | + is_extension=False, extension_scope=None, |
3171 | + options=None), |
3172 | + descriptor.FieldDescriptor( |
3173 | + name='query_caps', full_name='ubuntuone.storageprotocol.Message.query_caps', index=30, |
3174 | + number=26, type=11, cpp_type=10, label=3, |
3175 | + default_value=[], |
3176 | + message_type=None, enum_type=None, containing_type=None, |
3177 | + is_extension=False, extension_scope=None, |
3178 | + options=None), |
3179 | + descriptor.FieldDescriptor( |
3180 | + name='set_caps', full_name='ubuntuone.storageprotocol.Message.set_caps', index=31, |
3181 | + number=27, type=11, cpp_type=10, label=3, |
3182 | + default_value=[], |
3183 | + message_type=None, enum_type=None, containing_type=None, |
3184 | + is_extension=False, extension_scope=None, |
3185 | + options=None), |
3186 | + descriptor.FieldDescriptor( |
3187 | + name='accept_caps', full_name='ubuntuone.storageprotocol.Message.accept_caps', index=32, |
3188 | + number=28, type=11, cpp_type=10, label=1, |
3189 | + default_value=None, |
3190 | + message_type=None, enum_type=None, containing_type=None, |
3191 | + is_extension=False, extension_scope=None, |
3192 | + options=None), |
3193 | + descriptor.FieldDescriptor( |
3194 | + name='free_space_info', full_name='ubuntuone.storageprotocol.Message.free_space_info', index=33, |
3195 | + number=29, type=11, cpp_type=10, label=1, |
3196 | + default_value=None, |
3197 | + message_type=None, enum_type=None, containing_type=None, |
3198 | + is_extension=False, extension_scope=None, |
3199 | + options=None), |
3200 | + descriptor.FieldDescriptor( |
3201 | + name='free_space_inquiry', full_name='ubuntuone.storageprotocol.Message.free_space_inquiry', index=34, |
3202 | + number=30, type=11, cpp_type=10, label=1, |
3203 | + default_value=None, |
3204 | + message_type=None, enum_type=None, containing_type=None, |
3205 | + is_extension=False, extension_scope=None, |
3206 | + options=None), |
3207 | + descriptor.FieldDescriptor( |
3208 | + name='account_info', full_name='ubuntuone.storageprotocol.Message.account_info', index=35, |
3209 | + number=31, type=11, cpp_type=10, label=1, |
3210 | + default_value=None, |
3211 | + message_type=None, enum_type=None, containing_type=None, |
3212 | + is_extension=False, extension_scope=None, |
3213 | + options=None), |
3214 | + descriptor.FieldDescriptor( |
3215 | + name='begin_content', full_name='ubuntuone.storageprotocol.Message.begin_content', index=36, |
3216 | + number=32, type=11, cpp_type=10, label=1, |
3217 | + default_value=None, |
3218 | + message_type=None, enum_type=None, containing_type=None, |
3219 | + is_extension=False, extension_scope=None, |
3220 | + options=None), |
3221 | + ], |
3222 | + extensions=[ |
3223 | + ], |
3224 | + nested_types=[], # TODO(robinson): Implement. |
3225 | + enum_types=[ |
3226 | + _MESSAGE_MESSAGETYPE, |
3227 | + ], |
3228 | + options=None) |
3229 | + |
3230 | + |
3231 | +_ERROR = descriptor.Descriptor( |
3232 | + name='Error', |
3233 | + full_name='ubuntuone.storageprotocol.Error', |
3234 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3235 | + containing_type=None, |
3236 | + fields=[ |
3237 | + descriptor.FieldDescriptor( |
3238 | + name='type', full_name='ubuntuone.storageprotocol.Error.type', index=0, |
3239 | + number=1, type=14, cpp_type=8, label=2, |
3240 | + default_value=0, |
3241 | + message_type=None, enum_type=None, containing_type=None, |
3242 | + is_extension=False, extension_scope=None, |
3243 | + options=None), |
3244 | + descriptor.FieldDescriptor( |
3245 | + name='comment', full_name='ubuntuone.storageprotocol.Error.comment', index=1, |
3246 | + number=2, type=9, cpp_type=9, label=1, |
3247 | + default_value=unicode("", "utf-8"), |
3248 | + message_type=None, enum_type=None, containing_type=None, |
3249 | + is_extension=False, extension_scope=None, |
3250 | + options=None), |
3251 | + ], |
3252 | + extensions=[ |
3253 | + ], |
3254 | + nested_types=[], # TODO(robinson): Implement. |
3255 | + enum_types=[ |
3256 | + _ERROR_ERRORTYPE, |
3257 | + ], |
3258 | + options=None) |
3259 | + |
3260 | + |
3261 | +_PROTOCOL = descriptor.Descriptor( |
3262 | + name='Protocol', |
3263 | + full_name='ubuntuone.storageprotocol.Protocol', |
3264 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3265 | + containing_type=None, |
3266 | + fields=[ |
3267 | + descriptor.FieldDescriptor( |
3268 | + name='version', full_name='ubuntuone.storageprotocol.Protocol.version', index=0, |
3269 | + number=1, type=5, cpp_type=1, label=2, |
3270 | + default_value=0, |
3271 | + message_type=None, enum_type=None, containing_type=None, |
3272 | + is_extension=False, extension_scope=None, |
3273 | + options=None), |
3274 | + ], |
3275 | + extensions=[ |
3276 | + ], |
3277 | + nested_types=[], # TODO(robinson): Implement. |
3278 | + enum_types=[ |
3279 | + ], |
3280 | + options=None) |
3281 | + |
3282 | + |
3283 | +_AUTHPARAMETER = descriptor.Descriptor( |
3284 | + name='AuthParameter', |
3285 | + full_name='ubuntuone.storageprotocol.AuthParameter', |
3286 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3287 | + containing_type=None, |
3288 | + fields=[ |
3289 | + descriptor.FieldDescriptor( |
3290 | + name='name', full_name='ubuntuone.storageprotocol.AuthParameter.name', index=0, |
3291 | + number=1, type=9, cpp_type=9, label=2, |
3292 | + default_value=unicode("", "utf-8"), |
3293 | + message_type=None, enum_type=None, containing_type=None, |
3294 | + is_extension=False, extension_scope=None, |
3295 | + options=None), |
3296 | + descriptor.FieldDescriptor( |
3297 | + name='value', full_name='ubuntuone.storageprotocol.AuthParameter.value', index=1, |
3298 | + number=2, type=9, cpp_type=9, label=2, |
3299 | + default_value=unicode("", "utf-8"), |
3300 | + message_type=None, enum_type=None, containing_type=None, |
3301 | + is_extension=False, extension_scope=None, |
3302 | + options=None), |
3303 | + ], |
3304 | + extensions=[ |
3305 | + ], |
3306 | + nested_types=[], # TODO(robinson): Implement. |
3307 | + enum_types=[ |
3308 | + ], |
3309 | + options=None) |
3310 | + |
3311 | + |
3312 | +_MAKE = descriptor.Descriptor( |
3313 | + name='Make', |
3314 | + full_name='ubuntuone.storageprotocol.Make', |
3315 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3316 | + containing_type=None, |
3317 | + fields=[ |
3318 | + descriptor.FieldDescriptor( |
3319 | + name='share', full_name='ubuntuone.storageprotocol.Make.share', index=0, |
3320 | + number=1, type=12, cpp_type=9, label=1, |
3321 | + default_value="", |
3322 | + message_type=None, enum_type=None, containing_type=None, |
3323 | + is_extension=False, extension_scope=None, |
3324 | + options=None), |
3325 | + descriptor.FieldDescriptor( |
3326 | + name='parent_node', full_name='ubuntuone.storageprotocol.Make.parent_node', index=1, |
3327 | + number=2, type=12, cpp_type=9, label=1, |
3328 | + default_value="", |
3329 | + message_type=None, enum_type=None, containing_type=None, |
3330 | + is_extension=False, extension_scope=None, |
3331 | + options=None), |
3332 | + descriptor.FieldDescriptor( |
3333 | + name='name', full_name='ubuntuone.storageprotocol.Make.name', index=2, |
3334 | + number=3, type=9, cpp_type=9, label=1, |
3335 | + default_value=unicode("", "utf-8"), |
3336 | + message_type=None, enum_type=None, containing_type=None, |
3337 | + is_extension=False, extension_scope=None, |
3338 | + options=None), |
3339 | + ], |
3340 | + extensions=[ |
3341 | + ], |
3342 | + nested_types=[], # TODO(robinson): Implement. |
3343 | + enum_types=[ |
3344 | + ], |
3345 | + options=None) |
3346 | + |
3347 | + |
3348 | +_NEW = descriptor.Descriptor( |
3349 | + name='New', |
3350 | + full_name='ubuntuone.storageprotocol.New', |
3351 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3352 | + containing_type=None, |
3353 | + fields=[ |
3354 | + descriptor.FieldDescriptor( |
3355 | + name='node', full_name='ubuntuone.storageprotocol.New.node', index=0, |
3356 | + number=1, type=12, cpp_type=9, label=1, |
3357 | + default_value="", |
3358 | + message_type=None, enum_type=None, containing_type=None, |
3359 | + is_extension=False, extension_scope=None, |
3360 | + options=None), |
3361 | + descriptor.FieldDescriptor( |
3362 | + name='parent_node', full_name='ubuntuone.storageprotocol.New.parent_node', index=1, |
3363 | + number=2, type=12, cpp_type=9, label=1, |
3364 | + default_value="", |
3365 | + message_type=None, enum_type=None, containing_type=None, |
3366 | + is_extension=False, extension_scope=None, |
3367 | + options=None), |
3368 | + descriptor.FieldDescriptor( |
3369 | + name='name', full_name='ubuntuone.storageprotocol.New.name', index=2, |
3370 | + number=3, type=9, cpp_type=9, label=1, |
3371 | + default_value=unicode("", "utf-8"), |
3372 | + message_type=None, enum_type=None, containing_type=None, |
3373 | + is_extension=False, extension_scope=None, |
3374 | + options=None), |
3375 | + ], |
3376 | + extensions=[ |
3377 | + ], |
3378 | + nested_types=[], # TODO(robinson): Implement. |
3379 | + enum_types=[ |
3380 | + ], |
3381 | + options=None) |
3382 | + |
3383 | + |
3384 | +_ROOT = descriptor.Descriptor( |
3385 | + name='Root', |
3386 | + full_name='ubuntuone.storageprotocol.Root', |
3387 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3388 | + containing_type=None, |
3389 | + fields=[ |
3390 | + descriptor.FieldDescriptor( |
3391 | + name='node', full_name='ubuntuone.storageprotocol.Root.node', index=0, |
3392 | + number=1, type=12, cpp_type=9, label=1, |
3393 | + default_value="", |
3394 | + message_type=None, enum_type=None, containing_type=None, |
3395 | + is_extension=False, extension_scope=None, |
3396 | + options=None), |
3397 | + ], |
3398 | + extensions=[ |
3399 | + ], |
3400 | + nested_types=[], # TODO(robinson): Implement. |
3401 | + enum_types=[ |
3402 | + ], |
3403 | + options=None) |
3404 | + |
3405 | + |
3406 | +_QUERY = descriptor.Descriptor( |
3407 | + name='Query', |
3408 | + full_name='ubuntuone.storageprotocol.Query', |
3409 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3410 | + containing_type=None, |
3411 | + fields=[ |
3412 | + descriptor.FieldDescriptor( |
3413 | + name='share', full_name='ubuntuone.storageprotocol.Query.share', index=0, |
3414 | + number=1, type=12, cpp_type=9, label=1, |
3415 | + default_value="", |
3416 | + message_type=None, enum_type=None, containing_type=None, |
3417 | + is_extension=False, extension_scope=None, |
3418 | + options=None), |
3419 | + descriptor.FieldDescriptor( |
3420 | + name='node', full_name='ubuntuone.storageprotocol.Query.node', index=1, |
3421 | + number=2, type=12, cpp_type=9, label=1, |
3422 | + default_value="", |
3423 | + message_type=None, enum_type=None, containing_type=None, |
3424 | + is_extension=False, extension_scope=None, |
3425 | + options=None), |
3426 | + descriptor.FieldDescriptor( |
3427 | + name='hash', full_name='ubuntuone.storageprotocol.Query.hash', index=2, |
3428 | + number=3, type=12, cpp_type=9, label=1, |
3429 | + default_value="", |
3430 | + message_type=None, enum_type=None, containing_type=None, |
3431 | + is_extension=False, extension_scope=None, |
3432 | + options=None), |
3433 | + ], |
3434 | + extensions=[ |
3435 | + ], |
3436 | + nested_types=[], # TODO(robinson): Implement. |
3437 | + enum_types=[ |
3438 | + ], |
3439 | + options=None) |
3440 | + |
3441 | + |
3442 | +_NODESTATE = descriptor.Descriptor( |
3443 | + name='NodeState', |
3444 | + full_name='ubuntuone.storageprotocol.NodeState', |
3445 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3446 | + containing_type=None, |
3447 | + fields=[ |
3448 | + descriptor.FieldDescriptor( |
3449 | + name='share', full_name='ubuntuone.storageprotocol.NodeState.share', index=0, |
3450 | + number=1, type=12, cpp_type=9, label=1, |
3451 | + default_value="", |
3452 | + message_type=None, enum_type=None, containing_type=None, |
3453 | + is_extension=False, extension_scope=None, |
3454 | + options=None), |
3455 | + descriptor.FieldDescriptor( |
3456 | + name='node', full_name='ubuntuone.storageprotocol.NodeState.node', index=1, |
3457 | + number=2, type=12, cpp_type=9, label=1, |
3458 | + default_value="", |
3459 | + message_type=None, enum_type=None, containing_type=None, |
3460 | + is_extension=False, extension_scope=None, |
3461 | + options=None), |
3462 | + descriptor.FieldDescriptor( |
3463 | + name='hash', full_name='ubuntuone.storageprotocol.NodeState.hash', index=2, |
3464 | + number=3, type=12, cpp_type=9, label=1, |
3465 | + default_value="", |
3466 | + message_type=None, enum_type=None, containing_type=None, |
3467 | + is_extension=False, extension_scope=None, |
3468 | + options=None), |
3469 | + ], |
3470 | + extensions=[ |
3471 | + ], |
3472 | + nested_types=[], # TODO(robinson): Implement. |
3473 | + enum_types=[ |
3474 | + ], |
3475 | + options=None) |
3476 | + |
3477 | + |
3478 | +_GETCONTENT = descriptor.Descriptor( |
3479 | + name='GetContent', |
3480 | + full_name='ubuntuone.storageprotocol.GetContent', |
3481 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3482 | + containing_type=None, |
3483 | + fields=[ |
3484 | + descriptor.FieldDescriptor( |
3485 | + name='share', full_name='ubuntuone.storageprotocol.GetContent.share', index=0, |
3486 | + number=1, type=12, cpp_type=9, label=1, |
3487 | + default_value="", |
3488 | + message_type=None, enum_type=None, containing_type=None, |
3489 | + is_extension=False, extension_scope=None, |
3490 | + options=None), |
3491 | + descriptor.FieldDescriptor( |
3492 | + name='node', full_name='ubuntuone.storageprotocol.GetContent.node', index=1, |
3493 | + number=2, type=12, cpp_type=9, label=1, |
3494 | + default_value="", |
3495 | + message_type=None, enum_type=None, containing_type=None, |
3496 | + is_extension=False, extension_scope=None, |
3497 | + options=None), |
3498 | + descriptor.FieldDescriptor( |
3499 | + name='hash', full_name='ubuntuone.storageprotocol.GetContent.hash', index=2, |
3500 | + number=3, type=12, cpp_type=9, label=1, |
3501 | + default_value="", |
3502 | + message_type=None, enum_type=None, containing_type=None, |
3503 | + is_extension=False, extension_scope=None, |
3504 | + options=None), |
3505 | + descriptor.FieldDescriptor( |
3506 | + name='offset', full_name='ubuntuone.storageprotocol.GetContent.offset', index=3, |
3507 | + number=4, type=3, cpp_type=2, label=1, |
3508 | + default_value=0, |
3509 | + message_type=None, enum_type=None, containing_type=None, |
3510 | + is_extension=False, extension_scope=None, |
3511 | + options=None), |
3512 | + ], |
3513 | + extensions=[ |
3514 | + ], |
3515 | + nested_types=[], # TODO(robinson): Implement. |
3516 | + enum_types=[ |
3517 | + ], |
3518 | + options=None) |
3519 | + |
3520 | + |
3521 | +_CANCELREQUEST = descriptor.Descriptor( |
3522 | + name='CancelRequest', |
3523 | + full_name='ubuntuone.storageprotocol.CancelRequest', |
3524 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3525 | + containing_type=None, |
3526 | + fields=[ |
3527 | + ], |
3528 | + extensions=[ |
3529 | + ], |
3530 | + nested_types=[], # TODO(robinson): Implement. |
3531 | + enum_types=[ |
3532 | + ], |
3533 | + options=None) |
3534 | + |
3535 | + |
3536 | +_NODEATTR = descriptor.Descriptor( |
3537 | + name='NodeAttr', |
3538 | + full_name='ubuntuone.storageprotocol.NodeAttr', |
3539 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3540 | + containing_type=None, |
3541 | + fields=[ |
3542 | + descriptor.FieldDescriptor( |
3543 | + name='deflated_size', full_name='ubuntuone.storageprotocol.NodeAttr.deflated_size', index=0, |
3544 | + number=1, type=4, cpp_type=4, label=1, |
3545 | + default_value=0, |
3546 | + message_type=None, enum_type=None, containing_type=None, |
3547 | + is_extension=False, extension_scope=None, |
3548 | + options=None), |
3549 | + descriptor.FieldDescriptor( |
3550 | + name='size', full_name='ubuntuone.storageprotocol.NodeAttr.size', index=1, |
3551 | + number=2, type=4, cpp_type=4, label=1, |
3552 | + default_value=0, |
3553 | + message_type=None, enum_type=None, containing_type=None, |
3554 | + is_extension=False, extension_scope=None, |
3555 | + options=None), |
3556 | + descriptor.FieldDescriptor( |
3557 | + name='hash', full_name='ubuntuone.storageprotocol.NodeAttr.hash', index=2, |
3558 | + number=3, type=12, cpp_type=9, label=1, |
3559 | + default_value="", |
3560 | + message_type=None, enum_type=None, containing_type=None, |
3561 | + is_extension=False, extension_scope=None, |
3562 | + options=None), |
3563 | + descriptor.FieldDescriptor( |
3564 | + name='crc32', full_name='ubuntuone.storageprotocol.NodeAttr.crc32', index=3, |
3565 | + number=4, type=13, cpp_type=3, label=1, |
3566 | + default_value=0, |
3567 | + message_type=None, enum_type=None, containing_type=None, |
3568 | + is_extension=False, extension_scope=None, |
3569 | + options=None), |
3570 | + ], |
3571 | + extensions=[ |
3572 | + ], |
3573 | + nested_types=[], # TODO(robinson): Implement. |
3574 | + enum_types=[ |
3575 | + ], |
3576 | + options=None) |
3577 | + |
3578 | + |
3579 | +_BYTES = descriptor.Descriptor( |
3580 | + name='Bytes', |
3581 | + full_name='ubuntuone.storageprotocol.Bytes', |
3582 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3583 | + containing_type=None, |
3584 | + fields=[ |
3585 | + descriptor.FieldDescriptor( |
3586 | + name='bytes', full_name='ubuntuone.storageprotocol.Bytes.bytes', index=0, |
3587 | + number=1, type=12, cpp_type=9, label=1, |
3588 | + default_value="", |
3589 | + message_type=None, enum_type=None, containing_type=None, |
3590 | + is_extension=False, extension_scope=None, |
3591 | + options=None), |
3592 | + ], |
3593 | + extensions=[ |
3594 | + ], |
3595 | + nested_types=[], # TODO(robinson): Implement. |
3596 | + enum_types=[ |
3597 | + ], |
3598 | + options=None) |
3599 | + |
3600 | + |
3601 | +_PUTCONTENT = descriptor.Descriptor( |
3602 | + name='PutContent', |
3603 | + full_name='ubuntuone.storageprotocol.PutContent', |
3604 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3605 | + containing_type=None, |
3606 | + fields=[ |
3607 | + descriptor.FieldDescriptor( |
3608 | + name='share', full_name='ubuntuone.storageprotocol.PutContent.share', index=0, |
3609 | + number=1, type=12, cpp_type=9, label=1, |
3610 | + default_value="", |
3611 | + message_type=None, enum_type=None, containing_type=None, |
3612 | + is_extension=False, extension_scope=None, |
3613 | + options=None), |
3614 | + descriptor.FieldDescriptor( |
3615 | + name='node', full_name='ubuntuone.storageprotocol.PutContent.node', index=1, |
3616 | + number=2, type=12, cpp_type=9, label=1, |
3617 | + default_value="", |
3618 | + message_type=None, enum_type=None, containing_type=None, |
3619 | + is_extension=False, extension_scope=None, |
3620 | + options=None), |
3621 | + descriptor.FieldDescriptor( |
3622 | + name='previous_hash', full_name='ubuntuone.storageprotocol.PutContent.previous_hash', index=2, |
3623 | + number=3, type=12, cpp_type=9, label=1, |
3624 | + default_value="", |
3625 | + message_type=None, enum_type=None, containing_type=None, |
3626 | + is_extension=False, extension_scope=None, |
3627 | + options=None), |
3628 | + descriptor.FieldDescriptor( |
3629 | + name='hash', full_name='ubuntuone.storageprotocol.PutContent.hash', index=3, |
3630 | + number=4, type=12, cpp_type=9, label=1, |
3631 | + default_value="", |
3632 | + message_type=None, enum_type=None, containing_type=None, |
3633 | + is_extension=False, extension_scope=None, |
3634 | + options=None), |
3635 | + descriptor.FieldDescriptor( |
3636 | + name='crc32', full_name='ubuntuone.storageprotocol.PutContent.crc32', index=4, |
3637 | + number=5, type=13, cpp_type=3, label=1, |
3638 | + default_value=0, |
3639 | + message_type=None, enum_type=None, containing_type=None, |
3640 | + is_extension=False, extension_scope=None, |
3641 | + options=None), |
3642 | + descriptor.FieldDescriptor( |
3643 | + name='size', full_name='ubuntuone.storageprotocol.PutContent.size', index=5, |
3644 | + number=6, type=4, cpp_type=4, label=1, |
3645 | + default_value=0, |
3646 | + message_type=None, enum_type=None, containing_type=None, |
3647 | + is_extension=False, extension_scope=None, |
3648 | + options=None), |
3649 | + descriptor.FieldDescriptor( |
3650 | + name='deflated_size', full_name='ubuntuone.storageprotocol.PutContent.deflated_size', index=6, |
3651 | + number=7, type=4, cpp_type=4, label=1, |
3652 | + default_value=0, |
3653 | + message_type=None, enum_type=None, containing_type=None, |
3654 | + is_extension=False, extension_scope=None, |
3655 | + options=None), |
3656 | + ], |
3657 | + extensions=[ |
3658 | + ], |
3659 | + nested_types=[], # TODO(robinson): Implement. |
3660 | + enum_types=[ |
3661 | + ], |
3662 | + options=None) |
3663 | + |
3664 | + |
3665 | +_BEGINCONTENT = descriptor.Descriptor( |
3666 | + name='BeginContent', |
3667 | + full_name='ubuntuone.storageprotocol.BeginContent', |
3668 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3669 | + containing_type=None, |
3670 | + fields=[ |
3671 | + descriptor.FieldDescriptor( |
3672 | + name='offset', full_name='ubuntuone.storageprotocol.BeginContent.offset', index=0, |
3673 | + number=2, type=4, cpp_type=4, label=1, |
3674 | + default_value=0, |
3675 | + message_type=None, enum_type=None, containing_type=None, |
3676 | + is_extension=False, extension_scope=None, |
3677 | + options=None), |
3678 | + ], |
3679 | + extensions=[ |
3680 | + ], |
3681 | + nested_types=[], # TODO(robinson): Implement. |
3682 | + enum_types=[ |
3683 | + ], |
3684 | + options=None) |
3685 | + |
3686 | + |
3687 | +_UPLOADINPROGRESS = descriptor.Descriptor( |
3688 | + name='UploadInProgress', |
3689 | + full_name='ubuntuone.storageprotocol.UploadInProgress', |
3690 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3691 | + containing_type=None, |
3692 | + fields=[ |
3693 | + descriptor.FieldDescriptor( |
3694 | + name='upload', full_name='ubuntuone.storageprotocol.UploadInProgress.upload', index=0, |
3695 | + number=1, type=12, cpp_type=9, label=1, |
3696 | + default_value="", |
3697 | + message_type=None, enum_type=None, containing_type=None, |
3698 | + is_extension=False, extension_scope=None, |
3699 | + options=None), |
3700 | + descriptor.FieldDescriptor( |
3701 | + name='timestamp', full_name='ubuntuone.storageprotocol.UploadInProgress.timestamp', index=1, |
3702 | + number=2, type=5, cpp_type=1, label=1, |
3703 | + default_value=0, |
3704 | + message_type=None, enum_type=None, containing_type=None, |
3705 | + is_extension=False, extension_scope=None, |
3706 | + options=None), |
3707 | + ], |
3708 | + extensions=[ |
3709 | + ], |
3710 | + nested_types=[], # TODO(robinson): Implement. |
3711 | + enum_types=[ |
3712 | + ], |
3713 | + options=None) |
3714 | + |
3715 | + |
3716 | +_MOVE = descriptor.Descriptor( |
3717 | + name='Move', |
3718 | + full_name='ubuntuone.storageprotocol.Move', |
3719 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3720 | + containing_type=None, |
3721 | + fields=[ |
3722 | + descriptor.FieldDescriptor( |
3723 | + name='share', full_name='ubuntuone.storageprotocol.Move.share', index=0, |
3724 | + number=1, type=12, cpp_type=9, label=1, |
3725 | + default_value="", |
3726 | + message_type=None, enum_type=None, containing_type=None, |
3727 | + is_extension=False, extension_scope=None, |
3728 | + options=None), |
3729 | + descriptor.FieldDescriptor( |
3730 | + name='node', full_name='ubuntuone.storageprotocol.Move.node', index=1, |
3731 | + number=2, type=12, cpp_type=9, label=1, |
3732 | + default_value="", |
3733 | + message_type=None, enum_type=None, containing_type=None, |
3734 | + is_extension=False, extension_scope=None, |
3735 | + options=None), |
3736 | + descriptor.FieldDescriptor( |
3737 | + name='new_parent_node', full_name='ubuntuone.storageprotocol.Move.new_parent_node', index=2, |
3738 | + number=3, type=12, cpp_type=9, label=1, |
3739 | + default_value="", |
3740 | + message_type=None, enum_type=None, containing_type=None, |
3741 | + is_extension=False, extension_scope=None, |
3742 | + options=None), |
3743 | + descriptor.FieldDescriptor( |
3744 | + name='new_name', full_name='ubuntuone.storageprotocol.Move.new_name', index=3, |
3745 | + number=4, type=9, cpp_type=9, label=1, |
3746 | + default_value=unicode("", "utf-8"), |
3747 | + message_type=None, enum_type=None, containing_type=None, |
3748 | + is_extension=False, extension_scope=None, |
3749 | + options=None), |
3750 | + ], |
3751 | + extensions=[ |
3752 | + ], |
3753 | + nested_types=[], # TODO(robinson): Implement. |
3754 | + enum_types=[ |
3755 | + ], |
3756 | + options=None) |
3757 | + |
3758 | + |
3759 | +_UNLINK = descriptor.Descriptor( |
3760 | + name='Unlink', |
3761 | + full_name='ubuntuone.storageprotocol.Unlink', |
3762 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3763 | + containing_type=None, |
3764 | + fields=[ |
3765 | + descriptor.FieldDescriptor( |
3766 | + name='share', full_name='ubuntuone.storageprotocol.Unlink.share', index=0, |
3767 | + number=1, type=12, cpp_type=9, label=1, |
3768 | + default_value="", |
3769 | + message_type=None, enum_type=None, containing_type=None, |
3770 | + is_extension=False, extension_scope=None, |
3771 | + options=None), |
3772 | + descriptor.FieldDescriptor( |
3773 | + name='node', full_name='ubuntuone.storageprotocol.Unlink.node', index=1, |
3774 | + number=2, type=12, cpp_type=9, label=1, |
3775 | + default_value="", |
3776 | + message_type=None, enum_type=None, containing_type=None, |
3777 | + is_extension=False, extension_scope=None, |
3778 | + options=None), |
3779 | + ], |
3780 | + extensions=[ |
3781 | + ], |
3782 | + nested_types=[], # TODO(robinson): Implement. |
3783 | + enum_types=[ |
3784 | + ], |
3785 | + options=None) |
3786 | + |
3787 | + |
3788 | +_CREATESHARE = descriptor.Descriptor( |
3789 | + name='CreateShare', |
3790 | + full_name='ubuntuone.storageprotocol.CreateShare', |
3791 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3792 | + containing_type=None, |
3793 | + fields=[ |
3794 | + descriptor.FieldDescriptor( |
3795 | + name='node', full_name='ubuntuone.storageprotocol.CreateShare.node', index=0, |
3796 | + number=1, type=12, cpp_type=9, label=1, |
3797 | + default_value="", |
3798 | + message_type=None, enum_type=None, containing_type=None, |
3799 | + is_extension=False, extension_scope=None, |
3800 | + options=None), |
3801 | + descriptor.FieldDescriptor( |
3802 | + name='share_to', full_name='ubuntuone.storageprotocol.CreateShare.share_to', index=1, |
3803 | + number=2, type=9, cpp_type=9, label=1, |
3804 | + default_value=unicode("", "utf-8"), |
3805 | + message_type=None, enum_type=None, containing_type=None, |
3806 | + is_extension=False, extension_scope=None, |
3807 | + options=None), |
3808 | + descriptor.FieldDescriptor( |
3809 | + name='name', full_name='ubuntuone.storageprotocol.CreateShare.name', index=2, |
3810 | + number=3, type=9, cpp_type=9, label=1, |
3811 | + default_value=unicode("", "utf-8"), |
3812 | + message_type=None, enum_type=None, containing_type=None, |
3813 | + is_extension=False, extension_scope=None, |
3814 | + options=None), |
3815 | + descriptor.FieldDescriptor( |
3816 | + name='access_level', full_name='ubuntuone.storageprotocol.CreateShare.access_level', index=3, |
3817 | + number=4, type=14, cpp_type=8, label=1, |
3818 | + default_value=0, |
3819 | + message_type=None, enum_type=None, containing_type=None, |
3820 | + is_extension=False, extension_scope=None, |
3821 | + options=None), |
3822 | + ], |
3823 | + extensions=[ |
3824 | + ], |
3825 | + nested_types=[], # TODO(robinson): Implement. |
3826 | + enum_types=[ |
3827 | + _CREATESHARE_ACCESSLEVEL, |
3828 | + ], |
3829 | + options=None) |
3830 | + |
3831 | + |
3832 | +_SHARES = descriptor.Descriptor( |
3833 | + name='Shares', |
3834 | + full_name='ubuntuone.storageprotocol.Shares', |
3835 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3836 | + containing_type=None, |
3837 | + fields=[ |
3838 | + descriptor.FieldDescriptor( |
3839 | + name='share_id', full_name='ubuntuone.storageprotocol.Shares.share_id', index=0, |
3840 | + number=1, type=12, cpp_type=9, label=1, |
3841 | + default_value="", |
3842 | + message_type=None, enum_type=None, containing_type=None, |
3843 | + is_extension=False, extension_scope=None, |
3844 | + options=None), |
3845 | + descriptor.FieldDescriptor( |
3846 | + name='direction', full_name='ubuntuone.storageprotocol.Shares.direction', index=1, |
3847 | + number=2, type=14, cpp_type=8, label=1, |
3848 | + default_value=0, |
3849 | + message_type=None, enum_type=None, containing_type=None, |
3850 | + is_extension=False, extension_scope=None, |
3851 | + options=None), |
3852 | + descriptor.FieldDescriptor( |
3853 | + name='subtree', full_name='ubuntuone.storageprotocol.Shares.subtree', index=2, |
3854 | + number=3, type=12, cpp_type=9, label=1, |
3855 | + default_value="", |
3856 | + message_type=None, enum_type=None, containing_type=None, |
3857 | + is_extension=False, extension_scope=None, |
3858 | + options=None), |
3859 | + descriptor.FieldDescriptor( |
3860 | + name='share_name', full_name='ubuntuone.storageprotocol.Shares.share_name', index=3, |
3861 | + number=4, type=9, cpp_type=9, label=1, |
3862 | + default_value=unicode("", "utf-8"), |
3863 | + message_type=None, enum_type=None, containing_type=None, |
3864 | + is_extension=False, extension_scope=None, |
3865 | + options=None), |
3866 | + descriptor.FieldDescriptor( |
3867 | + name='other_username', full_name='ubuntuone.storageprotocol.Shares.other_username', index=4, |
3868 | + number=5, type=9, cpp_type=9, label=1, |
3869 | + default_value=unicode("", "utf-8"), |
3870 | + message_type=None, enum_type=None, containing_type=None, |
3871 | + is_extension=False, extension_scope=None, |
3872 | + options=None), |
3873 | + descriptor.FieldDescriptor( |
3874 | + name='other_visible_name', full_name='ubuntuone.storageprotocol.Shares.other_visible_name', index=5, |
3875 | + number=6, type=9, cpp_type=9, label=1, |
3876 | + default_value=unicode("", "utf-8"), |
3877 | + message_type=None, enum_type=None, containing_type=None, |
3878 | + is_extension=False, extension_scope=None, |
3879 | + options=None), |
3880 | + descriptor.FieldDescriptor( |
3881 | + name='accepted', full_name='ubuntuone.storageprotocol.Shares.accepted', index=6, |
3882 | + number=7, type=8, cpp_type=7, label=1, |
3883 | + default_value=False, |
3884 | + message_type=None, enum_type=None, containing_type=None, |
3885 | + is_extension=False, extension_scope=None, |
3886 | + options=None), |
3887 | + descriptor.FieldDescriptor( |
3888 | + name='access_level', full_name='ubuntuone.storageprotocol.Shares.access_level', index=7, |
3889 | + number=8, type=14, cpp_type=8, label=1, |
3890 | + default_value=0, |
3891 | + message_type=None, enum_type=None, containing_type=None, |
3892 | + is_extension=False, extension_scope=None, |
3893 | + options=None), |
3894 | + ], |
3895 | + extensions=[ |
3896 | + ], |
3897 | + nested_types=[], # TODO(robinson): Implement. |
3898 | + enum_types=[ |
3899 | + _SHARES_DIRECTION, |
3900 | + _SHARES_ACCESSLEVEL, |
3901 | + ], |
3902 | + options=None) |
3903 | + |
3904 | + |
3905 | +_NOTIFYSHARE = descriptor.Descriptor( |
3906 | + name='NotifyShare', |
3907 | + full_name='ubuntuone.storageprotocol.NotifyShare', |
3908 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3909 | + containing_type=None, |
3910 | + fields=[ |
3911 | + descriptor.FieldDescriptor( |
3912 | + name='share_id', full_name='ubuntuone.storageprotocol.NotifyShare.share_id', index=0, |
3913 | + number=1, type=9, cpp_type=9, label=1, |
3914 | + default_value=unicode("", "utf-8"), |
3915 | + message_type=None, enum_type=None, containing_type=None, |
3916 | + is_extension=False, extension_scope=None, |
3917 | + options=None), |
3918 | + descriptor.FieldDescriptor( |
3919 | + name='subtree', full_name='ubuntuone.storageprotocol.NotifyShare.subtree', index=1, |
3920 | + number=2, type=9, cpp_type=9, label=1, |
3921 | + default_value=unicode("", "utf-8"), |
3922 | + message_type=None, enum_type=None, containing_type=None, |
3923 | + is_extension=False, extension_scope=None, |
3924 | + options=None), |
3925 | + descriptor.FieldDescriptor( |
3926 | + name='share_name', full_name='ubuntuone.storageprotocol.NotifyShare.share_name', index=2, |
3927 | + number=3, type=9, cpp_type=9, label=1, |
3928 | + default_value=unicode("", "utf-8"), |
3929 | + message_type=None, enum_type=None, containing_type=None, |
3930 | + is_extension=False, extension_scope=None, |
3931 | + options=None), |
3932 | + descriptor.FieldDescriptor( |
3933 | + name='from_username', full_name='ubuntuone.storageprotocol.NotifyShare.from_username', index=3, |
3934 | + number=4, type=9, cpp_type=9, label=1, |
3935 | + default_value=unicode("", "utf-8"), |
3936 | + message_type=None, enum_type=None, containing_type=None, |
3937 | + is_extension=False, extension_scope=None, |
3938 | + options=None), |
3939 | + descriptor.FieldDescriptor( |
3940 | + name='from_visible_name', full_name='ubuntuone.storageprotocol.NotifyShare.from_visible_name', index=4, |
3941 | + number=5, type=9, cpp_type=9, label=1, |
3942 | + default_value=unicode("", "utf-8"), |
3943 | + message_type=None, enum_type=None, containing_type=None, |
3944 | + is_extension=False, extension_scope=None, |
3945 | + options=None), |
3946 | + descriptor.FieldDescriptor( |
3947 | + name='access_level', full_name='ubuntuone.storageprotocol.NotifyShare.access_level', index=5, |
3948 | + number=6, type=14, cpp_type=8, label=1, |
3949 | + default_value=0, |
3950 | + message_type=None, enum_type=None, containing_type=None, |
3951 | + is_extension=False, extension_scope=None, |
3952 | + options=None), |
3953 | + ], |
3954 | + extensions=[ |
3955 | + ], |
3956 | + nested_types=[], # TODO(robinson): Implement. |
3957 | + enum_types=[ |
3958 | + _NOTIFYSHARE_ACCESSLEVEL, |
3959 | + ], |
3960 | + options=None) |
3961 | + |
3962 | + |
3963 | +_SHAREACCEPTED = descriptor.Descriptor( |
3964 | + name='ShareAccepted', |
3965 | + full_name='ubuntuone.storageprotocol.ShareAccepted', |
3966 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3967 | + containing_type=None, |
3968 | + fields=[ |
3969 | + descriptor.FieldDescriptor( |
3970 | + name='share_id', full_name='ubuntuone.storageprotocol.ShareAccepted.share_id', index=0, |
3971 | + number=1, type=9, cpp_type=9, label=1, |
3972 | + default_value=unicode("", "utf-8"), |
3973 | + message_type=None, enum_type=None, containing_type=None, |
3974 | + is_extension=False, extension_scope=None, |
3975 | + options=None), |
3976 | + descriptor.FieldDescriptor( |
3977 | + name='answer', full_name='ubuntuone.storageprotocol.ShareAccepted.answer', index=1, |
3978 | + number=2, type=14, cpp_type=8, label=1, |
3979 | + default_value=0, |
3980 | + message_type=None, enum_type=None, containing_type=None, |
3981 | + is_extension=False, extension_scope=None, |
3982 | + options=None), |
3983 | + ], |
3984 | + extensions=[ |
3985 | + ], |
3986 | + nested_types=[], # TODO(robinson): Implement. |
3987 | + enum_types=[ |
3988 | + _SHAREACCEPTED_ANSWER, |
3989 | + ], |
3990 | + options=None) |
3991 | + |
3992 | + |
3993 | +_SHAREDELETED = descriptor.Descriptor( |
3994 | + name='ShareDeleted', |
3995 | + full_name='ubuntuone.storageprotocol.ShareDeleted', |
3996 | + filename='ubuntuone/storageprotocol/protocol.proto', |
3997 | + containing_type=None, |
3998 | + fields=[ |
3999 | + descriptor.FieldDescriptor( |
4000 | + name='share_id', full_name='ubuntuone.storageprotocol.ShareDeleted.share_id', index=0, |
4001 | + number=1, type=9, cpp_type=9, label=1, |
4002 | + default_value=unicode("", "utf-8"), |
4003 | + message_type=None, enum_type=None, containing_type=None, |
4004 | + is_extension=False, extension_scope=None, |
4005 | + options=None), |
4006 | + ], |
4007 | + extensions=[ |
4008 | + ], |
4009 | + nested_types=[], # TODO(robinson): Implement. |
4010 | + enum_types=[ |
4011 | + ], |
4012 | + options=None) |
4013 | + |
4014 | + |
4015 | +_SHARECREATED = descriptor.Descriptor( |
4016 | + name='ShareCreated', |
4017 | + full_name='ubuntuone.storageprotocol.ShareCreated', |
4018 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4019 | + containing_type=None, |
4020 | + fields=[ |
4021 | + descriptor.FieldDescriptor( |
4022 | + name='share_id', full_name='ubuntuone.storageprotocol.ShareCreated.share_id', index=0, |
4023 | + number=1, type=9, cpp_type=9, label=1, |
4024 | + default_value=unicode("", "utf-8"), |
4025 | + message_type=None, enum_type=None, containing_type=None, |
4026 | + is_extension=False, extension_scope=None, |
4027 | + options=None), |
4028 | + ], |
4029 | + extensions=[ |
4030 | + ], |
4031 | + nested_types=[], # TODO(robinson): Implement. |
4032 | + enum_types=[ |
4033 | + ], |
4034 | + options=None) |
4035 | + |
4036 | + |
4037 | +_DELETESHARE = descriptor.Descriptor( |
4038 | + name='DeleteShare', |
4039 | + full_name='ubuntuone.storageprotocol.DeleteShare', |
4040 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4041 | + containing_type=None, |
4042 | + fields=[ |
4043 | + descriptor.FieldDescriptor( |
4044 | + name='share_id', full_name='ubuntuone.storageprotocol.DeleteShare.share_id', index=0, |
4045 | + number=1, type=9, cpp_type=9, label=1, |
4046 | + default_value=unicode("", "utf-8"), |
4047 | + message_type=None, enum_type=None, containing_type=None, |
4048 | + is_extension=False, extension_scope=None, |
4049 | + options=None), |
4050 | + ], |
4051 | + extensions=[ |
4052 | + ], |
4053 | + nested_types=[], # TODO(robinson): Implement. |
4054 | + enum_types=[ |
4055 | + ], |
4056 | + options=None) |
4057 | + |
4058 | + |
4059 | +_CREATEUDF = descriptor.Descriptor( |
4060 | + name='CreateUDF', |
4061 | + full_name='ubuntuone.storageprotocol.CreateUDF', |
4062 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4063 | + containing_type=None, |
4064 | + fields=[ |
4065 | + descriptor.FieldDescriptor( |
4066 | + name='path', full_name='ubuntuone.storageprotocol.CreateUDF.path', index=0, |
4067 | + number=1, type=9, cpp_type=9, label=1, |
4068 | + default_value=unicode("", "utf-8"), |
4069 | + message_type=None, enum_type=None, containing_type=None, |
4070 | + is_extension=False, extension_scope=None, |
4071 | + options=None), |
4072 | + descriptor.FieldDescriptor( |
4073 | + name='name', full_name='ubuntuone.storageprotocol.CreateUDF.name', index=1, |
4074 | + number=2, type=9, cpp_type=9, label=1, |
4075 | + default_value=unicode("", "utf-8"), |
4076 | + message_type=None, enum_type=None, containing_type=None, |
4077 | + is_extension=False, extension_scope=None, |
4078 | + options=None), |
4079 | + ], |
4080 | + extensions=[ |
4081 | + ], |
4082 | + nested_types=[], # TODO(robinson): Implement. |
4083 | + enum_types=[ |
4084 | + ], |
4085 | + options=None) |
4086 | + |
4087 | + |
4088 | +_UDFS = descriptor.Descriptor( |
4089 | + name='UDFs', |
4090 | + full_name='ubuntuone.storageprotocol.UDFs', |
4091 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4092 | + containing_type=None, |
4093 | + fields=[ |
4094 | + descriptor.FieldDescriptor( |
4095 | + name='volume', full_name='ubuntuone.storageprotocol.UDFs.volume', index=0, |
4096 | + number=1, type=12, cpp_type=9, label=1, |
4097 | + default_value="", |
4098 | + message_type=None, enum_type=None, containing_type=None, |
4099 | + is_extension=False, extension_scope=None, |
4100 | + options=None), |
4101 | + descriptor.FieldDescriptor( |
4102 | + name='node', full_name='ubuntuone.storageprotocol.UDFs.node', index=1, |
4103 | + number=2, type=12, cpp_type=9, label=1, |
4104 | + default_value="", |
4105 | + message_type=None, enum_type=None, containing_type=None, |
4106 | + is_extension=False, extension_scope=None, |
4107 | + options=None), |
4108 | + descriptor.FieldDescriptor( |
4109 | + name='suggested_path', full_name='ubuntuone.storageprotocol.UDFs.suggested_path', index=2, |
4110 | + number=3, type=9, cpp_type=9, label=1, |
4111 | + default_value=unicode("", "utf-8"), |
4112 | + message_type=None, enum_type=None, containing_type=None, |
4113 | + is_extension=False, extension_scope=None, |
4114 | + options=None), |
4115 | + ], |
4116 | + extensions=[ |
4117 | + ], |
4118 | + nested_types=[], # TODO(robinson): Implement. |
4119 | + enum_types=[ |
4120 | + ], |
4121 | + options=None) |
4122 | + |
4123 | + |
4124 | +_VOLUMEDELETED = descriptor.Descriptor( |
4125 | + name='VolumeDeleted', |
4126 | + full_name='ubuntuone.storageprotocol.VolumeDeleted', |
4127 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4128 | + containing_type=None, |
4129 | + fields=[ |
4130 | + descriptor.FieldDescriptor( |
4131 | + name='volume', full_name='ubuntuone.storageprotocol.VolumeDeleted.volume', index=0, |
4132 | + number=1, type=12, cpp_type=9, label=1, |
4133 | + default_value="", |
4134 | + message_type=None, enum_type=None, containing_type=None, |
4135 | + is_extension=False, extension_scope=None, |
4136 | + options=None), |
4137 | + ], |
4138 | + extensions=[ |
4139 | + ], |
4140 | + nested_types=[], # TODO(robinson): Implement. |
4141 | + enum_types=[ |
4142 | + ], |
4143 | + options=None) |
4144 | + |
4145 | + |
4146 | +_DELETEVOLUME = descriptor.Descriptor( |
4147 | + name='DeleteVolume', |
4148 | + full_name='ubuntuone.storageprotocol.DeleteVolume', |
4149 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4150 | + containing_type=None, |
4151 | + fields=[ |
4152 | + descriptor.FieldDescriptor( |
4153 | + name='volume', full_name='ubuntuone.storageprotocol.DeleteVolume.volume', index=0, |
4154 | + number=1, type=12, cpp_type=9, label=1, |
4155 | + default_value="", |
4156 | + message_type=None, enum_type=None, containing_type=None, |
4157 | + is_extension=False, extension_scope=None, |
4158 | + options=None), |
4159 | + ], |
4160 | + extensions=[ |
4161 | + ], |
4162 | + nested_types=[], # TODO(robinson): Implement. |
4163 | + enum_types=[ |
4164 | + ], |
4165 | + options=None) |
4166 | + |
4167 | + |
4168 | +_VOLUMES = descriptor.Descriptor( |
4169 | + name='Volumes', |
4170 | + full_name='ubuntuone.storageprotocol.Volumes', |
4171 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4172 | + containing_type=None, |
4173 | + fields=[ |
4174 | + descriptor.FieldDescriptor( |
4175 | + name='type', full_name='ubuntuone.storageprotocol.Volumes.type', index=0, |
4176 | + number=1, type=14, cpp_type=8, label=1, |
4177 | + default_value=1, |
4178 | + message_type=None, enum_type=None, containing_type=None, |
4179 | + is_extension=False, extension_scope=None, |
4180 | + options=None), |
4181 | + descriptor.FieldDescriptor( |
4182 | + name='root', full_name='ubuntuone.storageprotocol.Volumes.root', index=1, |
4183 | + number=3, type=11, cpp_type=10, label=1, |
4184 | + default_value=None, |
4185 | + message_type=None, enum_type=None, containing_type=None, |
4186 | + is_extension=False, extension_scope=None, |
4187 | + options=None), |
4188 | + descriptor.FieldDescriptor( |
4189 | + name='udf', full_name='ubuntuone.storageprotocol.Volumes.udf', index=2, |
4190 | + number=4, type=11, cpp_type=10, label=1, |
4191 | + default_value=None, |
4192 | + message_type=None, enum_type=None, containing_type=None, |
4193 | + is_extension=False, extension_scope=None, |
4194 | + options=None), |
4195 | + descriptor.FieldDescriptor( |
4196 | + name='share', full_name='ubuntuone.storageprotocol.Volumes.share', index=3, |
4197 | + number=5, type=11, cpp_type=10, label=1, |
4198 | + default_value=None, |
4199 | + message_type=None, enum_type=None, containing_type=None, |
4200 | + is_extension=False, extension_scope=None, |
4201 | + options=None), |
4202 | + ], |
4203 | + extensions=[ |
4204 | + ], |
4205 | + nested_types=[], # TODO(robinson): Implement. |
4206 | + enum_types=[ |
4207 | + _VOLUMES_VOLUMETYPE, |
4208 | + ], |
4209 | + options=None) |
4210 | + |
4211 | + |
4212 | +_QUERYCAPS = descriptor.Descriptor( |
4213 | + name='QueryCaps', |
4214 | + full_name='ubuntuone.storageprotocol.QueryCaps', |
4215 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4216 | + containing_type=None, |
4217 | + fields=[ |
4218 | + descriptor.FieldDescriptor( |
4219 | + name='capability', full_name='ubuntuone.storageprotocol.QueryCaps.capability', index=0, |
4220 | + number=1, type=9, cpp_type=9, label=1, |
4221 | + default_value=unicode("", "utf-8"), |
4222 | + message_type=None, enum_type=None, containing_type=None, |
4223 | + is_extension=False, extension_scope=None, |
4224 | + options=None), |
4225 | + ], |
4226 | + extensions=[ |
4227 | + ], |
4228 | + nested_types=[], # TODO(robinson): Implement. |
4229 | + enum_types=[ |
4230 | + ], |
4231 | + options=None) |
4232 | + |
4233 | + |
4234 | +_SETCAPS = descriptor.Descriptor( |
4235 | + name='SetCaps', |
4236 | + full_name='ubuntuone.storageprotocol.SetCaps', |
4237 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4238 | + containing_type=None, |
4239 | + fields=[ |
4240 | + descriptor.FieldDescriptor( |
4241 | + name='capability', full_name='ubuntuone.storageprotocol.SetCaps.capability', index=0, |
4242 | + number=1, type=9, cpp_type=9, label=1, |
4243 | + default_value=unicode("", "utf-8"), |
4244 | + message_type=None, enum_type=None, containing_type=None, |
4245 | + is_extension=False, extension_scope=None, |
4246 | + options=None), |
4247 | + ], |
4248 | + extensions=[ |
4249 | + ], |
4250 | + nested_types=[], # TODO(robinson): Implement. |
4251 | + enum_types=[ |
4252 | + ], |
4253 | + options=None) |
4254 | + |
4255 | + |
4256 | +_ACCEPTCAPS = descriptor.Descriptor( |
4257 | + name='AcceptCaps', |
4258 | + full_name='ubuntuone.storageprotocol.AcceptCaps', |
4259 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4260 | + containing_type=None, |
4261 | + fields=[ |
4262 | + descriptor.FieldDescriptor( |
4263 | + name='accepted', full_name='ubuntuone.storageprotocol.AcceptCaps.accepted', index=0, |
4264 | + number=1, type=8, cpp_type=7, label=1, |
4265 | + default_value=False, |
4266 | + message_type=None, enum_type=None, containing_type=None, |
4267 | + is_extension=False, extension_scope=None, |
4268 | + options=None), |
4269 | + descriptor.FieldDescriptor( |
4270 | + name='redirect_hostname', full_name='ubuntuone.storageprotocol.AcceptCaps.redirect_hostname', index=1, |
4271 | + number=2, type=9, cpp_type=9, label=1, |
4272 | + default_value=unicode("", "utf-8"), |
4273 | + message_type=None, enum_type=None, containing_type=None, |
4274 | + is_extension=False, extension_scope=None, |
4275 | + options=None), |
4276 | + descriptor.FieldDescriptor( |
4277 | + name='redirect_port', full_name='ubuntuone.storageprotocol.AcceptCaps.redirect_port', index=2, |
4278 | + number=3, type=9, cpp_type=9, label=1, |
4279 | + default_value=unicode("", "utf-8"), |
4280 | + message_type=None, enum_type=None, containing_type=None, |
4281 | + is_extension=False, extension_scope=None, |
4282 | + options=None), |
4283 | + descriptor.FieldDescriptor( |
4284 | + name='redirect_srvrecord', full_name='ubuntuone.storageprotocol.AcceptCaps.redirect_srvrecord', index=3, |
4285 | + number=4, type=9, cpp_type=9, label=1, |
4286 | + default_value=unicode("", "utf-8"), |
4287 | + message_type=None, enum_type=None, containing_type=None, |
4288 | + is_extension=False, extension_scope=None, |
4289 | + options=None), |
4290 | + ], |
4291 | + extensions=[ |
4292 | + ], |
4293 | + nested_types=[], # TODO(robinson): Implement. |
4294 | + enum_types=[ |
4295 | + ], |
4296 | + options=None) |
4297 | + |
4298 | + |
4299 | +_FREESPACEINFO = descriptor.Descriptor( |
4300 | + name='FreeSpaceInfo', |
4301 | + full_name='ubuntuone.storageprotocol.FreeSpaceInfo', |
4302 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4303 | + containing_type=None, |
4304 | + fields=[ |
4305 | + descriptor.FieldDescriptor( |
4306 | + name='share_id', full_name='ubuntuone.storageprotocol.FreeSpaceInfo.share_id', index=0, |
4307 | + number=1, type=9, cpp_type=9, label=1, |
4308 | + default_value=unicode("", "utf-8"), |
4309 | + message_type=None, enum_type=None, containing_type=None, |
4310 | + is_extension=False, extension_scope=None, |
4311 | + options=None), |
4312 | + descriptor.FieldDescriptor( |
4313 | + name='free_bytes', full_name='ubuntuone.storageprotocol.FreeSpaceInfo.free_bytes', index=1, |
4314 | + number=2, type=4, cpp_type=4, label=1, |
4315 | + default_value=0, |
4316 | + message_type=None, enum_type=None, containing_type=None, |
4317 | + is_extension=False, extension_scope=None, |
4318 | + options=None), |
4319 | + ], |
4320 | + extensions=[ |
4321 | + ], |
4322 | + nested_types=[], # TODO(robinson): Implement. |
4323 | + enum_types=[ |
4324 | + ], |
4325 | + options=None) |
4326 | + |
4327 | + |
4328 | +_FREESPACEINQUIRY = descriptor.Descriptor( |
4329 | + name='FreeSpaceInquiry', |
4330 | + full_name='ubuntuone.storageprotocol.FreeSpaceInquiry', |
4331 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4332 | + containing_type=None, |
4333 | + fields=[ |
4334 | + descriptor.FieldDescriptor( |
4335 | + name='share_id', full_name='ubuntuone.storageprotocol.FreeSpaceInquiry.share_id', index=0, |
4336 | + number=1, type=9, cpp_type=9, label=1, |
4337 | + default_value=unicode("", "utf-8"), |
4338 | + message_type=None, enum_type=None, containing_type=None, |
4339 | + is_extension=False, extension_scope=None, |
4340 | + options=None), |
4341 | + ], |
4342 | + extensions=[ |
4343 | + ], |
4344 | + nested_types=[], # TODO(robinson): Implement. |
4345 | + enum_types=[ |
4346 | + ], |
4347 | + options=None) |
4348 | + |
4349 | + |
4350 | +_ACCOUNTINFO = descriptor.Descriptor( |
4351 | + name='AccountInfo', |
4352 | + full_name='ubuntuone.storageprotocol.AccountInfo', |
4353 | + filename='ubuntuone/storageprotocol/protocol.proto', |
4354 | + containing_type=None, |
4355 | + fields=[ |
4356 | + descriptor.FieldDescriptor( |
4357 | + name='purchased_bytes', full_name='ubuntuone.storageprotocol.AccountInfo.purchased_bytes', index=0, |
4358 | + number=1, type=4, cpp_type=4, label=1, |
4359 | + default_value=0, |
4360 | + message_type=None, enum_type=None, containing_type=None, |
4361 | + is_extension=False, extension_scope=None, |
4362 | + options=None), |
4363 | + ], |
4364 | + extensions=[ |
4365 | + ], |
4366 | + nested_types=[], # TODO(robinson): Implement. |
4367 | + enum_types=[ |
4368 | + ], |
4369 | + options=None) |
4370 | + |
4371 | + |
4372 | +_MESSAGE.fields_by_name['type'].enum_type = _MESSAGE_MESSAGETYPE |
4373 | +_MESSAGE.fields_by_name['error'].message_type = _ERROR |
4374 | +_MESSAGE.fields_by_name['protocol'].message_type = _PROTOCOL |
4375 | +_MESSAGE.fields_by_name['auth_parameters'].message_type = _AUTHPARAMETER |
4376 | +_MESSAGE.fields_by_name['root'].message_type = _ROOT |
4377 | +_MESSAGE.fields_by_name['query'].message_type = _QUERY |
4378 | +_MESSAGE.fields_by_name['node_state'].message_type = _NODESTATE |
4379 | +_MESSAGE.fields_by_name['make'].message_type = _MAKE |
4380 | +_MESSAGE.fields_by_name['new'].message_type = _NEW |
4381 | +_MESSAGE.fields_by_name['move'].message_type = _MOVE |
4382 | +_MESSAGE.fields_by_name['get_content'].message_type = _GETCONTENT |
4383 | +_MESSAGE.fields_by_name['put_content'].message_type = _PUTCONTENT |
4384 | +_MESSAGE.fields_by_name['upload_in_progress'].message_type = _UPLOADINPROGRESS |
4385 | +_MESSAGE.fields_by_name['bytes'].message_type = _BYTES |
4386 | +_MESSAGE.fields_by_name['unlink'].message_type = _UNLINK |
4387 | +_MESSAGE.fields_by_name['cancel_request'].message_type = _CANCELREQUEST |
4388 | +_MESSAGE.fields_by_name['node_attr'].message_type = _NODEATTR |
4389 | +_MESSAGE.fields_by_name['create_share'].message_type = _CREATESHARE |
4390 | +_MESSAGE.fields_by_name['shares'].message_type = _SHARES |
4391 | +_MESSAGE.fields_by_name['notify_share'].message_type = _NOTIFYSHARE |
4392 | +_MESSAGE.fields_by_name['share_accepted'].message_type = _SHAREACCEPTED |
4393 | +_MESSAGE.fields_by_name['share_deleted'].message_type = _SHAREDELETED |
4394 | +_MESSAGE.fields_by_name['share_created'].message_type = _SHARECREATED |
4395 | +_MESSAGE.fields_by_name['delete_share'].message_type = _DELETESHARE |
4396 | +_MESSAGE.fields_by_name['create_udf'].message_type = _CREATEUDF |
4397 | +_MESSAGE.fields_by_name['list_volumes'].message_type = _VOLUMES |
4398 | +_MESSAGE.fields_by_name['volume_deleted'].message_type = _VOLUMEDELETED |
4399 | +_MESSAGE.fields_by_name['volume_created'].message_type = _VOLUMES |
4400 | +_MESSAGE.fields_by_name['delete_volume'].message_type = _DELETEVOLUME |
4401 | +_MESSAGE.fields_by_name['query_caps'].message_type = _QUERYCAPS |
4402 | +_MESSAGE.fields_by_name['set_caps'].message_type = _SETCAPS |
4403 | +_MESSAGE.fields_by_name['accept_caps'].message_type = _ACCEPTCAPS |
4404 | +_MESSAGE.fields_by_name['free_space_info'].message_type = _FREESPACEINFO |
4405 | +_MESSAGE.fields_by_name['free_space_inquiry'].message_type = _FREESPACEINQUIRY |
4406 | +_MESSAGE.fields_by_name['account_info'].message_type = _ACCOUNTINFO |
4407 | +_MESSAGE.fields_by_name['begin_content'].message_type = _BEGINCONTENT |
4408 | +_ERROR.fields_by_name['type'].enum_type = _ERROR_ERRORTYPE |
4409 | +_CREATESHARE.fields_by_name['access_level'].enum_type = _CREATESHARE_ACCESSLEVEL |
4410 | +_SHARES.fields_by_name['direction'].enum_type = _SHARES_DIRECTION |
4411 | +_SHARES.fields_by_name['access_level'].enum_type = _SHARES_ACCESSLEVEL |
4412 | +_NOTIFYSHARE.fields_by_name['access_level'].enum_type = _NOTIFYSHARE_ACCESSLEVEL |
4413 | +_SHAREACCEPTED.fields_by_name['answer'].enum_type = _SHAREACCEPTED_ANSWER |
4414 | +_VOLUMES.fields_by_name['type'].enum_type = _VOLUMES_VOLUMETYPE |
4415 | +_VOLUMES.fields_by_name['root'].message_type = _ROOT |
4416 | +_VOLUMES.fields_by_name['udf'].message_type = _UDFS |
4417 | +_VOLUMES.fields_by_name['share'].message_type = _SHARES |
4418 | + |
4419 | +class Message(message.Message): |
4420 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4421 | + DESCRIPTOR = _MESSAGE |
4422 | + |
4423 | +class Error(message.Message): |
4424 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4425 | + DESCRIPTOR = _ERROR |
4426 | + |
4427 | +class Protocol(message.Message): |
4428 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4429 | + DESCRIPTOR = _PROTOCOL |
4430 | + |
4431 | +class AuthParameter(message.Message): |
4432 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4433 | + DESCRIPTOR = _AUTHPARAMETER |
4434 | + |
4435 | +class Make(message.Message): |
4436 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4437 | + DESCRIPTOR = _MAKE |
4438 | + |
4439 | +class New(message.Message): |
4440 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4441 | + DESCRIPTOR = _NEW |
4442 | + |
4443 | +class Root(message.Message): |
4444 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4445 | + DESCRIPTOR = _ROOT |
4446 | + |
4447 | +class Query(message.Message): |
4448 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4449 | + DESCRIPTOR = _QUERY |
4450 | + |
4451 | +class NodeState(message.Message): |
4452 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4453 | + DESCRIPTOR = _NODESTATE |
4454 | + |
4455 | +class GetContent(message.Message): |
4456 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4457 | + DESCRIPTOR = _GETCONTENT |
4458 | + |
4459 | +class CancelRequest(message.Message): |
4460 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4461 | + DESCRIPTOR = _CANCELREQUEST |
4462 | + |
4463 | +class NodeAttr(message.Message): |
4464 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4465 | + DESCRIPTOR = _NODEATTR |
4466 | + |
4467 | +class Bytes(message.Message): |
4468 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4469 | + DESCRIPTOR = _BYTES |
4470 | + |
4471 | +class PutContent(message.Message): |
4472 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4473 | + DESCRIPTOR = _PUTCONTENT |
4474 | + |
4475 | +class BeginContent(message.Message): |
4476 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4477 | + DESCRIPTOR = _BEGINCONTENT |
4478 | + |
4479 | +class UploadInProgress(message.Message): |
4480 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4481 | + DESCRIPTOR = _UPLOADINPROGRESS |
4482 | + |
4483 | +class Move(message.Message): |
4484 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4485 | + DESCRIPTOR = _MOVE |
4486 | + |
4487 | +class Unlink(message.Message): |
4488 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4489 | + DESCRIPTOR = _UNLINK |
4490 | + |
4491 | +class CreateShare(message.Message): |
4492 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4493 | + DESCRIPTOR = _CREATESHARE |
4494 | + |
4495 | +class Shares(message.Message): |
4496 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4497 | + DESCRIPTOR = _SHARES |
4498 | + |
4499 | +class NotifyShare(message.Message): |
4500 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4501 | + DESCRIPTOR = _NOTIFYSHARE |
4502 | + |
4503 | +class ShareAccepted(message.Message): |
4504 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4505 | + DESCRIPTOR = _SHAREACCEPTED |
4506 | + |
4507 | +class ShareDeleted(message.Message): |
4508 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4509 | + DESCRIPTOR = _SHAREDELETED |
4510 | + |
4511 | +class ShareCreated(message.Message): |
4512 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4513 | + DESCRIPTOR = _SHARECREATED |
4514 | + |
4515 | +class DeleteShare(message.Message): |
4516 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4517 | + DESCRIPTOR = _DELETESHARE |
4518 | + |
4519 | +class CreateUDF(message.Message): |
4520 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4521 | + DESCRIPTOR = _CREATEUDF |
4522 | + |
4523 | +class UDFs(message.Message): |
4524 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4525 | + DESCRIPTOR = _UDFS |
4526 | + |
4527 | +class VolumeDeleted(message.Message): |
4528 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4529 | + DESCRIPTOR = _VOLUMEDELETED |
4530 | + |
4531 | +class DeleteVolume(message.Message): |
4532 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4533 | + DESCRIPTOR = _DELETEVOLUME |
4534 | + |
4535 | +class Volumes(message.Message): |
4536 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4537 | + DESCRIPTOR = _VOLUMES |
4538 | + |
4539 | +class QueryCaps(message.Message): |
4540 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4541 | + DESCRIPTOR = _QUERYCAPS |
4542 | + |
4543 | +class SetCaps(message.Message): |
4544 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4545 | + DESCRIPTOR = _SETCAPS |
4546 | + |
4547 | +class AcceptCaps(message.Message): |
4548 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4549 | + DESCRIPTOR = _ACCEPTCAPS |
4550 | + |
4551 | +class FreeSpaceInfo(message.Message): |
4552 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4553 | + DESCRIPTOR = _FREESPACEINFO |
4554 | + |
4555 | +class FreeSpaceInquiry(message.Message): |
4556 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4557 | + DESCRIPTOR = _FREESPACEINQUIRY |
4558 | + |
4559 | +class AccountInfo(message.Message): |
4560 | + __metaclass__ = reflection.GeneratedProtocolMessageType |
4561 | + DESCRIPTOR = _ACCOUNTINFO |
4562 | + |
4563 | |
4564 | === modified file 'ubuntuone/storageprotocol/request.py' |
4565 | --- ubuntuone/storageprotocol/request.py 2009-08-26 12:00:00 +0000 |
4566 | +++ ubuntuone/storageprotocol/request.py 2010-02-17 23:29:10 +0000 |
4567 | @@ -56,17 +56,18 @@ |
4568 | class StorageProtocolError(Exception): |
4569 | """base class for all client/server exceptions.""" |
4570 | |
4571 | + |
4572 | class StorageProtocolErrorSizeTooBig(StorageProtocolError): |
4573 | """the size we received was too big.""" |
4574 | |
4575 | + |
4576 | class StorageProtocolProtocolError(StorageProtocolError): |
4577 | """A protocol error on the storage protocol.""" |
4578 | |
4579 | |
4580 | class StorageRequestError(StorageProtocolError): |
4581 | - """an exception that keeps the request that generated it around |
4582 | + """an exception that keeps the request that generated it around.""" |
4583 | |
4584 | - """ |
4585 | def __init__(self, request, message): |
4586 | """create a StorageRequestError. |
4587 | |
4588 | |
4589 | === modified file 'ubuntuone/storageprotocol/sharersp.py' |
4590 | --- ubuntuone/storageprotocol/sharersp.py 2009-06-30 12:00:00 +0000 |
4591 | +++ ubuntuone/storageprotocol/sharersp.py 2010-02-17 23:29:10 +0000 |
4592 | @@ -5,42 +5,31 @@ |
4593 | # |
4594 | # Copyright 2009 Canonical Ltd. |
4595 | # |
4596 | -# This program is free software: you can redistribute it and/or modify it |
4597 | +# This program is free software: you can redistribute it and/or modify it |
4598 | # under the terms of the GNU Affero General Public License version 3, |
4599 | # as published by the Free Software Foundation. |
4600 | # |
4601 | -# This program is distributed in the hope that it will be useful, but |
4602 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
4603 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
4604 | +# This program is distributed in the hope that it will be useful, but |
4605 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
4606 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
4607 | # PURPOSE. See the GNU Affero General Public License for more details. |
4608 | # |
4609 | # You should have received a copy of the GNU Affero General Public License |
4610 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
4611 | -"""provides a handy class to use Shares |
4612 | -""" |
4613 | +"""A handy class to use Shares.""" |
4614 | |
4615 | import uuid |
4616 | -from ubuntuone.storageprotocol import protocol_pb2 |
4617 | - |
4618 | -_direction_prot2nice = { |
4619 | - protocol_pb2.Shares.FROM_ME: "from_me", |
4620 | - protocol_pb2.Shares.TO_ME: "to_me", |
4621 | -} |
4622 | -_direction_nice2prot = dict((y, x) for x, y in _direction_prot2nice.items()) |
4623 | - |
4624 | -_access_prot2nice = { |
4625 | - protocol_pb2.Shares.VIEW: "View", |
4626 | - protocol_pb2.Shares.MODIFY: "Modify", |
4627 | -} |
4628 | -_access_nice2prot = dict((y, x) for x, y in _access_prot2nice.items()) |
4629 | + |
4630 | +from ubuntuone.storageprotocol import volumes |
4631 | +# pylint: disable-msg=W0212 |
4632 | |
4633 | class ShareResponse(object): |
4634 | - '''This is a handy object to support all the fields of a share listing.''' |
4635 | + """This is a handy object to support all the fields of a share listing.""" |
4636 | |
4637 | @classmethod |
4638 | def from_params(cls, id, direction, subtree, share_name, other_username, |
4639 | other_visible_name, accepted, access_level): |
4640 | - '''Creates the object from given parameters.''' |
4641 | + """Creates the object from given parameters.""" |
4642 | # pylint: disable-msg=W0201 |
4643 | o = cls() |
4644 | o.id = id |
4645 | @@ -55,28 +44,29 @@ |
4646 | |
4647 | @classmethod |
4648 | def load_from_msg(cls, msg): |
4649 | - '''Creates the object loading the information from a message.''' |
4650 | + """Creates the object loading the information from a message.""" |
4651 | + # pylint: disable-msg=W0201 |
4652 | o = cls() |
4653 | o.id = uuid.UUID(msg.share_id) |
4654 | - o.direction = _direction_prot2nice[msg.direction] |
4655 | + o.direction = volumes._direction_prot2nice[msg.direction] |
4656 | o.subtree = msg.subtree |
4657 | o.name = msg.share_name |
4658 | o.other_username = msg.other_username |
4659 | o.other_visible_name = msg.other_visible_name |
4660 | o.accepted = msg.accepted |
4661 | - o.access_level = _access_prot2nice[msg.access_level] |
4662 | + o.access_level = volumes._access_prot2nice[msg.access_level] |
4663 | return o |
4664 | |
4665 | def dump_to_msg(self, msg): |
4666 | - '''Dumps the object information to a given message.''' |
4667 | + """Dumps the object information to a given message.""" |
4668 | msg.share_id = str(self.id) |
4669 | - msg.direction = _direction_nice2prot[self.direction] |
4670 | + msg.direction = volumes._direction_nice2prot[self.direction] |
4671 | msg.subtree = str(self.subtree) |
4672 | msg.share_name = self.name |
4673 | msg.other_username = self.other_username |
4674 | msg.other_visible_name = self.other_visible_name |
4675 | msg.accepted = self.accepted |
4676 | - msg.access_level = _access_nice2prot[self.access_level] |
4677 | + msg.access_level = volumes._access_nice2prot[self.access_level] |
4678 | |
4679 | def __str__(self): |
4680 | t = "Share %r [%s] (other: %s, access: %s, accepted: %s, id: %s)" % ( |
4681 | @@ -85,12 +75,12 @@ |
4682 | return t |
4683 | |
4684 | class NotifyShareHolder(object): |
4685 | - '''This is a handy object to support all the fields of a share notify.''' |
4686 | + """This is a handy object to support all the fields of a share notify.""" |
4687 | |
4688 | @classmethod |
4689 | def from_params(cls, share_id, subtree, share_name, from_username, |
4690 | - from_visible_name, access_level): |
4691 | - '''Creates the object from given parameters.''' |
4692 | + from_visible_name, access_level): |
4693 | + """Creates the object from given parameters.""" |
4694 | # pylint: disable-msg=W0201 |
4695 | o = cls() |
4696 | o.share_id = share_id |
4697 | @@ -103,24 +93,24 @@ |
4698 | |
4699 | @classmethod |
4700 | def load_from_msg(cls, msg): |
4701 | - '''Creates the object loading the information from a message.''' |
4702 | + """Creates the object loading the information from a message.""" |
4703 | o = cls() |
4704 | o.share_id = uuid.UUID(msg.share_id) |
4705 | o.subtree = msg.subtree |
4706 | o.share_name = msg.share_name.decode("utf8") |
4707 | o.from_username = msg.from_username.decode("utf8") |
4708 | o.from_visible_name = msg.from_visible_name.decode("utf8") |
4709 | - o.access_level = _access_prot2nice[msg.access_level] |
4710 | + o.access_level = volumes._access_prot2nice[msg.access_level] |
4711 | return o |
4712 | |
4713 | def dump_to_msg(self, msg): |
4714 | - '''Dumps the object information to a given message.''' |
4715 | + """Dumps the object information to a given message.""" |
4716 | msg.share_id = str(self.share_id) |
4717 | msg.subtree = str(self.subtree) |
4718 | msg.share_name = self.share_name.encode("utf8") |
4719 | msg.from_username = self.from_username.encode("utf8") |
4720 | msg.from_visible_name = self.from_visible_name.encode("utf8") |
4721 | - msg.access_level = _access_nice2prot[self.access_level] |
4722 | + msg.access_level = volumes._access_nice2prot[self.access_level] |
4723 | |
4724 | def __str__(self): |
4725 | t = "Share Notification %r (from: %s, access: %s, id: %s)" % ( |
4726 | |
4727 | === added file 'ubuntuone/storageprotocol/volumes.py' |
4728 | --- ubuntuone/storageprotocol/volumes.py 1970-01-01 00:00:00 +0000 |
4729 | +++ ubuntuone/storageprotocol/volumes.py 2010-02-17 23:29:10 +0000 |
4730 | @@ -0,0 +1,141 @@ |
4731 | +# Author: Natalia B. Bidart <natalia.bidart@canonical.com> |
4732 | +# |
4733 | +# Copyright 2009 Canonical Ltd. |
4734 | +# |
4735 | +# This program is free software: you can redistribute it and/or modify it |
4736 | +# under the terms of the GNU Affero General Public License version 3, |
4737 | +# as published by the Free Software Foundation. |
4738 | +# |
4739 | +# This program is distributed in the hope that it will be useful, but |
4740 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
4741 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
4742 | +# PURPOSE. See the GNU Affero General Public License for more details. |
4743 | +# |
4744 | +# You should have received a copy of the GNU Affero General Public License |
4745 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4746 | +"""The volumes abstraction.""" |
4747 | + |
4748 | +import uuid |
4749 | + |
4750 | +from ubuntuone.storageprotocol import protocol_pb2 |
4751 | + |
4752 | +_direction_prot2nice = { |
4753 | + protocol_pb2.Shares.FROM_ME: "from_me", |
4754 | + protocol_pb2.Shares.TO_ME: "to_me", |
4755 | +} |
4756 | +_direction_nice2prot = dict((y, x) for x, y in _direction_prot2nice.items()) |
4757 | + |
4758 | +_access_prot2nice = { |
4759 | + protocol_pb2.Shares.VIEW: "View", |
4760 | + protocol_pb2.Shares.MODIFY: "Modify", |
4761 | +} |
4762 | +_access_nice2prot = dict((y, x) for x, y in _access_prot2nice.items()) |
4763 | + |
4764 | + |
4765 | +class Volume(object): |
4766 | + """A generic volume.""" |
4767 | + |
4768 | + def __init__(self, volume_id, node_id): |
4769 | + """Create the volume.""" |
4770 | + self.volume_id = volume_id |
4771 | + self.node_id = node_id |
4772 | + |
4773 | + @classmethod |
4774 | + def from_params(cls, **kwargs): |
4775 | + """Creates the object from given parameters.""" |
4776 | + result = cls(**kwargs) |
4777 | + return result |
4778 | + |
4779 | + @classmethod |
4780 | + def from_msg(cls, msg): |
4781 | + """Creates the object using the information from a message.""" |
4782 | + raise NotImplementedError |
4783 | + |
4784 | + def __eq__(self, other): |
4785 | + result = (self.volume_id == other.volume_id and |
4786 | + self.node_id == other.node_id) |
4787 | + return result |
4788 | + |
4789 | +class ShareVolume(Volume): |
4790 | + """A volume representing an accepted Share.""" |
4791 | + |
4792 | + def __init__(self, volume_id, node_id, direction, share_name, |
4793 | + other_username, other_visible_name, accepted, access_level): |
4794 | + """Create the share.""" |
4795 | + super(ShareVolume, self).__init__(volume_id, node_id) |
4796 | + self.direction = direction |
4797 | + self.share_name = share_name |
4798 | + self.other_username = other_username |
4799 | + self.other_visible_name = other_visible_name |
4800 | + self.accepted = accepted |
4801 | + self.access_level = access_level |
4802 | + |
4803 | + @classmethod |
4804 | + def from_msg(cls, msg): |
4805 | + """Creates the object using the information from a message.""" |
4806 | + kwargs = dict( |
4807 | + volume_id=uuid.UUID(msg.share_id), |
4808 | + node_id=uuid.UUID(msg.subtree), |
4809 | + direction = _direction_prot2nice[msg.direction], |
4810 | + share_name=msg.share_name, |
4811 | + other_username=msg.other_username, |
4812 | + other_visible_name=msg.other_visible_name, |
4813 | + accepted=msg.accepted, |
4814 | + access_level=_access_prot2nice[msg.access_level] |
4815 | + ) |
4816 | + result = cls(**kwargs) |
4817 | + return result |
4818 | + |
4819 | + def __eq__(self, other): |
4820 | + result = (super(ShareVolume, self).__eq__(other) and |
4821 | + self.direction == other.direction and |
4822 | + self.share_name == other.share_name and |
4823 | + self.other_username == other.other_username and |
4824 | + self.other_visible_name == other.other_visible_name and |
4825 | + self.accepted == other.accepted and |
4826 | + self.access_level == other.access_level) |
4827 | + return result |
4828 | + |
4829 | + |
4830 | +class UDFVolume(Volume): |
4831 | + """A volume representing a User Defined Folder.""" |
4832 | + |
4833 | + def __init__(self, volume_id, node_id, suggested_path): |
4834 | + """Create the UDF.""" |
4835 | + super(UDFVolume, self).__init__(volume_id, node_id) |
4836 | + self.suggested_path = suggested_path |
4837 | + |
4838 | + @classmethod |
4839 | + def from_msg(cls, msg): |
4840 | + """Creates the object using the information from a message.""" |
4841 | + kwargs = dict( |
4842 | + volume_id=uuid.UUID(msg.volume), |
4843 | + node_id=uuid.UUID(msg.node), |
4844 | + suggested_path=msg.suggested_path |
4845 | + ) |
4846 | + result = cls(**kwargs) |
4847 | + return result |
4848 | + |
4849 | + def __eq__(self, other): |
4850 | + result = (super(UDFVolume, self).__eq__(other) and |
4851 | + self.suggested_path == other.suggested_path) |
4852 | + return result |
4853 | + |
4854 | + |
4855 | +class RootVolume(Volume): |
4856 | + """A volume representing a Root-root.""" |
4857 | + |
4858 | + def __init__(self, node_id): |
4859 | + """Create the volume.""" |
4860 | + super(RootVolume, self).__init__(volume_id=None, node_id=node_id) |
4861 | + |
4862 | + @classmethod |
4863 | + def from_msg(cls, msg): |
4864 | + """Creates the object using the information from a message.""" |
4865 | + kwargs = dict(node_id=uuid.UUID(msg.node)) |
4866 | + result = cls(**kwargs) |
4867 | + return result |
4868 | + |
4869 | + def __eq__(self, other): |
4870 | + return self.node_id == other.node_id |
4871 | + |