示例#1
0
 def update_preview(self, chooser, label, image):
     """Display photo thumbnail and geotag data in file chooser."""
     label.set_label(self.strings.preview)
     image.set_from_stock(Gtk.STOCK_FILE, Gtk.IconSize.DIALOG)
     try:
         photo = Photograph(chooser.get_preview_filename(), lambda x: None,
                            300)
         photo.read()
     except IOError:
         return
     image.set_from_pixbuf(photo.thumb)
     label.set_label('\n'.join([photo.short_summary(), photo.maps_link()]))
示例#2
0
 def update_preview(self, chooser, label, image):
     """Display photo thumbnail and geotag data in file chooser."""
     label.set_label(self.strings.preview)
     image.set_from_stock(Gtk.STOCK_FILE, Gtk.IconSize.DIALOG)
     try:
         photo = Photograph(chooser.get_preview_filename(), 300)
         photo.read()
     except IOError:
         return
     image.set_from_pixbuf(photo.thumb)
     label.set_label(
         '\n'.join([photo.short_summary(), photo.maps_link()]))
示例#3
0
    def test_string_functions(self):
        """Ensure that strings print properly."""
        environ['TZ'] = 'America/Edmonton'
        tzset()
        
        # Make a photo with a dummy ChamplainLabel.
        label = Struct()
        label.get_text = lambda: DEMOFILES[5]
        photo = Photograph(label.get_text(), lambda x: None)
        photo.read()
        photo.label = label
        
        photo.latitude  = None
        photo.longitude = None
        self.assertEqual(photo.pretty_coords(), 'Not geotagged')
        photo.latitude  = 10.0
        photo.longitude = 10.0
        self.assertEqual(photo.pretty_coords(), 'N 10.00000, E 10.00000')
        photo.latitude  = -10.0
        photo.longitude = -10.0
        self.assertEqual(photo.pretty_coords(), 'S 10.00000, W 10.00000')
        
        photo.timestamp = None
        self.assertIsNone(photo.pretty_time())
        photo.timestamp = 999999999
        self.assertEqual(photo.pretty_time(), '2001-09-08 07:46:39 PM')
        
        photo.altitude = None
        self.assertIsNone(photo.pretty_elevation())
        photo.altitude = -10.20005
        self.assertEqual(photo.pretty_elevation(), '10.2m below sea level')
        photo.altitude = 600.71
        self.assertEqual(photo.pretty_elevation(), '600.7m above sea level')
        
        self.assertEqual(photo.short_summary(),
"""2001-09-08 07:46:39 PM
S 10.00000, W 10.00000
600.7m above sea level""")
        self.assertEqual(photo.long_summary(),
"""<span size="larger">IMG_2411.JPG</span>
<span style="italic" size="smaller">2001-09-08 07:46:39 PM
S 10.00000, W 10.00000
600.7m above sea level</span>""")
        
        self.assertRegexpMatches(
            get_obj('maps_link').get_label(),
            r'href="http://maps.google.com'
        )
示例#4
0
    def test_string_functions(self):
        """Ensure that strings print properly."""
        environ['TZ'] = 'America/Edmonton'
        tzset()
        
        # Make a photo with a dummy ChamplainLabel.
        label = Struct()
        label.get_text = lambda: DEMOFILES[5]
        photo = Photograph(label.get_text(), lambda x: None)
        photo.read()
        photo.label = label
        
        photo.latitude  = None
        photo.longitude = None
        self.assertEqual(photo.pretty_coords(), 'Not geotagged')
        photo.latitude  = 10.0
        photo.longitude = 10.0
        self.assertEqual(photo.pretty_coords(), 'N 10.00000, E 10.00000')
        photo.latitude  = -10.0
        photo.longitude = -10.0
        self.assertEqual(photo.pretty_coords(), 'S 10.00000, W 10.00000')
        
        photo.timestamp = None
        self.assertIsNone(photo.pretty_time())
        photo.timestamp = 999999999
        self.assertEqual(photo.pretty_time(), '2001-09-08 07:46:39 PM')
        
        photo.altitude = None
        self.assertIsNone(photo.pretty_elevation())
        photo.altitude = -10.20005
        self.assertEqual(photo.pretty_elevation(), '10.2m below sea level')
        photo.altitude = 600.71
        self.assertEqual(photo.pretty_elevation(), '600.7m above sea level')
        
        self.assertEqual(photo.short_summary(),
"""2001-09-08 07:46:39 PM
S 10.00000, W 10.00000
600.7m above sea level""")
        self.assertEqual(photo.long_summary(),
"""<span size="larger">IMG_2411.JPG</span>
<span style="italic" size="smaller">2001-09-08 07:46:39 PM
S 10.00000, W 10.00000
600.7m above sea level</span>""")
        
        self.assertRegexpMatches(
            get_obj('maps_link').get_label(),
            r'href="http://maps.google.com'
        )
