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
=== modified file 'magicicada/__init__.py'
--- magicicada/__init__.py 2010-08-13 18:34:05 +0000
+++ magicicada/__init__.py 2010-08-22 22:18:44 +0000
@@ -38,7 +38,7 @@
38from twisted.internet import gtk2reactor # for gtk-2.038from twisted.internet import gtk2reactor # for gtk-2.0
39gtk2reactor.install()39gtk2reactor.install()
4040
41from magicicada import syncdaemon, logger as logger_helper41from magicicada import syncdaemon, dbusiface, logger as logger_helper
42from magicicada.helpers import humanize_bytes, get_data_file, get_builder, \42from magicicada.helpers import humanize_bytes, get_data_file, get_builder, \
43 log, NO_OP43 log, NO_OP
4444
@@ -172,6 +172,7 @@
172 flags=gtk.DIALOG_NO_SEPARATOR,172 flags=gtk.DIALOG_NO_SEPARATOR,
173 buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))173 buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
174 dialog.set_size_request(600, 300)174 dialog.set_size_request(600, 300)
175 dialog.set_border_width(10)
175 # gtk.WIN_POS_CENTER makes dialogs overlap176 # gtk.WIN_POS_CENTER makes dialogs overlap
176 dialog.set_position(gtk.WIN_POS_MOUSE)177 dialog.set_position(gtk.WIN_POS_MOUSE)
177 dialog.set_icon(self._icon)178 dialog.set_icon(self._icon)
@@ -474,14 +475,18 @@
474 @log(logger)475 @log(logger)
475 def on_metadata_ready(self, path, metadata):476 def on_metadata_ready(self, path, metadata):
476 """Lower layer has the requested metadata for 'path'."""477 """Lower layer has the requested metadata for 'path'."""
477 logger.debug('on_metadata_ready: path: %r', path)
478 if path not in self.metadata_dialogs:478 if path not in self.metadata_dialogs:
479 logger.info('on_metadata_ready: path %r not in stored paths!')
479 return480 return
480481
481 dialog = self.metadata_dialogs[path]482 dialog = self.metadata_dialogs[path]
482 dialog.spinner.hide()483 dialog.spinner.hide()
483 dialog.view.show()484 dialog.view.show()
484 text = '\n'.join('%s: %s' % i for i in metadata.iteritems())485 if metadata == dbusiface.NOT_SYNCHED_PATH:
486 # Metadata path doesn't exsit for syncdaemon
487 text = dbusiface.NOT_SYNCHED_PATH
488 else:
489 text = '\n'.join('%s: %s' % i for i in metadata.iteritems())
485 dialog.view.get_buffer().set_text(text)490 dialog.view.get_buffer().set_text(text)
486491
487 # custom492 # custom
488493
=== modified file 'magicicada/syncdaemon.py'
--- magicicada/syncdaemon.py 2010-08-07 15:49:21 +0000
+++ magicicada/syncdaemon.py 2010-08-22 22:18:44 +0000
@@ -19,6 +19,7 @@
19"""The backend that communicates Magicicada with the SyncDaemon."""19"""The backend that communicates Magicicada with the SyncDaemon."""
2020
21import logging21import logging
22import os
2223
23from twisted.internet import defer, reactor24from twisted.internet import defer, reactor
2425
@@ -293,5 +294,5 @@
293 if self.on_metadata_ready_callback is None:294 if self.on_metadata_ready_callback is None:
294 raise ValueError("Missing the mandatory cback for get_metadata.")295 raise ValueError("Missing the mandatory cback for get_metadata.")
295296
296 d = self.dbus.get_metadata(path)297 d = self.dbus.get_metadata(os.path.realpath(path))
297 d.addCallback(lambda resp: self.on_metadata_ready_callback(path, resp))298 d.addCallback(lambda resp: self.on_metadata_ready_callback(path, resp))
298299
=== modified file 'magicicada/tests/test_magicicada.py'
--- magicicada/tests/test_magicicada.py 2010-08-16 20:45:51 +0000
+++ magicicada/tests/test_magicicada.py 2010-08-22 22:18:44 +0000
@@ -33,7 +33,8 @@
3333
34from magicicada import MagicicadaUI, CONTENT_QUEUE, META_QUEUE, \34from magicicada import MagicicadaUI, CONTENT_QUEUE, META_QUEUE, \
35 UBUNTU_ONE_ROOT, syncdaemon35 UBUNTU_ONE_ROOT, syncdaemon
36from magicicada.dbusiface import QueueData, FolderData, ShareData36from magicicada.dbusiface import QueueData, FolderData, ShareData, \
37 NOT_SYNCHED_PATH
37from magicicada.helpers import NO_OP, humanize_bytes, get_data_file38from magicicada.helpers import NO_OP, humanize_bytes, get_data_file
38from magicicada.tests.helpers import MementoHandler39from magicicada.tests.helpers import MementoHandler
3940
@@ -1259,7 +1260,8 @@
1259 self.assertTrue(buff is not None,1260 self.assertTrue(buff is not None,
1260 'buffer for metadata_view must not be None.')1261 'buffer for metadata_view must not be None.')
12611262
1262 expected = '\n'.join('%s: %s' % i for i in expected.iteritems())1263 if isinstance(expected, dict):
1264 expected = '\n'.join('%s: %s' % i for i in expected.iteritems())
1263 actual = buff.get_text(*buff.get_bounds())1265 actual = buff.get_text(*buff.get_bounds())
1264 msg = 'buffer content must be %s (got %s instead).'1266 msg = 'buffer content must be %s (got %s instead).'
1265 self.assertEqual(actual, expected, msg % (expected, actual))1267 self.assertEqual(actual, expected, msg % (expected, actual))
@@ -1425,6 +1427,14 @@
14251427
1426 self.assert_buffer_content(path, self.metadata)1428 self.assert_buffer_content(path, self.metadata)
14271429
1430 def test_on_metadata_ready_if_invalid_path(self):
1431 """Callback on_metadata_ready handles NOT_SYNCHED_PATH."""
1432 path = 'bla'
1433 self.ui.metadata_dialogs = {path: self.ui._new_metadata_dialog(path)}
1434 self.ui.on_metadata_ready(path, NOT_SYNCHED_PATH)
1435
1436 self.assert_buffer_content(path, NOT_SYNCHED_PATH)
1437
1428 def test_on_metadata_ready_doesnt_update_if_last_path_doesnt_match(self):1438 def test_on_metadata_ready_doesnt_update_if_last_path_doesnt_match(self):
1429 """Callback on_metadata_ready updates the metadata_view."""1439 """Callback on_metadata_ready updates the metadata_view."""
1430 self.patch(self.ui, '_new_metadata_dialog', self._set_called)1440 self.patch(self.ui, '_new_metadata_dialog', self._set_called)
14311441
=== modified file 'magicicada/tests/test_syncdaemon.py'
--- magicicada/tests/test_syncdaemon.py 2010-08-01 15:10:53 +0000
+++ magicicada/tests/test_syncdaemon.py 2010-08-22 22:18:44 +0000
@@ -19,6 +19,7 @@
19"""Tests for the SyncDaemon communication backend."""19"""Tests for the SyncDaemon communication backend."""
2020
21import logging21import logging
22import os
22import unittest23import unittest
2324
24from magicicada.syncdaemon import SyncDaemon, State25from magicicada.syncdaemon import SyncDaemon, State
@@ -826,6 +827,7 @@
826827
827 def test_get_metadata_ok(self):828 def test_get_metadata_ok(self):
828 """Get the metadata for given path."""829 """Get the metadata for given path."""
830 self.patch(os.path, 'realpath', lambda p: p)
829 called = []831 called = []
830 self.sd.dbus.get_metadata = lambda p: defer.succeed('foo')832 self.sd.dbus.get_metadata = lambda p: defer.succeed('foo')
831 self.sd.on_metadata_ready_callback = lambda *a: called.extend(a)833 self.sd.on_metadata_ready_callback = lambda *a: called.extend(a)
@@ -834,6 +836,7 @@
834836
835 def test_get_metadata_double(self):837 def test_get_metadata_double(self):
836 """Get the metadata twice."""838 """Get the metadata twice."""
839 self.patch(os.path, 'realpath', lambda p: p)
837 called = []840 called = []
838 fake_md = {'path1': 'foo', 'path2': 'bar'}841 fake_md = {'path1': 'foo', 'path2': 'bar'}
839 self.sd.dbus.get_metadata = lambda p: defer.succeed(fake_md[p])842 self.sd.dbus.get_metadata = lambda p: defer.succeed(fake_md[p])
@@ -843,6 +846,17 @@
843 self.assertEqual(called[0], ('path1', 'foo'))846 self.assertEqual(called[0], ('path1', 'foo'))
844 self.assertEqual(called[1], ('path2', 'bar'))847 self.assertEqual(called[1], ('path2', 'bar'))
845848
849 def test_get_metadata_uses_realpath(self):
850 """Ask for metadata using the realpath (LP: #612191)."""
851 self.patch(os.path, 'realpath', lambda p: '/a/realpath')
852 called = []
853 self.sd.dbus.get_metadata = lambda p: defer.succeed(p)
854 self.sd.on_metadata_ready_callback = lambda *a: called.extend(a)
855
856 self.sd.get_metadata('/a/symlink/path')
857
858 self.assertEqual(called, ['/a/symlink/path', '/a/realpath'])
859
846860
847class FoldersTests(BaseTest):861class FoldersTests(BaseTest):
848 """Folders checking."""862 """Folders checking."""

Subscribers

People subscribed via source and target branches

to all changes: