Exemplo n.º 1
0
 def __init__(self, username=None):
     self.username = username
     self.api_key = None
     self.auth_window = None
     self.entry_username = None
     self.entry_api_key = None
     self.entry_message = None
     self.gconf_key = CloudFilesGconf()
     self.authenticated = False
 def __init__(self, cnx, stuff_to_upload):
     self.cnx = cnx
     self.chosen_container = None
     self.container_master_button = None
     self.containers_list_window = None
     self.container_new_entry = None
     self.gconf_key = CloudFilesGconf()
     self.button_clipboard = None
     self.list_store = None
     self.default_container = \
         self.gconf_key.get_entry("default_container",
                                  "string")
     self.stuff_to_upload = stuff_to_upload
Exemplo n.º 3
0
class CloudFileUploader(object):

    def __init__(self, stuff_to_upload):
        self.gconf_key = CloudFilesGconf()
        self.stuff_to_upload = stuff_to_upload
        
    def main(self):
        global USERNAME, API_KEY
        
        username = self.gconf_key.get_entry("username", "string")
        api_key = self.gconf_key.get_entry("api_key", "string")

        check_username = CheckUsernameKey()
        if not(all([username, api_key]) and \
                   check_username.check(username, api_key)):
            ask = AskUsernameKey(username=username)
            ask.show()

            if not ask.authenticated:
                #make sure it has been destroyed
                ask.auth_window.destroy()
                return
            
            username = self.gconf_key.get_entry("username", "string")
            api_key = self.gconf_key.get_entry("api_key", "string")

            
        USERNAME = username
        API_KEY = api_key

        self.gconf_key.set_entry("username", username, "string")
        self.gconf_key.set_entry("api_key", api_key, "string")

        container_list = ShowContainersList(CF_CONNECTION, self.stuff_to_upload)
        container_list.show()

        return True
class ShowContainersList(object):
    def __init__(self, cnx, stuff_to_upload):
        self.cnx = cnx
        self.chosen_container = None
        self.container_master_button = None
        self.containers_list_window = None
        self.container_new_entry = None
        self.gconf_key = CloudFilesGconf()
        self.button_clipboard = None
        self.list_store = None
        self.default_container = \
            self.gconf_key.get_entry("default_container",
                                     "string")
        self.stuff_to_upload = stuff_to_upload
        
    def list_containers(self):
        if not self.cnx:
            return []
        try:
            return [ cnt for cnt in self.cnx.list_containers() \
                         if cnt not in EXCLUDE_CONTAINERS ]
        except(cloudfiles.errors.ResponseError):
            return []

    def create_new_container(self, container):
        if not self.cnx:
            return
        try:
            return self.cnx.create_container(container)
        except(cloudfiles.errors.ResponseError):
            return
    
    def ok(self, *args):
        new_container = self.container_new_entry.get_text()
        if new_container:
            container = self.create_new_container(new_container)
        else:
            if not self.chosen_container:
                if self.default_container:
                    self.chosen_container = self.default_container
                else:
                    return False
            container = self.cnx.get_container(self.chosen_container)
        self.containers_list_window.destroy()

        self.gconf_key.set_entry("copy_to_clipboard",
                                 self.button_clipboard.get_active(), "boolean")
        self.gconf_key.set_entry("default_container",
                                 str(container), "string")

        public_uris = []
        for obj in self.stuff_to_upload:
            pynotify.init("Uploading %s" % obj)
            upload = Upload(obj, container)
            try:
                ret = upload.run()
            except(cloudfiles.errors.ContainerNotPublic):
                ret = "NotPublic"

            if not ret:
                conclusion = "Aborted"
            else:
                conclusion = "uploaded to %s" % (container)
                if ret != "NotPublic":
                    public_uris.append(ret)
                    
            title = "Rackspace Cloud Files Upload"
            msg = "File %s %s" % (obj, conclusion)

            if self.button_clipboard.get_active() and public_uris:
                cb = gtk.clipboard_get('CLIPBOARD')
                cb.clear()
                cb.set_text(" ".join(map(short_url, public_uris)))
            
            n = pynotify.Notification(title, msg, gtk.STOCK_FIND_AND_REPLACE)
            n.set_timeout(pynotify.EXPIRES_DEFAULT)
            n.show()
            
    def quit(self, *args, **kwargs):
        self.containers_list_window.destroy()

    def toggled(self, cell_renderer, col, treeview):
        tree_iter = self.list_store.get_iter(col)
        old_value = self.list_store.get_value(tree_iter, 1)
        new_value = not old_value

        def untoggle_entries(lst_store, path, tree_iter):
            self.list_store.set_value(tree_iter, 1, False)
        self.list_store.foreach(untoggle_entries)

        self.chosen_container = self.list_store.get_value(tree_iter, 0)
        self.list_store.set_value(tree_iter, 1, new_value)
        
    def add_tree_list(self, vbox):
        self.list_store = gtk.ListStore(gobject.TYPE_STRING,
                                        gobject.TYPE_BOOLEAN,
                                        gobject.TYPE_STRING)
        
        # use list store as treemodel for treeview
        treeview = gtk.TreeView(self.list_store)

        # draw checkboxes
        bool_cell_renderer = gtk.CellRendererToggle()
        bool_cell_renderer.set_radio(True)
        bool_cell_renderer.set_property('activatable', 1)
        bool_cell_renderer.connect('toggled', self.toggled, treeview)
        bool_col = gtk.TreeViewColumn("",
                                      bool_cell_renderer, 
                                      active=1)

        treeview.insert_column(bool_col, -1)

        str_cell_renderer = gtk.CellRendererText()
        text_col = gtk.TreeViewColumn("Choose Container",
                                      str_cell_renderer, text=0)
        str_cell_renderer.set_property('background-set' , True)
        str_cell_renderer.set_property('foreground-set' , True)
        text_col.set_attributes(str_cell_renderer,text=0, background=2)
    
        treeview.insert_column(text_col, -1)

        treeview.set_reorderable(1) 
        treeview.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_NONE)
        treeview.show()
        treeview.columns_autosize()

        background_color="#EEEEEE"
        containers = self.list_containers()
        for container in sorted(containers):
            background_color = background_color == "#EEEEEE" and "#FFFFFF" or "#EEEEEE"
            checked = 0
            if container == self.default_container:
                checked = 1
            self.list_store.append([container, checked, background_color])
        
        vbox.pack_start(treeview, True, True, 0)
        #self.containers_list_window.add(treeview)
        
    def show(self):
        gladefile = os.path.join(GLADE_DIR, 'dialog_containers_list.glade')
        window_tree = gtk.glade.XML(gladefile)
        
        self.containers_list_window = \
            window_tree.get_widget('dialog_containers_list')

        self.containers_list_window.set_position(gtk.WIN_POS_CENTER)
        
        self.container_new_entry = window_tree.get_widget('entry1')
        vbox1 = window_tree.get_widget('vbox1')
        self.add_tree_list(vbox1)

        button_ok = window_tree.get_widget('button1')
        button_cancel = window_tree.get_widget('button2')
        self.button_clipboard = window_tree.get_widget('checkbutton1')

        default_clipboard = self.gconf_key.get_entry("copy_to_clipboard",
                                                     "boolean")
        self.button_clipboard.set_active(default_clipboard)
        
        button_ok.connect('clicked', self.ok)
        button_ok.set_flags(gtk.CAN_DEFAULT)
        button_ok.grab_default()

        
        button_cancel.connect('clicked', self.quit)
        self.containers_list_window.connect('destroy', self.quit)
        self.containers_list_window.run()