示例#5
0
 def test_demo_data(self):
     """Load the demo data and ensure that we're reading it in properly."""
     
     # Start with a fresh state.
     system('git checkout demo')
     self.assertEqual(len(points), 0)
     self.assertEqual(len(polygons), 0)
     self.assertEqual(app.metadata.alpha, float('inf'))
     self.assertEqual(app.metadata.omega, float('-inf'))
     
     # No buttons should be sensitive yet because nothing's loaded.
     buttons = {}
     for button in ('save', 'revert', 'apply', 'close', 'clear'):
         buttons[button] = get_obj(button + '_button')
         self.assertFalse(buttons[button].get_sensitive())
     
     # Load only the photos first.
     for filename in DEMOFILES:
         if filename[-3:] != 'gpx':
             self.assertRaises(IOError, gui.load_gpx_from_file, filename)
             gui.load_img_from_file(filename)
     
     # Nothing is yet selected or modified, so buttons still insensitive.
     for button in buttons.values():
         self.assertFalse(button.get_sensitive())
     
     # Something loaded in the liststore?
     self.assertEqual(len(gui.liststore), 6)
     self.assertTrue(gui.liststore.get_iter_first())
     
     for photo in photos.values():
         self.assertFalse(photo in modified)
         self.assertFalse(photo in selected)
         self.assertFalse(photo.label.get_property('visible'))
         
         # Pristine demo data shouldn't have any tags.
         self.assertIsNone(photo.altitude)
         self.assertIsNone(photo.latitude)
         self.assertIsNone(photo.longitude)
         self.assertFalse(photo.manual)
         
         # Test that missing the provincestate doesn't break the geoname.
         photo.latitude = 47.56494
         photo.longitude = -52.70931
         photo.lookup_geoname()
         self.assertEqual(photo.pretty_geoname(),
             "St. John's,\nNewfoundland and Labrador,\nCanada")
         photo.set_geodata(['Anytown', None, 'US', 'timezone'])
         self.assertEqual(photo.pretty_geoname(), 'Anytown, United States')
         self.assertEqual(photo.timezone, 'timezone')
         
         # Add some crap
         photo.manual    = True
         photo.latitude  = 10.0
         photo.altitude  = 650
         photo.longitude = 45.0
         self.assertTrue(photo.valid_coords())
         
         # photo.read() should discard all the crap we added above.
         # This is in response to a bug where I was using pyexiv2 wrongly
         # and it would load data from disk without discarding old data.
         photo.read()
         self.assertEqual(photo.pretty_geoname(), '')
         self.assertIsNone(photo.altitude)
         self.assertIsNone(photo.latitude)
         self.assertIsNone(photo.longitude)
         self.assertFalse(photo.valid_coords())
         self.assertFalse(photo.manual)
         self.assertEqual(photo.filename, photo.label.get_name())
         self.assertEqual(photo.timestamp,
             gui.liststore.get_value(photo.iter, app.TIMESTAMP))
     
     # Test the select-all button.
     select_all = get_obj('select_all_button')
     select_all.set_active(True)
     self.assertEqual(len(selected), len(gui.liststore))
     select_all.set_active(False)
     self.assertEqual(len(selected), 0)
     
     # Load the GPX
     gpx_filename=join(PKG_DATA_DIR, '..', 'demo', '20101016.gpx')
     self.assertRaises(IOError, gui.load_img_from_file, gpx_filename)
     gui.load_gpx_from_file(gpx_filename)
     self.assertTrue(buttons['clear'].get_sensitive())
     gui.labels.selection.emit('changed')
     
     # Check that the GPX is loaded
     self.assertEqual(len(points), 374)
     self.assertEqual(len(polygons), 1)
     self.assertEqual(app.metadata.alpha, 1287259751)
     self.assertEqual(app.metadata.omega, 1287260756)
     
     # The save button should be sensitive because loading GPX modifies
     # photos, but nothing is selected so the others are insensitive.
     self.assertTrue(buttons['save'].get_sensitive())
     for button in ('revert', 'apply', 'close'):
         self.assertFalse(buttons[button].get_sensitive())
     
     for photo in photos.values():
         self.assertTrue(photo in modified)
         
         self.assertIsNotNone(photo.latitude)
         self.assertIsNotNone(photo.longitude)
         self.assertTrue(photo.valid_coords())
         self.assertTrue(photo.label.get_property('visible'))
     
     # Unload the GPX data.
     buttons['clear'].emit('clicked')
     self.assertEqual(len(points), 0)
     self.assertEqual(len(polygons), 0)
     self.assertFalse(buttons['clear'].get_sensitive())
     
     # Save all photos
     buttons['save'].emit('clicked')
     self.assertEqual(len(modified), 0)
     for button in ('save', 'revert'):
         self.assertFalse(buttons[button].get_sensitive())
     
     gui.labels.selection.select_all()
     self.assertEqual(len(selected), 6)
     for button in ('save', 'revert'):
         self.assertFalse(buttons[button].get_sensitive())
     for button in ('apply', 'close'):
         self.assertTrue(buttons[button].get_sensitive())
     
     # Close all the photos.
     files = [photo.filename for photo in selected]
     buttons['close'].emit('clicked')
     for button in ('save', 'revert', 'apply', 'close'):
         self.assertFalse(buttons[button].get_sensitive())
     self.assertEqual(len(photos), 0)
     self.assertEqual(len(modified), 0)
     self.assertEqual(len(selected), 0)
     
     # Re-read the photos back from disk to make sure that the saving
     # was successful.
     for filename in files:
         photo = Photograph(filename, lambda x: None)
         photo.read()
         self.assertTrue(photo.valid_coords())
         self.assertGreater(photo.altitude, 600)
         self.assertEqual(photo.pretty_geoname(), 'Edmonton, Alberta, Canada')
