Merge lp:~nataliabidart/magicicada-gui/symlinks-metadata into lp:magicicada-gui

Proposed by Natalia Bidart
Status: Merged
Approved by: Facundo Batista
Approved revision: 72
Merged at revision: 70
Proposed branch: lp:~nataliabidart/magicicada-gui/symlinks-metadata
Merge into: lp:magicicada-gui
Diff against target: 145 lines (+36/-6)
4 files modified
magicicada/__init__.py (+8/-3)
magicicada/syncdaemon.py (+2/-1)
magicicada/tests/test_magicicada.py (+12/-2)
magicicada/tests/test_syncdaemon.py (+14/-0)
To merge this branch: bzr merge lp:~nataliabidart/magicicada-gui/symlinks-metadata
Reviewer Review Type Date Requested Status
Facundo Batista Approve
Review via email: mp+33345@code.launchpad.net

Commit message

Support NOT_SYNCHED_PATH as metadata value. Support symlinks when asking for metadata to underlying layers (LP: #612191).

Description of the change

Support NOT_SYNCHED_PATH as metadata value. Support symlinks when asking for metadata to underlying layers.

To post a comment you must log in.
Revision history for this message
Facundo Batista (facundo) wrote :

Like it!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'magicicada/__init__.py'
2--- magicicada/__init__.py 2010-08-13 18:34:05 +0000
3+++ magicicada/__init__.py 2010-08-22 22:18:44 +0000
4@@ -38,7 +38,7 @@
5 from twisted.internet import gtk2reactor # for gtk-2.0
6 gtk2reactor.install()
7
8-from magicicada import syncdaemon, logger as logger_helper
9+from magicicada import syncdaemon, dbusiface, logger as logger_helper
10 from magicicada.helpers import humanize_bytes, get_data_file, get_builder, \
11 log, NO_OP
12
13@@ -172,6 +172,7 @@
14 flags=gtk.DIALOG_NO_SEPARATOR,
15 buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
16 dialog.set_size_request(600, 300)
17+ dialog.set_border_width(10)
18 # gtk.WIN_POS_CENTER makes dialogs overlap
19 dialog.set_position(gtk.WIN_POS_MOUSE)
20 dialog.set_icon(self._icon)
21@@ -474,14 +475,18 @@
22 @log(logger)
23 def on_metadata_ready(self, path, metadata):
24 """Lower layer has the requested metadata for 'path'."""
25- logger.debug('on_metadata_ready: path: %r', path)
26 if path not in self.metadata_dialogs:
27+ logger.info('on_metadata_ready: path %r not in stored paths!')
28 return
29
30 dialog = self.metadata_dialogs[path]
31 dialog.spinner.hide()
32 dialog.view.show()
33- text = '\n'.join('%s: %s' % i for i in metadata.iteritems())
34+ if metadata == dbusiface.NOT_SYNCHED_PATH:
35+ # Metadata path doesn't exsit for syncdaemon
36+ text = dbusiface.NOT_SYNCHED_PATH
37+ else:
38+ text = '\n'.join('%s: %s' % i for i in metadata.iteritems())
39 dialog.view.get_buffer().set_text(text)
40
41 # custom
42
43=== modified file 'magicicada/syncdaemon.py'
44--- magicicada/syncdaemon.py 2010-08-07 15:49:21 +0000
45+++ magicicada/syncdaemon.py 2010-08-22 22:18:44 +0000
46@@ -19,6 +19,7 @@
47 """The backend that communicates Magicicada with the SyncDaemon."""
48
49 import logging
50+import os
51
52 from twisted.internet import defer, reactor
53
54@@ -293,5 +294,5 @@
55 if self.on_metadata_ready_callback is None:
56 raise ValueError("Missing the mandatory cback for get_metadata.")
57
58- d = self.dbus.get_metadata(path)
59+ d = self.dbus.get_metadata(os.path.realpath(path))
60 d.addCallback(lambda resp: self.on_metadata_ready_callback(path, resp))
61
62=== modified file 'magicicada/tests/test_magicicada.py'
63--- magicicada/tests/test_magicicada.py 2010-08-16 20:45:51 +0000
64+++ magicicada/tests/test_magicicada.py 2010-08-22 22:18:44 +0000
65@@ -33,7 +33,8 @@
66
67 from magicicada import MagicicadaUI, CONTENT_QUEUE, META_QUEUE, \
68 UBUNTU_ONE_ROOT, syncdaemon
69-from magicicada.dbusiface import QueueData, FolderData, ShareData
70+from magicicada.dbusiface import QueueData, FolderData, ShareData, \
71+ NOT_SYNCHED_PATH
72 from magicicada.helpers import NO_OP, humanize_bytes, get_data_file
73 from magicicada.tests.helpers import MementoHandler
74
75@@ -1259,7 +1260,8 @@
76 self.assertTrue(buff is not None,
77 'buffer for metadata_view must not be None.')
78
79- expected = '\n'.join('%s: %s' % i for i in expected.iteritems())
80+ if isinstance(expected, dict):
81+ expected = '\n'.join('%s: %s' % i for i in expected.iteritems())
82 actual = buff.get_text(*buff.get_bounds())
83 msg = 'buffer content must be %s (got %s instead).'
84 self.assertEqual(actual, expected, msg % (expected, actual))
85@@ -1425,6 +1427,14 @@
86
87 self.assert_buffer_content(path, self.metadata)
88
89+ def test_on_metadata_ready_if_invalid_path(self):
90+ """Callback on_metadata_ready handles NOT_SYNCHED_PATH."""
91+ path = 'bla'
92+ self.ui.metadata_dialogs = {path: self.ui._new_metadata_dialog(path)}
93+ self.ui.on_metadata_ready(path, NOT_SYNCHED_PATH)
94+
95+ self.assert_buffer_content(path, NOT_SYNCHED_PATH)
96+
97 def test_on_metadata_ready_doesnt_update_if_last_path_doesnt_match(self):
98 """Callback on_metadata_ready updates the metadata_view."""
99 self.patch(self.ui, '_new_metadata_dialog', self._set_called)
100
101=== modified file 'magicicada/tests/test_syncdaemon.py'
102--- magicicada/tests/test_syncdaemon.py 2010-08-01 15:10:53 +0000
103+++ magicicada/tests/test_syncdaemon.py 2010-08-22 22:18:44 +0000
104@@ -19,6 +19,7 @@
105 """Tests for the SyncDaemon communication backend."""
106
107 import logging
108+import os
109 import unittest
110
111 from magicicada.syncdaemon import SyncDaemon, State
112@@ -826,6 +827,7 @@
113
114 def test_get_metadata_ok(self):
115 """Get the metadata for given path."""
116+ self.patch(os.path, 'realpath', lambda p: p)
117 called = []
118 self.sd.dbus.get_metadata = lambda p: defer.succeed('foo')
119 self.sd.on_metadata_ready_callback = lambda *a: called.extend(a)
120@@ -834,6 +836,7 @@
121
122 def test_get_metadata_double(self):
123 """Get the metadata twice."""
124+ self.patch(os.path, 'realpath', lambda p: p)
125 called = []
126 fake_md = {'path1': 'foo', 'path2': 'bar'}
127 self.sd.dbus.get_metadata = lambda p: defer.succeed(fake_md[p])
128@@ -843,6 +846,17 @@
129 self.assertEqual(called[0], ('path1', 'foo'))
130 self.assertEqual(called[1], ('path2', 'bar'))
131
132+ def test_get_metadata_uses_realpath(self):
133+ """Ask for metadata using the realpath (LP: #612191)."""
134+ self.patch(os.path, 'realpath', lambda p: '/a/realpath')
135+ called = []
136+ self.sd.dbus.get_metadata = lambda p: defer.succeed(p)
137+ self.sd.on_metadata_ready_callback = lambda *a: called.extend(a)
138+
139+ self.sd.get_metadata('/a/symlink/path')
140+
141+ self.assertEqual(called, ['/a/symlink/path', '/a/realpath'])
142+
143
144 class FoldersTests(BaseTest):
145 """Folders checking."""

Subscribers

People subscribed via source and target branches

to all changes: