fixes to main.py pygwshare.py pygwsam.py
authorDhananjay Sathe <dhananjaysathe@gmail.com>
Sat, 10 Sep 2011 19:20:34 +0000 (19:20 +0000)
committerDhananjay Sathe <dhananjaysathe@gmail.com>
Sat, 10 Sep 2011 19:20:34 +0000 (19:20 +0000)
now users dacl show
many unnecessary arguments removed
errors in main.py fixed, now inline with other managers
various other minor errors fixed in unused functions of pygwshare.py

Dhananjay_Sathe.diff [new file with mode: 0644]
sambagtk/main.py
sambagtk/pygwsam.py
sambagtk/pygwshare.py

diff --git a/Dhananjay_Sathe.diff b/Dhananjay_Sathe.diff
new file mode 100644 (file)
index 0000000..4482c2f
--- /dev/null
@@ -0,0 +1,6289 @@
+commit 204aa75536d5508ca326bddd273d7d7e617109b1
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Tue Aug 16 19:27:39 2011 +0000
+
+     pep fixes to dialogs (pysrvsvc.py)
+
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index b433d6d..5fa6e0c 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python2.6
++#!/usr/bin/python
+ # -*- coding: utf-8 -*-
+ #       pysrvsvc.py
+@@ -24,8 +24,6 @@
+ #
+ #
+-
+-
+ """ srvsvc related dialogues"""
+ import gtk
+@@ -33,7 +31,6 @@ import gobject
+ import os
+ import sys
+-
+ from samba.dcerpc import srvsvc
+@@ -41,15 +38,9 @@ class srvsvcConnectDialog(gtk.Dialog):
+     """Connect Dialog"""
+-    def __init__(
+-        self,
+-        server,
+-        transport_type,
+-        username,
+-        password='',
+-        ):
+-        super(srvsvcConnectDialog, self).__init__()
++    def __init__(self, server, transport_type, username, password=''):
++        super(srvsvcConnectDialog, self).__init__()
+         self.server_address = server
+         self.username = username
+@@ -61,6 +52,7 @@ class srvsvcConnectDialog(gtk.Dialog):
+         self.set_modal(True)
+         self.update_sensitivity()
++        self.about_dialog = gtk.AboutDialog()
+     def create(self):
+         self.set_title('Connect to Samba Share Server')
+@@ -72,10 +64,10 @@ class srvsvcConnectDialog(gtk.Dialog):
+         self.vbox.set_spacing(5)
+         # artwork TODO remove post decession
+-
++        
+         self.artwork = gtk.VBox()
+-        self.samba_image_filename = os.path.join(sys.path[0],'images',
++        self.samba_image_filename = os.path.join(sys.path[0], 'images',
+                 'samba-logo-small.png')
+         self.samba_image = gtk.Image()
+         self.samba_image.set_from_file(self.samba_image_filename)
+@@ -106,37 +98,44 @@ class srvsvcConnectDialog(gtk.Dialog):
+         label = gtk.Label(' Server address: ')
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 0, 1, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.server_address_entry = gtk.Entry()
+         self.server_address_entry.set_text(self.server_address)
+         self.server_address_entry.set_activates_default(True)
+-        self.server_address_entry.set_tooltip_text('Enter the Server Address')
+-        table.attach(self.server_address_entry, 1, 2, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++        self.server_address_entry.set_tooltip_text(
++                                        'Enter the Server Address')
++        table.attach(self.server_address_entry, 1, 2, 0, 1,
++                gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+         label = gtk.Label(' Username: ')
+         label.set_alignment(0, 0.5)
+-        table.attach(label,0,1,1,2,gtk.FILL,gtk.FILL | gtk.EXPAND,0,0)
++        table.attach(label, 0, 1, 1, 2, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.username_entry = gtk.Entry()
+         self.username_entry.set_text(self.username)
+         self.username_entry.set_activates_default(True)
+         self.username_entry.set_tooltip_text('Enter your Username')
+-        table.attach(self.username_entry,1,2,1,2,gtk.FILL | gtk.EXPAND,gtk.FILL | gtk.EXPAND,1,1)
++        table.attach(self.username_entry, 1, 2, 1, 2,
++                gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+         label = gtk.Label(' Password: ')
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 0, 1, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 2, 3, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.password_entry = gtk.Entry()
+         self.password_entry.set_text(self.password)
+         self.password_entry.set_visibility(False)
+         self.password_entry.set_activates_default(True)
+         self.password_entry.set_tooltip_text('Enter your Password')
+-        table.attach(self.password_entry, 1, 2, 2, 3, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++        table.attach(self.password_entry, 1, 2, 2, 3,
++                gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+         # transport frame
+-
++        
+         self.transport_frame = gtk.Frame(' Transport type ')
+         self.vbox.pack_start(self.transport_frame, False, True, 0)
+@@ -146,21 +145,22 @@ class srvsvcConnectDialog(gtk.Dialog):
+         self.rpc_smb_tcpip_radio_button = gtk.RadioButton(None,
+                 'RPC over SMB over TCP/IP ')
+-        self.rpc_smb_tcpip_radio_button.set_tooltip_text('ncacn_np type : Recomended (default)'
+-                )  # # according MS-SRVS specification
++        self.rpc_smb_tcpip_radio_button.set_tooltip_text(
++                                'ncacn_np type : Recomended (default)')
++        # Default according MS-SRVS specification
++
+         self.rpc_smb_tcpip_radio_button.set_active(self.transport_type
+                  == 0)
+         vbox.pack_start(self.rpc_smb_tcpip_radio_button)
+-
+         self.rpc_tcpip_radio_button = \
+             gtk.RadioButton(self.rpc_smb_tcpip_radio_button,
+                             'RPC over TCP/IP')
+-        self.rpc_tcpip_radio_button.set_tooltip_text('ncacn_ip_tcp type')
++        self.rpc_tcpip_radio_button.set_tooltip_text('ncacn_ip_tcp type'
++                )
+         self.rpc_tcpip_radio_button.set_active(self.transport_type == 1)
+         vbox.pack_start(self.rpc_tcpip_radio_button)
+-
+         self.localhost_radio_button = \
+             gtk.RadioButton(self.rpc_tcpip_radio_button, 'Localhost')
+         self.localhost_radio_button.set_tooltip_text('ncalrpc type')  # # MS-SRVS specification
+@@ -188,42 +188,42 @@ class srvsvcConnectDialog(gtk.Dialog):
+                 self.on_radio_button_toggled)
+     def get_server_address(self):
+-            if self.get_transport_type() is 2:
+-                return '127.0.0.1'
+-            return self.server_address_entry.get_text().strip()
++        if self.get_transport_type() is 2:
++            return '127.0.0.1'
++        return self.server_address_entry.get_text().strip()
+     def get_username(self):
+-            return self.username_entry.get_text().strip()
++        return self.username_entry.get_text().strip()
+     def get_password(self):
+-            return self.password_entry.get_text()
++        return self.password_entry.get_text()
+     def update_sensitivity(self):
+-            server_required = \
+-                not self.localhost_radio_button.get_active()
+-            self.server_address_entry.set_sensitive(server_required)
++        server_required = not self.localhost_radio_button.get_active()
++        self.server_address_entry.set_sensitive(server_required)
+     def get_transport_type(self):
+-            if self.rpc_smb_tcpip_radio_button.get_active():
+-                return 0
+-            elif self.rpc_tcpip_radio_button.get_active():
+-                return 1
+-            elif self.localhost_radio_button.get_active():
+-                return 2
+-            else:
+-                return -1
++        if self.rpc_smb_tcpip_radio_button.get_active():
++            return 0
++        elif self.rpc_tcpip_radio_button.get_active():
++            return 1
++        elif self.localhost_radio_button.get_active():
++            return 2
++        else:
++            return -1
+     def on_radio_button_toggled(self, widget):
+-            self.update_sensitivity()
++        self.update_sensitivity()
+ class ShareAddEditDialog(gtk.Dialog):
+-    """ Share add and edit dialog
++    """
++    Share add and edit dialog
+- If 'edit_mode' is set to True then in Edit mode .
+- Immutable fields are automatically greyed out.
+-  """
++    If 'edit_mode' is set to True then in Edit mode .
++    Immutable fields are automatically greyed out.
++    """
+     def __init__(self, pipe_manager, share=None):
+         """ Class initialiser """
+@@ -232,12 +232,11 @@ class ShareAddEditDialog(gtk.Dialog):
+         self.pipe = pipe_manager
+         self.islocal = self.pipe.islocal
+-
+-        if share is None :
++        if share is None:
+             self.edit_mode = 0
+             self.share = self.pipe.get_share_object()
+-        else :
+-            self.edit_mode =  1
++        else:
++            self.edit_mode = 1
+             self.share = share
+         self.share_to_fields()
+         self.create()
+@@ -245,10 +244,9 @@ class ShareAddEditDialog(gtk.Dialog):
+         self.set_window_mode()
+         self.set_modal(True)
+-
+-
+     def set_window_mode(self):
+         """ Deactivates a bunch of widgets in Edit mode """
++
+         if self.edit_mode:
+             self.share_name_entry.set_sensitive(False)
+             self.stype_disktree_radio_button.set_sensitive(False)
+@@ -257,70 +255,73 @@ class ShareAddEditDialog(gtk.Dialog):
+             self.sflag_temp_check_button.set_sensitive(False)
+             self.sflag_hidden_check_button.set_sensitive(False)
+-
+-
+-    def  get_stype_final(self):
++    def get_stype_final(self):
+         """ Calculates share type from base type and share flags """
++
+         stype = self.stype
+-        if self.flags[0] :
++        if self.flags[0]:
+             stype |= srvsvc.STYPE_TEMPORARY
+-        if self.flags[1] :
+-            stype |= -(srvsvc.STYPE_HIDDEN)
++        if self.flags[1]:
++            stype |= -srvsvc.STYPE_HIDDEN
+         return stype
+-
+-
+     def validate_fields(self):
++        """ Checks for some Errors"""
+-        if type(self) is ShareAddEditDialog :
++        if type(self) is ShareAddEditDialog:
+             name = self.share_name_entry.get_text()
+-        elif type(self) is ShareWizardDialog :
++        elif type(self) is ShareWizardDialog:
+             name = self.sname
+         if len(name) == 0:
+-            return "Share name may not be empty!"
++            return 'Share name may not be empty!'
+         if not self.pipe.name_validate(name):
+-            return "Invalid Share name"
++            return 'Invalid Share name'
+-        if (not self.edit_mode):
++        if not self.edit_mode:
+             for share in self.pipe.share_list:
+                 if share.name == name:
+-                    return ' '.join(["A Share with the name : ", share.name ,"already exists!"])
++                    return ' '.join(['A Share with the name : ',
++                                    share.name, 'already exists!'])
+         return None
+-
+-
+-    def toggle_pwd_visiblity(self,widget,Junk):
++    def toggle_pwd_visiblity(self, widget, Junk):
+         """ Toggels Password visiblity"""
++
+         mode = self.set_pw_visiblity.get_active()
+         self.share_password_entry.set_visibility(mode)
+-
+-
+-    def  share_to_fields(self):
++    def share_to_fields(self):
+         """ Gets values from the share . """
++
+         self.sname = self.share.name
+-        self.stype = self.pipe.get_share_type_info(self.share.type,'base_type')
+-        self.flags = self.pipe.get_share_type_info(self.share.type,'flags')
++        self.stype = self.pipe.get_share_type_info(self.share.type,
++                'base_type')
++        self.flags = self.pipe.get_share_type_info(self.share.type,
++                'flags')
+         self.comment = self.share.comment
+         self.max_users = self.share.max_users
+         if self.share.password is None:
+-            self.password = ""
++            self.password = ''
+         else:
+             self.password = self.share.password
+         self.path = self.share.path
+-    def fields_to_gui (self):
+-        """" Used to reset the gui fields from share fields on apply"""
++    def fields_to_gui(self):
++        """ Used to reset the gui fields from share fields on apply"""
++
+         self.share_name_entry.set_text(self.sname)
+         self.share_comment_entry.set_text(self.comment)
+         self.share_password_entry.set_text(self.password)
+-        self.stype_disktree_radio_button.set_active(self.stype == srvsvc.STYPE_DISKTREE)
+-        self.stype_printq_radio_button.set_active(self.stype == srvsvc.STYPE_PRINTQ )
+-        self.stype_ipc_radio_button.set_active(self.stype == srvsvc.STYPE_IPC)
++        self.stype_disktree_radio_button.set_active(self.stype
++                 == srvsvc.STYPE_DISKTREE)
++        self.stype_printq_radio_button.set_active(self.stype
++                 == srvsvc.STYPE_PRINTQ)
++        self.stype_ipc_radio_button.set_active(self.stype
++                 == srvsvc.STYPE_IPC)
+         self.sflag_temp_check_button.set_active(self.flags[0])
+         self.sflag_hidden_check_button.set_active(self.flags[1])
+@@ -331,91 +332,87 @@ class ShareAddEditDialog(gtk.Dialog):
+             self.file_entry.set_text(self.path)
+         self.max_users_spinbox.set_value(self.max_users)
+-
+-
+     def collect_fields(self):
+         """ Collects fields from the GUI and saves in class variables """
++
+         self.sname = self.share_name_entry.get_text()
+         self.comment = self.share_comment_entry.get_text()
+         self.password = self.share_password_entry.get_text()
++        
+         # Now to handle the share type resolution
+-        if self.stype_disktree_radio_button.get_active() :
++        if self.stype_disktree_radio_button.get_active():
+             self.stype = srvsvc.STYPE_DISKTREE
+-        elif self.stype_printq_radio_button.get_active() :
++        elif self.stype_printq_radio_button.get_active():
+             self.stype = srvsvc.STYPE_PRINTQ
+         else:
+             self.stype = srvsvc.STYPE_IPC
+         # check flags
+-        self.flags = [False,False]
++        self.flags = [False, False]
+         if self.sflag_temp_check_button.get_active():
+             self.flags[0] = True
+         if self.sflag_hidden_check_button.get_active():
+             self.flags[1] = True
+-        if self.islocal :
++        if self.islocal:
+             self.path = self.file_button.get_filename()
+         else:
+             self.path = self.path_entry.get_text()
+         self.max_users = self.max_users_spinbox.get_value_as_int()
+-
+-
+-    def  fields_to_share(self):
++    def fields_to_share(self):
+         """ Modify a share type 502 object from the fields collected """
++
+         self.collect_fields()
+-        self.share.name= self.sname
+-        self.share.type= self.get_stype_final()
+-        self.share.comment= self.comment
+-        self.share.max_users= self.max_users
+-        self.share.password= self.password
++        self.share.name = self.sname
++        self.share.type = self.get_stype_final()
++        self.share.comment = self.comment
++        self.share.max_users = self.max_users
++        self.share.password = self.password
+         self.share.path = self.pipe.fix_path_format(self.path)
+-
+-
+-
+-
+-    def  create(self):
++    def create(self):
+         """ Create the window """
+-        self.set_title(' '.join([(" New Share",
+-                    " Edit Share : ")[self.edit_mode],self.sname]))
+-        self.icon_name = ["network-folder","network-printer",
+-                            "network","network-pipe"][self.stype]
+-        self.icon_filename = \
+-        os.path.join(sys.path[0],"images",''.join([self.icon_name,'.png']))
++
++        self.set_title(' '.join([(' New Share', ' Edit Share : '
++                       )[self.edit_mode], self.sname]))
++        self.icon_name = ['network-folder', 'network-printer', 'network'
++                          , 'network-pipe'][self.stype]
++        self.icon_filename = os.path.join(sys.path[0], 'images',
++                ''.join([self.icon_name, '.png']))
+         self.set_icon_from_file(self.icon_filename)
+         self.vbox.set_spacing(3)
+         self.set_border_width(5)
+         self.set_decorated(True)
+         self.set_resizable(False)
+-
+-
+-        #artwork
+-        self.desc_box= gtk.HBox()
+-        self.vbox.pack_start(self.desc_box,False,True,0)
++        
++        # artwork
++        self.desc_box = gtk.HBox()
++        self.vbox.pack_start(self.desc_box, False, True, 0)
+         hbox = gtk.HBox()
+-        icon =  gtk.Image()
++        icon = gtk.Image()
+         icon.set_from_file(self.icon_filename)
+         hbox.pack_start(icon, False, True, 0)
+-        self.desc_box.pack_start(hbox,False, True, 0)
+-
++        self.desc_box.pack_start(hbox, False, True, 0)
+         hbox = gtk.HBox()
+         label = gtk.Label()
+-        if self.edit_mode :
+-            label.set_markup("<b>%s</b>" %" ".join(["Editing The Share : ",self.sname]))
+-        else :
+-            label.set_markup("<b>Add a New Share</b>")
++        if self.edit_mode:
++            label.set_markup('<b>%s</b>'
++                              % ' '.join(['Editing The Share : ',
++                             self.sname]))
++        else:
++            label.set_markup('<b>Add a New Share</b>')
+         label.set_alignment(0.5, 0.5)
+         hbox.pack_start(label, True, True, 0)
+-        self.desc_box.pack_start(hbox,True, True, 0)
+-
+-        # the main form
++        self.desc_box.pack_start(hbox, True, True, 0)
++        
++        # main form box
+         self.form_box = gtk.VBox()
+         self.vbox.pack_start(self.form_box, True, True, 0)
+-
+-        # Name , password and comment (npc) frame
++        
++        # Name , password and comment (npc) frame        
+         frame = gtk.Frame()
+         label = gtk.Label('<b>Name and Comment</b>')
+         label.set_use_markup(True)
+@@ -423,58 +420,68 @@ class ShareAddEditDialog(gtk.Dialog):
+         self.form_box.pack_start(frame, True, True, 0)
+         frame.set_border_width(5)
+-        table = gtk.Table(4,2)
++        table = gtk.Table(4, 2)
+         table.set_border_width(5)
+         table.set_row_spacings(1)
+         table.set_col_spacings(6)
+         frame.add(table)
+-        label = gtk.Label(" Share Name : ")
++        label = gtk.Label(' Share Name : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 0, 1, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
+         self.share_name_entry = gtk.Entry()
+         self.share_name_entry.set_tooltip_text('Enter the Share Name')
+         self.share_name_entry.set_text(self.sname)
+         self.share_name_entry.set_activates_default(True)
+-        # dcesrv_srvsvc name check does this but just to reduce chances of an error limit max length
++              # dcesrv_srvsvc name check does this but just to reduce chances of an error limit max length
+         if self.flags[1]:
+             self.share_name_entry.set_max_length(12)
+         else:
+             self.share_name_entry.set_max_length(80)
+-        table.attach(self.share_name_entry, 1, 2, 0, 1, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++        table.attach(self.share_name_entry, 1, 2, 0, 1,
++                    gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+-        label = gtk.Label(" Comment  : ")
++        label = gtk.Label(' Comment  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 1, 2, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
+         self.share_comment_entry = gtk.Entry()
+-        self.share_comment_entry.set_max_length(48) # max allowed is 48 MS-SRVS
++        self.share_comment_entry.set_max_length(48)  # max allowed is 48 MS-SRVS
+         self.share_comment_entry.set_activates_default(True)
+         self.share_comment_entry.set_text(self.comment)
+-        self.share_comment_entry.set_tooltip_text('Add a Comment or Description of the Share, Will default to share_type description')
+-        table.attach(self.share_comment_entry, 1, 2, 1, 2, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++        self.share_comment_entry.set_tooltip_text('Add a Comment or Description of the Share, Will default to share_type description'
++                )
++        table.attach(self.share_comment_entry, 1, 2, 1, 2,
++                    gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+         label = gtk.Label(' Password  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 2, 3, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
+         self.share_password_entry = gtk.Entry()
+         self.share_password_entry.set_activates_default(True)
+         self.share_password_entry.set_text(self.password)
+         self.share_password_entry.set_visibility(False)
+-        self.share_password_entry.set_tooltip_text('Set a Share Password')
+-        table.attach(self.share_password_entry, 1, 2, 2, 3, gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
+-
+-        self.set_pw_visiblity = gtk.CheckButton("Visible")
+-        self.set_pw_visiblity.set_tooltip_text('Enable or disable the password visiblity')
+-        self.set_pw_visiblity.set_active(False)
+-        self.set_pw_visiblity.connect("toggled",self.toggle_pwd_visiblity,None)
+-        table.attach(self.set_pw_visiblity, 1, 2, 3, 4,gtk.SHRINK,gtk.FILL, 0, 0)
++        self.share_password_entry.set_tooltip_text(
++                                                'Set a Share Password')
++        table.attach(self.share_password_entry, 1, 2, 2, 3,
++                    gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++        self.set_pw_visiblity = gtk.CheckButton('Visible')
++        self.set_pw_visiblity.set_tooltip_text('Enable or disable the password visiblity'
++                )
++        self.set_pw_visiblity.set_active(False)
++        self.set_pw_visiblity.connect('toggled',
++                self.toggle_pwd_visiblity, None)
++        table.attach(self.set_pw_visiblity, 1, 2, 3, 4, gtk.SHRINK,
++                            gtk.FILL, 0, 0)
+         # Share frame
+         frame = gtk.Frame()
+@@ -484,50 +491,63 @@ class ShareAddEditDialog(gtk.Dialog):
+         self.form_box.pack_start(frame, True, True, 0)
+-        table = gtk.Table(1,2,True)
++        table = gtk.Table(1, 2, True)
+         frame.add(table)
+         # Base Share Types
+         vbox = gtk.VBox()
+         vbox.set_border_width(5)
+-        table.attach(vbox,0,1,0,1,gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++        table.attach(vbox, 0, 1, 0, 1, gtk.FILL | gtk.EXPAND,
++                                        gtk.FILL | gtk.EXPAND, 1, 1)
+         # Radio buttons
+-        self.stype_disktree_radio_button = gtk.RadioButton(None,'Disktree')
+-        self.stype_disktree_radio_button.set_tooltip_text('Disktree (folder) type Share. Default')
+-        self.stype_disktree_radio_button.set_active(self.stype == srvsvc.STYPE_DISKTREE)
++        self.stype_disktree_radio_button = gtk.RadioButton(None,
++                'Disktree')
++        self.stype_disktree_radio_button.set_tooltip_text(
++                            'Disktree (folder) type Share. Default')
++        self.stype_disktree_radio_button.set_active(self.stype
++                 == srvsvc.STYPE_DISKTREE)
+         vbox.pack_start(self.stype_disktree_radio_button)
+-        self.stype_printq_radio_button = gtk.RadioButton(self.stype_disktree_radio_button,'Print Queue')
+-        self.stype_printq_radio_button.set_tooltip_text('Shared Print Queue')
+-        self.stype_printq_radio_button.set_active(self.stype == srvsvc.STYPE_PRINTQ)
+-        #vbox.pack_start(self.stype_printq_radio_button)
+-        #deactivating this option until samba4 is fixed TODO activate once base is fixed
+-
+-        self.stype_ipc_radio_button = gtk.RadioButton(self.stype_printq_radio_button,'IPC ')
+-        self.stype_ipc_radio_button.set_tooltip_text('Shared Interprocess Communication Pipe (IPC).')
+-        self.stype_ipc_radio_button.set_active(self.stype == srvsvc.STYPE_IPC)
+-        #vbox.pack_start(self.stype_ipc_radio_button)
++        self.stype_printq_radio_button = \
++            gtk.RadioButton(self.stype_disktree_radio_button,
++                            'Print Queue')
++        self.stype_printq_radio_button.set_tooltip_text(
++                                                'Shared Print Queue')
++        self.stype_printq_radio_button.set_active(self.stype
++                 == srvsvc.STYPE_PRINTQ)
++        # vbox.pack_start(self.stype_printq_radio_button)
++        # deactivating this option until samba4 is fixed TODO activate once base is fixed
++
++        self.stype_ipc_radio_button = \
++            gtk.RadioButton(self.stype_printq_radio_button, 'IPC ')
++        self.stype_ipc_radio_button.set_tooltip_text(
++                        'Shared Interprocess Communication Pipe (IPC).')
++        self.stype_ipc_radio_button.set_active(self.stype
++                 == srvsvc.STYPE_IPC)
++              #vbox.pack_start(self.stype_ipc_radio_button)
+         #deactivating this option until samba4 is fixed TODO activate once base is fixed
+-
++        
+         # Special Share Flags
+         vbox = gtk.VBox()
+         vbox.set_border_width(5)
+-        table.attach(vbox,1,2,0,1,gtk.FILL | gtk.EXPAND, gtk.FILL | gtk.EXPAND, 1, 1)
++        table.attach(vbox, 1, 2, 0, 1, gtk.FILL | gtk.EXPAND,
++                                    gtk.FILL | gtk.EXPAND, 1, 1)
+         # Check buttons
+         self.sflag_temp_check_button = gtk.CheckButton('Temporary')
+-        self.sflag_temp_check_button.set_tooltip_text('Make share Temporary')
++        self.sflag_temp_check_button.set_tooltip_text(
++                                            'Make share Temporary')
+         self.sflag_temp_check_button.set_active(self.flags[0])
+         vbox.pack_start(self.sflag_temp_check_button)
+         self.sflag_hidden_check_button = gtk.CheckButton('Hidden ')
+-        self.sflag_hidden_check_button.set_tooltip_text('Make share hidden.')
++        self.sflag_hidden_check_button.set_tooltip_text(
++                                                'Make share hidden.')
+         self.sflag_hidden_check_button.set_active(self.flags[1])
+         vbox.pack_start(self.sflag_hidden_check_button)
+         # Path frame
+-
+         frame = gtk.Frame()
+         label = gtk.Label('<b>Path</b>')
+         label.set_use_markup(True)
+@@ -535,31 +555,37 @@ class ShareAddEditDialog(gtk.Dialog):
+         self.form_box.pack_start(frame, True, True, 0)
+         frame.set_border_width(5)
+-        table = gtk.Table(1,2)
++        table = gtk.Table(1, 2)
+         table.set_col_spacings(6)
+         frame.add(table)
+-        label = gtk.Label("Share path : ")
++        label = gtk.Label('Share path : ')
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
++        table.attach(label, 0, 1, 0, 1, gtk.FILL,
++                                    gtk.FILL | gtk.EXPAND, 0, 0)
++                                    
+         # FIXME may need another parameter to select type of selctor in combination with local
+         # eg selecting a ipc / printer may be easier with a path
+-        if self.islocal :
++        if self.islocal:
+             self.file_button = gtk.FileChooserButton('Browse')
+             self.file_button.set_current_folder(self.path)
+             self.file_button.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
+-            self.file_button.set_tooltip_text('Select the folder to share')
+-            table.attach(self.file_button, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            self.file_button.set_tooltip_text(
++                                        'Select the folder to share')
++            table.attach(self.file_button, 1, 2, 0, 1, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
++
+         else:
+             self.file_entry = gtk.Entry()
+             self.file_entry.set_text(self.path)
+-            self.file_entry.set_tooltip_text('Path to the folder to share')
+-            table.attach(self.file_entry, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            self.file_entry.set_tooltip_text('Path to the folder to share'
++                    )
++            table.attach(self.file_entry, 1, 2, 0, 1, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
+         # max users frame
+-
++        
+         frame = gtk.Frame()
+         label = gtk.Label('<b>Max Users</b>')
+         label.set_use_markup(True)
+@@ -567,104 +593,111 @@ class ShareAddEditDialog(gtk.Dialog):
+         self.form_box.pack_start(frame, True, True, 0)
+         frame.set_border_width(5)
+-        table = gtk.Table(1,2)
++        table = gtk.Table(1, 2)
+         table.set_col_spacings(6)
+         frame.add(table)
+-        label = gtk.Label(" Max Users : ")
++        label = gtk.Label(' Max Users : ')
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 0, 1, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
+         # adjustment for max users spinbox
+-        self.max_users_adjustment = gtk.Adjustment(self.max_users,1,0xFFFFFFFF,1,5)
++        self.max_users_adjustment = gtk.Adjustment(self.max_users, 1,
++                0xFFFFFFFF, 1, 5)
+-        self.max_users_spinbox = gtk.SpinButton(self.max_users_adjustment)
++        self.max_users_spinbox = \
++            gtk.SpinButton(self.max_users_adjustment)
+         self.max_users_spinbox.set_numeric(True)
+-        self.max_users_spinbox.set_tooltip_text('Max Users for the Share')
+-        table.attach(self.max_users_spinbox, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        self.max_users_spinbox.set_tooltip_text('Max Users for the Share'
++                )
++        table.attach(self.max_users_spinbox, 1, 2, 0, 1,
++                        gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+         # action area
+-
++        
+         self.action_area.set_layout(gtk.BUTTONBOX_END)
+-        self.cancel_button = gtk.Button("Cancel", gtk.STOCK_CANCEL)
++        self.cancel_button = gtk.Button('Cancel', gtk.STOCK_CANCEL)
+         self.cancel_button.set_flags(gtk.CAN_DEFAULT)
+         self.add_action_widget(self.cancel_button, gtk.RESPONSE_CANCEL)
+-        self.apply_button = gtk.Button("Apply", gtk.STOCK_APPLY)
++        self.apply_button = gtk.Button('Apply', gtk.STOCK_APPLY)
+         self.apply_button.set_flags(gtk.CAN_DEFAULT)
+         self.apply_button.set_sensitive(self.edit_mode)
+         self.add_action_widget(self.apply_button, gtk.RESPONSE_APPLY)
+-        self.ok_button = gtk.Button("OK", gtk.STOCK_OK)
++        self.ok_button = gtk.Button('OK', gtk.STOCK_OK)
+         self.ok_button.set_flags(gtk.CAN_DEFAULT)
+         self.add_action_widget(self.ok_button, gtk.RESPONSE_OK)
+         self.set_default_response(gtk.RESPONSE_OK)
+-
+-
+ class DeleteDialog(gtk.Dialog):
++
+     """ The delete dialog """
+     def __init__(self, pipe_manager, share=None):
+         """ Class initialiser """
++
+         super(DeleteDialog, self).__init__()
+         self.pipe = pipe_manager
+         self.set_modal(True)
+-
+-        if share is None :
+-            raise KeyError("Non existant Share cannot be deleted")
++        if share is None:
++            raise KeyError('Non existant Share cannot be deleted')
+         self.share = share
+         # resolving some types that are required for gtk dialog creation
+-        self.stype = self.pipe.get_share_type_info(self.share.type,'base_type')
+-        self.flags = self.pipe.get_share_type_info(self.share.type,'flags')
+-        self.generic_typestring = self.pipe.get_share_type_info(self.share.type,'typestring')
+-        self.desc = self.pipe.get_share_type_info(self.share.type,'desc')
++        
++        self.stype = self.pipe.get_share_type_info(self.share.type,
++                'base_type')
++        self.flags = self.pipe.get_share_type_info(self.share.type,
++                'flags')
++        self.generic_typestring = \
++            self.pipe.get_share_type_info(self.share.type, 'typestring')
++        self.desc = self.pipe.get_share_type_info(self.share.type,
++                'desc')
+         self.create()
+         self.set_position(gtk.WIN_POS_CENTER)
+-
+-
+-    def  create(self):
++    def create(self):
+         """ Create the window """
+-        self.set_title(' '.join([" Delete Share",self.share.name]))
+-        self.icon_name = ["network-folder","network-printer",
+-                            "network","network-pipe"][self.stype]
+-        self.icon_filename = \
+-        os.path.join(sys.path[0],"images",''.join([self.icon_name,'.png']))
++
++        self.set_title(' '.join([' Delete Share', self.share.name]))
++        self.icon_name = ['network-folder', 'network-printer', 'network'
++                          , 'network-pipe'][self.stype]
++        self.icon_filename = os.path.join(sys.path[0], 'images',
++                ''.join([self.icon_name, '.png']))
+         self.set_icon_from_file(self.icon_filename)
+         self.vbox.set_spacing(3)
+         self.set_border_width(5)
+         self.set_decorated(True)
+         self.set_resizable(False)
+-
+         #artwork
+-        self.desc_box= gtk.HBox()
+-        self.vbox.pack_start(self.desc_box,False,True,0)
++        self.desc_box = gtk.HBox()
++        self.vbox.pack_start(self.desc_box, False, True, 0)
+         hbox = gtk.HBox()
+-        icon =  gtk.Image()
++        icon = gtk.Image()
+         icon.set_from_file(self.icon_filename)
+         hbox.pack_start(icon, False, True, 0)
+-        self.desc_box.pack_start(hbox,False, True, 0)
++        self.desc_box.pack_start(hbox, False, True, 0)
+         hbox = gtk.HBox()
+         label = gtk.Label()
+-        label.set_text("You are deleting the share with the following properties")
++        label.set_text(
++            'You are deleting the share with the following properties')
+         label.set_alignment(0, 0.5)
+         hbox.pack_start(label, True, True, 0)
+-        self.desc_box.pack_start(hbox,True, True, 0)
+-
+-        # the main form
++        self.desc_box.pack_start(hbox, True, True, 0)
++        # main form box
+         self.form_box = gtk.VBox()
+         self.vbox.pack_start(self.form_box, True, True, 0)
+@@ -675,7 +708,7 @@ class DeleteDialog(gtk.Dialog):
+         self.form_box.pack_start(frame, True, True, 0)
+         frame.set_border_width(5)
+-        table = gtk.Table(11,2)
++        table = gtk.Table(11, 2)
+         table.set_border_width(5)
+         table.set_row_spacings(2)
+         table.set_col_spacings(6)
+@@ -684,117 +717,137 @@ class DeleteDialog(gtk.Dialog):
+         label = gtk.Label(' Share Name  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 0, 1, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(self.share.name)
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 2, 0, 1, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Comment  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 1, 2, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(self.share.comment)
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 1, 2, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 2, 1, 2, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Path  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 2, 3, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(self.share.path)
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 1, 2, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 2, 2, 3, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Password  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 3, 4, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 3, 4, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         if self.share.password:
+-            label = gtk.Label("Share Password Enabled")
++            label = gtk.Label('Share Password Enabled')
+         else:
+-            label = gtk.Label("Share Password Disabled")
++            label = gtk.Label('Share Password Disabled')
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 1, 2, 3, 4, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 2, 3, 4, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label('<b> Share Type</b>')
+         label.set_use_markup(True)
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 0, 1, 4, 5, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 4, 5, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Generic Typestring  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 5, 6, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 5, 6, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(self.generic_typestring)
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 1, 2, 5, 6, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 2, 5, 6, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+-        label = gtk.Label(' Type Description  : ') #spaces for Gui align do not change
++        label = gtk.Label(' Type Description  : ')  # spaces for Gui align do not change
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 6, 7, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 6, 7, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(self.desc)
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 1, 2, 6, 7, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 2, 6, 7, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
++
+         label = gtk.Label()
+         label.set_markup('<b> Special Flags </b>')
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 0, 1, 7, 8, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 7, 8, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Temporary  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 8, 9, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 8, 9, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(str(self.flags[0]))
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 1, 2, 8, 9, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 8, 9, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+-        label = gtk.Label(' Hidden  : ') #spaces for Gui align do not change
++        label = gtk.Label(' Hidden  : ')  # spaces for Gui align do not change
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 9, 10, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 9, 10, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(str(self.flags[1]))
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 1, 2, 9, 10, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 2, 9, 10, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Max Users  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 10, 11, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 10, 11, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(self.share.max_users)
+         label.set_alignment(0, 0.5)
+-        table.attach(label, 1, 2, 10, 11, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 2, 10, 11, gtk.FILL,
++            gtk.FILL | gtk.EXPAND, 0, 0)
+-        box =  gtk.VBox(3)
+-        label = gtk.Label("Are yous sure you want to delete the share ?")
+-        label.set_alignment(0.5,0.5)
+-        box.pack_start(label,True,True,0)
+-        warning ="(Please Note this is an irreversable action)"
++        box = gtk.VBox(3)
++        label = gtk.Label('Are yous sure you want to delete the share ?'
++                          )
++        label.set_alignment(0.5, 0.5)
++        box.pack_start(label, True, True, 0)
++        warning = '(Please Note this is an irreversable action)'
+         label = gtk.Label('<span foreground="red">%s</span>' % warning)
+         label.set_use_markup(True)
+-        label.set_alignment(0.5,0.5)
+-        box.pack_start(label,True,True,0)
++        label.set_alignment(0.5, 0.5)
++        box.pack_start(label, True, True, 0)
+         box.set_border_width(5)
+-        self.vbox.pack_start(box,True,True,0)
+-
+-
++        self.vbox.pack_start(box, True, True, 0)
+         # action area
+-
+         self.action_area.set_layout(gtk.BUTTONBOX_END)
+-        self.cancel_button = gtk.Button("Cancel", gtk.STOCK_CANCEL)
++        self.cancel_button = gtk.Button('Cancel', gtk.STOCK_CANCEL)
+         self.cancel_button.set_flags(gtk.CAN_DEFAULT)
+         self.add_action_widget(self.cancel_button, gtk.RESPONSE_CANCEL)
+-        self.ok_button = gtk.Button("Delete", gtk.STOCK_OK)
++        self.ok_button = gtk.Button('Delete', gtk.STOCK_OK)
+         self.add_action_widget(self.ok_button, gtk.RESPONSE_OK)
+         self.set_default_response(gtk.RESPONSE_OK)
++
+ class ShareWizardDialog(ShareAddEditDialog):
+     def create(self):
+@@ -802,12 +855,12 @@ class ShareWizardDialog(ShareAddEditDialog):
+         self.page = 0
+         self.set_default_size(400, 275)
+-        self.main_box  = gtk.VBox()
+-        self.vbox.pack_start(self.main_box,True,True,0)
++        self.main_box = gtk.VBox()
++        self.vbox.pack_start(self.main_box, True, True, 0)
+         vbox = gtk.VBox()
+         vbox.set_border_width(5)
+-        samba_image_filename = os.path.join(sys.path[0],'images',
++        samba_image_filename = os.path.join(sys.path[0], 'images',
+                 'samba-logo-small.png')
+         samba_image = gtk.Image()
+         samba_image.set_from_file(samba_image_filename)
+@@ -815,7 +868,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+         self.main_box.pack_start(vbox, False, True, 0)
+         vbox = gtk.VBox()
+-        self.main_box.pack_start(vbox,True,True,0)
++        self.main_box.pack_start(vbox, True, True, 0)
+         frame = gtk.Frame()
+         frame.set_border_width(10)
+@@ -826,19 +879,18 @@ class ShareWizardDialog(ShareAddEditDialog):
+         frame.add(self.data_box)
+         self.title_label = gtk.Label()
+-        self.title_label.set_alignment(0.05,0.5)
+-        self.data_box.pack_start(self.title_label,False,True,1)
++        self.title_label.set_alignment(0.05, 0.5)
++        self.data_box.pack_start(self.title_label, False, True, 1)
+         self.info_label = gtk.Label()
+-        self.info_label.set_alignment(.15,0.5)
+-        self.data_box.pack_start(self.info_label,False,True,0)
++        self.info_label.set_alignment(.15, 0.5)
++        self.data_box.pack_start(self.info_label, False, True, 0)
+         self.fields_box = gtk.VBox()
+-        self.data_box.pack_start(self.fields_box,True,True,3)
+-
++        self.data_box.pack_start(self.fields_box, True, True, 3)
+         # create all entities do not attach them so as to that they are refrenced
+-        #name
++        # name
+         self.share_name_entry = gtk.Entry()
+         self.share_name_entry.set_tooltip_text('Enter the Share Name')
+         self.share_name_entry.set_text(self.sname)
+@@ -849,93 +901,98 @@ class ShareWizardDialog(ShareAddEditDialog):
+         else:
+             self.share_name_entry.set_max_length(80)
+-        #comment
++        # comment
+         self.share_comment_entry = gtk.Entry()
+-        self.share_comment_entry.set_max_length(48) # max allowed is 48 MS-SRVS
++        self.share_comment_entry.set_max_length(48)  # max allowed is 48 MS-SRVS
+         self.share_comment_entry.set_activates_default(True)
+         self.share_comment_entry.set_text(self.comment)
+-        self.share_comment_entry.set_tooltip_text('Add a Comment or Description of the Share, Will default to share_type description')
++        self.share_comment_entry.set_tooltip_text(
++                        'Add a Comment or Description of the Share. \
++                                Will default to share_type description')
+-        #password
++        # password
+         self.share_password_entry = gtk.Entry()
+         self.share_password_entry.set_activates_default(True)
+         self.share_password_entry.set_text(self.password)
+-        self.share_password_entry.set_visibility(False)
+-        self.share_password_entry.set_tooltip_text('Set a Share Password')
++        self.share_password_entry.set_tooltip_text(
++                                                'Set a Share Password')
+         # For radio buttons we define other fields on the fly as these
+         # are lost on parent removal , and cause errors on draw .
+         # Radio buttons
+-        self.stype_disktree_radio_button = gtk.RadioButton(None,'Disktree')
+-        self.stype_printq_radio_button = gtk.RadioButton(self.stype_disktree_radio_button,'Print Queue')
+-        self.stype_ipc_radio_button = gtk.RadioButton(self.stype_printq_radio_button,'IPC ')
++        self.stype_disktree_radio_button = gtk.RadioButton(None,
++                'Disktree')
++        self.stype_printq_radio_button = \
++            gtk.RadioButton(self.stype_disktree_radio_button,
++                            'Print Queue')
++        self.stype_ipc_radio_button = \
++            gtk.RadioButton(self.stype_printq_radio_button, 'IPC ')
+         self.sflag_temp_check_button = gtk.CheckButton('Temporary')
+         self.sflag_hidden_check_button = gtk.CheckButton('Hidden ')
+-        #path
++        # path
+         if self.islocal:
+             self.file_button = gtk.FileChooserButton('Browse')
+         else:
+             self.file_entry = gtk.Entry()
+-        #max_users
+-        self.max_users_adjustment = gtk.Adjustment(self.max_users,1,0xFFFFFFFF,1,5)
++        # max_users
++        self.max_users_adjustment = gtk.Adjustment(self.max_users, 1,
++                0xFFFFFFFF, 1, 5)
+-        self.max_users_spinbox = gtk.SpinButton(self.max_users_adjustment)
++        self.max_users_spinbox = \
++            gtk.SpinButton(self.max_users_adjustment)
+         self.max_users_spinbox.set_numeric(True)
+-        self.max_users_spinbox.set_tooltip_text('Max Users for the Share')
+-
++        self.max_users_spinbox.set_tooltip_text(
++                                            'Max Users for the Share')
+         self.action_area.set_layout(gtk.BUTTONBOX_CENTER)
+-
+-        self.cancel_button = gtk.Button("Cancel", gtk.STOCK_CANCEL)
++        self.cancel_button = gtk.Button('Cancel', gtk.STOCK_CANCEL)
+         self.cancel_button.set_flags(gtk.CAN_DEFAULT)
+         self.add_action_widget(self.cancel_button, gtk.RESPONSE_CANCEL)
+         self.prev_button = gtk.Button(stock=gtk.STOCK_GO_BACK)
+-        self.prev_button.connect("clicked",self.update_fields,-1)
++        self.prev_button.connect('clicked', self.update_fields, -1)
+         self.action_area.pack_start(self.prev_button, False, False, 10)
+         self.next_button = gtk.Button(stock=gtk.STOCK_GO_FORWARD)
+-        self.next_button.connect("clicked", self.update_fields,+1)
++        self.next_button.connect('clicked', self.update_fields, +1)
+         self.action_area.pack_start(self.next_button, False, False, 0)
+-        self.ok_button = gtk.Button("OK", gtk.STOCK_OK)
++        self.ok_button = gtk.Button('OK', gtk.STOCK_OK)
+         self.ok_button.set_flags(gtk.CAN_DEFAULT)
+         self.add_action_widget(self.ok_button, gtk.RESPONSE_OK)
+         self.set_default_response(gtk.RESPONSE_OK)
+-        self.update_fields(None,0)
++        self.update_fields(None, 0)
+-
+-    def update_fields(self,widget,change):
++    def update_fields(self, widget, change):
+         self.collect_fields()
+-        self.page+=change
++        self.page += change
+         for widget in self.fields_box.get_children():
+             self.fields_box.remove(widget)
+-        if self.page == 0 :
+-            self.title_label.set_markup('<b>Welcome to the New Share Wizard</b>')
++        if self.page == 0:
++            self.title_label.set_markup(
++                            '<b>Welcome to the New Share Wizard</b>')
+             self.info_label.set_text(' ')
+-            label =gtk.Label('Please press next to continue.')
+-            label.set_alignment(0,0.5)
+-            self.fields_box.pack_start(label,False,True,0)
++            label = gtk.Label('Please press next to continue.')
++            label.set_alignment(0, 0.5)
++            self.fields_box.pack_start(label, False, True, 0)
+             self.fields_box.show_all()
+             self.prev_button.set_sensitive(False)
+             self.next_button.set_sensitive(True)
+             self.ok_button.set_sensitive(False)
+-
+-
+             self.fields_box.show_all()
+-
+-
+         elif self.page == 1:
++
+             self.title_label.set_markup('<b>Name and Password</b>')
+-            self.info_label.set_text('Please enter a valid name and password (optional) for your share.')
++            self.info_label.set_text('Please enter a valid name and password (optional) for your share.'
++                    )
+             self.prev_button.set_sensitive(True)
+             self.next_button.set_sensitive(True)
+             self.ok_button.set_sensitive(False)
+@@ -944,30 +1001,34 @@ class ShareWizardDialog(ShareAddEditDialog):
+             if self.password is not None:
+                 self.share_comment_entry.set_text(self.password)
+-            table = gtk.Table(2,2,True)
++            table = gtk.Table(2, 2, True)
+             table.set_border_width(5)
+             table.set_row_spacings(2)
+             table.set_col_spacings(6)
+-            label = gtk.Label("* Share Name : ")
+-            label.set_alignment(1,0.5)
++            label = gtk.Label('* Share Name : ')
++            label.set_alignment(1, 0.5)
+-            table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            table.attach(self.share_name_entry, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(label, 0, 1, 0, 1, gtk.FILL,
++                                    gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(self.share_name_entry, 1, 2, 0, 1,
++                        gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+-            label = gtk.Label("  Share Password : ")
+-            label.set_alignment(1,0.5)
+-            table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            table.attach(self.share_password_entry, 1, 2, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            label = gtk.Label('  Share Password : ')
++            label.set_alignment(1, 0.5)
++            table.attach(label, 0, 1, 1, 2, gtk.FILL,
++                                    gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(self.share_password_entry, 1, 2, 1, 2,
++                        gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+-            self.fields_box.pack_start(table,False,True,0)
++            self.fields_box.pack_start(table, False, True, 0)
+             self.fields_box.show_all()
+-
+-
+         elif self.page == 2:
++
+             self.title_label.set_markup('<b>Comment and Max Users </b>')
+-            self.info_label.set_text('Please enter a  comment(optional) and select max users')
++            self.info_label.set_text(
++               'Please enter a  comment(optional) and select max users')
+             self.prev_button.set_sensitive(True)
+             self.next_button.set_sensitive(True)
+             self.ok_button.set_sensitive(False)
+@@ -975,80 +1036,93 @@ class ShareWizardDialog(ShareAddEditDialog):
+                 self.share_comment_entry.set_text(self.comment)
+             self.max_users_spinbox.set_value(self.max_users)
+-
+-            table = gtk.Table(2,2,True)
++            table = gtk.Table(2, 2, True)
+             table.set_border_width(5)
+             table.set_row_spacings(2)
+             table.set_col_spacings(6)
+-            label = gtk.Label("  Share Comment :")
+-            label.set_alignment(1,0.5)
+-            table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            table.attach(self.share_comment_entry, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
+-            label = gtk.Label("  Max Users : ")
+-            label.set_alignment(1,0.5)
+-            table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            table.attach(self.max_users_spinbox, 1, 2, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
+-            self.fields_box.pack_start(table,False,True,0)
++            label = gtk.Label('  Share Comment :')
++            label.set_alignment(1, 0.5)
++            table.attach(label, 0, 1, 0, 1, gtk.FILL,
++                                gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(self.share_comment_entry, 1, 2, 0, 1,
++                        gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
++            label = gtk.Label('  Max Users : ')
++            label.set_alignment(1, 0.5)
++            table.attach(label, 0, 1, 1, 2, gtk.FILL,
++                                    gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(self.max_users_spinbox, 1, 2, 1, 2,
++                        gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
++            self.fields_box.pack_start(table, False, True, 0)
+             self.fields_box.show_all()
+-
+         elif self.page == 3:
++
+             self.title_label.set_markup('<b>Share Type Options</b>')
+-            self.info_label.set_text('Please select your share type options.')
++            self.info_label.set_text('Please select your share type options.'
++                    )
+             self.prev_button.set_sensitive(True)
+             self.next_button.set_sensitive(True)
+             self.ok_button.set_sensitive(False)
+-            # Radio buttons
+-            self.stype_disktree_radio_button = gtk.RadioButton(None,'Disktree')
+-            self.stype_disktree_radio_button.set_tooltip_text('Disktree (folder) type Share. Default')
+-            self.stype_disktree_radio_button.set_active(self.stype == srvsvc.STYPE_DISKTREE)
+-
+-            self.stype_printq_radio_button = gtk.RadioButton(self.stype_disktree_radio_button,'Print Queue')
+-            self.stype_printq_radio_button.set_tooltip_text('Shared Print Queue')
+-            self.stype_printq_radio_button.set_active(self.stype == srvsvc.STYPE_PRINTQ)
+-
+-            self.stype_ipc_radio_button = gtk.RadioButton(self.stype_printq_radio_button,'IPC ')
+-            self.stype_ipc_radio_button.set_tooltip_text('Shared Interprocess Communication Pipe (IPC).')
+-            self.stype_ipc_radio_button.set_active(self.stype == srvsvc.STYPE_IPC)
++            self.stype_disktree_radio_button = gtk.RadioButton(None,
++                    'Disktree')
++            self.stype_disktree_radio_button.set_tooltip_text('Disktree (folder) type Share. Default'
++                    )
++            self.stype_disktree_radio_button.set_active(self.stype
++                     == srvsvc.STYPE_DISKTREE)
++
++            self.stype_printq_radio_button = \
++                gtk.RadioButton(self.stype_disktree_radio_button,
++                                'Print Queue')
++            self.stype_printq_radio_button.set_tooltip_text('Shared Print Queue'
++                    )
++            self.stype_printq_radio_button.set_active(self.stype
++                     == srvsvc.STYPE_PRINTQ)
++
++            self.stype_ipc_radio_button = \
++                gtk.RadioButton(self.stype_printq_radio_button, 'IPC ')
++            self.stype_ipc_radio_button.set_tooltip_text(
++                        'Shared Interprocess Communication Pipe (IPC).')
++            self.stype_ipc_radio_button.set_active(self.stype
++                     == srvsvc.STYPE_IPC)
+-            # Check buttons
+             self.sflag_temp_check_button = gtk.CheckButton('Temporary')
+-            self.sflag_temp_check_button.set_tooltip_text('Make share Temporary')
++            self.sflag_temp_check_button.set_tooltip_text(
++                                                'Make share Temporary')
+             self.sflag_temp_check_button.set_active(self.flags[0])
+             self.sflag_hidden_check_button = gtk.CheckButton('Hidden ')
+-            self.sflag_hidden_check_button.set_tooltip_text('Make share hidden.')
++            self.sflag_hidden_check_button.set_tooltip_text(
++                                                'Make share hidden.')
+             self.sflag_hidden_check_button.set_active(self.flags[1])
+-            hbox = gtk.HBox(True,10)
++            hbox = gtk.HBox(True, 10)
+             vbox = gtk.VBox()
+             vbox.set_border_width(5)
+-            vbox.pack_start(self.stype_disktree_radio_button,True,True,3)
+-            vbox.pack_start(self.stype_printq_radio_button,True,True,3)
+-            vbox.pack_start(self.stype_ipc_radio_button,True,True,3)
+-            hbox.pack_start(vbox,True,True,0)
++            vbox.pack_start(self.stype_disktree_radio_button, True,
++                            True, 3)
++            vbox.pack_start(self.stype_printq_radio_button, True, True,
++                            3)
++            vbox.pack_start(self.stype_ipc_radio_button, True, True, 3)
++            hbox.pack_start(vbox, True, True, 0)
+             vbox = gtk.VBox()
+             vbox.set_border_width(5)
+-            vbox.pack_start(self.sflag_temp_check_button,True,True,3)
+-            vbox.pack_start(self.sflag_hidden_check_button,True,True,3)
++            vbox.pack_start(self.sflag_temp_check_button, True, True, 3)
++            vbox.pack_start(self.sflag_hidden_check_button, True, True,
++                            3)
+-            hbox.pack_start(vbox,True,True,0)
++            hbox.pack_start(vbox, True, True, 0)
+-
+-
+-            self.fields_box.pack_start(hbox,True,True,0)
++            self.fields_box.pack_start(hbox, True, True, 0)
+             self.fields_box.show_all()
++        else:
+-
+-
+-        else :
+             self.title_label.set_markup('<b>Path</b>')
+             if self.islocal:
+                 self.info_label.set_text('Please select a valid path.')
+@@ -1058,71 +1132,74 @@ class ShareWizardDialog(ShareAddEditDialog):
+             self.next_button.set_sensitive(False)
+             self.ok_button.set_sensitive(True)
+-            #path
+             if self.islocal:
+                 self.file_button = gtk.FileChooserButton('Browse')
+                 if self.path is not None:
+                     self.file_button.set_current_folder(self.path)
+                 else:
+-                    self.file_button.set_current_folder(".")
+-                self.file_button.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
+-                self.file_button.set_tooltip_text('Select the folder to share')
++                    self.file_button.set_current_folder('.')
++                self.file_button.set_action(
++                                 gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
++                self.file_button.set_tooltip_text(
++                                         'Select the folder to share')
+             else:
+                 self.file_entry = gtk.Entry()
+                 if self.path is not None:
+                     self.file_entry.set_text(self.path)
+                 else:
+-                    self.file_entry.set_text("")
+-                self.file_entry.set_tooltip_text('Path to the folder to share')
++                    self.file_entry.set_text('')
++                self.file_entry.set_tooltip_text(
++                                        'Path to the folder to share')
+-            table = gtk.Table(1,2,True)
++            table = gtk.Table(1, 2, True)
+             table.set_border_width(5)
+             table.set_row_spacings(2)
+             table.set_col_spacings(6)
+-
+             label = gtk.Label('  Path     : ')
+-            label.set_alignment(1,0.5)
+-            table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            if self.islocal :
+-                table.attach(self.file_button, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            label.set_alignment(1, 0.5)
++            table.attach(label, 0, 1, 0, 1, gtk.FILL,
++                                gtk.FILL | gtk.EXPAND, 0, 0)
++            if self.islocal:
++                table.attach(self.file_button, 1, 2, 0, 1, gtk.FILL,
++                                gtk.FILL | gtk.EXPAND, 0, 0)
+             else:
+-                table.attach(self.file_entry, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++                table.attach(self.file_entry, 1, 2, 0, 1, gtk.FILL,
++                                gtk.FILL | gtk.EXPAND, 0, 0)
+-            self.fields_box.pack_start(table,False,True,0)
++            self.fields_box.pack_start(table, False, True, 0)
+             self.fields_box.show_all()
+-    def collect_fields (self):
++    def collect_fields(self):
+         """ Custom collect fields from the GUI and saves in class variables which is page specific. """
++
+         if self.page == 0:
+             pass
++        elif self.page == 1:
+-        elif self.page == 1 :
+             self.sname = self.share_name_entry.get_text()
+             self.password = self.share_password_entry.get_text()
+-
+-
+         elif self.page == 2:
++
+             self.comment = self.share_comment_entry.get_text()
+             self.max_users = self.max_users_spinbox.get_value_as_int()
++        elif self.page == 3:
+-        elif self.page ==3 :
+-            # Now to handle the share type resolution
+-            if self.stype_disktree_radio_button.get_active() :
++            if self.stype_disktree_radio_button.get_active():
+                 self.stype = srvsvc.STYPE_DISKTREE
+-            elif self.stype_printq_radio_button.get_active() :
++            elif self.stype_printq_radio_button.get_active():
+                 self.stype = srvsvc.STYPE_PRINTQ
+             else:
+                 self.stype = srvsvc.STYPE_IPC
+-            # check flags
+-            self.flags = [False,False]
++
++            self.flags = [False, False]
+             if self.sflag_temp_check_button.get_active():
+                 self.flags[0] = True
+             if self.sflag_hidden_check_button.get_active():
+                 self.flags[1] = True
++        else:
+-        else :
+-            if self.islocal :
++            if self.islocal:
+                 self.path = self.file_button.get_filename()
+             else:
+                 self.path = self.path_entry.get_text()
+
+commit c0cfd5beb6c3290b8da6d441281c29527d2293fe
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Tue Aug 16 18:15:12 2011 +0000
+
+    fixes
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 78d0852..9368bfa 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -23,6 +23,7 @@
+ #       MA 02110-1301, USA.
+ #
+ #
++__docformat__ = 'restructuredtext'
+ import sys
+ import os.path
+@@ -45,13 +46,8 @@ from pysrvsvc import DeleteDialog, ShareAddEditDialog, \
+ class srvsvcPipeManager(object):
+-    def __init__(
+-        self,
+-        server_address,
+-        transport_type,
+-        username,
+-        password,
+-        ):
++    def __init__(self, server_address, transport_type, username,
++                    password):
+         """ Initialize the pipe object handling the srvsvc calls """
+         creds = credentials.Credentials()
+@@ -123,16 +119,19 @@ class srvsvcPipeManager(object):
+     @staticmethod
+     def get_share_type_info(stype, field):
+-        """ Return the desired info about a share type
+-        Retrievable types :
+-        'typestring' -> The generic name of the share type
+-        'desc' -> Description of the type
+-        'base_type' -> Base share type
+-        'flags' -> special flags (Boolean temporary, Boolean hidden)
+- ..........
+-  Usage :
+-  S.get_share_type_info(stype, field) -> desired information
+-  """
++        """
++        Return the desired info about a share type
++        S.get_share_type_info(stype,field) -> desired information
++
++        Parameters:
++        'field' : can be one of the below :
++        -`typestring`: The generic name of the share type
++        -`desc`: Description of the type
++        -`base_type`: Base share type
++        -`flags`: special flags (Boolean temporary,Boolean hidden)
++
++
++        """
+         base_dict = {
+             srvsvc.STYPE_DISKTREE: {'typestring': 'STYPE_DISKTREE',
+@@ -192,15 +191,15 @@ class srvsvcPipeManager(object):
+         return stype_info_dict.get(field)
+     def fix_path_format(self, path=''):
+-        """ Fixes and checks the given path and convets it to the required format
+-
+-  Convert the unix path to relavant Info Struct path for samba share object
+-  It also checks for validity of path if it is local.
+-  To be used for distktree (Files not IPC etc) type shares.
+-  Usage :
+-  S.fix_path_format(path= "") -> path
++        """
++        Fixes and checks the given path to make it in tthe correct format
+-  """
++        Convert the unix path to relavant Info Struct path for samba
++        share object.It also checks for validity of path if it is local.
++        To be used for distktree (Files not IPC etc) type shares.
++        `Usage` :
++        S.fix_path_format(path= "") -> path
++        """
+         if self.islocal:
+             if path.startswith('C:'):
+@@ -219,8 +218,7 @@ class srvsvcPipeManager(object):
+     # NOT supported yet
+     def get_connections(self, level=1, max_buffer=-1):
+-        """ DO NOT USE : UNSUPPORTED BY SAMBA-4 YET
+-  """
++        """ DO NOT USE : UNSUPPORTED BY SAMBA-4 YET """
+         self.conn_list = []
+         info_ctr = srvsvc.NetConnInfoCtr()
+@@ -237,10 +235,9 @@ class srvsvcPipeManager(object):
+     def modify_share(self, share=None):
+         """ Modifies share 502 object.
+-  Usage:
+-  S.modify_share(self,share)-> parm_error
+-
+-  """
++        Usage:
++        S.modify_share(self,share)-> parm_error
++        """
+         if share is None:
+             raise KeyError('Non existant Share cannot be modified')
+@@ -252,11 +249,14 @@ class srvsvcPipeManager(object):
+         return parm_error
+     def get_shares_list(self):
+-        """ Updates the share list of the pipe object .
+-  If show_all_shares is set to flase Hidden shares are set to
+-  false and not returned It first tries to list all shares if
+-  that fails it falls back to list standard shares and sets the
+-  show_all_shares boolean accordingly"""
++        """
++        Updates the share list of the pipe object .
++
++        If show_all_shares is set to flase Hidden shares are set to
++        false and not returned .It first tries to list all shares if
++        that fails it falls back to list standard shares and sets the
++        show_all_shares boolean accordingly
++        """
+         if self.show_all_shares is False:
+             self.list_shares()
+@@ -264,19 +264,19 @@ class srvsvcPipeManager(object):
+             try:
+                 self.list_shares_all()
+                 self.show_all_shares = True
+-            except:
++            except RuntimeError:
+                 self.list_shares()
+                 self.show_all_shares = False
+     def list_shares(self):
+-        """ Gets a list of all (not hidden/special)active shares
+-        and update the share and share_name list.
+-
+-  Usage:
+-  Recomended do not USE , use get_shares_list
+-  S.list_shares() -> None
+-  """
+-
++        """
++        Gets a list of all (not hidden/special)active shares and update
++        the share and share_name list.
++
++        `Usage`:
++        Recomended do not USE , use get_shares_list
++        S.list_shares() -> None
++        """
+         self.share_list = []
+         self.share_names_list = []
+         self.share_types_list = []
+@@ -293,11 +293,13 @@ class srvsvcPipeManager(object):
+                 self.share_types_list.append(i.type)
+     def list_shares_all(self):
+-        """ Gets a list of all (including hiden/special)active shares and update the share and share_name list.
++        """
++        Gets a list of all (including hiden/special)active shares and
++        update the share and share_name list.
+-  Usage:
+-  S.list_shares() -> None
+-  """
++        `Usage`:
++        S.list_shares() -> None
++        """
+         self.share_list = []
+         self.share_names_list = []
+@@ -314,14 +316,14 @@ class srvsvcPipeManager(object):
+                 self.share_types_list.append(i.type)
+     def add_share(self, share=None):
+-        """Adds a share with a given name and type
+-  This uses a share info 502 object.
+-  Should be followed by modify_share to complete the addition of the share.
+-
+-  Usage :
+-  S.add_share(self, share=None) -> parm_error
++        """
++        Adds a share with a given name and type
++        This uses a share info 502 object.
++        Should be followed by modify_share to complete the addition of the share.
+-  """
++        `Usage` :
++        S.add_share(self,share=None) -> parm_error
++        """
+         if share is None:
+             raise KeyError('Illegal to add an Empty Share ')
+@@ -333,11 +335,12 @@ class srvsvcPipeManager(object):
+         return parm_error
+     def get_share_info_local(self, name=''):
+-        """ Gets share info for a share with a particular name from local cache lists.
++        """
++        Gets share info for a share with a particular name from local cache lists.
+-  Usage:
+-  S.get_share_info_local(self, name=  "") -> sahre_info (502 type)
+-  """
++        `Usage`:
++        S.get_share_info_local(self,name= "") -> sahre_info (502 type)
++        """
+         name = unicode(name)
+         for i in self.share_names_list:
+@@ -345,55 +348,55 @@ class srvsvcPipeManager(object):
+                 return share_list[i.index()]
+     def get_share_info_rpc(self, name=''):
+-        """ Gets share info for a share with a particular name from the rpc server.
++        """
++        Gets share info for a share with a particular name from the rpc server.
+-  Usage:
+-  S.get_share_info_local(self, name= "") -> sahre_info (502 type)
+-  """
++        `Usage`:
++        S.get_share_info_local(self,name= "") -> sahre_info (502 type)
++        """
+         name = unicode(name)
+         info = self.pipe.NetShareGetInfo(self.server_unc, name, 502)
+         return info
+     def get_server_info(self):
+-        """ Gets type 102 server info .
++        """
++        Gets type 102 server info .
+- Usage:
+- S.get_server_info() -> server_info
+- """
++        `Usage`:
++        S.get_server_info() -> server_info
++        """
+         server_info = self.pipe.NetSrvGetInfo(self.server_unc, 102)
+         return server_info
+     def delete_share(self, name=''):
+-        """ Delete a share with the given name.
++        """
++        Delete a share with the given name.
+-  Usage:
+-  S.delete_share (self,name=  "") -> Boolean indicating success or faliure ,[error object]
+-  """
++        `Usage`:
++        S.delete_share (self,name= "") -> Boolean indicating success or faliure ,[error object]
++        """
+         name = unicode(name)
+         self.pipe.NetShareDel(self.server_unc, name, 0)
+     # NOT supported yet
+     def remove_persistance(self, name=''):
+-        """ Removes persistance of a share .
+-
+-  Usage: UNSUPPORTED YET
+-  ........
+-  """
++        """ Removes persistance of a share """
+         reserved = None
+         name = unicode(name)
+         self.pipe.NetShareDelSticky(self.server_unc, name, reserved)
+     def get_share_type(self, name=''):
+-        """ Returns type of share code
+-  uses local cache for now as the rpc server in samba4 does not support it yet
+-  ........
+-  Usage:
+-  S.update_tod()
+-  """
++        """
++        Returns type of share code
++
++        uses local cache for now as the rpc server in samba4 does not support it yet
++        `Usage`:
++        S.update_tod()
++        """
+         name = unicode(name)
+         for i in self.share_names_list:
+@@ -403,18 +406,14 @@ class srvsvcPipeManager(object):
+                 raise KeyError('Share Does no exist')
+         return stype
+-    def get_file_security(
+-        self,
+-        secdesc,
+-        filename='',
+-        filepath='',
+-        ):
+-        """ Returns a security descriptor buffer of a file .
+-  Filepath must be full path relative to basepath of share's path.
++    def get_file_security(self, secdesc, filename='', filepath=''):
++        """
++        Returns a security descriptor buffer of a file .
++        Filepath must be full path relative to basepath of share's path.
+-  Usage:
+-  s.get_file_security(self,secdesc,sharename= " ",filepath=  "")-> sd_buf
+-  """
++        `Usage`:
++        S.get_file_security(self,secdesc,sharename="",filepath= "")-> sd_buf
++        """
+         filename = unicode(filename)
+         sd_buf = self.pipe.NetGetFileSecurity(self.server_unc, share,
+@@ -422,28 +421,26 @@ class srvsvcPipeManager(object):
+         return sd_buf
+     def get_tod(self):
+-        """ Updates Time and date (TOD) Info of the pipe object.
+-  ........
+-  Usage:
+-  update_tod() -> tod info object
+-  """
++        """
++        Updates Time and date (TOD) Info of the pipe object.
++
++        `Usage`:
++        update_tod() -> tod info object
++        """
+         tod_info = self.pipe.NetRemoteTOD(self.server_unc)
+         return tod_info
+-    def set_file_security(
+-        self,
+-        secdesc,
+-        sd_buf,
+-        sharename='',
+-        filepath='',
+-        ):
+-        """ Sets the security  of a file .
+-  Filepath must be full path relative to basepath of share's path.
++    def set_file_security(self, secdesc, sd_buf, sharename='',
++                        filepath=''):
++        """
++        Sets the security  of a file .
++
++        Filepath must be full path relative to basepath of share's path.
+-  Usage:
+-  S.set_file_security (self,secdesc,sd_buf,sharename= "",filepath= "") -> Boolean succes,[error]
+-  """
++        `Usage`:
++        S.set_file_security (self,secdesc,sd_buf,sharename= "",filepath= "") -> Boolean succes,[error]
++        """
+         sharename = unicode(sharename)
+         self.pipe.NetSetFileSecurity(self.server_unc, share, filename,
+@@ -452,13 +449,15 @@ class srvsvcPipeManager(object):
+     @staticmethod
+     def get_platform_info(platform_id, field):
+         """ Return the desired field.
+-        Retrievable types :
+-        'typestring' : The generic name of the platform type
+-        'desc' : Description of the type
+-  Usage:
+-  S.get_platform_string(platform_id,field)-> desired_field
+-  """
++        Parameters:
++        `field` can be any of the below'
++        `typestring` : The generic name of the platform type
++        `desc` : Description of the type
++
++        `Usage`:
++        S.get_platform_string(platform_id,field)-> desired_field
++        """
+         os_dict = {
+             srvsvc.PLATFORM_ID_DOS: {'typestring': 'PLATFORM_ID_DOS',
+@@ -474,20 +473,14 @@ class srvsvcPipeManager(object):
+             }
+         return os_dict.get(platform_id).get(field)
+-    def get_share_object(
+-        self,
+-        name='',
+-        stype=0,
+-        comment='',
+-        max_users=0xFFFFFFFF,
+-        password='',
+-        path='',
+-        #permissions= None, it's a reserved section (MS-SRVS)
+-        ):
+-        """ Gets a 502 type share object.
+-  Usage:
+-  S.get_share_object(self,name= "",comment= "",max_users= 0xFFFFFFFF,password= "",path= "",permissions= None,sd_buf=None) -> share (502 type share object)
+-  """
++    def get_share_object(self, name='', stype=0, comment='',
++                    max_users=0xFFFFFFFF, password='', path=''):
++        """
++        Gets a 502 type share object.
++
++        Usage:
++        S.get_share_object(self,name= "",comment= "",max_users= 0xFFFFFFFF,password= "",path= "",permissions= None,sd_buf=None) -> share (502 type share object)
++        """
+         share = srvsvc.NetShareInfo502()
+@@ -504,29 +497,30 @@ class srvsvcPipeManager(object):
+         return share
+     def name_validate(self, name):
+-        """ Validate a Given Share Name .
++        """
++        Validate a Given Share Name .
+         Returns True for a given share name and false for a invalid one .
+         It does so gracefully without raising a exception. Thus validating  name cleanly
+- .....
+-  Usage :
+-  S.name_validate(name) -> Boolean Indicating Validity
+-  """
++        `Usage` :
++        S.name_validate(name) -> Boolean Indicating Validity
++        """
+         try:
+             self.pipe.NetNameValidate(self.server_unc, name, 9,
+                     0)
+             return True
+-        except:
++        except RuntimeError:
+             return False
+     def get_list_disks(self):
+-        """ Returns a list of disk names on the system.
+-  In samaba rpc server these are hard coded .
+-  Refreshes Disk list of the pipe object.
+-............
+-  Usage:
+-  S.get_list_disks()-> None
+-  """
++        """
++        Returns a list of disk names on the system.
++        In samaba rpc server these are hard coded .
++        Refreshes Disk list of the pipe object.
++
++        `Usage`:
++        S.get_list_disks()-> None
++        """
+         disk_info = srvsvc.NetDiskInfo()
+         self.disks_list = []
+@@ -543,15 +537,8 @@ class ShareWindow(gtk.Window):
+     """ Share management interface window """
+-    def __init__(
+-        self,
+-        info_callback=None,
+-        server='',
+-        username='',
+-        password='',
+-        transport_type=0,
+-        connect_now=False,
+-        ):
++    def __init__(self, info_callback=None, server='', username='',
++                 password='', transport_type=0, connect_now=False):
+         super(ShareWindow, self).__init__()
+         # It's nice to have this info saved when a user wants to reconnect
+@@ -564,14 +551,8 @@ class ShareWindow(gtk.Window):
+         self.create()
+         self.set_status('Disconnected.')
+-        self.on_connect_item_activate(
+-            None,
+-            server,
+-            transport_type,
+-            username,
+-            password,
+-            connect_now,
+-            )
++        self.on_connect_item_activate(None, server, transport_type,
++                                        username, password, connect_now)
+         self.show_all()
+         self.fill_active_pane()
+         self.fill_server_info()
+@@ -590,13 +571,7 @@ class ShareWindow(gtk.Window):
+         self.statusbar.pop(0)
+         self.statusbar.push(0, message)
+-    def run_message_dialog(
+-        self,
+-        type,
+-        buttons,
+-        message,
+-        parent=None,
+-        ):
++    def run_message_dialog(self, type, buttons, message, parent=None):
+         if parent is None:
+             parent = self
+@@ -607,15 +582,10 @@ class ShareWindow(gtk.Window):
+         return response
+-    def on_connect_item_activate(
+-        self,
+-        widget,
+-        server='',
+-        transport_type=0,
+-        username='',
+-        password='',
+-        connect_now=False,
+-        ):
++    def on_connect_item_activate(self, widget, server='',
++                            transport_type=0, username='', password='',
++                            connect_now=False):
++
+         transport_type = transport_type or self.transport_type
+         if transport_type is 2:
+             server = '127.0.0.1'
+@@ -624,14 +594,8 @@ class ShareWindow(gtk.Window):
+         username = username or self.username
+         try:
+-            self.pipe_manager = self.run_connect_dialog(
+-                None,
+-                server,
+-                transport_type,
+-                username,
+-                password,
+-                connect_now,
+-                )
++            self.pipe_manager = self.run_connect_dialog(None, server,
++                    transport_type, username, password, connect_now)
+             if self.pipe_manager is not None:
+                 self.pipe_manager.get_shares_list()
+                 self.server_info = self.pipe_manager.server_info
+@@ -661,15 +625,8 @@ class ShareWindow(gtk.Window):
+         self.update_sensitivity()
+         self.fill_server_info()
+-    def run_connect_dialog(
+-        self,
+-        pipe_manager,
+-        server_address,
+-        transport_type,
+-        username,
+-        password='',
+-        connect_now=False,
+-        ):
++    def run_connect_dialog(self, pipe_manager, server_address,
++            transport_type, username, password='', connect_now=False):
+         dialog = srvsvcConnectDialog(server_address, transport_type,
+                 username, password)
+@@ -886,9 +843,8 @@ Please check your network connection.''',
+                 label.set_alignment(1, 0.5)
+                 attach_index = self.pipe_manager.disks_list.index(i)+2
+-                table.attach(label, 0, 1, attach_index,
+-                                attach_index + 1, gtk.FILL,
+-                                gtk.FILL | gtk.EXPAND, 0, 0)
++                table.attach(label, 0, 1, attach_index,attach_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+         self.sd_frame.add(table)
+         self.sd_frame.show_all()
+@@ -927,12 +883,8 @@ Please check your network connection.''',
+         dialog.hide()
+         return response_id
+-    def run_share_add_edit_dialog(
+-        self,
+-        share=None,
+-        apply_callback=None,
+-        wizard_mode=False,
+-        ):
++    def run_share_add_edit_dialog(self, share=None, apply_callback=None,
++                                  wizard_mode=False):
+         if wizard_mode: # wizard only for a new share
+             dialog = ShareWizardDialog(self.pipe_manager, None)
+@@ -1126,12 +1078,7 @@ Please check your network connection.''',
+             self.refresh_shares_view()
+-    def on_notebook_switch_page(
+-        self,
+-        widget,
+-        page,
+-        page_num,
+-        ):
++    def on_notebook_switch_page(self, widget, page, page_num):
+         self.active_page_index = page_num
+         self.update_sensitivity()
+@@ -1223,10 +1170,8 @@ Please check your network connection.''',
+     def fill_active_pane(self):
+         """ Fills sthe active left pane """
+-        try:
+-            share = self.get_selected_share()
+-        except:
+-            share = None
++        share = self.get_selected_share()
++
+         widget_to_delete = \
+             self.shareinfo_frame.get_children()[0]
+@@ -1413,8 +1358,8 @@ Please check your network connection.''',
+         self.shareinfo_frame.show_all()
+     def create(self):
+-              
+-              # main window
++
++        # main window
+         self.set_title('Samba-Gtk Share Management Interface')
+         self.set_default_size(800, 600)
+         self.icon_filename = os.path.join(sys.path[0], 'images'
+@@ -1428,7 +1373,7 @@ Please check your network connection.''',
+         accel_group = gtk.AccelGroup()
+         toplevel_vbox = gtk.VBox(False, 0)
+         self.add(toplevel_vbox)
+-        
++
+         # menu
+         self.menubar = gtk.MenuBar()
+         toplevel_vbox.pack_start(self.menubar, False, False, 0)
+@@ -1556,7 +1501,7 @@ Please check your network connection.''',
+         main_hbox = gtk.HBox()
+         self.share_notebook.append_page(main_hbox,
+                 gtk.Label('Share Management'))
+-        
++
+         # Share listing on left side
+         rvbox = gtk.VBox()
+         main_hbox.pack_start(rvbox, True, True, 0)
+@@ -1638,7 +1583,7 @@ Please check your network connection.''',
+                 self.toggle_share_view_visiblity, None)
+         ### Right active widget :
+-        
++
+         vbox = gtk.VBox()
+         main_hbox.pack_start(vbox, False, False, 0)
+@@ -1816,13 +1761,13 @@ Please check your network connection.''',
+         label.set_use_markup(True)
+         self.sd_frame.set_label_widget(label)
+         vbox.pack_start(self.sd_frame, False, False, 0)
+-        
++
+         # status bar
+         self.statusbar = gtk.Statusbar()
+         self.statusbar.set_has_resize_grip(True)
+         toplevel_vbox.pack_end(self.statusbar, False, False, 0)
+-        
++
+         # signals/events
+         self.connect('delete_event', self.on_self_delete)
+@@ -1896,14 +1841,9 @@ def ParseArgs(argv):
+     arguments = {}
+     try:  # get arguments into a nicer format
+-        (opts, args) = getopt.getopt(argv, 'chu:s:p:t:', [
+-            'help',
+-            'user=',
+-            'server=',
+-            'password=',
+-            'connect-now',
+-            'transport=',
+-            ])
++        (opts, args) = getopt.getopt(argv, 'chu:s:p:t:', ['help',
++                        'user=', 'server=', 'password=', 'connect-now',
++                        'transport='])
+     except getopt.GetoptError:
+         PrintUsage()
+         sys.exit(2)
+
+commit 8ecfea095c473771b5a4583dd5d3b19687b694ef
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Tue Aug 16 14:58:16 2011 +0000
+
+    remove sys append by default, add gpl
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 6a95184..78d0852 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -1,6 +1,29 @@
+-    #!/usr/bin/python
++#!/usr/bin/python2.6
+ # -*- coding: utf-8 -*-
++#       pygwshare.py
++#       Frontends to Samba-Gtk Share Management
++#
++#       Copyright 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>
++#       Copyright 2011 Jelmer Vernooij <jelmer@samba.org>
++#
++#       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
++#       (at your option) any later version.
++#
++#       This program is distributed in the hope that it will be useful,
++#       but WITHOUT ANY WARRANTY; without even the implied warranty of
++#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++#       GNU General Public License for more details.
++#
++#       You should have received a copy of the GNU General Public License
++#       along with this program; if not, write to the Free Software
++#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
++#       MA 02110-1301, USA.
++#
++#
++
+ import sys
+ import os.path
+ import traceback
+@@ -8,7 +31,7 @@ import getopt
+ import gobject
+ import gtk
+-sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++# sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
+ # default for ./configure.developer for use on python 2.7
+ # Unhash the above line if it is yor your config , else edit it as req
+
+commit 9473d0b8b1b7696c413625a0c9bd96ffa4c36a76
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Tue Aug 16 14:51:42 2011 +0000
+
+    pep fixes, statusbar fixed
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 284c98d..6a95184 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -1,29 +1,6 @@
+-#!/usr/bin/python2.6
++    #!/usr/bin/python
+ # -*- coding: utf-8 -*-
+-#       pygwshare.py
+-#       Frontends to Samba-Gtk Share Management
+-#
+-#       Copyright 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>
+-#       Copyright 2011 Jelmer Vernooij <jelmer@samba.org>
+-#
+-#       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
+-#       (at your option) any later version.
+-#
+-#       This program is distributed in the hope that it will be useful,
+-#       but WITHOUT ANY WARRANTY; without even the implied warranty of
+-#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-#       GNU General Public License for more details.
+-#
+-#       You should have received a copy of the GNU General Public License
+-#       along with this program; if not, write to the Free Software
+-#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+-#       MA 02110-1301, USA.
+-#
+-#
+-
+ import sys
+ import os.path
+ import traceback
+@@ -31,22 +8,16 @@ import getopt
+ import gobject
+ import gtk
+-#sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
+-#for use against the default binaries from default .configure.developer for use on python 2.7
+-# Unhash the above line if it is yor your config , else edit it as required
++sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++# default for ./configure.developer for use on python 2.7
++# Unhash the above line if it is yor your config , else edit it as req
+ from samba import credentials
+-from samba.dcerpc import (
+-    srvsvc,
+-    security,
+-    )
++from samba.dcerpc import srvsvc, security
++
+ from sambagtk.dialogs import AboutDialog
+-from pysrvsvc import (
+-    DeleteDialog,
+-    ShareAddEditDialog,
+-    srvsvcConnectDialog,
+-    ShareWizardDialog
+-    )
++from pysrvsvc import DeleteDialog, ShareAddEditDialog, \
++    srvsvcConnectDialog, ShareWizardDialog
+ class srvsvcPipeManager(object):
+@@ -73,19 +44,21 @@ class srvsvcPipeManager(object):
+             creds.set_workstation('')
+             creds.set_password(password)
+-        #binding = "ncacn_np:%s" # srvsvc allows only named pipes tcp/upd not allowed under MS-SRVS specifications
++        # binding = "ncacn_np:%s" # srvsvc allows only named pipes
++        # tcp/upd not allowed under MS-SRVS specifications
++
+         binding = ['ncacn_np:%s', 'ncacn_ip_tcp:%s', 'ncalrpc:%s'
+                    ][transport_type]
+         if transport_type is 2:
+             server_address = '127.0.0.1'
+-           # Not really necessary from the point of view of the pipe itself but later sections depend on it
++
+         self.pipe = srvsvc.srvsvc(binding % server_address,
+                                   credentials=creds)
+         # set up some basic parameters unique to the connection
+-        self.server_unc = ''.join(['\\',server_address])
++        self.server_unc = ''.join(['\\', server_address])
+         # Retrive some info about the share server
+@@ -96,107 +69,107 @@ class srvsvcPipeManager(object):
+         self.resume_handle_conn = 0x00000000
+         self.resume_handle_share = 0x00000000
+-        self.resume_handle = 0x00000000  # for general purposes where servers ignore this but it exists in the calls
++        self.resume_handle = 0x00000000
+         self.max_buffer = -1
+-        # Initialise various cache lists :
+-        # The idea is to use locally available share list and related conveiniece lists
+-        # This should reduce the queries and improve performance
+-        # The share list will be locally maintained any via the get_share_local_cache
+-
+-        if server_address in ('127.0.0.1','localhost') :
++        if server_address in ('127.0.0.1', 'localhost'):
+             self.islocal = True
++        # Not really necessary from the point of view of the pipe itself but later sections depend on it
+         else:
+             self.islocal = False
++
++        # Initialise various cache lists :
++        # The idea is to use locally available share & related lists
++        # This should reduce the queries and improve performance
++        # The share list will be locally maintained and updated
++        # via the various methods (eg get_shares_list)
++
+         self.conn_list = []
+         self.share_list = []
+         self.share_names_list = []
+         self.share_types_list = []
+         self.get_list_disks()
++
+         # attempt to control listing of shares.
+         self.show_all_shares = False
+         self.get_shares_list()
+-
+-
+     def close(self):
+         pass
+         # apparently there's no .Close() method for this pipe
+-
+-
+     @staticmethod
+-    def  get_share_type_info(stype,field):
++    def get_share_type_info(stype, field):
+         """ Return the desired info about a share type
+         Retrievable types :
+         'typestring' -> The generic name of the share type
+         'desc' -> Description of the type
+         'base_type' -> Base share type
+-        'flags' -> special flags (Boolean temporary,Boolean hidden)
++        'flags' -> special flags (Boolean temporary, Boolean hidden)
+  ..........
+   Usage :
+-  S.get_share_type_info(stype,field) -> desired information
++  S.get_share_type_info(stype, field) -> desired information
+   """
++
+         base_dict = {
+-            srvsvc.STYPE_DISKTREE : {
+-                        'typestring' :'STYPE_DISKTREE',
+-                        'desc' : 'Disktree (Folder) Share'
+-                        },
+-
+-            srvsvc.STYPE_PRINTQ : {
+-                        'typestring' :'STYPE_PRINTQ',
+-                        'desc' : 'Print Queue Share'
+-                        },
+-
+-            srvsvc.STYPE_DEVICE : {
+-                        'typestring' :'STYPE_DEVICE',
+-                        'desc' : 'Device Share'
+-                        },
+-
+-            srvsvc.STYPE_IPC : {
+-                        'typestring' :'STYPE_IPC',
+-                        'desc' : 'IPC Share'
+-                        }
+-                    }
++            srvsvc.STYPE_DISKTREE: {'typestring': 'STYPE_DISKTREE',
++                                    'desc': 'Disktree (Folder) Share'},
++            srvsvc.STYPE_PRINTQ: {'typestring': 'STYPE_PRINTQ',
++                                  'desc': 'Print Queue Share'},
++            srvsvc.STYPE_DEVICE: {'typestring': 'STYPE_DEVICE',
++                                  'desc': 'Device Share'},
++            srvsvc.STYPE_IPC: {'typestring': 'STYPE_IPC',
++                               'desc': 'IPC Share'},
++            }
+         flag_temp = False
+         flag_hidden = False
+         if stype & srvsvc.STYPE_TEMPORARY:
+-               flag_temp = True
++            flag_temp = True
+         if stype & srvsvc.STYPE_HIDDEN:
+-               flag_hidden = True
+-
+-        if flag_temp is True and flag_hidden is False :
+-               stype_base = stype -  srvsvc.STYPE_TEMPORARY
+-               stype_typestring = ''.join([base_dict.get(stype_base).get('typestring'),'_TEMPORARY'])
+-               stype_desc = ' '.join(['Temporary',base_dict.get(stype_base).get('desc') ])
+-
+-        elif flag_temp is False and flag_hidden is True :
+-                 stype_base = stype +  srvsvc.STYPE_HIDDEN
+-                 stype_typestring = ''.join([base_dict.get(stype_base).get('typestring'),'_HIDDEN'])
+-                 stype_desc = ' '.join(['Hidden',base_dict.get(stype_base).get('desc') ])
+-
+-        elif flag_temp is True and flag_hidden is True :
+-                 stype_base = stype -  srvsvc.STYPE_TEMPORARY +  srvsvc.STYPE_HIDDEN
+-                 stype_typestring = ''.join([base_dict.get(stype_base).get('typestring'),'_TEMPORARY_HIDDEN'])
+-                 stype_desc = ' '.join(['Temporary Hidden',base_dict.get(stype_base).get('desc') ])
++            flag_hidden = True
++
++        if flag_temp is True and flag_hidden is False:
++            stype_base = stype - srvsvc.STYPE_TEMPORARY
++            base_str = base_dict.get(stype_base).get('typestring')
++            stype_typestring = ''.join([base_str, '_TEMPORARY'])
++            stype_desc = ' '.join(['Temporary',
++                                  base_dict.get(stype_base).get('desc'
++                                  )])
++        elif flag_temp is False and flag_hidden is True:
++
++            stype_base = stype + srvsvc.STYPE_HIDDEN
++            base_str = base_dict.get(stype_base).get('typestring')
++            stype_typestring = ''.join([base_str, '_HIDDEN'])
++            stype_desc = ' '.join(['Hidden',
++                                  base_dict.get(stype_base).get('desc'
++                                  )])
++        elif flag_temp is True and flag_hidden is True:
++
++            stype_base = stype - srvsvc.STYPE_TEMPORARY\
++                 + srvsvc.STYPE_HIDDEN
++            base_str = base_dict.get(stype_base).get('typestring')
++            stype_typestring = ''.join([base_str, '_TEMPORARY_HIDDEN'])
++            stype_desc = ' '.join(['Temporary Hidden',
++                                  base_dict.get(stype_base).get('desc'
++                                  )])
+         else:
+             stype_base = stype
+-            stype_typestring = base_dict.get(stype_base).get('typestring')
++            stype_typestring = \
++                base_dict.get(stype_base).get('typestring')
+             stype_desc = base_dict.get(stype_base).get('desc')
+-        stype_info_dict = {'typestring':stype_typestring,
+-                            'desc':stype_desc,
+-                            'base_type':stype_base,
+-                            'flags':[flag_temp,flag_hidden]
+-                            }
++        stype_info_dict = {
++            'typestring': stype_typestring,
++            'desc': stype_desc,
++            'base_type': stype_base,
++            'flags': [flag_temp, flag_hidden],
++            }
+         return stype_info_dict.get(field)
+-
+-
+-    def fix_path_format(self,path=''):
+-        """ Fixes and checks the given path to make it in tthe correct format
++    def fix_path_format(self, path=''):
++        """ Fixes and checks the given path and convets it to the required format
+   Convert the unix path to relavant Info Struct path for samba share object
+   It also checks for validity of path if it is local.
+@@ -205,54 +178,49 @@ class srvsvcPipeManager(object):
+   S.fix_path_format(path= "") -> path
+   """
+-        if self.islocal :
++
++        if self.islocal:
+             if path.startswith('C:'):
+-                path = path[2:].replace('\\','/')
++                path = path[2:].replace('\\', '/')
+             if os.path.exists(path):
+                 path = os.path.realpath(path)  # gets canonical path
+             else:
+-                raise OSError("Path does not exist !")
++                raise OSError('Path does not exist !')
+         if path.startswith('/'):
+             path = path.replace('/', '\\')
+-            path = ''.join(['C:',path])
++            path = ''.join(['C:', path])
+             path = unicode(path)
+         return path
+-
+-
+     # NOT supported yet
+-    def get_connections(
+-        self,
+-        level = 1,
+-        max_buffer = -1,
+-        ):
++    def get_connections(self, level=1, max_buffer=-1):
+         """ DO NOT USE : UNSUPPORTED BY SAMBA-4 YET
+   """
++
+         self.conn_list = []
+         info_ctr = srvsvc.NetConnInfoCtr()
+-        info_ctr.level = level   #
+-        (no_ent,info_ctr,resume_handle) = \
++        info_ctr.level = level  #
++        (no_ent, info_ctr, resume_handle) = \
+             self.pipe.NetConnEnum(server_unc,
+-                                 self.server_info_basic.path,
+-                                 info_ctr,max_buffer,
+-                                 self.resume_handle_conn)
+-        if no_ent !=0 :
+-            for i in info_ctr.ctr.array :
++                                  self.server_info_basic.path,
++                                  info_ctr, max_buffer,
++                                  self.resume_handle_conn)
++        if no_ent != 0:
++            for i in info_ctr.ctr.array:
+                 self.conn_list.append(i)
+-
+-
+-    def modify_share(self,share=None):
++    def modify_share(self, share=None):
+         """ Modifies share 502 object.
+   Usage:
+   S.modify_share(self,share)-> parm_error
+   """
++
+         if share is None:
+-            raise KeyError("Non existant Share cannot be modified")
++            raise KeyError('Non existant Share cannot be modified')
+         parm_error = 0x00000000
+         name = share.name
+@@ -260,13 +228,12 @@ class srvsvcPipeManager(object):
+                 502, share, parm_error)
+         return parm_error
+-
+-
+-    def  get_shares_list(self):
++    def get_shares_list(self):
+         """ Updates the share list of the pipe object .
+-  If show_all_shares is set to flase Hidden shares are set to false and not returned
+-  It first tries to list all shares if that fails it falls back to list standard shares
+-  and sets the show_all_shares boolean accordingly"""
++  If show_all_shares is set to flase Hidden shares are set to
++  false and not returned It first tries to list all shares if
++  that fails it falls back to list standard shares and sets the
++  show_all_shares boolean accordingly"""
+         if self.show_all_shares is False:
+             self.list_shares()
+@@ -278,15 +245,15 @@ class srvsvcPipeManager(object):
+                 self.list_shares()
+                 self.show_all_shares = False
+-
+-
+     def list_shares(self):
+-        """ Gets a list of all (not hidden/special)active shares and update the share and share_name list.
++        """ Gets a list of all (not hidden/special)active shares
++        and update the share and share_name list.
+   Usage:
+   Recomended do not USE , use get_shares_list
+   S.list_shares() -> None
+   """
++
+         self.share_list = []
+         self.share_names_list = []
+         self.share_types_list = []
+@@ -302,14 +269,13 @@ class srvsvcPipeManager(object):
+                 self.share_names_list.append(i.name)
+                 self.share_types_list.append(i.type)
+-
+-
+     def list_shares_all(self):
+         """ Gets a list of all (including hiden/special)active shares and update the share and share_name list.
+   Usage:
+   S.list_shares() -> None
+   """
++
+         self.share_list = []
+         self.share_names_list = []
+         self.share_types_list = []
+@@ -324,75 +290,68 @@ class srvsvcPipeManager(object):
+                 self.share_names_list.append(i.name)
+                 self.share_types_list.append(i.type)
+-
+-
+     def add_share(self, share=None):
+         """Adds a share with a given name and type
+   This uses a share info 502 object.
+   Should be followed by modify_share to complete the addition of the share.
+   Usage :
+-  S.add_share(self,share=None) -> parm_error
++  S.add_share(self, share=None) -> parm_error
+   """
+-        if share is None :
+-            raise KeyError("Illegal to add an Empty Share ")
++
++        if share is None:
++            raise KeyError('Illegal to add an Empty Share ')
+         # Uses the default 502 share info
++
+         parm_error = 0x00000000
+         parm_error = self.pipe.NetShareAdd(self.server_unc, 502, share,
+                 parm_error)
+         return parm_error
+-
+-
+     def get_share_info_local(self, name=''):
+         """ Gets share info for a share with a particular name from local cache lists.
+   Usage:
+-  S.get_share_info_local(self,name= "") -> sahre_info (502 type)
++  S.get_share_info_local(self, name=  "") -> sahre_info (502 type)
+   """
++
+         name = unicode(name)
+         for i in self.share_names_list:
+             if name is i:
+                 return share_list[i.index()]
+-
+-
+     def get_share_info_rpc(self, name=''):
+         """ Gets share info for a share with a particular name from the rpc server.
+   Usage:
+-  S.get_share_info_local(self,name= "") -> sahre_info (502 type)
++  S.get_share_info_local(self, name= "") -> sahre_info (502 type)
+   """
++
+         name = unicode(name)
+         info = self.pipe.NetShareGetInfo(self.server_unc, name, 502)
+         return info
+-
+-
+-    def  get_server_info(self):
++    def get_server_info(self):
+         """ Gets type 102 server info .
+  Usage:
+  S.get_server_info() -> server_info
+  """
+-        server_info=self.pipe.NetSrvGetInfo(self.server_unc, 102)
+-        return server_info
+-
++        server_info = self.pipe.NetSrvGetInfo(self.server_unc, 102)
++        return server_info
+     def delete_share(self, name=''):
+         """ Delete a share with the given name.
+   Usage:
+-  S.delete_share (self,name= "") -> Boolean indicating success or faliure ,[error object]
++  S.delete_share (self,name=  "") -> Boolean indicating success or faliure ,[error object]
+   """
+         name = unicode(name)
+         self.pipe.NetShareDel(self.server_unc, name, 0)
+-
+-
+     # NOT supported yet
+     def remove_persistance(self, name=''):
+         """ Removes persistance of a share .
+@@ -401,12 +360,10 @@ class srvsvcPipeManager(object):
+   ........
+   """
+-        reserved = None  # to figure out what type python accepts maybee int or str
++        reserved = None
+         name = unicode(name)
+         self.pipe.NetShareDelSticky(self.server_unc, name, reserved)
+-
+-
+     def get_share_type(self, name=''):
+         """ Returns type of share code
+   uses local cache for now as the rpc server in samba4 does not support it yet
+@@ -420,11 +377,9 @@ class srvsvcPipeManager(object):
+             if name is i:
+                 stype = share_types_list[i.index()]
+             else:
+-                raise KeyError("Share Does no exist")
++                raise KeyError('Share Does no exist')
+         return stype
+-
+-
+     def get_file_security(
+         self,
+         secdesc,
+@@ -435,7 +390,7 @@ class srvsvcPipeManager(object):
+   Filepath must be full path relative to basepath of share's path.
+   Usage:
+-  s.get_file_security(self,secdesc,sharename="",filepath= "")-> sd_buf
++  s.get_file_security(self,secdesc,sharename= " ",filepath=  "")-> sd_buf
+   """
+         filename = unicode(filename)
+@@ -443,8 +398,6 @@ class srvsvcPipeManager(object):
+                 filename, secdesc)
+         return sd_buf
+-
+-
+     def get_tod(self):
+         """ Updates Time and date (TOD) Info of the pipe object.
+   ........
+@@ -455,8 +408,6 @@ class srvsvcPipeManager(object):
+         tod_info = self.pipe.NetRemoteTOD(self.server_unc)
+         return tod_info
+-
+-
+     def set_file_security(
+         self,
+         secdesc,
+@@ -468,17 +419,15 @@ class srvsvcPipeManager(object):
+   Filepath must be full path relative to basepath of share's path.
+   Usage:
+-  S.set_file_security (self,secdesc,sd_buf,sharename= "",filepath= "s") -> Boolean succes,[error]
++  S.set_file_security (self,secdesc,sd_buf,sharename= "",filepath= "") -> Boolean succes,[error]
+   """
+         sharename = unicode(sharename)
+         self.pipe.NetSetFileSecurity(self.server_unc, share, filename,
+                 secdesc, sd_buf)
+-
+-
+     @staticmethod
+-    def get_platform_info(platform_id,field):
++    def get_platform_info(platform_id, field):
+         """ Return the desired field.
+         Retrievable types :
+         'typestring' : The generic name of the platform type
+@@ -489,47 +438,49 @@ class srvsvcPipeManager(object):
+   """
+         os_dict = {
+-            srvsvc.PLATFORM_ID_DOS: {'typestring':'PLATFORM_ID_DOS','desc':'DOS'},
+-            srvsvc.PLATFORM_ID_OS2: {'typestring':'PLATFORM_ID_OS2','desc':'OS2'},
+-            srvsvc.PLATFORM_ID_NT: {'typestring':'PLATFORM_ID_NT','desc':'Windows NT or newer'},
+-            srvsvc.PLATFORM_ID_OSF: {'typestring':'PLATFORM_ID_OSF','desc':'OSF/1'},
+-            srvsvc.PLATFORM_ID_VMS: {'typestring':'PLATFORM_ID_VMS','desc':'VMS'},
++            srvsvc.PLATFORM_ID_DOS: {'typestring': 'PLATFORM_ID_DOS',
++                    'desc': 'DOS'},
++            srvsvc.PLATFORM_ID_OS2: {'typestring': 'PLATFORM_ID_OS2',
++                    'desc': 'OS2'},
++            srvsvc.PLATFORM_ID_NT: {'typestring': 'PLATFORM_ID_NT',
++                                    'desc': 'Windows NT or newer'},
++            srvsvc.PLATFORM_ID_OSF: {'typestring': 'PLATFORM_ID_OSF',
++                    'desc': 'OSF/1'},
++            srvsvc.PLATFORM_ID_VMS: {'typestring': 'PLATFORM_ID_VMS',
++                    'desc': 'VMS'},
+             }
+         return os_dict.get(platform_id).get(field)
+-
+-    def get_share_object (
++    def get_share_object(
+         self,
+-        name= "",
+-        stype= 0,
+-        comment= '',
++        name='',
++        stype=0,
++        comment='',
+         max_users=0xFFFFFFFF,
+-        password= '',
+-        path= '',
+-        #permissions= None, it's a reserved section , pointless passing a value.
+-        sd_buf= None
++        password='',
++        path='',
++        #permissions= None, it's a reserved section (MS-SRVS)
+         ):
+         """ Gets a 502 type share object.
+   Usage:
+   S.get_share_object(self,name= "",comment= "",max_users= 0xFFFFFFFF,password= "",path= "",permissions= None,sd_buf=None) -> share (502 type share object)
+   """
++
+         share = srvsvc.NetShareInfo502()
+         share.comment = unicode(comment)
+         share.name = unicode(name)
+         share.type = stype
+         share.current_users = 0x00000000
+-        share.max_users= max_users
++        share.max_users = max_users
+         share.password = password
+         share.path = path
+         share.permissions = 0
+-        share.sd_buf =  security.sec_desc_buf()
++        share.sd_buf = security.sec_desc_buf()
+         return share
+-
+-
+-    def  name_validate(self,name):
++    def name_validate(self, name):
+         """ Validate a Given Share Name .
+         Returns True for a given share name and false for a invalid one .
+         It does so gracefully without raising a exception. Thus validating  name cleanly
+@@ -537,15 +488,14 @@ class srvsvcPipeManager(object):
+   Usage :
+   S.name_validate(name) -> Boolean Indicating Validity
+   """
++
+         try:
+-            self.pipe.NetNameValidate(self.server_unc, name, 9, 0)
++            self.pipe.NetNameValidate(self.server_unc, name, 9,
++                    0)
+             return True
+         except:
+             return False
+-
+-
+-
+     def get_list_disks(self):
+         """ Returns a list of disk names on the system.
+   In samaba rpc server these are hard coded .
+@@ -560,19 +510,25 @@ class srvsvcPipeManager(object):
+         (disk_info, totalentries, self.resume_handle) = \
+             self.pipe.NetDiskEnum(self.server_unc, 0x00000000,
+                                   disk_info, 26, self.resume_handle)
+-        if totalentries != 0 :
++        if totalentries != 0:
+             for i in disk_info.disks:
+-                if i.disk != '':  # disk lists returns a blank entry not of consequence to the program
++                if i.disk != '':
+                     self.disks_list.append(i.disk)
+-
+-
+ class ShareWindow(gtk.Window):
++
+     """ Share management interface window """
+-    def __init__ (self, info_callback=None, server="", username="", password="",
+-            transport_type=0,connect_now=False):
++    def __init__(
++        self,
++        info_callback=None,
++        server='',
++        username='',
++        password='',
++        transport_type=0,
++        connect_now=False,
++        ):
+         super(ShareWindow, self).__init__()
+         # It's nice to have this info saved when a user wants to reconnect
+@@ -584,20 +540,25 @@ class ShareWindow(gtk.Window):
+         self.server_info = None
+         self.create()
+-        self.set_status("Disconnected.")
+-        self.on_connect_item_activate(None, server, transport_type, username, password, connect_now)
++        self.set_status('Disconnected.')
++        self.on_connect_item_activate(
++            None,
++            server,
++            transport_type,
++            username,
++            password,
++            connect_now,
++            )
+         self.show_all()
+         self.fill_active_pane()
+         self.fill_server_info()
+-         # for easier further use
+-
+-
+         # This is used so the parent program can grab the server info after
+         # we've connected.
+         if info_callback is not None:
+-            info_callback(server=self.server_address, username=self.username,
+-                    transport_type=self.transport_type)
++            info_callback(server=self.server_address,
++                          username=self.username,
++                          transport_type=self.transport_type)
+     def connected(self):
+         return self.pipe_manager is not None
+@@ -606,23 +567,32 @@ class ShareWindow(gtk.Window):
+         self.statusbar.pop(0)
+         self.statusbar.push(0, message)
+-
+-
+-    def run_message_dialog(self, type, buttons, message, parent=None):
++    def run_message_dialog(
++        self,
++        type,
++        buttons,
++        message,
++        parent=None,
++        ):
+         if parent is None:
+             parent = self
+         message_box = gtk.MessageDialog(parent, gtk.DIALOG_MODAL, type,
+-            buttons, message)
++                buttons, message)
+         response = message_box.run()
+         message_box.hide()
+         return response
+-
+-
+-    def on_connect_item_activate(self, widget, server="", transport_type=0,
+-            username="", password="", connect_now=False):
++    def on_connect_item_activate(
++        self,
++        widget,
++        server='',
++        transport_type=0,
++        username='',
++        password='',
++        connect_now=False,
++        ):
+         transport_type = transport_type or self.transport_type
+         if transport_type is 2:
+             server = '127.0.0.1'
+@@ -631,44 +601,57 @@ class ShareWindow(gtk.Window):
+         username = username or self.username
+         try:
+-            self.pipe_manager = self.run_connect_dialog(None, server,
+-                transport_type, username, password, connect_now)
++            self.pipe_manager = self.run_connect_dialog(
++                None,
++                server,
++                transport_type,
++                username,
++                password,
++                connect_now,
++                )
+             if self.pipe_manager is not None:
+                 self.pipe_manager.get_shares_list()
+                 self.server_info = self.pipe_manager.server_info
+-                self.set_status("Connected to Server: IP=%s NETBios Name=%s." % (
+-                    self.server_address,self.pipe_manager.server_info.server_name))
+-
++                self.set_status(
++                          'Connected to Server: IP=%s NETBios Name=%s.'
++                           % (self.server_address,
++                            self.pipe_manager.server_info.server_name))
+         except RuntimeError, re:
+-            msg = "Failed to connect: %s." % (re.args[1])
++
++            msg = 'Failed to connect: %s.' % re.args[1]
+             self.set_status(msg)
+             print msg
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
+-
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         except Exception, ex:
+-            msg = "Failed to connect: %s." % (str(ex))
++
++            msg = 'Failed to connect: %s.' % str(ex)
+             self.set_status(msg)
+             print msg
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
+-
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         self.refresh_shares_view()
+         self.update_sensitivity()
+         self.fill_server_info()
++    def run_connect_dialog(
++        self,
++        pipe_manager,
++        server_address,
++        transport_type,
++        username,
++        password='',
++        connect_now=False,
++        ):
+-
+-    def run_connect_dialog(self, pipe_manager, server_address, transport_type,
+-            username, password="", connect_now=False):
+-
+-
+-        dialog = srvsvcConnectDialog(server_address, transport_type, username, password)
++        dialog = srvsvcConnectDialog(server_address, transport_type,
++                username, password)
+         dialog.show_all()
+-
+         while True:
+             if connect_now:
+                 connect_now = False
+@@ -689,39 +672,60 @@ class ShareWindow(gtk.Window):
+                     self.username = username
+                     password = dialog.get_password()
+-                    pipe_manager = srvsvcPipeManager(server_address, transport_type, username, password)
++                    pipe_manager = srvsvcPipeManager(server_address,
++                            transport_type, username, password)
+                     break
+-
+-
+                 except RuntimeError, re:
+-                    if re.args[1] == 'Logon failure': #user got the password wrong
+-                        self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Failed to connect: Invalid username or password.", dialog)
++
++                    if re.args[1] == 'Logon failure':  # user got the password wrong
++                        self.run_message_dialog(gtk.MESSAGE_ERROR,
++                                gtk.BUTTONS_OK,
++                                'Failed to connect: Invalid username or password.'
++                                , dialog)
+                         dialog.password_entry.grab_focus()
+-                        dialog.password_entry.select_region(0, -1) #select all the text in the password box
+-                    elif re.args[0] == 5 or re.args[1] == 'Access denied':
+-                        self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Failed to connect: Access Denied.", dialog)
++                        dialog.password_entry.select_region(0,
++                                -1)  # select all the text in the password box
++                    elif re.args[0] == 5 or re.args[1]\
++                         == 'Access denied':
++                        self.run_message_dialog(gtk.MESSAGE_ERROR,
++                                gtk.BUTTONS_OK,
++                                'Failed to connect: Access Denied.',
++                                dialog)
+                         dialog.username_entry.grab_focus()
+-                        dialog.username_entry.select_region(0, -1)
+-                    elif re.args[1] == 'NT_STATUS_HOST_UNREACHABLE':
+-                        self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Failed to connect: Could not contact the server", dialog)
++                        dialog.username_entry.select_region(0,
++                                -1)
++                    elif re.args[1]\
++                         == 'NT_STATUS_HOST_UNREACHABLE':
++                        self.run_message_dialog(gtk.MESSAGE_ERROR,
++                                gtk.BUTTONS_OK,
++                                'Failed to connect: Could not contact the server'
++                                , dialog)
+                         dialog.server_address_entry.grab_focus()
+-                        dialog.server_address_entry.select_region(0, -1)
+-                    elif re.args[1] == 'NT_STATUS_NETWORK_UNREACHABLE':
+-                        self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Failed to connect: The network is unreachable.\n\nPlease check your network connection.", dialog)
++                        dialog.server_address_entry.select_region(0,
++                                -1)
++                    elif re.args[1]\
++                         == 'NT_STATUS_NETWORK_UNREACHABLE':
++                        self.run_message_dialog(gtk.MESSAGE_ERROR,
++                                gtk.BUTTONS_OK,
++                                '''Failed to connect: The network is unreachable.
++
++Please check your network connection.''',
++                                dialog)
+                     else:
+-                        msg = "Failed to connect: %s." % (re.args[1])
++                        msg = 'Failed to connect: %s.'\
++                             % re.args[1]
+                         print msg
+                         traceback.print_exc()
+-                        self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg, dialog)
+-
++                        self.run_message_dialog(gtk.MESSAGE_ERROR,
++                                gtk.BUTTONS_OK, msg, dialog)
+                 except Exception, ex:
+-                    msg = "Failed to connect: %s." % (str(ex))
++
++                    msg = 'Failed to connect: %s.' % str(ex)
+                     print msg
+                     traceback.print_exc()
+-                    self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg, dialog)
+-
++                    self.run_message_dialog(gtk.MESSAGE_ERROR,
++                            gtk.BUTTONS_OK, msg, dialog)
+-        #return RESPONSE_OK if we were told to auto-connect. Otherwise run the dialog
+         response_id = gtk.RESPONSE_OK or dialog.run()
+         dialog.hide()
+@@ -730,141 +734,169 @@ class ShareWindow(gtk.Window):
+         return pipe_manager
+-
+-    def on_switch_fill_active_pane(self,widget):
++    def on_switch_fill_active_pane(self, widget):
+         """ Function doc """
++
+         self.fill_active_pane()
+     def on_update_sensitivity(self, widget):
+         self.update_sensitivity()
+-
+-    def fill_server_info (self):
++    def fill_server_info(self):
+         """ Gracious fill out server info """
+-        for widget in self.sd_frame.get_children() :
++
++        for widget in self.sd_frame.get_children():
+             if type(widget) is gtk.Table:
+                 self.sd_frame.remove(widget)
+         if self.server_info is None:
+             self.srv_info_label.set_markup('<b>Server Disconnected</b>')
+-
+-            my_lables = self.srvinfo_frame.get_children()[0].get_children()
+-            for label in my_lables :
++            my_lables = \
++                self.srvinfo_frame.get_children()[0].get_children()
++            for label in my_lables:
+                 label.set_sensitive(False)
+-            #handle the disk data
+-            table = gtk.Table(2,2,True)
++            table = gtk.Table(2, 2, True)
+             table.set_border_width(5)
+             table.set_row_spacings(4)
+             label = gtk.Label('Not connected to share server.')
+             label.set_alignment(1, 0.5)
+-            table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
++            table.attach(label, 0, 1, 1, 2, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
+         else:
+-            self.srv_info_label.set_markup('<b>Share Server Details</b>')
+-            my_lables = self.srvinfo_frame.get_children()[0].get_children()
+-            for label in my_lables :
++            self.srv_info_label.set_markup('<b>Share Server Details</b>'
++                    )
++
++            my_lables = \
++                self.srvinfo_frame.get_children()[0].get_children()
++            for label in my_lables:
+                 label.set_sensitive(True)
+-            label_data = self.pipe_manager.get_platform_info(
+-                                        self.server_info.platform_id,'desc')
++            label_data = \
++                self.pipe_manager.get_platform_info(
++                                   self.server_info.platform_id, 'desc')
+             self.srvinfo_tos_label.set_text(label_data)
+-            srv_type_genstr = self.pipe_manager.get_platform_info(
+-                                        self.server_info.platform_id,'typestring')
+-            self.srvinfo_name_label.set_text('\\'+self.server_info.server_name)
+-            self.srvinfo_hidden_label.set_text(str(bool(self.server_info.hidden)))
++            srv_type_genstr = \
++                self.pipe_manager.get_platform_info(
++                            self.server_info.platform_id, 'typestring')
++            self.srvinfo_name_label.set_text('\\'
++                     + self.server_info.server_name)
++            self.srvinfo_hidden_label.set_text(
++                                     str(bool(self.server_info.hidden)))
+             self.srvinfo_comment_label.set_text(self.server_info.comment)
+-            label_data = '.'.join([str(self.server_info.version_major),str(self.server_info.version_minor)])
++            label_data = '.'.join([str(self.server_info.version_major),
++                                  str(self.server_info.version_minor)])
+             self.srvinfo_version_label.set_text(label_data)
+             server_typedict = {
+-                    0x00000001:('SV_TYPE_WORKSTATION','Workstation Service'),
+-                    0x00000002:('SV_TYPE_SERVER','Server Service'),
+-                    0x00000004:('SV_TYPE_SQLSERVER','SQL Server'),
+-                    0x00000008:('SV_TYPE_DOMAIN_CTRL','Primary Domain Controller'),
+-                    0x00000010:('SV_TYPE_DOMAIN_BAKCTRL','Backup Domain Controller'),
+-                    0x00000020:('SV_TYPE_TIME_SOURCE','Time Source'),
+-                    0x00000040:('SV_TYPE_AFP','Apple File Protocol Server'),
+-                    0x00000080:('SV_TYPE_NOVELL','Novel Server'),
+-                    0x00000100:('SV_TYPE_DOMAIN_MEMBER','LAN Manager 2.x Domain Member'),
+-                    0x40000000:('SV_TYPE_LOCAL_LIST_ONLY','Server Maintained By the Browser'),
+-                    0x00000200:('SV_TYPE_PRINTQ_SERVER','Print Queue Server'),
+-                    0x00000400:('SV_TYPE_DIALIN_SERVER','Dial-In Server'),
+-                    0x00000800:('SV_TYPE_XENIX_SERVER','Xenix Server'),
+-                    0x00004000:('SV_TYPE_SERVER_MFPN','Microsoft File and Print for NetWare'),
+-                    0x00001000:('SV_TYPE_NT','Windows NT/XP/2003 or Newer'),
+-                    0x00002000:('SV_TYPE_WFW','Windows for Workgroups'),
+-                    0x00008000:('SV_TYPE_SERVER_NT','Non DC Windows Server 2000/2003 or Newer'),
+-                    0x00010000:('SV_TYPE_POTENTIAL_BROWSER','Potential Browser Service '),
+-                    0x00020000:('SV_TYPE_BACKUP_BROWSER','Browser Service As Backup'),
+-                    0x00040000:('SV_TYPE_MASTER_BROWSER','Master Browser Service'),
+-                    0x00080000:('SV_TYPE_DOMAIN_MASTER','Domain Master Browser'),
+-                    0x80000000:('SV_TYPE_DOMAIN_ENUM','Primary Domain'),
+-                    0x00400000:('SV_TYPE_WINDOWS','Windows ME/98/95'),
+-                    0xFFFFFFFF:('SV_TYPE_ALL','All Servers'),
+-                    0x02000000:('SV_TYPE_TERMINALSERVER','Terminal Server'),
+-                    0x10000000:('SV_TYPE_CLUSTER_NT','Server Cluster'),
+-                    0x04000000:('SV_TYPE_CLUSTER_VS_NT','Virtual Server Cluster')
+-                    }
+-
+-            label_data = server_typedict.get(self.server_info.server_type,('','Multiple Capablities'))[1]
++                1: ('SV_TYPE_WORKSTATION',
++                             'Workstation Service'),
++                2: ('SV_TYPE_SERVER', 'Server Service'),
++                4: ('SV_TYPE_SQLSERVER', 'SQL Server'),
++                8: ('SV_TYPE_DOMAIN_CTRL',
++                             'Primary Domain Controller'),
++                0x00000010: ('SV_TYPE_DOMAIN_BAKCTRL',
++                             'Backup Domain Controller'),
++                0x00000020: ('SV_TYPE_TIME_SOURCE', 'Time Source'),
++                0x00000040: ('SV_TYPE_AFP', 'Apple File Protocol Server'
++                             ),
++                0x00000080: ('SV_TYPE_NOVELL', 'Novel Server'),
++                0x00000100: ('SV_TYPE_DOMAIN_MEMBER',
++                             'LAN Manager 2.x Domain Member'),
++                0x40000000: ('SV_TYPE_LOCAL_LIST_ONLY',
++                             'Server Maintained By the Browser'),
++                0x00000200: ('SV_TYPE_PRINTQ_SERVER',
++                             'Print Queue Server'),
++                0x00000400: ('SV_TYPE_DIALIN_SERVER', 'Dial-In Server'
++                             ),
++                0x00000800: ('SV_TYPE_XENIX_SERVER', 'Xenix Server'),
++                0x00004000: ('SV_TYPE_SERVER_MFPN',
++                             'Microsoft File and Print for NetWare'),
++                0x00001000: ('SV_TYPE_NT', 'Windows NT/XP/2003 or Newer'
++                             ),
++                0x00002000: ('SV_TYPE_WFW', 'Windows for Workgroups'),
++                0x00008000: ('SV_TYPE_SERVER_NT',
++                             'Non DC Windows Server 2000/2003 or Newer'
++                             ),
++                0x00010000: ('SV_TYPE_POTENTIAL_BROWSER',
++                             'Potential Browser Service '),
++                0x00020000: ('SV_TYPE_BACKUP_BROWSER',
++                             'Browser Service As Backup'),
++                0x00040000: ('SV_TYPE_MASTER_BROWSER',
++                             'Master Browser Service'),
++                0x00080000: ('SV_TYPE_DOMAIN_MASTER',
++                             'Domain Master Browser'),
++                0x80000000: ('SV_TYPE_DOMAIN_ENUM', 'Primary Domain'),
++                0x00400000: ('SV_TYPE_WINDOWS', 'Windows ME/98/95'),
++                0xFFFFFFFF: ('SV_TYPE_ALL', 'All Servers'),
++                0x02000000: ('SV_TYPE_TERMINALSERVER', 'Terminal Server'
++                             ),
++                0x10000000: ('SV_TYPE_CLUSTER_NT', 'Server Cluster'),
++                0x04000000: ('SV_TYPE_CLUSTER_VS_NT',
++                             'Virtual Server Cluster'),
++                }
++
++            label_data = \
++                server_typedict.get(self.server_info.server_type, ('',
++                                    'Multiple Capablities'))[1]
+             self.srvinfo_type_label.set_text(label_data)
+-            self.srvinfo_upath_label.set_text(self.server_info.userpath.upper())
++            self.srvinfo_upath_label.set_text(
++                                    self.server_info.userpath.upper())
+             self.srvinfo_to_label.set_text(str(self.server_info.disc))
+             label_data = '/'.join([str(self.server_info.announce),
+-                                        str(self.server_info.anndelta)])
++                                  str(self.server_info.anndelta)])
+             self.srvinfo_aa_label.set_text(label_data)
+-            #handle server data windo
+-            num_disks =  len (self.pipe_manager.disks_list)
+-            table = gtk.Table(num_disks+2,2,True)
++            num_disks = len(self.pipe_manager.disks_list)
++            table = gtk.Table(num_disks + 2, 2, True)
+             table.set_border_width(5)
+             table.set_row_spacings(4)
+             label = gtk.Label('<b> Disks </b>')
+             label.set_use_markup(True)
+             label.set_alignment(1, 0.5)
+-            table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            for i in self.pipe_manager.disks_list :
++            table.attach(label, 0, 1, 1, 2, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
++
++            for i in self.pipe_manager.disks_list:
+                 label = gtk.Label(i)
+                 label.set_alignment(1, 0.5)
+-                attach_index =  self.pipe_manager.disks_list.index(i) + 2
+-                #Note : attcah ofsets for uniformity of gui , no other practical reason
+-                table.attach(label, 0, 1, attach_index, attach_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++                attach_index = self.pipe_manager.disks_list.index(i)+2
++
++                table.attach(label, 0, 1, attach_index,
++                                attach_index + 1, gtk.FILL,
++                                gtk.FILL | gtk.EXPAND, 0, 0)
+         self.sd_frame.add(table)
+         self.sd_frame.show_all()
+-
+-
+-
+-
+     def get_selected_share(self):
+         if not self.connected():
+             return None
+-        (model, iter) = self.shares_tree_view.get_selection().get_selected()
+-        if iter is None: # no selection
++        (model, iter) = \
++            self.shares_tree_view.get_selection().get_selected()
++        if iter is None:  # no selection
+             return None
+         else:
+             share_name = model.get_value(iter, 0)
+-            share_list = [share for share in self.pipe_manager.share_list if share.name == share_name]
++            share_list = [share for share in
++                          self.pipe_manager.share_list if share.name
++                           == share_name]
+             if len(share_list) > 0:
+                 return share_list[0]
+             else:
+                 return None
+-
+     def on_about_item_activate(self, widget):
+-        dialog = AboutDialog("PyGWShare",
+-            "A tool to manage user shares on a SRVS Share server.\n"
+-            "Based on Jelmer Vernooij's original Samba-GTK",
+-            self.icon_pixbuf)
+-        #dialog.set_copyright("Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>")
++        dialog = AboutDialog('PyGWShare',
++                             "A tool to manage user shares on a SRVS Share server.\nBased on Jelmer Vernooij's original Samba-GTK"
++                             , self.icon_pixbuf)
++        dialog.set_copyright('Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>'
++                             )
+         dialog.run()
+         dialog.hide()
+-
+     def run_delete_dialog(self, share=None):
+         dialog = DeleteDialog(self.pipe_manager, share)
+         dialog.show_all()
+@@ -872,17 +904,19 @@ class ShareWindow(gtk.Window):
+         dialog.hide()
+         return response_id
++    def run_share_add_edit_dialog(
++        self,
++        share=None,
++        apply_callback=None,
++        wizard_mode=False,
++        ):
+-
+-    def run_share_add_edit_dialog(self, share= None, apply_callback= None,wizard_mode=False):
+-
+-        if wizard_mode:
+-            dialog = ShareWizardDialog(self.pipe_manager, None) # wizard only for a new share
++        if wizard_mode: # wizard only for a new share
++            dialog = ShareWizardDialog(self.pipe_manager, None)
+         else:
+             dialog = ShareAddEditDialog(self.pipe_manager, share)
+         dialog.show_all()
+-        # loop to handle the applies
+         while True:
+             response_id = dialog.run()
+@@ -890,7 +924,8 @@ class ShareWindow(gtk.Window):
+                 problem_msg = dialog.validate_fields()
+                 if problem_msg is not None:
+-                    self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, problem_msg, dialog)
++                    self.run_message_dialog(gtk.MESSAGE_ERROR,
++                            gtk.BUTTONS_OK, problem_msg, dialog)
+                 else:
+                     dialog.fields_to_share()
+@@ -902,8 +937,8 @@ class ShareWindow(gtk.Window):
+                     if response_id == gtk.RESPONSE_OK:
+                         dialog.hide()
+                         break
+-
+             else:
++
+                 dialog.hide()
+                 return None
+@@ -911,9 +946,10 @@ class ShareWindow(gtk.Window):
+     def update_sensitivity(self):
+-        connected = (self.pipe_manager is not None)
++        connected = self.pipe_manager is not None
+         share_page_active = not self.active_page_index
+-        selected = (self.get_selected_share() is not None) and share_page_active
++        selected = self.get_selected_share() is not None\
++             and share_page_active
+         self.connect_item.set_sensitive(not connected)
+         self.disconnect_item.set_sensitive(connected)
+@@ -922,7 +958,8 @@ class ShareWindow(gtk.Window):
+         self.new_item.set_sensitive(connected and share_page_active)
+         self.delete_item.set_sensitive(connected and selected)
+         self.edit_item.set_sensitive(connected and selected)
+-        self.new_share_wizard_item.set_sensitive(connected and share_page_active)
++        self.new_share_wizard_item.set_sensitive(connected
++                 and share_page_active)
+         self.connect_button.set_sensitive(not connected)
+         self.disconnect_button.set_sensitive(connected)
+@@ -930,12 +967,15 @@ class ShareWindow(gtk.Window):
+         self.new_button.set_sensitive(connected and share_page_active)
+         self.delete_button.set_sensitive(connected and selected)
+         self.edit_button.set_sensitive(connected and selected)
+-        self.new_share_wizard_button.set_sensitive(connected and share_page_active)
+-
+-        self.active_frame_new_button.set_sensitive(connected and share_page_active)
+-        self.active_frame_delete_button.set_sensitive(connected and selected)
+-        self.active_frame_edit_button.set_sensitive(connected and selected)
++        self.new_share_wizard_button.set_sensitive(connected
++                 and share_page_active)
++        self.active_frame_new_button.set_sensitive(connected
++                 and share_page_active)
++        self.active_frame_delete_button.set_sensitive(connected
++                 and selected)
++        self.active_frame_edit_button.set_sensitive(connected
++                 and selected)
+     def on_disconnect_item_activate(self, widget):
+         if self.pipe_manager is not None:
+@@ -948,21 +988,19 @@ class ShareWindow(gtk.Window):
+         self.fill_active_pane()
+         self.fill_server_info()
+-        self.set_status("Disconnected.")
+-
++        self.set_status('Disconnected.')
+-
+-    def toggle_share_view_visiblity(self,widget,Junk):
++    def toggle_share_view_visiblity(self, widget, Junk):
+         """ Toggels Visiblity of hidden shares if authorised """
++
+         is_visible = self.show_all_share_checkbox.get_active()
+         self.pipe_manager.show_all_shares = is_visible
+         self.pipe_manager.get_shares_list()
+-        # set the box accordingly from get_shares list
+-        self.show_all_share_checkbox.set_active(self.pipe_manager.show_all_shares)
+-        # now refresh the share view
+-        self.refresh_shares_view()
++        self.show_all_share_checkbox.set_active(
++                                    self.pipe_manager.show_all_shares)
++        self.refresh_shares_view()
+     def on_key_press(self, widget, event):
+         if event.keyval == gtk.keysyms.F5:
+@@ -970,77 +1008,72 @@ class ShareWindow(gtk.Window):
+         elif event.keyval == gtk.keysyms.Delete:
+             self.on_delete_item_activate(None)
+         elif event.keyval == gtk.keysyms.Return:
+-            myev = gtk.gdk.Event(gtk.gdk._2BUTTON_PRESS) #emulate a double-click
++            myev = gtk.gdk.Event(gtk.gdk._2BUTTON_PRESS)
++            # emulates a double-click
+             if self.active_page_index == 0:
+                 self.on_shares_tree_view_button_press(None, myev)
+-
+-
+     def on_quit_item_activate(self, widget):
+         self.on_self_delete(None, None)
+-
+-
+-    def on_new_item_activate(self, widget,wizard_mode=False):
++    def on_new_item_activate(self, widget, wizard_mode=False):
+         share = self.run_share_add_edit_dialog(wizard_mode=wizard_mode)
+-        #TODO cleanup Debug
+-        #print share.name,share.comment,share.password,str(share.type),str(share.max_users),share.path
++
+         if share is None:
+-            self.set_status("Share creation canceled.")
++            self.set_status('Share creation canceled.')
+             return
+         try:
+             self.pipe_manager.add_share(share)
+-            self.set_status("Successfully added share \'%s\'." %
+-                (share.name))
++            self.set_status("Successfully added share \'%s\'."
++                             % share.name)
+         except RuntimeError, re:
+-            msg = "Failed to add share: %s." % (re.args[1])
++            msg = 'Failed to add share: %s.' % re.args[1]
+             self.set_status(msg)
+             print msg
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         except Exception, ex:
+-            msg = "Failed to ad share: %s." % (str(ex))
++            msg = 'Failed to ad share: %s.' % str(ex)
+             self.set_status(msg)
+             print msg
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         self.refresh_shares_view()
+-
+-
+-
+-
+     def on_edit_item_activate(self, widget):
+         share = self.get_selected_share()
+-        share = self.run_share_add_edit_dialog(share, self.update_share_callback)
++        share = self.run_share_add_edit_dialog(share,
++                self.update_share_callback)
+         if share is None:
+-            self.set_status("Last Share Edit Cancelled.")
++            self.set_status('Last Share Edit Cancelled.')
+             return
+         try:
+             self.pipe_manager.modify_share(share)
+-            self.set_status("Successfully modified share \'%s\'." %
+-                (share.name))
++            self.set_status("Successfully modified share \'%s\'."
++                             % share.name)
+         except RuntimeError, re:
+-            msg = "Failed to add share: %s." % (re.args[1])
++            msg = 'Failed to add share: %s.' % re.args[1]
+             self.set_status(msg)
+             print msg
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         except Exception, ex:
+-            msg = "Failed to ad share: %s." % (str(ex))
++            msg = 'Failed to ad share: %s.' % str(ex)
+             self.set_status(msg)
+             print msg
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         self.refresh_shares_view()
+-
+-
+     def on_delete_item_activate(self, widget):
+         share = self.get_selected_share()
+@@ -1049,78 +1082,87 @@ class ShareWindow(gtk.Window):
+             try:
+                 self.pipe_manager.delete_share(share.name)
+-                self.set_status("Successfully deleted share \'%s\'." % (share.name))
+-
++                self.set_status("Successfully deleted share \'%s\'."
++                                 % share.name)
+             except RuntimeError, re:
+-                msg = "Failed to delete share: %s." % (re.args[1])
++
++                msg = 'Failed to delete share: %s.'\
++                     % re.args[1]
+                 self.set_status(msg)
+                 print msg
+                 traceback.print_exc()
+-                self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++                self.run_message_dialog(gtk.MESSAGE_ERROR,
++                        gtk.BUTTONS_OK, msg)
+             except Exception, ex:
+-                msg = "Failed to delete share: %s." % (str(ex))
++                msg = 'Failed to delete share: %s.' % str(ex)
+                 self.set_status(msg)
+                 print msg
+                 traceback.print_exc()
+-                self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++                self.run_message_dialog(gtk.MESSAGE_ERROR,
++                        gtk.BUTTONS_OK, msg)
+             self.refresh_shares_view()
+-
+-
+-    def on_notebook_switch_page(self, widget, page, page_num):
++    def on_notebook_switch_page(
++        self,
++        widget,
++        page,
++        page_num,
++        ):
+         self.active_page_index = page_num
+         self.update_sensitivity()
+     def update_share_callback(self, share):
+         try:
+             self.pipe_manager.modify_share(share)
+-            self.set_status("Share \'%s\' Modified." % (share.name))
++            self.set_status("Share \'%s\' Modified." % share.name)
+         except RuntimeError, re:
+-            msg = "Failed to Modify Share: %s." % (re.args[1])
++            msg = 'Failed to Modify Share: %s.' % re.args[1]
+             print msg
+             self.set_status(msg)
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
+-
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         except Exception, ex:
+-            msg = "Failed to Modify Share: %s." % (str(ex))
++
++            msg = 'Failed to Modify Share: %s.' % str(ex)
+             print msg
+             self.set_status(msg)
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         finally:
+             self.refresh_shares_view()
+-
+     def on_refresh_item_activate(self, widget):
+         try:
+             self.pipe_manager.get_shares_list()
+         except RuntimeError, re:
+-            msg = "Failed to Refresh SRV Info: %s." % (re.args[1])
++            msg = 'Failed to Refresh SRV Info: %s.'\
++                 % re.args[1]
+             self.set_status(msg)
+             print msg
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         except Exception, ex:
+-            msg = "Failed to Refresh SRV Info: %s." % (str(ex))
++            msg = 'Failed to Refresh SRV Info: %s.' % str(ex)
+             self.set_status(msg)
+             print msg
+             traceback.print_exc()
+-            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
++            self.run_message_dialog(gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
++                                    msg)
+         self.refresh_shares_view()
+-        self.set_status("Successfully Refreshed Shares List.")
++        self.set_status('Successfully Refreshed Shares List.')
+-        #deselect any selected shares
+-        (model, iter) = self.shares_tree_view.get_selection().get_selected()
++        (model, iter) = \
++            self.shares_tree_view.get_selection().get_selected()
+         if iter is None:
+             return
+         selector = self.shares_tree_view.get_selection()
+         selector.unselect_iter(iter)
+-
+-
+     def on_shares_tree_view_button_press(self, widget, event):
+         if self.get_selected_share() is None:
+             return
+@@ -1128,36 +1170,33 @@ class ShareWindow(gtk.Window):
+         if event.type == gtk.gdk._2BUTTON_PRESS:
+             self.on_edit_item_activate(self.edit_item)
+-
+-
+     def on_self_delete(self, widget, event):
+-        if (self.pipe_manager is not None):
++        if self.pipe_manager is not None:
+             self.on_disconnect_item_activate(self.disconnect_item)
+         gtk.main_quit()
+         return False
+-
+-
+     def refresh_shares_view(self):
+         if not self.connected():
+             return None
+-        (model, paths) = self.shares_tree_view.get_selection().get_selected_rows()
++        (model, paths) = \
++            self.shares_tree_view.get_selection().get_selected_rows()
+         self.pipe_manager.get_shares_list()
+         self.shares_store.clear()
+-        for share in self.pipe_manager.share_list :
+-            type_comment = self.pipe_manager.get_share_type_info(share.type,'desc')
++        for share in self.pipe_manager.share_list:
++            type_comment = \
++                self.pipe_manager.get_share_type_info(share.type, 'desc'
++                    )
+             view_compat_data = [share.name, type_comment,
+-                share.comment, share.path]
++                                share.comment, share.path]
+             self.shares_store.append(view_compat_data)
+-        if (len(paths) > 0):
++        if len(paths) > 0:
+             self.shares_tree_view.get_selection().select_path(paths[0])
+-
+-
+     def fill_active_pane(self):
+         """ Fills sthe active left pane """
+@@ -1166,193 +1205,223 @@ class ShareWindow(gtk.Window):
+         except:
+             share = None
+-        widget_to_delete = self.shareinfo_frame.get_children()[0]
++        widget_to_delete = \
++            self.shareinfo_frame.get_children()[0]
+         self.shareinfo_frame.remove(widget_to_delete)
+         if share is None:
+-            table = gtk.Table(1,2)
++            table = gtk.Table(1, 2)
+             table.set_border_width(5)
+-            self.active_pane_frame_label.set_markup('<b> No Share Selected </b>')
+-
++            self.active_pane_frame_label.set_markup(
++                                        '<b> No Share Selected </b>')
+-            label = gtk.Label("Please Select a Share First")
++            label = gtk.Label('Please Select a Share First')
+             label.set_alignment(1, 0.5)
+-            table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(label, 0, 1, 0, 1, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
+-            label = gtk.Label(" "*55 )
++            label = gtk.Label(' ' * 55)
+             label.set_alignment(1, 0.5)
+-            table.attach(label, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(label, 1, 2, 0, 1, gtk.FILL,
++                            gtk.FILL | gtk.EXPAND, 0, 0)
+         else:
++
+             stype = share.type
+-            flag_set = self.pipe_manager.get_share_type_info(stype,'flags')
++            flag_set = self.pipe_manager.get_share_type_info(stype,
++                    'flags')
+-            rows_required = (8 -int(share.password is "") -int(share.max_users == 0xFFFFFFFF)
+-                            -int(not flag_set[1]) + ((len(share.path)/35)+1)
+-                            +((len(share.comment)/35)+1))
++            rows_required = ((8 - int(share.password is ''))
++                              - int(share.max_users == 0xFFFFFFFF))\
++                 - int(not flag_set[1]) + len(share.path) / 35\
++                 + 1 + len(share.comment) / 35 + 1
+-            table = gtk.Table(rows_required,2)
++            table = gtk.Table(rows_required, 2)
+             table.set_border_width(5)
+             table.set_row_spacings(2)
+             table.set_col_spacings(6)
+             row_index = 0
+-            self.active_pane_frame_label.set_markup('<b>Selected Share Details</b>')
+-
++            self.active_pane_frame_label.set_markup(
++                                    '<b>Selected Share Details</b>')
+             label = gtk.Label(' Share Name  : ')
+             label.set_alignment(1, 0.5)
+-            table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(label, 0, 1, row_index, row_index + 1,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+             label = gtk.Label(share.name)
+             label.set_alignment(0, 0.5)
+-            table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            row_index+=1
++            table.attach(label, 1, 2, row_index, row_index + 1,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++            row_index += 1
+             label = gtk.Label(' Comment  : ')
+             label.set_alignment(1, 0.5)
+-            table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(label, 0, 1, row_index, row_index + 1,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+-            if len(share.comment)>35:
+-                for i in range((len(share.comment)/35)+1) :
+-                    label = gtk.Label(share.comment[i*35:i*35+35])
++            if len(share.comment) > 35:
++                for i in range(len(share.comment) / 35 + 1):
++                    label = gtk.Label(share.comment[i * 35:i * 35 + 35])
+                     label.set_alignment(0, 0.5)
+-                    table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-                    row_index+=1
+-            else :
+-                padding = (35 - len(share.comment))*" "
+-                label = gtk.Label("".join([share.comment,padding]))
++                    table.attach(label, 1, 2, row_index, row_index + 1,
++                                  gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++                    row_index += 1
++            else:
++                padding = (35 - len(share.comment)) * ' '
++                label = gtk.Label(''.join([share.comment, padding]))
+                 label.set_alignment(0, 0.5)
+-                table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-                row_index+=1
++                table.attach(label, 1, 2, row_index, row_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++                row_index += 1
+             label = gtk.Label(' Path  : ')
+             label.set_alignment(1, 0.5)
+-            table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++            table.attach(label, 0, 1, row_index, row_index + 1,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+-            if len(share.path)>35:
+-                for i in range((len(share.path)/35)+1) :
+-                    label = gtk.Label(share.path[i*35:i*35+35])
++            if len(share.path) > 35:
++                for i in range(len(share.path) / 35 + 1):
++                    label = gtk.Label(share.path[i * 35:i * 35 + 35])
+                     label.set_alignment(0, 0.5)
+-                    table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-                    row_index+=1
+-            else :
+-                if share.path == "":
+-                    padding = 41*" "
++                    table.attach(label, 1, 2, row_index, row_index + 1,
++                                 gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++                    row_index += 1
++            else:
++                if share.path == '':
++                    padding = 41 * ' '
+                 else:
+-                    padding = (35 - len(share.path))*" "
+-                label = gtk.Label("".join([share.path,padding]))
++                    padding = (35 - len(share.path)) * ' '
++                label = gtk.Label(''.join([share.path, padding]))
+                 label.set_alignment(0, 0.5)
+-                table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-                row_index+=1
++                table.attach(label, 1, 2, row_index, row_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++                row_index += 1
+-
+-
+-            if share.password :
++            if share.password:
+                 label = gtk.Label(' Password  : ')
+                 label.set_alignment(1, 0.5)
+-                table.attach(label, 0, 1, row_index, row_index+1, gtk.SHRINK,gtk.FILL | gtk.EXPAND, 0, 0)
++                table.attach(label, 0, 1, row_index, row_index + 1,
++                                gtk.SHRINK, gtk.FILL | gtk.EXPAND, 0, 0)
+-                label = gtk.Label("Protection Enabled")
++                label = gtk.Label('Protection Enabled')
+                 label.set_alignment(0, 0.5)
+-                table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-                row_index+=1
++                table.attach(label, 1, 2, row_index, row_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++                row_index += 1
+             label = gtk.Label('<b> Share Type</b>')
+             label.set_use_markup(True)
+             label.set_alignment(0, 0.5)
+-            table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            row_index+=1
++            table.attach(label, 0, 1, row_index, row_index + 1,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++            row_index += 1
+             label = gtk.Label(' Type Description  : ')
+             label.set_alignment(1, 0.5)
+-            table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
+-            label_data = self.pipe_manager.get_share_type_info(stype,'desc')
++            table.attach(label, 0, 1, row_index, row_index + 1,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++            label_data = self.pipe_manager.get_share_type_info(
++                                                    stype, 'desc')
+             label = gtk.Label(label_data)
+             label.set_alignment(0, 0.5)
+-            table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            row_index+=1
++            table.attach(label, 1, 2, row_index, row_index + 1,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++            row_index += 1
+             label = gtk.Label()
+             label.set_markup('<b> Special Flags </b>')
+             label.set_alignment(0, 0.5)
+-            table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-            row_index+=1
++            table.attach(label, 0, 1, row_index, row_index + 1,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++            row_index += 1
+             flags_present = False
+             if flag_set[0]:
+                 flags_present = True
+                 label = gtk.Label(' Temporary  : ')
+                 label.set_alignment(1, 0.5)
+-                table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++                table.attach(label, 0, 1, row_index, row_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+                 label = gtk.Label(str(flag_set[0]))
+                 label.set_alignment(0, 0.5)
+-                table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-                row_index+=1
++                table.attach(label, 1, 2, row_index, row_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++                row_index += 1
+             if flag_set[1]:
+                 flags_present = True
+                 label = gtk.Label(' Hidden  : ')
+                 label.set_alignment(1, 0.5)
+-                table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++                table.attach(label, 0, 1, row_index, row_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+                 label = gtk.Label(str(flag_set[1]))
+                 label.set_alignment(0, 0.5)
+-                table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-                row_index+=1
++                table.attach(label, 1, 2, row_index, row_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++                row_index += 1
+-            if not (flags_present) :
+-                label = gtk.Label("No Special Flags")
++            if not flags_present:
++                label = gtk.Label('No Special Flags')
+                 label.set_alignment(0, 0.5)
+-                table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-                row_index+=1
++                table.attach(label, 1, 2, row_index, row_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++                row_index += 1
+-            if not (share.max_users == 0xFFFFFFFF):
++            if not share.max_users == 0xFFFFFFFF:
+                 label = gtk.Label(' Max Users  : ')
+                 label.set_alignment(1, 0.5)
+-                table.attach(label, 0, 1, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++                table.attach(label, 0, 1, row_index, row_index + 1,
++                                 gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+                 label = gtk.Label(share.max_users)
+                 label.set_alignment(0, 0.5)
+-                table.attach(label, 1, 2, row_index, row_index+1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-                row_index+=1
++                table.attach(label, 1, 2, row_index, row_index + 1,
++                                gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++                row_index += 1
+         self.shareinfo_frame.add(table)
+         self.shareinfo_frame.show_all()
+-
+-
+     def create(self):
+-        # main window
+-        self.set_title("Samba-Gtk Share Management Interface")
++              
++              # main window
++        self.set_title('Samba-Gtk Share Management Interface')
+         self.set_default_size(800, 600)
+-        self.icon_filename = os.path.join(sys.path[0], "images", "network.png")
+-        self.share_icon_filename = os.path.join(sys.path[0], "images", "network.png")
+-        self.icon_pixbuf = gtk.gdk.pixbuf_new_from_file(self.icon_filename)
++        self.icon_filename = os.path.join(sys.path[0], 'images'
++                , 'network.png')
++        self.share_icon_filename = os.path.join(sys.path[0],
++                'images', 'network.png')
++        self.icon_pixbuf = \
++            gtk.gdk.pixbuf_new_from_file(self.icon_filename)
+         self.set_icon(self.icon_pixbuf)
+         accel_group = gtk.AccelGroup()
+-        vbox = gtk.VBox(False, 0)
+-        self.add(vbox)
+-
++        toplevel_vbox = gtk.VBox(False, 0)
++        self.add(toplevel_vbox)
++        
+         # menu
+         self.menubar = gtk.MenuBar()
+-        vbox.pack_start(self.menubar, False, False, 0)
++        toplevel_vbox.pack_start(self.menubar, False, False, 0)
+-        self.file_item = gtk.MenuItem("_File")
++        self.file_item = gtk.MenuItem('_File')
+         self.menubar.add(self.file_item)
+         file_menu = gtk.Menu()
+         self.file_item.set_submenu(file_menu)
+-        self.connect_item = gtk.ImageMenuItem(gtk.STOCK_CONNECT, accel_group)
++        self.connect_item = gtk.ImageMenuItem(gtk.STOCK_CONNECT,
++                accel_group)
+         file_menu.add(self.connect_item)
+-        self.disconnect_item = gtk.ImageMenuItem(gtk.STOCK_DISCONNECT, accel_group)
++        self.disconnect_item = gtk.ImageMenuItem(gtk.STOCK_DISCONNECT,
++                accel_group)
+         self.disconnect_item.set_sensitive(False)
+         file_menu.add(self.disconnect_item)
+@@ -1363,17 +1432,18 @@ class ShareWindow(gtk.Window):
+         self.quit_item = gtk.ImageMenuItem(gtk.STOCK_QUIT, accel_group)
+         file_menu.add(self.quit_item)
+-        self.view_item = gtk.MenuItem("_View")
++        self.view_item = gtk.MenuItem('_View')
+         self.menubar.add(self.view_item)
+         view_menu = gtk.Menu()
+         self.view_item.set_submenu(view_menu)
+-        self.refresh_item = gtk.ImageMenuItem(gtk.STOCK_REFRESH, accel_group)
++        self.refresh_item = gtk.ImageMenuItem(gtk.STOCK_REFRESH,
++                accel_group)
+         self.refresh_item.set_sensitive(False)
+         view_menu.add(self.refresh_item)
+-        self.share_item = gtk.MenuItem("_Share")
++        self.share_item = gtk.MenuItem('_Share')
+         self.menubar.add(self.share_item)
+         share_menu = gtk.Menu()
+@@ -1383,7 +1453,8 @@ class ShareWindow(gtk.Window):
+         self.new_item.set_sensitive(False)
+         share_menu.add(self.new_item)
+-        self.delete_item = gtk.ImageMenuItem(gtk.STOCK_DELETE, accel_group)
++        self.delete_item = gtk.ImageMenuItem(gtk.STOCK_DELETE,
++                accel_group)
+         self.delete_item.set_sensitive(False)
+         share_menu.add(self.delete_item)
+@@ -1391,36 +1462,39 @@ class ShareWindow(gtk.Window):
+         self.edit_item.set_sensitive(False)
+         share_menu.add(self.edit_item)
+-        self.wizard_item = gtk.MenuItem("_Wizard")
++        self.wizard_item = gtk.MenuItem('_Wizard')
+         self.menubar.add(self.wizard_item)
+         wizard_menu = gtk.Menu()
+         self.wizard_item.set_submenu(wizard_menu)
+-        self.new_share_wizard_item = gtk.MenuItem(label="New Share Wizard")
++        self.new_share_wizard_item = \
++            gtk.MenuItem(label='New Share Wizard')
+         wizard_menu.add(self.new_share_wizard_item)
+-        self.help_item = gtk.MenuItem("_Help")
++        self.help_item = gtk.MenuItem('_Help')
+         self.menubar.add(self.help_item)
+         help_menu = gtk.Menu()
+         self.help_item.set_submenu(help_menu)
+-        self.about_item = gtk.ImageMenuItem(gtk.STOCK_ABOUT, accel_group)
++        self.about_item = gtk.ImageMenuItem(gtk.STOCK_ABOUT,
++                accel_group)
+         help_menu.add(self.about_item)
+-        # toolbar
++        # Toolbar
+         self.toolbar = gtk.Toolbar()
+-        vbox.pack_start(self.toolbar, False, False, 0)
++        toplevel_vbox.pack_start(self.toolbar, False, False, 0)
+         self.connect_button = gtk.ToolButton(gtk.STOCK_CONNECT)
+         self.connect_button.set_is_important(True)
+-        self.connect_button.set_tooltip_text("Connect to a server")
++        self.connect_button.set_tooltip_text('Connect to a server')
+         self.toolbar.insert(self.connect_button, 0)
+         self.disconnect_button = gtk.ToolButton(gtk.STOCK_DISCONNECT)
+         self.disconnect_button.set_is_important(True)
+-        self.disconnect_button.set_tooltip_text("Disconnect from the server")
++        self.disconnect_button.set_tooltip_text(
++                                        'Disconnect from the server')
+         self.toolbar.insert(self.disconnect_button, 1)
+         sep = gtk.SeparatorToolItem()
+@@ -1443,330 +1517,393 @@ class ShareWindow(gtk.Window):
+         image = gtk.Image()
+         image.set_from_stock(gtk.STOCK_EXECUTE, 48)
+-        self.new_share_wizard_button = gtk.ToolButton(image,"New Share Wizard")
++        self.new_share_wizard_button = gtk.ToolButton(image,
++                'New Share Wizard')
+         self.new_share_wizard_button.set_is_important(True)
+         self.toolbar.insert(self.new_share_wizard_button, 7)
+-        self.new_button.set_tooltip_text("Add a new Share")
+-        self.edit_button.set_tooltip_text("Edit a Share")
+-        self.delete_button.set_tooltip_text("Delete a Share")
++        self.new_button.set_tooltip_text('Add a new Share')
++        self.edit_button.set_tooltip_text('Edit a Share')
++        self.delete_button.set_tooltip_text('Delete a Share')
+-        #share-page
++        # Share-page
+         self.share_notebook = gtk.Notebook()
+-        vbox.pack_start(self.share_notebook, True, True, 0)
++        toplevel_vbox.pack_start(self.share_notebook, True, True, 0)
+         main_hbox = gtk.HBox()
+-        self.share_notebook.append_page(main_hbox, gtk.Label("Share Management"))
+-
+-        # share listing on left side
+-
++        self.share_notebook.append_page(main_hbox,
++                gtk.Label('Share Management'))
++        
++        # Share listing on left side
+         rvbox = gtk.VBox()
+-        main_hbox.pack_start(rvbox,True,True,0)
++        main_hbox.pack_start(rvbox, True, True, 0)
+         scrolledwindow = gtk.ScrolledWindow(None, None)
+-        scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
++        scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC,
++                                        gtk.POLICY_AUTOMATIC)
+         scrolledwindow.set_shadow_type(gtk.SHADOW_IN)
+-        rvbox.pack_start(scrolledwindow,True,True,2)
+-
++        rvbox.pack_start(scrolledwindow, True, True, 2)
+         self.shares_tree_view = gtk.TreeView()
+         scrolledwindow.add(self.shares_tree_view)
+         column = gtk.TreeViewColumn()
+-        column.set_title("")
++        column.set_title('')
+         renderer = gtk.CellRendererPixbuf()
+-        renderer.set_property("pixbuf", gtk.gdk.pixbuf_new_from_file_at_size(self.share_icon_filename, 22, 22))
++        renderer.set_property('pixbuf',
++                              gtk.gdk.pixbuf_new_from_file_at_size(
++                              self.share_icon_filename,22, 22))
+         column.pack_start(renderer, True)
+         self.shares_tree_view.append_column(column)
+         column = gtk.TreeViewColumn()
+-        column.set_title("Name")
++        column.set_title('Name')
+         column.set_resizable(True)
+         column.set_sort_column_id(0)
+         renderer = gtk.CellRendererText()
+         column.pack_start(renderer, True)
+         self.shares_tree_view.append_column(column)
+-        column.add_attribute(renderer, "text", 0)
++        column.add_attribute(renderer, 'text', 0)
+         column = gtk.TreeViewColumn()
+-        column.set_title("Share Type")
++        column.set_title('Share Type')
+         column.set_resizable(True)
+         column.set_expand(True)
+         column.set_sort_column_id(1)
+         renderer = gtk.CellRendererText()
+         column.pack_start(renderer, True)
+         self.shares_tree_view.append_column(column)
+-        column.add_attribute(renderer, "text", 1)
++        column.add_attribute(renderer, 'text', 1)
+         column = gtk.TreeViewColumn()
+-        column.set_title("Comment")
++        column.set_title('Comment')
+         column.set_resizable(True)
+         column.set_expand(True)
+         column.set_sort_column_id(2)
+         renderer = gtk.CellRendererText()
+         column.pack_start(renderer, True)
+         self.shares_tree_view.append_column(column)
+-        column.add_attribute(renderer, "text", 2)
++        column.add_attribute(renderer, 'text', 2)
+         column = gtk.TreeViewColumn()
+-        column.set_title("Path")
++        column.set_title('Path')
+         column.set_resizable(True)
+         column.set_sort_column_id(3)
+         renderer = gtk.CellRendererText()
+         column.pack_start(renderer, True)
+         self.shares_tree_view.append_column(column)
+-        column.add_attribute(renderer, "text", 3)
++        column.add_attribute(renderer, 'text', 3)
+-        self.shares_store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
+-        self.shares_store.set_sort_column_id(0, gtk.SORT_ASCENDING)
++        self.shares_store = gtk.ListStore(gobject.TYPE_STRING,
++                gobject.TYPE_STRING, gobject.TYPE_STRING,
++                gobject.TYPE_STRING)
++        self.shares_store.set_sort_column_id(0,
++                gtk.SORT_ASCENDING)
+         self.shares_tree_view.set_model(self.shares_store)
+         hbox = gtk.HBox()
+-        rvbox.pack_start(hbox,False,False,0)
+-
+-
+-        self.show_all_share_checkbox = gtk.CheckButton("Show Hidden Shares")
+-        hbox.pack_end(self.show_all_share_checkbox,False,False,0)
+-        self.show_all_share_checkbox.set_tooltip_text('Enable or disable the visiblity of hidden shares')
++        rvbox.pack_start(hbox, False, False, 0)
++
++        self.show_all_share_checkbox = \
++            gtk.CheckButton('Show Hidden Shares')
++        hbox.pack_end(self.show_all_share_checkbox, False, False,
++                      0)
++        self.show_all_share_checkbox.set_tooltip_text(
++                    'Enable or disable the visiblity of hidden shares')
+         self.show_all_share_checkbox.set_active(False)
+-        self.show_all_share_checkbox.connect("toggled",self.toggle_share_view_visiblity,None)
+-
+-
++        self.show_all_share_checkbox.connect('toggled',
++                self.toggle_share_view_visiblity, None)
+-        ### right active widget :
++        ### Right active widget :
++        
+         vbox = gtk.VBox()
+-        main_hbox.pack_start(vbox,False,False,0)
+-
+-
++        main_hbox.pack_start(vbox, False, False, 0)
+         self.shareinfo_frame = gtk.Frame()
+         self.active_pane_frame_label = gtk.Label()
+         self.active_pane_frame_label.set_use_markup(True)
+-        self.active_pane_frame_label.set_markup('<b> No Share Selected </b>')
+-        self.shareinfo_frame.set_label_widget(self.active_pane_frame_label)
++        self.active_pane_frame_label.set_markup(
++                                        '<b> No Share Selected </b>')
++        self.shareinfo_frame.set_label_widget(
++                                        self.active_pane_frame_label)
+         vbox.pack_start(self.shareinfo_frame, False, True, 0)
+         self.shareinfo_frame.set_border_width(5)
+-        table = gtk.Table(1,2)
++        table = gtk.Table(1, 2)
+         table.set_border_width(5)
+         table.set_row_spacings(2)
+         table.set_col_spacings(6)
+         self.shareinfo_frame.add(table)
+-        label = gtk.Label("Please Slect a Share First" )
++        label = gtk.Label('Please Slect a Share First')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 0, 1,gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
++
+-        label = gtk.Label(" "*55 )
++        label = gtk.Label(' ' * 55)
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 1, 2, 0, 1, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 1, 2, 0, 1, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         hbox = gtk.HBox()
+-        vbox.pack_end(hbox,False,False,0)
++        vbox.pack_end(hbox, False, False, 0)
+-        table = gtk.Table(3,6,True)
+-        hbox.pack_start(table,False,True,0)
++        table = gtk.Table(3, 6, True)
++        hbox.pack_start(table, False, True, 0)
+-        self.active_frame_new_button = gtk.Button("New")
++        self.active_frame_new_button = gtk.Button('New')
+         self.active_frame_new_button.set_tooltip_text('Add a New Share')
+-        table.attach(self.active_frame_new_button, 2, 3, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.active_frame_new_button, 2, 3, 1, 2,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+-        self.active_frame_edit_button = gtk.Button("Edit")
+-        self.active_frame_edit_button.set_tooltip_text('Edit Current Share')
+-        table.attach(self.active_frame_edit_button, 3, 4, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
+-
+-        self.active_frame_delete_button = gtk.Button("Delete")
+-        self.active_frame_delete_button.set_tooltip_text('Delete Current Share')
+-        table.attach(self.active_frame_delete_button, 4, 5, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        self.active_frame_edit_button = gtk.Button('Edit')
++        self.active_frame_edit_button.set_tooltip_text(
++                                                'Edit Current Share')
++        table.attach(self.active_frame_edit_button, 3, 4, 1, 2,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++        self.active_frame_delete_button = gtk.Button('Delete')
++        self.active_frame_delete_button.set_tooltip_text(
++                                                'Delete Current Share')
++        table.attach(self.active_frame_delete_button, 4, 5, 1, 2,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+         # Server Info Page
+         hbox = gtk.HBox(True)
+-        self.share_notebook.append_page(hbox, gtk.Label("Share Server Info"))
++        self.share_notebook.append_page(hbox,
++                gtk.Label('Share Server Info'))
+         vbox = gtk.VBox()
+         hbox.pack_start(vbox, True, True, 0)
+-        self.srvinfo_frame =  gtk.Frame()
++        self.srvinfo_frame = gtk.Frame()
+         self.srv_info_label = gtk.Label('<b>Share Server Details</b>')
+         self.srv_info_label.set_use_markup(True)
+         self.srvinfo_frame.set_label_widget(self.srv_info_label)
+         vbox.pack_start(self.srvinfo_frame, False, True, 0)
+         self.srvinfo_frame.set_border_width(5)
+-        table = gtk.Table(10,2)
++        table = gtk.Table(10, 2)
+         table.set_border_width(5)
+         table.set_row_spacings(3)
+         table.set_col_spacings(6)
+         self.srvinfo_frame.add(table)
+-
+         label = gtk.Label(' Target Platform OS  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 1, 2, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.srvinfo_tos_label = gtk.Label()
+         self.srvinfo_tos_label.set_alignment(0, 0.5)
+-        table.attach(self.srvinfo_tos_label, 1, 2, 1, 2, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.srvinfo_tos_label, 1, 2, 1, 2,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' NetBIOS Name : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 2, 3, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.srvinfo_name_label = gtk.Label()
+         self.srvinfo_name_label.set_alignment(0, 0.5)
+-        table.attach(self.srvinfo_name_label, 1, 2, 2, 3, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.srvinfo_name_label, 1, 2, 2, 3,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Hidden  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 3, 4, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 3, 4, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.srvinfo_hidden_label = gtk.Label()
+         self.srvinfo_hidden_label.set_alignment(0, 0.5)
+-        table.attach(self.srvinfo_hidden_label, 1, 2, 3, 4, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.srvinfo_hidden_label, 1, 2, 3, 4,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Comment  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 4, 5, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 4, 5, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.srvinfo_comment_label = gtk.Label()
+         self.srvinfo_comment_label.set_alignment(0, 0.5)
+-        table.attach(self.srvinfo_comment_label, 1, 2, 4, 5, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.srvinfo_comment_label, 1, 2, 4 ,5,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Version : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 5, 6, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 5, 6, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.srvinfo_version_label = gtk.Label()
+         self.srvinfo_version_label.set_alignment(0, 0.5)
+-        table.attach(self.srvinfo_version_label, 1, 2, 5, 6, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.srvinfo_version_label, 1, 2, 5, 6,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
+         label = gtk.Label(' Server Type  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 6, 7, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 6, 7, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.srvinfo_type_label = gtk.Label()
+         self.srvinfo_type_label.set_alignment(0, 0.5)
+-        table.attach(self.srvinfo_type_label, 1, 2, 6, 7, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.srvinfo_type_label, 1, 2, 6, 7,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+         label = gtk.Label(' User Path  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 7, 8, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 7, 8, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.srvinfo_upath_label = gtk.Label()
+         self.srvinfo_upath_label.set_alignment(0, 0.5)
+-        table.attach(self.srvinfo_upath_label, 1, 2, 7, 8, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.srvinfo_upath_label, 1, 2, 7, 8,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+         label = gtk.Label(' Timeout  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 8, 9, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 8, 9, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.srvinfo_to_label = gtk.Label()
+         self.srvinfo_to_label.set_alignment(0, 0.5)
+-        table.attach(self.srvinfo_to_label, 1, 2, 8, 9, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.srvinfo_to_label, 1, 2, 8, 9,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+         label = gtk.Label(' Announce / Anndelta  : ')
+         label.set_alignment(1, 0.5)
+-        table.attach(label, 0, 1, 9, 10, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(label, 0, 1, 9, 10, gtk.FILL,
++                        gtk.FILL | gtk.EXPAND, 0, 0)
+         self.srvinfo_aa_label = gtk.Label()
+         self.srvinfo_aa_label.set_alignment(0, 0.5)
+-        table.attach(self.srvinfo_aa_label, 1, 2, 9, 10, gtk.FILL,gtk.FILL | gtk.EXPAND, 0, 0)
++        table.attach(self.srvinfo_aa_label, 1, 2, 9, 10,
++                            gtk.FILL, gtk.FILL | gtk.EXPAND, 0, 0)
++
+         vbox = gtk.VBox()
+-        hbox.pack_start(vbox,True,True,0)
++        hbox.pack_start(vbox, True, True, 0)
+-        self.sd_frame =  gtk.Frame()
++        self.sd_frame = gtk.Frame()
+         self.sd_frame.set_border_width(5)
+         label = gtk.Label('<b> Shared Disks </b>')
+         label.set_use_markup(True)
+         self.sd_frame.set_label_widget(label)
+         vbox.pack_start(self.sd_frame, False, False, 0)
+-
+-
++        
+         # status bar
+         self.statusbar = gtk.Statusbar()
+         self.statusbar.set_has_resize_grip(True)
+-        vbox.pack_start(self.statusbar, False, False, 0)
+-
++        toplevel_vbox.pack_end(self.statusbar, False, False, 0)
++        
+         # signals/events
+-        self.connect("delete_event", self.on_self_delete)
+-        self.connect("key-press-event", self.on_key_press)
+-
+-        self.connect_item.connect("activate", self.on_connect_item_activate)
+-        self.disconnect_item.connect("activate", self.on_disconnect_item_activate)
+-        self.quit_item.connect("activate", self.on_quit_item_activate)
+-        self.refresh_item.connect("activate", self.on_refresh_item_activate)
+-        self.about_item.connect("activate", self.on_about_item_activate)
+-
+-
+-        self.new_item.connect("activate", self.on_new_item_activate)
+-        self.delete_item.connect("activate", self.on_delete_item_activate)
+-        self.edit_item.connect("activate", self.on_edit_item_activate)
+-        self.new_share_wizard_item.connect("activate", self.on_new_item_activate,True)
+-
+-        self.connect_button.connect("clicked", self.on_connect_item_activate)
+-        self.disconnect_button.connect("clicked", self.on_disconnect_item_activate)
+-
+-        self.new_button.connect("clicked", self.on_new_item_activate)
+-        self.delete_button.connect("clicked", self.on_delete_item_activate)
+-        self.edit_button.connect("clicked", self.on_edit_item_activate)
+-        self.new_share_wizard_button.connect("clicked", self.on_new_item_activate,True)
+-
+-        self.active_frame_new_button.connect("clicked", self.on_new_item_activate)
+-        self.active_frame_delete_button.connect("clicked", self.on_delete_item_activate)
+-        self.active_frame_edit_button.connect("clicked", self.on_edit_item_activate)
+-
+-        self.shares_tree_view.get_selection().connect("changed", self.on_update_sensitivity)
+-        self.shares_tree_view.get_selection().connect("changed", self.on_switch_fill_active_pane)
+-        self.shares_tree_view.connect("button_press_event", self.on_shares_tree_view_button_press)
+-
+-        self.share_notebook.connect("switch-page", self.on_notebook_switch_page)
++        self.connect('delete_event', self.on_self_delete)
++        self.connect('key-press-event', self.on_key_press)
++
++        self.connect_item.connect('activate',
++                                  self.on_connect_item_activate)
++        self.disconnect_item.connect('activate',
++                self.on_disconnect_item_activate)
++        self.quit_item.connect('activate', self.on_quit_item_activate)
++        self.refresh_item.connect('activate',
++                                  self.on_refresh_item_activate)
++        self.about_item.connect('activate', self.on_about_item_activate)
++
++        self.new_item.connect('activate', self.on_new_item_activate)
++        self.delete_item.connect('activate',
++                                 self.on_delete_item_activate)
++        self.edit_item.connect('activate', self.on_edit_item_activate)
++        self.new_share_wizard_item.connect('activate',
++                self.on_new_item_activate, True)
++
++        self.connect_button.connect('clicked',
++                                    self.on_connect_item_activate)
++        self.disconnect_button.connect('clicked',
++                self.on_disconnect_item_activate)
++
++        self.new_button.connect('clicked', self.on_new_item_activate)
++        self.delete_button.connect('clicked',
++                                   self.on_delete_item_activate)
++        self.edit_button.connect('clicked', self.on_edit_item_activate)
++        self.new_share_wizard_button.connect('clicked',
++                self.on_new_item_activate, True)
++
++        self.active_frame_new_button.connect('clicked',
++                self.on_new_item_activate)
++        self.active_frame_delete_button.connect('clicked',
++                self.on_delete_item_activate)
++        self.active_frame_edit_button.connect('clicked',
++                self.on_edit_item_activate)
++
++        self.shares_tree_view.get_selection().connect('changed',
++                self.on_update_sensitivity)
++        self.shares_tree_view.get_selection().connect('changed',
++                self.on_switch_fill_active_pane)
++        self.shares_tree_view.connect('button_press_event',
++                self.on_shares_tree_view_button_press)
++
++        self.share_notebook.connect('switch-page',
++                                    self.on_notebook_switch_page)
+         self.add_accel_group(accel_group)
+ ############################################################################################################
++
+ def PrintUsage():
+-    print "Usage: %s [OPTIONS]" % (str(os.path.split(__file__)[-1]))
+-    print "All options are optional. The user will be queried for additional information if needed.\n"
+-    print "  -s  --server\t\tspecify the server to connect to."
+-    print "  -u  --user\t\tspecify the username."
+-    print "  -p  --password\tThe password for the user."
+-    print "  -t  --transport\tTransport type.\n\t\t\t\t0 for RPC, SMB, TCP/IP\n\t\t\t\t1 for RPC, TCP/IP\n\t\t\t\t2 for localhost."
+-    print "  -c  --connect-now\tSkip the connect dialog."
++    print 'Usage: %s [OPTIONS]'\
++         % str(os.path.split(__file__)[-1])
++    print 'All options are optional. The user will be queried for additional information if needed.\n'
++    print '  -s  --server\t\tspecify the server to connect to.'
++    print '  -u  --user\t\tspecify the username.'
++    print '  -p  --password\tThe password for the user.'
++    print '''  -t  --transport\tTransport type.
++\t\t\t\t0 for RPC, SMB, TCP/IP
++\t\t\t\t1 for RPC, TCP/IP
++\t\t\t\t2 for localhost.'''
++    print '  -c  --connect-now\tSkip the connect dialog.'
+ def ParseArgs(argv):
+     arguments = {}
+-    try: #get arguments into a nicer format
+-        opts, args = getopt.getopt(argv, "chu:s:p:t:", ["help", "user=", "server=", "password=", "connect-now", "transport="])
++    try:  # get arguments into a nicer format
++        (opts, args) = getopt.getopt(argv, 'chu:s:p:t:', [
++            'help',
++            'user=',
++            'server=',
++            'password=',
++            'connect-now',
++            'transport=',
++            ])
+     except getopt.GetoptError:
+         PrintUsage()
+         sys.exit(2)
+-    for opt, arg in opts:
+-        if opt in ("-h", "--help"):
++    for (opt, arg) in opts:
++        if opt in ('-h', '--help'):
+             PrintUsage()
+             sys.exit(0)
+-        elif opt in ("-s", "--server"):
+-            arguments.update({"server":arg})
+-        elif opt in ("-u", "--user"):
+-            arguments.update({"username":arg})
+-        elif opt in ("-p", "--password"):
+-            arguments.update({"password":arg})
+-        elif opt in ("-t", "--transport"):
+-            arguments.update({"transport_type":int(arg)})
+-        elif opt in ("-c", "--connect-now"):
+-            arguments.update({"connect_now":True})
+-    return (arguments)
+-
+-
+-if __name__ == "__main__":
+-    arguments = ParseArgs(sys.argv[1:]) #the [1:] ignores the first argument, which is the path to our utility
++        elif opt in ('-s', '--server'):
++            arguments.update({'server': arg})
++        elif opt in ('-u', '--user'):
++            arguments.update({'username': arg})
++        elif opt in ('-p', '--password'):
++            arguments.update({'password': arg})
++        elif opt in ('-t', '--transport'):
++            arguments.update({'transport_type': int(arg)})
++        elif opt in ('-c', '--connect-now'):
++            arguments.update({'connect_now': True})
++    return arguments
++
++
++if __name__ == '__main__':
++    arguments = ParseArgs(sys.argv[1:])
+     main_window = ShareWindow(**arguments)
+     main_window.show_all()
+
+commit 7754896966e49572ce08faa97e31b66be15265f6
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Sun Aug 14 20:32:53 2011 +0000
+
+    updates
+
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index cc552a7..b433d6d 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -71,7 +71,7 @@ class srvsvcConnectDialog(gtk.Dialog):
+         self.vbox.set_spacing(5)
+-        # artwork
++        # artwork TODO remove post decession
+         self.artwork = gtk.VBox()
+@@ -92,6 +92,8 @@ class srvsvcConnectDialog(gtk.Dialog):
+         self.artwork.pack_start(box, True, True, 0)
+         self.vbox.pack_start(self.artwork, False, True, 0)
++        
++        ########################### end of artwork TODO :
+         # server frame
+@@ -408,26 +410,10 @@ class ShareAddEditDialog(gtk.Dialog):
+         hbox.pack_start(label, True, True, 0)
+         self.desc_box.pack_start(hbox,True, True, 0)
+-        # main box
+-
+-        self.main_box  = gtk.HBox()
+-        self.vbox.pack_start(self.main_box,True,True,0)
+-
+-        #vertical logo
+-        #vbox = gtk.VBox()
+-        #vbox.set_border_width(5)
+-        #samba_image_filename = os.path.join(sys.path[0],'images',
+-        #        'samba-logo-vertical.png')
+-        #samba_image = gtk.Image()
+-        #samba_image.set_from_file(samba_image_filename)
+-        #vbox.pack_end(samba_image, False, True, 0)
+-
+-        #self.main_box.pack_start(vbox, False, True, 0)
+-
+         # the main form
+         self.form_box = gtk.VBox()
+-        self.main_box.pack_start(self.form_box, True, True, 0)
++        self.vbox.pack_start(self.form_box, True, True, 0)
+         # Name , password and comment (npc) frame
+         frame = gtk.Frame()
+@@ -677,26 +663,10 @@ class DeleteDialog(gtk.Dialog):
+         hbox.pack_start(label, True, True, 0)
+         self.desc_box.pack_start(hbox,True, True, 0)
+-        # main box
+-
+-        self.main_box  = gtk.HBox()
+-        self.vbox.pack_start(self.main_box,True,True,0)
+-
+-        #vertical logo
+-        #vbox = gtk.VBox()
+-        #vbox.set_border_width(5)
+-        #samba_image_filename = os.path.join(sys.path[0],'images',
+-        #        'samba-logo-vertical.png')
+-        #samba_image = gtk.Image()
+-        #samba_image.set_from_file(samba_image_filename)
+-        #vbox.pack_end(samba_image, False, True, 0)
+-
+-        #self.main_box.pack_start(vbox, False, True, 0)
+-
+         # the main form
+         self.form_box = gtk.VBox()
+-        self.main_box.pack_start(self.form_box, True, True, 0)
++        self.vbox.pack_start(self.form_box, True, True, 0)
+         frame = gtk.Frame()
+         label = gtk.Label('<b> Share Details</b>')
+
+commit fffac28cd2768d87a68572e60236f4e319727303
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Thu Aug 11 00:04:55 2011 +0530
+
+    hide types, code cleanup, remove artwork, sys path appends not default anymore
+
+diff --git a/sambagtk/main.py b/sambagtk/main.py
+index 9f67982..f59901e 100644
+--- a/sambagtk/main.py
++++ b/sambagtk/main.py
+@@ -11,7 +11,9 @@ import gtk.glade
+ import os.path
+ import getopt
+-sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++#sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++# for use against the default binaries from default .configure.developer for use on python 2.7
++# Uncomment the above line if it is yor your config , else edit it as required
+ import pygwsam
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index c1c0551..284c98d 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -31,9 +31,9 @@ import getopt
+ import gobject
+ import gtk
+-sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++#sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
+ #for use against the default binaries from default .configure.developer for use on python 2.7
+-#TODO remove these entries
++# Unhash the above line if it is yor your config , else edit it as required
+ from samba import credentials
+ from samba.dcerpc import (
+@@ -1772,5 +1772,3 @@ if __name__ == "__main__":
+     main_window.show_all()
+     gtk.main()
+-#debug test pipe : TODO (remove later)
+-# test = srvsvcPipeManager('127.0.0.1',0,'Administrator','Pass#2011')
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index e3baa82..cc552a7 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -414,15 +414,15 @@ class ShareAddEditDialog(gtk.Dialog):
+         self.vbox.pack_start(self.main_box,True,True,0)
+         #vertical logo
+-        vbox = gtk.VBox()
+-        vbox.set_border_width(5)
+-        samba_image_filename = os.path.join(sys.path[0],'images',
+-                'samba-logo-vertical.png')
+-        samba_image = gtk.Image()
+-        samba_image.set_from_file(samba_image_filename)
+-        vbox.pack_end(samba_image, False, True, 0)
++        #vbox = gtk.VBox()
++        #vbox.set_border_width(5)
++        #samba_image_filename = os.path.join(sys.path[0],'images',
++        #        'samba-logo-vertical.png')
++        #samba_image = gtk.Image()
++        #samba_image.set_from_file(samba_image_filename)
++        #vbox.pack_end(samba_image, False, True, 0)
+-        self.main_box.pack_start(vbox, False, True, 0)
++        #self.main_box.pack_start(vbox, False, True, 0)
+         # the main form
+@@ -515,12 +515,14 @@ class ShareAddEditDialog(gtk.Dialog):
+         self.stype_printq_radio_button = gtk.RadioButton(self.stype_disktree_radio_button,'Print Queue')
+         self.stype_printq_radio_button.set_tooltip_text('Shared Print Queue')
+         self.stype_printq_radio_button.set_active(self.stype == srvsvc.STYPE_PRINTQ)
+-        vbox.pack_start(self.stype_printq_radio_button)
++        #vbox.pack_start(self.stype_printq_radio_button)
++        #deactivating this option until samba4 is fixed TODO activate once base is fixed
+         self.stype_ipc_radio_button = gtk.RadioButton(self.stype_printq_radio_button,'IPC ')
+         self.stype_ipc_radio_button.set_tooltip_text('Shared Interprocess Communication Pipe (IPC).')
+         self.stype_ipc_radio_button.set_active(self.stype == srvsvc.STYPE_IPC)
+-        vbox.pack_start(self.stype_ipc_radio_button)
++        #vbox.pack_start(self.stype_ipc_radio_button)
++        #deactivating this option until samba4 is fixed TODO activate once base is fixed
+         # Special Share Flags
+         vbox = gtk.VBox()
+@@ -681,15 +683,15 @@ class DeleteDialog(gtk.Dialog):
+         self.vbox.pack_start(self.main_box,True,True,0)
+         #vertical logo
+-        vbox = gtk.VBox()
+-        vbox.set_border_width(5)
+-        samba_image_filename = os.path.join(sys.path[0],'images',
+-                'samba-logo-vertical.png')
+-        samba_image = gtk.Image()
+-        samba_image.set_from_file(samba_image_filename)
+-        vbox.pack_end(samba_image, False, True, 0)
+-
+-        self.main_box.pack_start(vbox, False, True, 0)
++        #vbox = gtk.VBox()
++        #vbox.set_border_width(5)
++        #samba_image_filename = os.path.join(sys.path[0],'images',
++        #        'samba-logo-vertical.png')
++        #samba_image = gtk.Image()
++        #samba_image.set_from_file(samba_image_filename)
++        #vbox.pack_end(samba_image, False, True, 0)
++
++        #self.main_box.pack_start(vbox, False, True, 0)
+         # the main form
+
+commit f0fee8f57697c04d5b673a1f03508ffbf4e5bdee
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Mon Aug 8 16:55:54 2011 +0530
+
+    page swaps fixed
+
+diff --git a/sambagtk/main.py b/sambagtk/main.py
+index df75b33..9f67982 100644
+--- a/sambagtk/main.py
++++ b/sambagtk/main.py
+@@ -39,6 +39,7 @@ class SambaUtilities(object):
+         self.svcctl_window = None
+         self.crontab_window = None
+         self.srvsvc_window = None
++        self.srvsvc_init= False
+         self.connection_args = connection_args
+         self.additional_connection_args = {} #arguments not supported by all utilities, such as domain_index
+@@ -128,7 +129,7 @@ class SambaUtilities(object):
+         self.set_status("User tab initialized.")
+         self.update_sensitivity()
+-        
++
+     def init_srvsvc_page(self):
+         args = self.connection_args.copy()
+@@ -140,8 +141,8 @@ class SambaUtilities(object):
+         self.srvsvc_viewport.show_all() #unhide all widgets
+         #We'll be displaying this later. We need to unparent it before attaching it to another container
+-        #self.srvsvc_window.menubar.unparent()
+-        #self.srvsvc_window.toolbar.unparent()
++
++        self.srvsvc_window.toolbar.unparent()
+         self.srvsvc_window.statusbar = self.statusbar #we simply tell the utility to use our status bar instead
+         self.set_status("Share Manager tab initialized.")
+@@ -199,10 +200,10 @@ class SambaUtilities(object):
+     def regedit_initialized(self):
+         return self.regedit_window is not None
+-    
++
+     def srvsvc_initialized (self):
+         return self.srvsvc_window is not None
+-        
++
+     def svcctl_initialized(self):
+         return self.svcctl_window is not None
+@@ -379,19 +380,22 @@ class SambaUtilities(object):
+             #Menubar
+             children = self.menubar_viewport.get_children()
+             self.menubar_viewport.remove(children[0])
+-            self.srvsvc_window.menubar.reparent(self.menubar_viewport)
+-            #self.menubar_viewport.add(self.srvsvc_window.menubar)
++            if self.srvsvc_init is False:
++                self.srvsvc_window.menubar.reparent(self.menubar_viewport)
++                self.srvsvc_init = True
++            else:
++                self.menubar_viewport.add(self.srvsvc_window.menubar)
+             self.menubar_viewport.show_all()
+             #Toolbar
+-            children = self.toolbar_viewport.get_children() 
++            children = self.toolbar_viewport.get_children()
+             self.toolbar_viewport.remove(children[0])
+             self.srvsvc_window.toolbar.unparent()
+             self.toolbar_viewport.add(self.srvsvc_window.toolbar)
+             self.toolbar_viewport.show_all()
+-            
++
+             self.srvsvc_window.hide()
+-            
++
+         elif page_num == 3: #Regedit page
+             if self.regedit_viewport.child == None:
+                 self.init_regedit_page()
+@@ -450,7 +454,7 @@ class SambaUtilities(object):
+                     self.sam_window.on_connect_item_activate(None, **self.connection_args)
+             else:
+                 self.init_sam_page()
+-            
++
+             if self.srvsvc_initialized():
+                 if not self.srvsvc_window.connected():
+                     self.srvsvc_window.on_connect_item_activate(None, **self.connection_args)
+diff --git a/sambagtk/pygwsam.py b/sambagtk/pygwsam.py
+index d57c083..e11be7d 100755
+--- a/sambagtk/pygwsam.py
++++ b/sambagtk/pygwsam.py
+@@ -131,7 +131,7 @@ class SAMPipeManager(object):
+     def update_user(self, user):
+         """Submit any changes to 'user' to the server.
+-        
++
+         The User's RID must be correct for this to work.
+         This function will call update_user_security() to update user security
+         options.
+@@ -300,7 +300,7 @@ class SAMPipeManager(object):
+     def info_to_user(self, query_info, user=None):
+         """Converts 'query_info' information into a user type.
+-        
++
+         Values in 'user' will be overwriten by this function. If called with 'None' then a new User structure will be created
+         returns 'user
+
+commit a956ca8135492291830ba7ab0eb6e5bbad8288ff
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Mon Aug 8 16:32:47 2011 +0530
+
+    connect missing image fixup
+
+diff --git a/sambagtk/sam.py b/sambagtk/sam.py
+index 0c7fa3d..9fcfd30 100644
+--- a/sambagtk/sam.py
++++ b/sambagtk/sam.py
+@@ -542,7 +542,7 @@ class SAMConnectDialog(gtk.Dialog):
+         self.artwork = gtk.VBox()
+-        self.samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++        self.samba_image_filename = os.path.join(sys.path[0],'images',
+                 'samba-logo-small.png')
+         self.samba_image = gtk.Image()
+         self.samba_image.set_from_file(self.samba_image_filename)
+
+commit d577b6d1ac9af13ba702b312d041c900adda6b15
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Mon Aug 8 15:50:28 2011 +0530
+
+    Multiple changes
+    1) Main now auto executes
+    2) Images relocated to match structure of rest of sambagtk
+    3) Modified sam.py to show newstyle connect dialog to maintain consistancy
+
+diff --git a/images/network-folder-alternate.png b/images/network-folder-alternate.png
+deleted file mode 100644
+index a49a77d..0000000
+Binary files a/images/network-folder-alternate.png and /dev/null differ
+diff --git a/images/network-folder-blue.png b/images/network-folder-blue.png
+deleted file mode 100644
+index 958039f..0000000
+Binary files a/images/network-folder-blue.png and /dev/null differ
+diff --git a/images/network-folder.png b/images/network-folder.png
+deleted file mode 100644
+index 311aa6f..0000000
+Binary files a/images/network-folder.png and /dev/null differ
+diff --git a/images/network-pipe-alt.png b/images/network-pipe-alt.png
+deleted file mode 100644
+index 8d1469f..0000000
+Binary files a/images/network-pipe-alt.png and /dev/null differ
+diff --git a/images/network-pipe.png b/images/network-pipe.png
+deleted file mode 100644
+index d05c01c..0000000
+Binary files a/images/network-pipe.png and /dev/null differ
+diff --git a/images/network-printer.png b/images/network-printer.png
+deleted file mode 100644
+index 5590e52..0000000
+Binary files a/images/network-printer.png and /dev/null differ
+diff --git a/images/network.png b/images/network.png
+deleted file mode 100644
+index 8d1469f..0000000
+Binary files a/images/network.png and /dev/null differ
+diff --git a/images/samba-logo-old.png b/images/samba-logo-old.png
+deleted file mode 100644
+index 475cc26..0000000
+Binary files a/images/samba-logo-old.png and /dev/null differ
+diff --git a/images/samba-logo-small.png b/images/samba-logo-small.png
+deleted file mode 100644
+index 8c2e20b..0000000
+Binary files a/images/samba-logo-small.png and /dev/null differ
+diff --git a/images/samba-logo-vertical.png b/images/samba-logo-vertical.png
+deleted file mode 100644
+index 05a39b6..0000000
+Binary files a/images/samba-logo-vertical.png and /dev/null differ
+diff --git a/sambagtk/images/network-folder-alternate.png b/sambagtk/images/network-folder-alternate.png
+new file mode 100644
+index 0000000..a49a77d
+Binary files /dev/null and b/sambagtk/images/network-folder-alternate.png differ
+diff --git a/sambagtk/images/network-folder-blue.png b/sambagtk/images/network-folder-blue.png
+new file mode 100644
+index 0000000..958039f
+Binary files /dev/null and b/sambagtk/images/network-folder-blue.png differ
+diff --git a/sambagtk/images/network-folder.png b/sambagtk/images/network-folder.png
+new file mode 100644
+index 0000000..311aa6f
+Binary files /dev/null and b/sambagtk/images/network-folder.png differ
+diff --git a/sambagtk/images/network-pipe-alt.png b/sambagtk/images/network-pipe-alt.png
+new file mode 100644
+index 0000000..8d1469f
+Binary files /dev/null and b/sambagtk/images/network-pipe-alt.png differ
+diff --git a/sambagtk/images/network-pipe.png b/sambagtk/images/network-pipe.png
+new file mode 100644
+index 0000000..d05c01c
+Binary files /dev/null and b/sambagtk/images/network-pipe.png differ
+diff --git a/sambagtk/images/network-printer.png b/sambagtk/images/network-printer.png
+new file mode 100644
+index 0000000..5590e52
+Binary files /dev/null and b/sambagtk/images/network-printer.png differ
+diff --git a/sambagtk/images/network.png b/sambagtk/images/network.png
+new file mode 100644
+index 0000000..8d1469f
+Binary files /dev/null and b/sambagtk/images/network.png differ
+diff --git a/sambagtk/images/samba-logo-old.png b/sambagtk/images/samba-logo-old.png
+new file mode 100644
+index 0000000..475cc26
+Binary files /dev/null and b/sambagtk/images/samba-logo-old.png differ
+diff --git a/sambagtk/images/samba-logo-small.png b/sambagtk/images/samba-logo-small.png
+index 475cc26..8c2e20b 100644
+Binary files a/sambagtk/images/samba-logo-small.png and b/sambagtk/images/samba-logo-small.png differ
+diff --git a/sambagtk/images/samba-logo-vertical.png b/sambagtk/images/samba-logo-vertical.png
+new file mode 100644
+index 0000000..05a39b6
+Binary files /dev/null and b/sambagtk/images/samba-logo-vertical.png differ
+diff --git a/sambagtk/main.py b/sambagtk/main.py
+index d96b684..df75b33 100644
+--- a/sambagtk/main.py
++++ b/sambagtk/main.py
+@@ -550,11 +550,11 @@ def ParseArgs(argv):
+             arguments.update({"connect_now":True})
+     return (arguments)
+-"""
++
+ if __name__ == "__main__":
+     arguments = ParseArgs(sys.argv[1:])
+     gtk.gdk.threads_init()
+     main_window = SambaUtilities(arguments)
+     sys.stdout = main_window #redirect print statements to the write() function of this class
+     gtk.main()
+-"""
++
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 17c780a..c1c0551 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -808,7 +808,7 @@ class ShareWindow(gtk.Window):
+                     0x04000000:('SV_TYPE_CLUSTER_VS_NT','Virtual Server Cluster')
+                     }
+-            label_data = server_typedict.get(self.server_info.server_type,('','Unknown'))[1]
++            label_data = server_typedict.get(self.server_info.server_type,('','Multiple Capablities'))[1]
+             self.srvinfo_type_label.set_text(label_data)
+             self.srvinfo_upath_label.set_text(self.server_info.userpath.upper())
+             self.srvinfo_to_label.set_text(str(self.server_info.disc))
+@@ -1330,8 +1330,8 @@ class ShareWindow(gtk.Window):
+         # main window
+         self.set_title("Samba-Gtk Share Management Interface")
+         self.set_default_size(800, 600)
+-        self.icon_filename = os.path.join(sys.path[0],"..", "images", "network.png")
+-        self.share_icon_filename = os.path.join(sys.path[0],"..", "images", "network.png")
++        self.icon_filename = os.path.join(sys.path[0], "images", "network.png")
++        self.share_icon_filename = os.path.join(sys.path[0], "images", "network.png")
+         self.icon_pixbuf = gtk.gdk.pixbuf_new_from_file(self.icon_filename)
+         self.set_icon(self.icon_pixbuf)
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index d159201..e3baa82 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -75,7 +75,7 @@ class srvsvcConnectDialog(gtk.Dialog):
+         self.artwork = gtk.VBox()
+-        self.samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++        self.samba_image_filename = os.path.join(sys.path[0],'images',
+                 'samba-logo-small.png')
+         self.samba_image = gtk.Image()
+         self.samba_image.set_from_file(self.samba_image_filename)
+@@ -378,7 +378,7 @@ class ShareAddEditDialog(gtk.Dialog):
+         self.icon_name = ["network-folder","network-printer",
+                             "network","network-pipe"][self.stype]
+         self.icon_filename = \
+-        os.path.join(sys.path[0], "..","images",''.join([self.icon_name,'.png']))
++        os.path.join(sys.path[0],"images",''.join([self.icon_name,'.png']))
+         self.set_icon_from_file(self.icon_filename)
+         self.vbox.set_spacing(3)
+         self.set_border_width(5)
+@@ -416,7 +416,7 @@ class ShareAddEditDialog(gtk.Dialog):
+         #vertical logo
+         vbox = gtk.VBox()
+         vbox.set_border_width(5)
+-        samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++        samba_image_filename = os.path.join(sys.path[0],'images',
+                 'samba-logo-vertical.png')
+         samba_image = gtk.Image()
+         samba_image.set_from_file(samba_image_filename)
+@@ -649,7 +649,7 @@ class DeleteDialog(gtk.Dialog):
+         self.icon_name = ["network-folder","network-printer",
+                             "network","network-pipe"][self.stype]
+         self.icon_filename = \
+-        os.path.join(sys.path[0],"..", "images",''.join([self.icon_name,'.png']))
++        os.path.join(sys.path[0],"images",''.join([self.icon_name,'.png']))
+         self.set_icon_from_file(self.icon_filename)
+         self.vbox.set_spacing(3)
+         self.set_border_width(5)
+@@ -683,7 +683,7 @@ class DeleteDialog(gtk.Dialog):
+         #vertical logo
+         vbox = gtk.VBox()
+         vbox.set_border_width(5)
+-        samba_image_filename = os.path.join(sys.path[0], "..",'images',
++        samba_image_filename = os.path.join(sys.path[0],'images',
+                 'samba-logo-vertical.png')
+         samba_image = gtk.Image()
+         samba_image.set_from_file(samba_image_filename)
+@@ -835,7 +835,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+         vbox = gtk.VBox()
+         vbox.set_border_width(5)
+-        samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++        samba_image_filename = os.path.join(sys.path[0],'images',
+                 'samba-logo-small.png')
+         samba_image = gtk.Image()
+         samba_image.set_from_file(samba_image_filename)
+diff --git a/sambagtk/sam.py b/sambagtk/sam.py
+index 1844997..0c7fa3d 100644
+--- a/sambagtk/sam.py
++++ b/sambagtk/sam.py
+@@ -534,11 +534,32 @@ class SAMConnectDialog(gtk.Dialog):
+         self.set_border_width(5)
+         self.set_icon_name(gtk.STOCK_CONNECT)
+         self.set_resizable(False)
++        self.set_decorated(True)
+         # server frame
+         self.vbox.set_spacing(5)
++        self.artwork = gtk.VBox()
++
++        self.samba_image_filename = os.path.join(sys.path[0],"..", 'images',
++                'samba-logo-small.png')
++        self.samba_image = gtk.Image()
++        self.samba_image.set_from_file(self.samba_image_filename)
++        self.artwork.pack_start(self.samba_image, True, True, 0)
++
++        label = gtk.Label('Opening Windows to A Wider World')
++        box = gtk.HBox()
++        box.pack_start(label, True, True, 0)
++        self.artwork.pack_start(box, True, True, 0)
++
++        label = gtk.Label('Samba Control Center')
++        box = gtk.HBox()
++        box.pack_start(label, True, True, 0)
++        self.artwork.pack_start(box, True, True, 0)
++
++        self.vbox.pack_start(self.artwork, False, True, 0)
++
+         self.server_frame = gtk.Frame("Server")
+         self.vbox.pack_start(self.server_frame, False, True, 0)
+
+commit 31d64c06bb4a9c23e4ccb0f9df0023d2fe0146da
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Sat Aug 6 01:03:36 2011 +0530
+
+    integration complete
+
+diff --git a/sambagtk/dialogs.py b/sambagtk/dialogs.py
+index 3b6836f..ddb669b 100644
+--- a/sambagtk/dialogs.py
++++ b/sambagtk/dialogs.py
+@@ -2,6 +2,7 @@
+ # 
+ # Copyright (C) 2010 Sergio Martins <sergio97@gmail.com>
+ # Copyright (C) 2011 Jelmer Vernooij <jelmer@samba.org>
++# Copyright (C) 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>
+ #
+ # 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
+@@ -32,7 +33,7 @@ class AboutDialog(gtk.AboutDialog):
+         self.set_name(name)
+         self.set_version(samba.version)
+         self.set_logo(icon)
+-        self.set_copyright("Copyright \xc2\xa9 2010 Sergio Martins <Sergio97@gmail.com>")
++        self.set_copyright("Copyright \xc2\xa9 2010 Sergio Martins <Sergio97@gmail.com> Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>")
+         self.set_authors(["Sergio Martins <Sergio97@gmail.com>", "Calin Crisan <ccrisan@gmail.com>", "Dhananjay Sathe <dhananajaysathe@gmail.com>","Jelmer Vernooij <jelmer@samba.org>"])
+         self.set_comments(description)
+         self.set_wrap_license(True)
+diff --git a/sambagtk/main.glade b/sambagtk/main.glade
+index 8a11a69..9c88ad0 100644
+--- a/sambagtk/main.glade
++++ b/sambagtk/main.glade
+@@ -1,63 +1,85 @@
+-<?xml version="1.0"?>
++<?xml version="1.0" encoding="UTF-8"?>
+ <interface>
+   <requires lib="gtk+" version="2.16"/>
+-  <!-- interface-naming-policy project-wide -->
++  <object class="GtkImage" id="image1">
++    <property name="visible">True</property>
++    <property name="can_focus">False</property>
++    <property name="stock">gtk-missing-image</property>
++  </object>
++  <object class="GtkImage" id="image2">
++    <property name="visible">True</property>
++    <property name="can_focus">False</property>
++    <property name="stock">gtk-clear</property>
++  </object>
+   <object class="GtkWindow" id="main_window">
++    <property name="can_focus">False</property>
+     <property name="window_position">center</property>
+     <property name="default_width">800</property>
+     <property name="default_height">600</property>
+-    <signal name="destroy" handler="on_main_window_destroy"/>
+-    <signal name="key_press_event" handler="on_main_window_key_press_event"/>
++    <signal name="destroy" handler="on_main_window_destroy" swapped="no"/>
++    <signal name="key-press-event" handler="on_main_window_key_press_event" swapped="no"/>
+     <child>
+       <object class="GtkVBox" id="vbox">
+         <property name="visible">True</property>
+-        <property name="orientation">vertical</property>
++        <property name="can_focus">False</property>
+         <child>
+           <object class="GtkViewport" id="menubar_viewport">
+             <property name="visible">True</property>
++            <property name="can_focus">False</property>
+             <property name="resize_mode">queue</property>
+             <property name="shadow_type">none</property>
+             <child>
+               <object class="GtkMenuBar" id="menubar">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <child>
+                   <object class="GtkMenuItem" id="menuitem">
+                     <property name="visible">True</property>
++                    <property name="can_focus">False</property>
++                    <property name="use_action_appearance">False</property>
+                     <property name="label" translatable="yes">_File</property>
+                     <property name="use_underline">True</property>
+                     <child type="submenu">
+                       <object class="GtkMenu" id="menu_file">
+                         <property name="visible">True</property>
++                        <property name="can_focus">False</property>
+                         <child>
+                           <object class="GtkImageMenuItem" id="connect_all_item">
+                             <property name="label">gtk-connect</property>
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
++                            <property name="use_action_appearance">False</property>
+                             <property name="use_underline">True</property>
+                             <property name="use_stock">True</property>
+-                            <signal name="activate" handler="on_connect_all_item_activate"/>
++                            <signal name="activate" handler="on_connect_all_item_activate" swapped="no"/>
+                           </object>
+                         </child>
+                         <child>
+                           <object class="GtkImageMenuItem" id="disconnect_all_item">
+                             <property name="label">gtk-disconnect</property>
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
++                            <property name="use_action_appearance">False</property>
+                             <property name="use_underline">True</property>
+                             <property name="use_stock">True</property>
+-                            <signal name="activate" handler="on_disconnect_all_item_activate"/>
++                            <signal name="activate" handler="on_disconnect_all_item_activate" swapped="no"/>
+                           </object>
+                         </child>
+                         <child>
+                           <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
+                           </object>
+                         </child>
+                         <child>
+                           <object class="GtkImageMenuItem" id="quit_item">
+                             <property name="label">gtk-quit</property>
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
++                            <property name="use_action_appearance">False</property>
+                             <property name="use_underline">True</property>
+                             <property name="use_stock">True</property>
+-                            <signal name="activate" handler="on_quit_item_activate"/>
++                            <signal name="activate" handler="on_quit_item_activate" swapped="no"/>
+                           </object>
+                         </child>
+                       </object>
+@@ -67,18 +89,23 @@
+                 <child>
+                   <object class="GtkMenuItem" id="menuitem2">
+                     <property name="visible">True</property>
++                    <property name="can_focus">False</property>
++                    <property name="use_action_appearance">False</property>
+                     <property name="label" translatable="yes">_Edit</property>
+                     <property name="use_underline">True</property>
+                     <child type="submenu">
+                       <object class="GtkMenu" id="menu_edit">
+                         <property name="visible">True</property>
++                        <property name="can_focus">False</property>
+                         <child>
+                           <object class="GtkImageMenuItem" id="clear_log_item">
+                             <property name="label">Clear Log</property>
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
++                            <property name="use_action_appearance">False</property>
+                             <property name="image">image2</property>
+                             <property name="use_stock">False</property>
+-                            <signal name="activate" handler="on_clear_log_activate"/>
++                            <signal name="activate" handler="on_clear_log_activate" swapped="no"/>
+                           </object>
+                         </child>
+                       </object>
+@@ -88,18 +115,23 @@
+                 <child>
+                   <object class="GtkMenuItem" id="menuitem3">
+                     <property name="visible">True</property>
++                    <property name="can_focus">False</property>
++                    <property name="use_action_appearance">False</property>
+                     <property name="label" translatable="yes">_View</property>
+                     <property name="use_underline">True</property>
+                     <child type="submenu">
+                       <object class="GtkMenu" id="menu_view">
+                         <property name="visible">True</property>
++                        <property name="can_focus">False</property>
+                         <child>
+                           <object class="GtkImageMenuItem" id="connection_info_item">
+                             <property name="label">Connection Details</property>
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
++                            <property name="use_action_appearance">False</property>
+                             <property name="image">image1</property>
+                             <property name="use_stock">False</property>
+-                            <signal name="activate" handler="on_connection_info_item_activate"/>
++                            <signal name="activate" handler="on_connection_info_item_activate" swapped="no"/>
+                           </object>
+                         </child>
+                       </object>
+@@ -109,18 +141,23 @@
+                 <child>
+                   <object class="GtkMenuItem" id="menuitem4">
+                     <property name="visible">True</property>
++                    <property name="can_focus">False</property>
++                    <property name="use_action_appearance">False</property>
+                     <property name="label" translatable="yes">_Help</property>
+                     <property name="use_underline">True</property>
+                     <child type="submenu">
+                       <object class="GtkMenu" id="menu_help">
+                         <property name="visible">True</property>
++                        <property name="can_focus">False</property>
+                         <child>
+                           <object class="GtkImageMenuItem" id="about_item">
+                             <property name="label">gtk-about</property>
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
++                            <property name="use_action_appearance">False</property>
+                             <property name="use_underline">True</property>
+                             <property name="use_stock">True</property>
+-                            <signal name="activate" handler="on_about_item_activate"/>
++                            <signal name="activate" handler="on_about_item_activate" swapped="no"/>
+                           </object>
+                         </child>
+                       </object>
+@@ -132,25 +169,30 @@
+           </object>
+           <packing>
+             <property name="expand">False</property>
++            <property name="fill">True</property>
+             <property name="position">0</property>
+           </packing>
+         </child>
+         <child>
+           <object class="GtkViewport" id="toolbar_viewport">
+             <property name="visible">True</property>
++            <property name="can_focus">False</property>
+             <property name="resize_mode">queue</property>
+             <property name="shadow_type">none</property>
+             <child>
+               <object class="GtkToolbar" id="toolbar">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <child>
+                   <object class="GtkToolButton" id="connect_all_button">
+                     <property name="visible">True</property>
++                    <property name="can_focus">False</property>
++                    <property name="use_action_appearance">False</property>
+                     <property name="is_important">True</property>
+                     <property name="label" translatable="yes">Connect All</property>
+                     <property name="use_underline">True</property>
+                     <property name="stock_id">gtk-connect</property>
+-                    <signal name="clicked" handler="on_connect_all_button_clicked"/>
++                    <signal name="clicked" handler="on_connect_all_button_clicked" swapped="no"/>
+                   </object>
+                   <packing>
+                     <property name="expand">False</property>
+@@ -160,11 +202,13 @@
+                 <child>
+                   <object class="GtkToolButton" id="disconnect_all_button">
+                     <property name="visible">True</property>
++                    <property name="can_focus">False</property>
++                    <property name="use_action_appearance">False</property>
+                     <property name="is_important">True</property>
+                     <property name="label" translatable="yes">Disconnect All</property>
+                     <property name="use_underline">True</property>
+                     <property name="stock_id">gtk-disconnect</property>
+-                    <signal name="clicked" handler="on_disconnect_all_button_clicked"/>
++                    <signal name="clicked" handler="on_disconnect_all_button_clicked" swapped="no"/>
+                   </object>
+                   <packing>
+                     <property name="expand">False</property>
+@@ -174,6 +218,7 @@
+                 <child>
+                   <object class="GtkSeparatorToolItem" id="toolbutton3">
+                     <property name="visible">True</property>
++                    <property name="can_focus">False</property>
+                   </object>
+                   <packing>
+                     <property name="expand">False</property>
+@@ -183,11 +228,13 @@
+                 <child>
+                   <object class="GtkToolButton" id="clear_log_button">
+                     <property name="visible">True</property>
++                    <property name="can_focus">False</property>
++                    <property name="use_action_appearance">False</property>
+                     <property name="is_important">True</property>
+                     <property name="label" translatable="yes">Clear Log</property>
+                     <property name="use_underline">True</property>
+                     <property name="stock_id">gtk-clear</property>
+-                    <signal name="clicked" handler="on_clear_log_button_clicked"/>
++                    <signal name="clicked" handler="on_clear_log_button_clicked" swapped="no"/>
+                   </object>
+                   <packing>
+                     <property name="expand">False</property>
+@@ -199,6 +246,7 @@
+           </object>
+           <packing>
+             <property name="expand">False</property>
++            <property name="fill">True</property>
+             <property name="position">1</property>
+           </packing>
+         </child>
+@@ -207,28 +255,30 @@
+             <property name="visible">True</property>
+             <property name="can_focus">True</property>
+             <property name="tab_pos">left</property>
+-            <property name="homogeneous">True</property>
+-            <signal name="switch_page" handler="on_utility_notebook_switch_page"/>
++            <signal name="switch-page" handler="on_utility_notebook_switch_page" swapped="no"/>
+             <child>
+               <object class="GtkViewport" id="launcher_viewport">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="resize_mode">queue</property>
+                 <property name="shadow_type">none</property>
+                 <child>
+                   <object class="GtkVBox" id="vbox2">
+                     <property name="visible">True</property>
+-                    <property name="orientation">vertical</property>
++                    <property name="can_focus">False</property>
+                     <child>
+                       <object class="GtkVBox" id="vbox3">
+                         <property name="visible">True</property>
++                        <property name="can_focus">False</property>
+                         <property name="border_width">3</property>
+-                        <property name="orientation">vertical</property>
+                         <child>
+                           <object class="GtkHBox" id="hbox1">
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
+                             <child>
+                               <object class="GtkLabel" id="label1">
+                                 <property name="visible">True</property>
++                                <property name="can_focus">False</property>
+                                 <property name="xalign">0</property>
+                                 <property name="yalign">0</property>
+                                 <property name="xpad">5</property>
+@@ -243,25 +293,32 @@
+                             <child>
+                               <object class="GtkLabel" id="server_label">
+                                 <property name="visible">True</property>
++                                <property name="can_focus">False</property>
+                                 <property name="xalign">0</property>
+                                 <property name="yalign">0</property>
+                                 <property name="label" translatable="yes">Unknown</property>
+                               </object>
+                               <packing>
++                                <property name="expand">True</property>
++                                <property name="fill">True</property>
+                                 <property name="position">1</property>
+                               </packing>
+                             </child>
+                           </object>
+                           <packing>
++                            <property name="expand">True</property>
++                            <property name="fill">True</property>
+                             <property name="position">0</property>
+                           </packing>
+                         </child>
+                         <child>
+                           <object class="GtkHBox" id="hbox3">
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
+                             <child>
+                               <object class="GtkLabel" id="label2">
+                                 <property name="visible">True</property>
++                                <property name="can_focus">False</property>
+                                 <property name="xalign">0</property>
+                                 <property name="yalign">0</property>
+                                 <property name="xpad">5</property>
+@@ -276,25 +333,32 @@
+                             <child>
+                               <object class="GtkLabel" id="username_label">
+                                 <property name="visible">True</property>
++                                <property name="can_focus">False</property>
+                                 <property name="xalign">0</property>
+                                 <property name="yalign">0</property>
+                                 <property name="label" translatable="yes">Unknown</property>
+                               </object>
+                               <packing>
++                                <property name="expand">True</property>
++                                <property name="fill">True</property>
+                                 <property name="position">1</property>
+                               </packing>
+                             </child>
+                           </object>
+                           <packing>
++                            <property name="expand">True</property>
++                            <property name="fill">True</property>
+                             <property name="position">1</property>
+                           </packing>
+                         </child>
+                         <child>
+                           <object class="GtkHBox" id="hbox2">
+                             <property name="visible">True</property>
++                            <property name="can_focus">False</property>
+                             <child>
+                               <object class="GtkLabel" id="label3">
+                                 <property name="visible">True</property>
++                                <property name="can_focus">False</property>
+                                 <property name="xalign">0</property>
+                                 <property name="yalign">0</property>
+                                 <property name="xpad">5</property>
+@@ -309,21 +373,27 @@
+                             <child>
+                               <object class="GtkLabel" id="status_label">
+                                 <property name="visible">True</property>
++                                <property name="can_focus">False</property>
+                                 <property name="xalign">0</property>
+                                 <property name="label" translatable="yes">Unknown</property>
+                               </object>
+                               <packing>
++                                <property name="expand">True</property>
++                                <property name="fill">True</property>
+                                 <property name="position">1</property>
+                               </packing>
+                             </child>
+                           </object>
+                           <packing>
++                            <property name="expand">True</property>
++                            <property name="fill">True</property>
+                             <property name="position">2</property>
+                           </packing>
+                         </child>
+                       </object>
+                       <packing>
+                         <property name="expand">False</property>
++                        <property name="fill">True</property>
+                         <property name="padding">5</property>
+                         <property name="position">0</property>
+                       </packing>
+@@ -332,8 +402,6 @@
+                       <object class="GtkScrolledWindow" id="scrolledwindow1">
+                         <property name="visible">True</property>
+                         <property name="can_focus">True</property>
+-                        <property name="hscrollbar_policy">automatic</property>
+-                        <property name="vscrollbar_policy">automatic</property>
+                         <property name="shadow_type">in</property>
+                         <child>
+                           <object class="GtkTextView" id="messages_textview">
+@@ -348,6 +416,8 @@
+                         </child>
+                       </object>
+                       <packing>
++                        <property name="expand">True</property>
++                        <property name="fill">True</property>
+                         <property name="position">1</property>
+                       </packing>
+                     </child>
+@@ -358,6 +428,7 @@
+             <child type="tab">
+               <object class="GtkLabel" id="lblServerOptions">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="label" translatable="yes">Server Options</property>
+               </object>
+               <packing>
+@@ -367,6 +438,7 @@
+             <child>
+               <object class="GtkViewport" id="sam_viewport">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="resize_mode">queue</property>
+                 <property name="shadow_type">none</property>
+                 <child>
+@@ -380,6 +452,7 @@
+             <child type="tab">
+               <object class="GtkLabel" id="lblUserManager">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="label" translatable="yes">User Manager</property>
+               </object>
+               <packing>
+@@ -388,7 +461,7 @@
+               </packing>
+             </child>
+             <child>
+-              <object class="GtkViewport" id="regedit_viewport">
++              <object class="GtkViewport" id="srvsvc_viewport">
+                 <property name="visible">True</property>
+                 <property name="resize_mode">queue</property>
+                 <property name="shadow_type">none</property>
+@@ -401,18 +474,45 @@
+               </packing>
+             </child>
+             <child type="tab">
++              <object class="GtkLabel" id="lblShareManager">
++                <property name="visible">True</property>
++                <property name="can_focus">False</property>
++                <property name="label" translatable="yes">Share Manager</property>
++              </object>
++              <packing>
++                <property name="position">2</property>
++                <property name="tab_fill">False</property>
++              </packing>
++            </child>
++            <child>
++              <object class="GtkViewport" id="regedit_viewport">
++                <property name="visible">True</property>
++                <property name="can_focus">False</property>
++                <property name="resize_mode">queue</property>
++                <property name="shadow_type">none</property>
++                <child>
++                  <placeholder/>
++                </child>
++              </object>
++              <packing>
++                <property name="position">3</property>
++              </packing>
++            </child>
++            <child type="tab">
+               <object class="GtkLabel" id="lblRegEdit">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="label" translatable="yes">Registry Editor</property>
+               </object>
+               <packing>
+-                <property name="position">2</property>
++                <property name="position">3</property>
+                 <property name="tab_fill">False</property>
+               </packing>
+             </child>
+             <child>
+               <object class="GtkViewport" id="svcctl_viewport">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="resize_mode">queue</property>
+                 <property name="shadow_type">none</property>
+                 <child>
+@@ -420,22 +520,24 @@
+                 </child>
+               </object>
+               <packing>
+-                <property name="position">3</property>
++                <property name="position">4</property>
+               </packing>
+             </child>
+             <child type="tab">
+               <object class="GtkLabel" id="lblServicesManager">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="label" translatable="yes">Services Manager</property>
+               </object>
+               <packing>
+-                <property name="position">3</property>
++                <property name="position">4</property>
+                 <property name="tab_fill">False</property>
+               </packing>
+             </child>
+             <child>
+               <object class="GtkViewport" id="crontab_viewport">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="resize_mode">queue</property>
+                 <property name="shadow_type">none</property>
+                 <child>
+@@ -443,16 +545,17 @@
+                 </child>
+               </object>
+               <packing>
+-                <property name="position">4</property>
++                <property name="position">5</property>
+               </packing>
+             </child>
+             <child type="tab">
+               <object class="GtkLabel" id="lblTaskScheduler">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="label" translatable="yes">Task Scheduler</property>
+               </object>
+               <packing>
+-                <property name="position">4</property>
++                <property name="position">5</property>
+                 <property name="tab_fill">False</property>
+               </packing>
+             </child>
+@@ -464,14 +567,18 @@
+             </child>
+           </object>
+           <packing>
++            <property name="expand">True</property>
++            <property name="fill">True</property>
+             <property name="position">2</property>
+           </packing>
+         </child>
+         <child>
+           <object class="GtkHBox" id="statusbar_hbox">
+             <property name="visible">True</property>
++            <property name="can_focus">False</property>
+             <child>
+               <object class="GtkProgressBar" id="progressbar">
++                <property name="can_focus">False</property>
+                 <property name="fraction">0.5</property>
+               </object>
+               <packing>
+@@ -483,27 +590,23 @@
+             <child>
+               <object class="GtkStatusbar" id="statusbar">
+                 <property name="visible">True</property>
++                <property name="can_focus">False</property>
+                 <property name="spacing">2</property>
+               </object>
+               <packing>
++                <property name="expand">True</property>
++                <property name="fill">True</property>
+                 <property name="position">1</property>
+               </packing>
+             </child>
+           </object>
+           <packing>
+             <property name="expand">False</property>
++            <property name="fill">True</property>
+             <property name="position">3</property>
+           </packing>
+         </child>
+       </object>
+     </child>
+   </object>
+-  <object class="GtkImage" id="image1">
+-    <property name="visible">True</property>
+-    <property name="stock">gtk-missing-image</property>
+-  </object>
+-  <object class="GtkImage" id="image2">
+-    <property name="visible">True</property>
+-    <property name="stock">gtk-clear</property>
+-  </object>
+ </interface>
+diff --git a/sambagtk/main.py b/sambagtk/main.py
+index 7cb7155..d96b684 100644
+--- a/sambagtk/main.py
++++ b/sambagtk/main.py
+@@ -11,6 +11,9 @@ import gtk.glade
+ import os.path
+ import getopt
++sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
++
++
+ import pygwsam
+ import pygwregedit
+ import pygwcrontab
+@@ -100,6 +103,7 @@ class SambaUtilities(object):
+         self.svcctl_viewport = builder.get_object("svcctl_viewport")
+         self.crontab_viewport = builder.get_object("crontab_viewport")
+         self.regedit_viewport = builder.get_object("regedit_viewport")
++        self.srvsvc_viewport = builder.get_object("srvsvc_viewport")
+         self.progressbar = builder.get_object("progressbar")
+         self.statusbar = builder.get_object("statusbar")
+@@ -124,6 +128,24 @@ class SambaUtilities(object):
+         self.set_status("User tab initialized.")
+         self.update_sensitivity()
++        
++    def init_srvsvc_page(self):
++
++        args = self.connection_args.copy()
++        if self.additional_connection_args.has_key("info_callback"):
++            args.update({"info_callback":self.additional_connection_args["info_callback"]})
++
++        self.srvsvc_window = pygwshare.ShareWindow(**args) #start up the utility
++        self.srvsvc_window.share_notebook.reparent(self.srvsvc_viewport) #reparent the main widget into a notebook tab
++        self.srvsvc_viewport.show_all() #unhide all widgets
++
++        #We'll be displaying this later. We need to unparent it before attaching it to another container
++        #self.srvsvc_window.menubar.unparent()
++        #self.srvsvc_window.toolbar.unparent()
++        self.srvsvc_window.statusbar = self.statusbar #we simply tell the utility to use our status bar instead
++
++        self.set_status("Share Manager tab initialized.")
++        self.update_sensitivity()
+     def init_regedit_page(self):
+         args = self.connection_args.copy()
+@@ -177,7 +199,10 @@ class SambaUtilities(object):
+     def regedit_initialized(self):
+         return self.regedit_window is not None
+-
++    
++    def srvsvc_initialized (self):
++        return self.srvsvc_window is not None
++        
+     def svcctl_initialized(self):
+         return self.svcctl_window is not None
+@@ -186,11 +211,12 @@ class SambaUtilities(object):
+     def update_sensitivity(self):
+         sam_connected = self.sam_initialized() and self.sam_window.connected()
++        srvsvc_connected = self.srvsvc_initialized() and self.srvsvc_window.connected()
+         regedit_connected = self.regedit_initialized() and self.regedit_window.connected()
+         svcctl_connected = self.svcctl_initialized() and self.svcctl_window.connected()
+         crontab_connected = self.crontab_initialized() and self.crontab_window.connected()
+-        all_connected = sam_connected and regedit_connected and svcctl_connected and crontab_connected
+-        all_disconnected = (not sam_connected) and (not regedit_connected) and (not svcctl_connected) and (not crontab_connected)
++        all_connected = sam_connected and regedit_connected and svcctl_connected and crontab_connected and srvsvc_connected
++        all_disconnected = (not sam_connected) and (not regedit_connected) and (not svcctl_connected) and (not crontab_connected) and (not srvsvc_connected)
+         self.connect_all_button.set_sensitive(not all_connected)
+         self.disconnect_all_button.set_sensitive(not all_disconnected)
+@@ -207,6 +233,8 @@ class SambaUtilities(object):
+             connected_utilities = []
+             if sam_connected:
+                 connected_utilities.append("User Manager")
++            if srvsvc_connected:
++                connected_utilities.append("Share Manager")
+             if regedit_connected:
+                 connected_utilities.append("Registry Editor")
+             if svcctl_connected:
+@@ -303,10 +331,12 @@ class SambaUtilities(object):
+         if current_page == 1:
+             self.sam_window.on_key_press(widget, event)
+         elif current_page == 2:
+-            self.regedit_window.on_key_press(widget, event)
++            self.srvsvc_window.on_key_press(widget, event)
+         elif current_page == 3:
+-            self.svcctl_window.on_key_press(widget, event)
++            self.regedit_window.on_key_press(widget, event)
+         elif current_page == 4:
++            self.svcctl_window.on_key_press(widget, event)
++        elif current_page == 5:
+             self.crontab_window.on_key_press(widget, event)
+     def on_utility_notebook_switch_page(self, widget, page, page_num):
+@@ -341,7 +371,28 @@ class SambaUtilities(object):
+             self.toolbar_viewport.add(self.sam_window.toolbar)
+             self.toolbar_viewport.show_all()
+-        elif page_num == 2: #Regedit page
++
++        elif page_num == 2: #Share page
++            if self.srvsvc_viewport.child == None:
++                self.init_srvsvc_page()
++
++            #Menubar
++            children = self.menubar_viewport.get_children()
++            self.menubar_viewport.remove(children[0])
++            self.srvsvc_window.menubar.reparent(self.menubar_viewport)
++            #self.menubar_viewport.add(self.srvsvc_window.menubar)
++            self.menubar_viewport.show_all()
++
++            #Toolbar
++            children = self.toolbar_viewport.get_children() 
++            self.toolbar_viewport.remove(children[0])
++            self.srvsvc_window.toolbar.unparent()
++            self.toolbar_viewport.add(self.srvsvc_window.toolbar)
++            self.toolbar_viewport.show_all()
++            
++            self.srvsvc_window.hide()
++            
++        elif page_num == 3: #Regedit page
+             if self.regedit_viewport.child == None:
+                 self.init_regedit_page()
+@@ -357,7 +408,7 @@ class SambaUtilities(object):
+             self.toolbar_viewport.add(self.regedit_window.toolbar)
+             self.toolbar_viewport.show_all()
+-        elif page_num == 3: #Services page
++        elif page_num == 4: #Services page
+             if self.svcctl_viewport.child == None:
+                 self.init_svcctl_page()
+@@ -373,7 +424,7 @@ class SambaUtilities(object):
+             self.toolbar_viewport.add(self.svcctl_window.toolbar)
+             self.toolbar_viewport.show_all()
+-        elif page_num == 4: #Crontab page
++        elif page_num == 5: #Crontab page
+             if self.crontab_viewport.child == None:
+                 self.init_crontab_page()
+@@ -399,6 +450,12 @@ class SambaUtilities(object):
+                     self.sam_window.on_connect_item_activate(None, **self.connection_args)
+             else:
+                 self.init_sam_page()
++            
++            if self.srvsvc_initialized():
++                if not self.srvsvc_window.connected():
++                    self.srvsvc_window.on_connect_item_activate(None, **self.connection_args)
++            else:
++                self.init_srvsvc_page()
+             if self.regedit_initialized():
+                 if not self.regedit_window.connected():
+@@ -425,6 +482,8 @@ class SambaUtilities(object):
+     def on_disconnect_all_button_clicked(self, widget):
+         if self.sam_initialized():
+             self.sam_window.on_disconnect_item_activate(None)
++        if self.srvsvc_initialized():
++            self.srvsvc_window.on_disconnect_item_activate(None)
+         if self.regedit_initialized():
+             self.regedit_window.on_disconnect_item_activate(None)
+         if self.svcctl_initialized():
+@@ -491,10 +550,11 @@ def ParseArgs(argv):
+             arguments.update({"connect_now":True})
+     return (arguments)
+-
++"""
+ if __name__ == "__main__":
+     arguments = ParseArgs(sys.argv[1:])
+     gtk.gdk.threads_init()
+     main_window = SambaUtilities(arguments)
+     sys.stdout = main_window #redirect print statements to the write() function of this class
+     gtk.main()
++"""
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index a72956a..17c780a 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -860,7 +860,7 @@ class ShareWindow(gtk.Window):
+             "A tool to manage user shares on a SRVS Share server.\n"
+             "Based on Jelmer Vernooij's original Samba-GTK",
+             self.icon_pixbuf)
+-        dialog.set_copyright("Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>")
++        #dialog.set_copyright("Copyright \xc2\xa9 2011 Dhananjay Sathe <dhananjaysathe@gmail.com>")
+         dialog.run()
+         dialog.hide()
+@@ -1334,15 +1334,14 @@ class ShareWindow(gtk.Window):
+         self.share_icon_filename = os.path.join(sys.path[0],"..", "images", "network.png")
+         self.icon_pixbuf = gtk.gdk.pixbuf_new_from_file(self.icon_filename)
+         self.set_icon(self.icon_pixbuf)
+-        self.set_position(gtk.WIN_POS_CENTER)
+         accel_group = gtk.AccelGroup()
+-        self.vbox = gtk.VBox(False, 0)
+-        self.add(self.vbox)
++        vbox = gtk.VBox(False, 0)
++        self.add(vbox)
+         # menu
+         self.menubar = gtk.MenuBar()
+-        self.vbox.pack_start(self.menubar, False, False, 0)
++        vbox.pack_start(self.menubar, False, False, 0)
+         self.file_item = gtk.MenuItem("_File")
+         self.menubar.add(self.file_item)
+@@ -1412,7 +1411,7 @@ class ShareWindow(gtk.Window):
+         # toolbar
+         self.toolbar = gtk.Toolbar()
+-        self.vbox.pack_start(self.toolbar, False, False, 0)
++        vbox.pack_start(self.toolbar, False, False, 0)
+         self.connect_button = gtk.ToolButton(gtk.STOCK_CONNECT)
+         self.connect_button.set_is_important(True)
+@@ -1454,7 +1453,7 @@ class ShareWindow(gtk.Window):
+         #share-page
+         self.share_notebook = gtk.Notebook()
+-        self.vbox.pack_start(self.share_notebook, True, True, 0)
++        vbox.pack_start(self.share_notebook, True, True, 0)
+         main_hbox = gtk.HBox()
+         self.share_notebook.append_page(main_hbox, gtk.Label("Share Management"))
+@@ -1689,7 +1688,7 @@ class ShareWindow(gtk.Window):
+         self.statusbar = gtk.Statusbar()
+         self.statusbar.set_has_resize_grip(True)
+-        self.vbox.pack_start(self.statusbar, False, False, 0)
++        vbox.pack_start(self.statusbar, False, False, 0)
+         # signals/events
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index 22fd5ef..d159201 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -961,7 +961,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+             self.fields_box.show_all()
+-        if self.page == 1:
++        elif self.page == 1:
+             self.title_label.set_markup('<b>Name and Password</b>')
+             self.info_label.set_text('Please enter a valid name and password (optional) for your share.')
+             self.prev_button.set_sensitive(True)
+@@ -993,7 +993,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+             self.fields_box.show_all()
+-        if self.page == 2:
++        elif self.page == 2:
+             self.title_label.set_markup('<b>Comment and Max Users </b>')
+             self.info_label.set_text('Please enter a  comment(optional) and select max users')
+             self.prev_button.set_sensitive(True)
+@@ -1022,7 +1022,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+             self.fields_box.pack_start(table,False,True,0)
+             self.fields_box.show_all()
+-        if self.page == 3:
++        elif self.page == 3:
+             self.title_label.set_markup('<b>Share Type Options</b>')
+             self.info_label.set_text('Please select your share type options.')
+             self.prev_button.set_sensitive(True)
+@@ -1076,7 +1076,7 @@ class ShareWizardDialog(ShareAddEditDialog):
+-        if self.page == 4:
++        else :
+             self.title_label.set_markup('<b>Path</b>')
+             if self.islocal:
+                 self.info_label.set_text('Please select a valid path.')
+
+commit aca6211e2409a908333091951159a8ed284e94d3
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Wed Aug 3 20:28:07 2011 +0530
+
+    fields validate fixed , now handles both wizard and dialog
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index 1cc264e..a72956a 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -211,12 +211,12 @@ class srvsvcPipeManager(object):
+             if os.path.exists(path):
+                 path = os.path.realpath(path)  # gets canonical path
+             else:
+-                raise OSError
++                raise OSError("Path does not exist !")
+-            if path.startswith('/'):
+-                path = path.replace('/', '\\')
+-                path = ''.join(['C:',path])
+-                path = unicode(path)
++        if path.startswith('/'):
++            path = path.replace('/', '\\')
++            path = ''.join(['C:',path])
++            path = unicode(path)
+         return path
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index 2c65b52..22fd5ef 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -270,15 +270,20 @@ class ShareAddEditDialog(gtk.Dialog):
+     def validate_fields(self):
+-        if len(self.sname) == 0:
++        if type(self) is ShareAddEditDialog :
++            name = self.share_name_entry.get_text()
++        elif type(self) is ShareWizardDialog :
++            name = self.sname
++
++        if len(name) == 0:
+             return "Share name may not be empty!"
+-        if not self.pipe.name_validate(self.sname):
++        if not self.pipe.name_validate(name):
+             return "Invalid Share name"
+         if (not self.edit_mode):
+             for share in self.pipe.share_list:
+-                if share.name == self.share_name_entry.get_text():
++                if share.name == name:
+                     return ' '.join(["A Share with the name : ", share.name ,"already exists!"])
+         return None
+
+commit c8b9a88c9ab45a7ce6badc2cc44066176729a759
+Author: Dhananjay Sathe <dhananjaysathe@gmail.com>
+Date:   Wed Aug 3 07:34:55 2011 +0530
+
+    wizard history fixup , custom collects
+
+diff --git a/sambagtk/pygwshare.py b/sambagtk/pygwshare.py
+index efbc19b..1cc264e 100644
+--- a/sambagtk/pygwshare.py
++++ b/sambagtk/pygwshare.py
+@@ -984,7 +984,8 @@ class ShareWindow(gtk.Window):
+     def on_new_item_activate(self, widget,wizard_mode=False):
+         share = self.run_share_add_edit_dialog(wizard_mode=wizard_mode)
+-        #print share.type TODO cleanup post debug
++        #TODO cleanup Debug
++        #print share.name,share.comment,share.password,str(share.type),str(share.max_users),share.path
+         if share is None:
+             self.set_status("Share creation canceled.")
+             return
+diff --git a/sambagtk/pysrvsvc.py b/sambagtk/pysrvsvc.py
+index 7a02769..2c65b52 100644
+--- a/sambagtk/pysrvsvc.py
++++ b/sambagtk/pysrvsvc.py
+@@ -270,7 +270,7 @@ class ShareAddEditDialog(gtk.Dialog):
+     def validate_fields(self):
+-        if len(self.share_name_entry.get_text()) == 0:
++        if len(self.sname) == 0:
+             return "Share name may not be empty!"
+         if not self.pipe.name_validate(self.sname):
+@@ -962,8 +962,8 @@ class ShareWizardDialog(ShareAddEditDialog):
+             self.prev_button.set_sensitive(True)
+             self.next_button.set_sensitive(True)
+             self.ok_button.set_sensitive(False)
+-            if self.name is not None:
+-                self.share_name_entry.set_text(self.name)
++            if self.sname is not None:
++                self.share_name_entry.set_text(self.sname)
+             if self.password is not None:
+                 self.share_comment_entry.set_text(self.password)
+@@ -1114,3 +1114,40 @@ class ShareWizardDialog(ShareAddEditDialog):
+             self.fields_box.pack_start(table,False,True,0)
+             self.fields_box.show_all()
++
++    def collect_fields (self):
++        """ Custom collect fields from the GUI and saves in class variables which is page specific. """
++        if self.page == 0:
++            pass
++
++        elif self.page == 1 :
++            self.sname = self.share_name_entry.get_text()
++            self.password = self.share_password_entry.get_text()
++
++
++        elif self.page == 2:
++            self.comment = self.share_comment_entry.get_text()
++            self.max_users = self.max_users_spinbox.get_value_as_int()
++
++        elif self.page ==3 :
++            # Now to handle the share type resolution
++            if self.stype_disktree_radio_button.get_active() :
++                self.stype = srvsvc.STYPE_DISKTREE
++            elif self.stype_printq_radio_button.get_active() :
++                self.stype = srvsvc.STYPE_PRINTQ
++            else:
++                self.stype = srvsvc.STYPE_IPC
++            # check flags
++            self.flags = [False,False]
++            if self.sflag_temp_check_button.get_active():
++                self.flags[0] = True
++            if self.sflag_hidden_check_button.get_active():
++                self.flags[1] = True
++
++        else :
++            if self.islocal :
++                self.path = self.file_button.get_filename()
++            else:
++                self.path = self.path_entry.get_text()
++
++
index f59901e17456e1cf1a341a2ac19442e235145321..23a33c4a3b7381c2f103335bdf426d004fb712bf 100644 (file)
@@ -11,7 +11,7 @@ import gtk.glade
 import os.path
 import getopt
 
-#sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
+sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
 # for use against the default binaries from default .configure.developer for use on python 2.7
 # Uncomment the above line if it is yor your config , else edit it as required
 
@@ -24,7 +24,6 @@ import pygwshare
 
 from sambagtk.dialogs import AboutDialog
 from sambagtk.sam import SAMConnectDialog
-from sambagtk.pysrvsvc import srvsvcConnectDialog
 
 
 class SambaUtilities(object):
@@ -144,6 +143,7 @@ class SambaUtilities(object):
 
         #We'll be displaying this later. We need to unparent it before attaching it to another container
 
+        self.srvsvc_window.menubar.unparent()
         self.srvsvc_window.toolbar.unparent()
         self.srvsvc_window.statusbar = self.statusbar #we simply tell the utility to use our status bar instead
 
@@ -382,17 +382,12 @@ class SambaUtilities(object):
             #Menubar
             children = self.menubar_viewport.get_children()
             self.menubar_viewport.remove(children[0])
-            if self.srvsvc_init is False:
-                self.srvsvc_window.menubar.reparent(self.menubar_viewport)
-                self.srvsvc_init = True
-            else:
-                self.menubar_viewport.add(self.srvsvc_window.menubar)
+            self.menubar_viewport.add(self.srvsvc_window.menubar)
             self.menubar_viewport.show_all()
 
             #Toolbar
             children = self.toolbar_viewport.get_children()
             self.toolbar_viewport.remove(children[0])
-            self.srvsvc_window.toolbar.unparent()
             self.toolbar_viewport.add(self.srvsvc_window.toolbar)
             self.toolbar_viewport.show_all()
 
index e11be7d9f665372c770cd0d720e06fe434720a81..8fadca5e8a922232209c3eb1739bbceb33570519 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python2
 
 import sys
 import os.path
@@ -7,6 +7,7 @@ import getopt
 import gobject
 import gtk
 
+sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
 from samba import credentials
 from samba.dcerpc import (
     samr,
@@ -341,12 +342,13 @@ class SAMPipeManager(object):
         # we wanted
         security_descriptor = secinfo.sd
         DACL = security_descriptor.dacl
-        ace_list = DACL.aces
+        if DACL is not None :
+            ace_list = DACL.aces
 
-        # we don't really need to find the user in ace_list because the first
-        # entry (S-1-1-0) should have the same flags anyways
-        ace =  ace_list[0]
-        user.cannot_change_password = (samr.SAMR_USER_ACCESS_CHANGE_PASSWORD & ace.access_mask) == 0
+            # we don't really need to find the user in ace_list because the first
+            # entry (S-1-1-0) should have the same flags anyways
+            ace =  ace_list[0]
+            user.cannot_change_password = (samr.SAMR_USER_ACCESS_CHANGE_PASSWORD & ace.access_mask) == 0
 
         return user
 
@@ -1325,3 +1327,4 @@ if __name__ == "__main__":
     main_window = SAMWindow(**arguments)
     main_window.show_all()
     gtk.main()
+
index 9368bfa4af40439857e236975d070facbe4e9128..bc71a17d122082c32e69a575de39831200a796c0 100644 (file)
@@ -32,7 +32,7 @@ import getopt
 import gobject
 import gtk
 
-sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
+sys.path.append('/usr/local/samba/lib/python2.7/site-packages/')
 # default for ./configure.developer for use on python 2.7
 # Unhash the above line if it is yor your config , else edit it as req
 
@@ -224,7 +224,7 @@ class srvsvcPipeManager(object):
         info_ctr = srvsvc.NetConnInfoCtr()
         info_ctr.level = level  #
         (no_ent, info_ctr, resume_handle) = \
-            self.pipe.NetConnEnum(server_unc,
+            self.pipe.NetConnEnum(self.server_unc,
                                   self.server_info_basic.path,
                                   info_ctr, max_buffer,
                                   self.resume_handle_conn)
@@ -345,7 +345,7 @@ class srvsvcPipeManager(object):
         name = unicode(name)
         for i in self.share_names_list:
             if name is i:
-                return share_list[i.index()]
+                return self.share_list[i.index()]
 
     def get_share_info_rpc(self, name=''):
         """
@@ -401,12 +401,12 @@ class srvsvcPipeManager(object):
         name = unicode(name)
         for i in self.share_names_list:
             if name is i:
-                stype = share_types_list[i.index()]
+                stype = self.share_types_list[i.index()]
             else:
                 raise KeyError('Share Does no exist')
         return stype
 
-    def get_file_security(self, secdesc, filename='', filepath=''):
+    def get_file_security(self, secdesc, filename='', filepath='', share=None):
         """
         Returns a security descriptor buffer of a file .
         Filepath must be full path relative to basepath of share's path.
@@ -432,7 +432,7 @@ class srvsvcPipeManager(object):
         return tod_info
 
     def set_file_security(self, secdesc, sd_buf, sharename='',
-                        filepath=''):
+                        filepath='', share=None):
         """
         Sets the security  of a file .
 
@@ -443,7 +443,7 @@ class srvsvcPipeManager(object):
         """
 
         sharename = unicode(sharename)
-        self.pipe.NetSetFileSecurity(self.server_unc, share, filename,
+        self.pipe.NetSetFileSecurity(self.server_unc, share, filepath,
                 secdesc, sd_buf)
 
     @staticmethod
@@ -757,10 +757,7 @@ Please check your network connection.''',
             label_data = \
                 self.pipe_manager.get_platform_info(
                                    self.server_info.platform_id, 'desc')
-            self.srvinfo_tos_label.set_text(label_data)
-            srv_type_genstr = \
-                self.pipe_manager.get_platform_info(
-                            self.server_info.platform_id, 'typestring')
+            self.srvinfo_tos_label.set_text(label_data)            
             self.srvinfo_name_label.set_text('\\'
                      + self.server_info.server_name)
             self.srvinfo_hidden_label.set_text(