示例#6
0
 def test_demo_data(self):
     """Load the demo data and ensure that we're reading it in properly."""
     self.assertEqual(len(points), 0)
     self.assertEqual(len(known_trackfiles), 0)
     self.assertEqual(app.metadata.alpha, float('inf'))
     self.assertEqual(app.metadata.omega, float('-inf'))
     
     # No buttons should be sensitive yet because nothing's loaded.
     buttons = {}
     for button in ('save', 'revert', 'close'):
         buttons[button] = get_obj(button + '_button')
         self.assertFalse(buttons[button].get_sensitive())
     
     # Load only the photos first.
     for filename in DEMOFILES:
         if filename[-3:] != 'gpx':
             self.assertRaises(IOError, gui.load_gpx_from_file, filename)
             gui.open_files([filename])
     
     # Nothing is yet selected or modified, so buttons still insensitive.
     for button in buttons.values():
         self.assertFalse(button.get_sensitive())
     
     # Something loaded in the liststore?
     self.assertEqual(len(gui.liststore), 6)
     self.assertTrue(gui.liststore.get_iter_first())
     
     for photo in photos.values():
         self.assertFalse(photo in modified)
         self.assertFalse(photo in selected)
         
         # Pristine demo data shouldn't have any tags.
         self.assertIsNone(photo.altitude)
         self.assertIsNone(photo.latitude)
         self.assertIsNone(photo.longitude)
         self.assertFalse(photo.manual)
         
         # Test that missing the provincestate doesn't break the geoname.
         photo.latitude = 47.56494
         photo.longitude = -52.70931
         photo.lookup_geoname()
         self.assertEqual(photo.pretty_geoname(),
             "St. John's, Newfoundland and Labrador, Canada")
         photo.set_geodata(['Anytown', None, 'US', 'timezone'])
         self.assertEqual(photo.pretty_geoname(), 'Anytown, United States')
         self.assertEqual(photo.timezone, 'timezone')
         
         # Add some crap
         photo.manual    = True
         photo.latitude  = 10.0
         photo.altitude  = 650
         photo.longitude = 45.0
         self.assertTrue(photo.valid_coords())
         
         # photo.read() should discard all the crap we added above.
         # This is in response to a bug where I was using pyexiv2 wrongly
         # and it would load data from disk without discarding old data.
         photo.read()
         self.assertEqual(photo.pretty_geoname(), '')
         self.assertIsNone(photo.altitude)
         self.assertIsNone(photo.latitude)
         self.assertIsNone(photo.longitude)
         self.assertFalse(photo.valid_coords())
         self.assertFalse(photo.manual)
         self.assertEqual(photo.filename, photo.label.get_name())
     
     # Load the GPX
     gpx_filename = join(PKG_DATA_DIR, '..', 'demo', '20101016.gpx')
     self.assertRaises(IOError, gui.load_img_from_file, gpx_filename)
     gui.open_files([gpx_filename])
     gui.labels.selection.emit('changed')
     
     # Check that the GPX is loaded
     self.assertEqual(len(points), 374)
     self.assertEqual(len(known_trackfiles), 1)
     self.assertEqual(app.metadata.alpha, 1287259751)
     self.assertEqual(app.metadata.omega, 1287260756)
     
     # The save button should be sensitive because loading GPX modifies
     # photos, but nothing is selected so the others are insensitive.
     self.assertTrue(buttons['save'].get_sensitive())
     for button in ('revert', 'close'):
         self.assertFalse(buttons[button].get_sensitive())
     
     for photo in photos.values():
         self.assertTrue(photo in modified)
         
         self.assertIsNotNone(photo.latitude)
         self.assertIsNotNone(photo.longitude)
         self.assertTrue(photo.valid_coords())
         self.assertTrue(photo.label.get_property('visible'))
     
     # Unload the GPX data.
     clear_all_gpx()
     self.assertEqual(len(points), 0)
     self.assertEqual(len(known_trackfiles), 0)
     
     # Save all photos
     buttons['save'].emit('clicked')
     self.assertEqual(len(modified), 0)
     for button in ('save', 'revert'):
         self.assertFalse(buttons[button].get_sensitive())
     
     gui.labels.selection.select_all()
     self.assertEqual(len(selected), 6)
     for button in ('save', 'revert'):
         self.assertFalse(buttons[button].get_sensitive())
     self.assertTrue(buttons['close'].get_sensitive())
     
     # Close all the photos.
     files = [photo.filename for photo in selected]
     buttons['close'].emit('clicked')
     for button in ('save', 'revert', 'close'):
         self.assertFalse(buttons[button].get_sensitive())
     self.assertEqual(len(photos), 0)
     self.assertEqual(len(modified), 0)
     self.assertEqual(len(selected), 0)
     
     # Re-read the photos back from disk to make sure that the saving
     # was successful.
     for filename in files:
         photo = Photograph(filename)
         photo.read()
         self.assertTrue(photo.valid_coords())
         self.assertGreater(photo.altitude, 600)
         self.assertEqual(photo.pretty_geoname(), 'Edmonton, Alberta, Canada')