diff --git a/bin/mugshot b/bin/mugshot index 2975eb3..be62fa1 100755 --- a/bin/mugshot +++ b/bin/mugshot @@ -5,7 +5,7 @@ # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but diff --git a/data/ui/MugshotWindow.ui b/data/ui/MugshotWindow.ui index ed49cba..25724cb 100644 --- a/data/ui/MugshotWindow.ui +++ b/data/ui/MugshotWindow.ui @@ -657,12 +657,12 @@ False - + False vertical 2 - + False end diff --git a/mugshot/CameraMugshotDialog.py b/mugshot/CameraMugshotDialog.py index addfc19..0b90723 100644 --- a/mugshot/CameraMugshotDialog.py +++ b/mugshot/CameraMugshotDialog.py @@ -33,6 +33,8 @@ from mugshot_lib import helpers from mugshot_lib.CameraDialog import CameraDialog Clutter.init(None) + + class CameraBox(GtkClutter.Embed): __gsignals__ = { 'photo-saved': (GObject.SIGNAL_RUN_LAST, @@ -42,27 +44,29 @@ class CameraBox(GtkClutter.Embed): GObject.TYPE_NONE, (GObject.TYPE_INT,)) } - + def __init__(self, parent): GtkClutter.Embed.__init__(self) self.state = Gst.State.NULL self.parent = parent - + self.stage = self.get_stage() self.layout_manager = Clutter.BoxLayout() - + self.scroll = Clutter.ScrollActor.new() self.scroll.set_scroll_mode(Clutter.ScrollMode.HORIZONTALLY) - + self.textures_box = Clutter.Actor(layout_manager=self.layout_manager) self.textures_box.set_x_align(Clutter.ActorAlign.CENTER) - + self.scroll.add_actor(self.textures_box) self.stage.add_actor(self.scroll) self.video_texture = Clutter.Texture.new() - self.layout_manager.pack(self.video_texture, expand=True, x_fill=False, y_fill=False, x_align=Clutter.BoxAlignment.CENTER, y_align=Clutter.BoxAlignment.CENTER) + self.layout_manager.pack( + self.video_texture, expand=True, x_fill=False, y_fill=False, + x_align=Clutter.BoxAlignment.CENTER, y_align=Clutter.BoxAlignment.CENTER) self.camera = Cheese.Camera.new(self.video_texture, None, 100, 100) Cheese.Camera.setup(self.camera, None) @@ -73,32 +77,32 @@ class CameraBox(GtkClutter.Embed): node = data.get_device_node() self.camera.set_device_by_device_node(node) self.camera.switch_camera_device() - - device_monitor=Cheese.CameraDeviceMonitor.new() + + device_monitor = Cheese.CameraDeviceMonitor.new() device_monitor.connect("added", added) device_monitor.coldplug() - + self.connect("size-allocate", self.on_size_allocate) self.camera.connect("photo-taken", self.on_photo_taken) self.camera.connect("state-flags-changed", self.on_state_flags_changed) - + self._save_filename = "" - + def on_state_flags_changed(self, camera, state): self.state = state self.emit("gst-state-changed", self.state) - + def play(self): if self.state != Gst.State.PLAYING: Cheese.Camera.play(self.camera) - + def pause(self): if self.state == Gst.State.PLAYING: Cheese.Camera.play(self.camera) - + def stop(self): Cheese.Camera.stop(self.camera) - + def on_size_allocate(self, widget, allocation): vheight = self.video_texture.get_height() vwidth = self.video_texture.get_width() @@ -106,24 +110,24 @@ class CameraBox(GtkClutter.Embed): vformat = self.camera.get_current_video_format() vheight = vformat.height vwidth = vformat.width - + height = allocation.height mult = vheight / height - width = round(vwidth / mult,1) - + width = round(vwidth / mult, 1) + self.video_texture.set_height(height) self.video_texture.set_width(width) - + point = Clutter.Point() point.x = (self.video_texture.get_width() - allocation.width) / 2 point.y = 0 - + self.scroll.scroll_to_point(point) - + def take_photo(self, target_filename): self._save_filename = target_filename return self.camera.take_photo_pixbuf() - + def on_photo_taken(self, camera, pixbuf): # Get the image dimensions. height = pixbuf.get_height() @@ -144,17 +148,18 @@ class CameraBox(GtkClutter.Embed): # Overwrite the temporary file with our new cropped image. new_pixbuf.savev(self._save_filename, "png", [], []) - + self.emit("photo-saved", self._save_filename) - - + + class CameraMugshotDialog(CameraDialog): + """Camera Capturing Dialog""" __gtype_name__ = "CameraMugshotDialog" __gsignals__ = {'apply': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (GObject.TYPE_STRING,)) - } + } def finish_initializing(self, builder): # pylint: disable=E1002 """Set up the camera dialog""" @@ -162,10 +167,10 @@ class CameraMugshotDialog(CameraDialog): # Initialize Gst or nothing will work. Gst.init(None) - + self.camera = CameraBox(self) self.camera.show() - + self.camera.connect("gst-state-changed", self.on_camera_state_changed) self.camera.connect("photo-saved", self.on_camera_photo_saved) @@ -181,24 +186,24 @@ class CameraMugshotDialog(CameraDialog): self.filename = None self.show_all() - + def on_camera_state_changed(self, widget, state): if state == Gst.State.PLAYING or self.apply_button.get_sensitive(): self.record_button.set_sensitive(True) else: self.record_button.set_sensitive(False) - + def on_camera_photo_saved(self, widget, filename): self.filename = filename self.apply_button.set_sensitive(True) self.camera.pause() - + def play(self): self.camera.play() - + def pause(self): self.camera.pause() - + def stop(self): self.camera.stop() @@ -242,7 +247,7 @@ class CameraMugshotDialog(CameraDialog): def on_camera_cancel_clicked(self, widget): """When the Cancel button is clicked, just hide the dialog.""" self.hide() - + def on_camera_mugshot_dialog_destroy(self, widget, data=None): """When the application exits, remove the current temporary file and stop the gstreamer element.""" diff --git a/mugshot/MugshotWindow.py b/mugshot/MugshotWindow.py index 35323be..77305cd 100644 --- a/mugshot/MugshotWindow.py +++ b/mugshot/MugshotWindow.py @@ -160,6 +160,7 @@ def menu_position(self, menu, data=None, something_else=None): # See mugshot_lib.Window.py for more details about how this class works class MugshotWindow(Window): + """Mugshot GtkWindow""" __gtype_name__ = "MugshotWindow" diff --git a/mugshot_lib/Builder.py b/mugshot_lib/Builder.py index d3278ca..b08bb76 100644 --- a/mugshot_lib/Builder.py +++ b/mugshot_lib/Builder.py @@ -37,6 +37,7 @@ from xml.etree.cElementTree import ElementTree # pylint: disable=R0904 # the many public methods is a feature of Gtk.Builder class Builder(Gtk.Builder): + ''' extra features connects glade defined handler to default_handler if necessary auto connects widget to handler with matching name or alias @@ -164,7 +165,9 @@ class Builder(Gtk.Builder): # this class deliberately does not provide any public interfaces # apart from the glade widgets class UiFactory(): + ''' provides an object with attributes as glade widgets''' + def __init__(self, widget_dict): """Initialize the UiFactory.""" self._widget_dict = widget_dict diff --git a/mugshot_lib/CameraDialog.py b/mugshot_lib/CameraDialog.py index 117f34b..e885920 100644 --- a/mugshot_lib/CameraDialog.py +++ b/mugshot_lib/CameraDialog.py @@ -24,6 +24,7 @@ from . helpers import get_builder class CameraDialog(Gtk.Dialog): + """Camera Dialog""" __gtype_name__ = "CameraDialog" diff --git a/mugshot_lib/SudoDialog.py b/mugshot_lib/SudoDialog.py index ea6e0ea..e076453 100644 --- a/mugshot_lib/SudoDialog.py +++ b/mugshot_lib/SudoDialog.py @@ -89,6 +89,7 @@ def env_spawn(command, timeout): class SudoDialog(Gtk.Dialog): + ''' Creates a new SudoDialog. This is a replacement for using gksudo which provides additional flexibility when performing sudo commands. @@ -108,6 +109,7 @@ class SudoDialog(Gtk.Dialog): - REJECT: Password invalid. - ACCEPT: Password valid. ''' + def __init__(self, title=None, parent=None, icon=None, message=None, name=None, retries=-1): """Initialize the SudoDialog.""" diff --git a/mugshot_lib/Window.py b/mugshot_lib/Window.py index 24174f8..a7376b5 100644 --- a/mugshot_lib/Window.py +++ b/mugshot_lib/Window.py @@ -26,6 +26,7 @@ from . helpers import get_builder, show_uri class Window(Gtk.Window): + """This class is meant to be subclassed by MugshotWindow. It provides common functions and some boilerplate.""" __gtype_name__ = "Window" diff --git a/mugshot_lib/helpers.py b/mugshot_lib/helpers.py index 4af0e5d..549ce50 100644 --- a/mugshot_lib/helpers.py +++ b/mugshot_lib/helpers.py @@ -54,7 +54,9 @@ def get_media_file(media_file_name): class NullHandler(logging.Handler): + """Handle NULL""" + def emit(self, record): """Do not emit anything.""" pass diff --git a/mugshot_lib/mugshotconfig.py b/mugshot_lib/mugshotconfig.py index 39a94a5..86b0b10 100644 --- a/mugshot_lib/mugshotconfig.py +++ b/mugshot_lib/mugshotconfig.py @@ -20,7 +20,7 @@ __all__ = [ 'project_path_not_found', 'get_data_file', 'get_data_path', - ] +] # Where your project will look for your data (for instance, images and ui # files). By default, this is ../data, relative your trunk layout @@ -32,6 +32,7 @@ import os class project_path_not_found(Exception): + """Raised when we can't find the project directory.""" diff --git a/po/mugshot.pot b/po/mugshot.pot index 84c09be..245662c 100644 --- a/po/mugshot.pot +++ b/po/mugshot.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-08-29 22:19-0400\n" +"POT-Creation-Date: 2015-08-31 22:28-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -61,7 +61,7 @@ msgstr "" msgid "Browse…" msgstr "" -#: ../data/ui/MugshotWindow.ui.h:9 ../mugshot/MugshotWindow.py:588 +#: ../data/ui/MugshotWindow.ui.h:9 ../mugshot/MugshotWindow.py:589 msgid "Mugshot" msgstr "" @@ -103,80 +103,80 @@ msgstr "" #. Set the record button to retry, and disable it until the capture #. finishes. -#: ../mugshot/CameraMugshotDialog.py:232 +#: ../mugshot/CameraMugshotDialog.py:237 msgid "Retry" msgstr "" -#: ../mugshot/MugshotWindow.py:321 +#: ../mugshot/MugshotWindow.py:322 msgid "Authentication cancelled." msgstr "" -#: ../mugshot/MugshotWindow.py:324 +#: ../mugshot/MugshotWindow.py:325 msgid "Authentication failed." msgstr "" -#: ../mugshot/MugshotWindow.py:327 +#: ../mugshot/MugshotWindow.py:328 msgid "An error occurred when saving changes." msgstr "" -#: ../mugshot/MugshotWindow.py:329 +#: ../mugshot/MugshotWindow.py:330 msgid "User details were not updated." msgstr "" -#: ../mugshot/MugshotWindow.py:498 +#: ../mugshot/MugshotWindow.py:499 msgid "Update Pidgin buddy icon?" msgstr "" -#: ../mugshot/MugshotWindow.py:499 +#: ../mugshot/MugshotWindow.py:500 msgid "Would you also like to update your Pidgin buddy icon?" msgstr "" -#: ../mugshot/MugshotWindow.py:589 +#: ../mugshot/MugshotWindow.py:590 msgid "Enter your password to change user details." msgstr "" -#: ../mugshot/MugshotWindow.py:591 +#: ../mugshot/MugshotWindow.py:592 msgid "" "This is a security measure to prevent unwanted updates\n" "to your personal information." msgstr "" -#: ../mugshot/MugshotWindow.py:796 +#: ../mugshot/MugshotWindow.py:797 msgid "Update LibreOffice user details?" msgstr "" -#: ../mugshot/MugshotWindow.py:797 +#: ../mugshot/MugshotWindow.py:798 msgid "Would you also like to update your user details in LibreOffice?" msgstr "" -#: ../mugshot_lib/SudoDialog.py:122 +#: ../mugshot_lib/SudoDialog.py:124 msgid "Password Required" msgstr "" -#: ../mugshot_lib/SudoDialog.py:159 +#: ../mugshot_lib/SudoDialog.py:161 msgid "Incorrect password... try again." msgstr "" -#: ../mugshot_lib/SudoDialog.py:169 +#: ../mugshot_lib/SudoDialog.py:171 msgid "Password:" msgstr "" #. Buttons -#: ../mugshot_lib/SudoDialog.py:180 +#: ../mugshot_lib/SudoDialog.py:182 msgid "Cancel" msgstr "" -#: ../mugshot_lib/SudoDialog.py:183 +#: ../mugshot_lib/SudoDialog.py:185 msgid "OK" msgstr "" -#: ../mugshot_lib/SudoDialog.py:204 +#: ../mugshot_lib/SudoDialog.py:206 msgid "" "Enter your password to\n" "perform administrative tasks." msgstr "" -#: ../mugshot_lib/SudoDialog.py:206 +#: ../mugshot_lib/SudoDialog.py:208 #, python-format msgid "" "The application '%s' lets you\n" diff --git a/setup.py b/setup.py index 7a707fa..3e81c1b 100644 --- a/setup.py +++ b/setup.py @@ -132,7 +132,9 @@ write_appdata_file("data/appdata/mugshot.appdata.xml.in") class InstallAndUpdateDataDirectory(DistUtilsExtra.auto.install_auto): + """Command Class to install and update the directory.""" + def run(self): """Run the setup commands.""" DistUtilsExtra.auto.install_auto.run(self) @@ -197,4 +199,4 @@ DistUtilsExtra.auto.setup( data_files=[('share/man/man1', ['mugshot.1']), ('share/appdata', ['data/appdata/mugshot.appdata.xml'])], cmdclass={'install': InstallAndUpdateDataDirectory} - ) +)