Exemplo n.º 5
0
class AskUsernameKey(object):
    def __init__(self, username=None):
        self.username = username
        self.api_key = None
        self.auth_window = None
        self.entry_username = None
        self.entry_api_key = None
        self.entry_message = None
        self.gconf_key = CloudFilesGconf()
        self.authenticated = False
        
    def clicked(self, *kargs, **kwargs):
        self.username = self.entry_username.get_text()
        self.api_key = self.entry_api_key.get_text()

        if not self.username:
            self.entry_message.set_text("You have not entered a Username")
            self.entry_message.show()
        
        if not self.api_key:
            self.entry_message.set_text("You have not entered an API Key")
            self.entry_message.show()
        
        check_username = CheckUsernameKey()        
        if check_username.check(self.username, self.api_key):
            self.authenticated = True
            self.auth_window.destroy()
            self.gconf_key.set_entry("username", self.username, "string")
            self.gconf_key.set_entry("api_key", self.api_key, "string")
            return True

        self.entry_message.set_text("Authentication has failed")
        self.entry_message.show()

    def quit(self, *args, **kwargs):
        self.auth_window.destroy()
        
    def show(self):
        gladefile = os.path.join(GLADE_DIR, 'dialog_authentication.glade')
        window_tree = gtk.glade.XML(gladefile)

        self.entry_username = window_tree.get_widget("entry_username")
        self.entry_api_key = window_tree.get_widget("entry_api_key")
        self.entry_message = window_tree.get_widget("entry_message")

        if not self.entry_message.get_text():
            self.entry_message.hide()
        
        if self.username:
            self.entry_username.set_text(self.username)
            self.entry_api_key.grab_focus()

        if self.api_key:
            self.entry_username.set_text(self.api_key)
            
        self.auth_window = window_tree.get_widget('dialog_authentication')
        button_ok = window_tree.get_widget('button1')
        button_cancel = window_tree.get_widget('button2')

        button_ok.connect('clicked', self.clicked)
        button_cancel.connect('clicked', self.quit)
        self.auth_window.connect('destroy', self.quit)
        self.auth_window.run()
Exemplo n.º 6
0
 def __init__(self, stuff_to_upload):
     self.gconf_key = CloudFilesGconf()
     self.stuff_to_upload = stuff_to_upload