Changeset 80 in main for trunk/plugins


Ignore:
Timestamp:
07/09/10 15:30:07 (12 years ago)
Author:
pcosquer
Message:

plugin : revise and check in

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/gedit/openplm.py

    r78 r80  
    2626import json 
    2727import urllib 
     28import threading 
    2829 
    2930# poster makes it possible to send http request with files 
     
    142143    mdiag.destroy() 
    143144 
     145def save_document(window, gdoc, func): 
     146    tab = gedit.tab_get_from_document(gdoc) 
     147    if tab.get_state() != gedit.TAB_STATE_NORMAL: 
     148        return 
     149    def handler(*args): 
     150        if tab.get_state() == gedit.TAB_STATE_NORMAL: 
     151            tab.disconnect(gdoc.get_data("openplm_sig")) 
     152            func() 
     153    sig = tab.connect_after("notify::state", handler) 
     154    gdoc.set_data("openplm_sig", sig) 
     155    gedit.commands.save_document(window, gdoc) 
     156  
     157def load_document(window, gdoc, path): 
     158    event = threading.Event() 
     159    def f(): 
     160        def handler(*args): 
     161            gdoc.disconnect(gdoc.get_data("openplm_sig")) 
     162            event.set() 
     163        sig = gdoc.connect_after("load", handler) 
     164        gdoc.set_data("openplm_sig", sig) 
     165        #gdoc.load("file://" + path, gdoc.get_encoding(), 0, 0) 
     166        gedit.commands.load_uri(window, "file://" + path, gdoc.get_encoding(), 0) 
     167    threading.Thread(target=f).start() 
     168    event.wait() 
     169 
    144170class OpenPLMPluginInstance(object): 
    145171     
    146     #: location of oepnPLM server 
     172    #: location of openPLM server 
    147173    SERVER = "http://localhost:8000/" 
    148174    #: OpenPLM main directory 
     
    288314            os.makedirs(rep, 0700) 
    289315        except os.error: 
    290             # directory already exists, just ignores the execption 
     316            # directory already exists, just ignores the exception 
    291317            pass 
    292318        dst_name = os.path.join(rep, doc_file["filename"]) 
     
    337363        return files 
    338364    
    339     def forget(self): 
    340         gdoc = self._window.get_active_document() 
     365    def forget(self, gdoc=None, delete=True): 
     366        gdoc = gdoc or self._window.get_active_document() 
    341367        doc = gdoc.get_data("openplm_doc") 
    342368        doc_file_id = gdoc.get_data("openplm_file_id") 
     
    347373            data = self.get_conf_data() 
    348374            del data["documents"][str(doc["id"])]["files"][str(doc_file_id)] 
     375            if not  data["documents"][str(doc["id"])]["files"]: 
     376                del data["documents"][str(doc["id"])] 
    349377            f = open(self.CONF_FILE, "w") 
    350378            json.dump(data, f) 
    351379            f.close() 
     380            if delete and os.path.exists(path): 
     381                os.remove(path) 
    352382 
    353383    def load_managed_files(self): 
     
    355385            self.load_file(doc, doc_file_id, path) 
    356386 
    357     def load_file(self, doc, doc_file_id, path): 
    358         gedit.commands.load_uri(self._window, "file://" + path, None, -1) 
    359         gdoc = self._window.get_active_document() 
     387    def load_file(self, doc, doc_file_id, path, gdoc=None): 
     388        if gdoc: 
     389            load_document(self.window, gdoc, path) 
     390        else: 
     391            gedit.commands.load_uri(self._window, "file://" + path, None, -1) 
     392            gdoc = self._window.get_active_document() 
    360393        gdoc.set_data("openplm_doc", doc) 
    361394        gdoc.set_data("openplm_file_id", doc_file_id) 
     
    371404            box.pack_start(label) 
    372405            gdoc.set_data("openplm_label", label) 
    373  
    374     def check_in(self, gdoc, unlock): 
     406        return gdoc 
     407 
     408    def check_in(self, gdoc, unlock, save=True): 
    375409        doc = gdoc.get_data("openplm_doc") 
    376410        doc_file_id = gdoc.get_data("openplm_file_id") 
    377411        path = gdoc.get_data("openplm_path") 
    378412        if doc and doc_file_id and path: 
    379             gedit.commands.save_document(self._window, gdoc) 
    380             # headers contains the necessary Content-Type and Content-Length 
    381             # datagen is a generator object that yields the encoded parameters 
    382             datagen, headers = multipart_encode({"filename": open(path, "rb")}) 
    383             # Create the Request object 
    384             url = self.SERVER + "api/object/%s/checkin/%s/" % (doc["id"], doc_file_id) 
    385             request = urllib2.Request(url, datagen, headers) 
    386             res = self.opener.open(request) 
    387             if not unlock: 
    388                 self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_file_id)) 
     413            def func(): 
     414                # headers contains the necessary Content-Type and Content-Length> 
     415                # datagen is a generator object that yields the encoded parameters 
     416                datagen, headers = multipart_encode({"filename": open(path, "rb")}) 
     417                # Create the Request object 
     418                url = self.SERVER + "api/object/%s/checkin/%s/" % (doc["id"], doc_file_id) 
     419                request = urllib2.Request(url, datagen, headers) 
     420                res = self.opener.open(request) 
     421                print res.read() 
     422                if not unlock: 
     423                    self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_file_id)) 
     424            if save: 
     425                save_document(self._window, gdoc, func) 
     426            else: 
     427                func() 
    389428        else: 
    390429            # TODO 
     
    410449        path = gdoc.get_data("openplm_path") 
    411450        if doc and doc_file_id and path: 
    412             gedit.commands.save_document(self._window, gdoc) 
    413             new_doc = self.get_data("api/object/%s/revise/" % doc["id"], 
    414                           {"revision" : revision})["rev_id"] 
    415             if not unlock: 
    416                 self.get_data("api/object/%s/lock/%s/" % (doc["id"], doc_file_id)) 
     451           
     452            res = self.get_data("api/object/%s/revise/" % doc["id"], 
     453                                {"revision" : revision}) 
     454            new_doc = res["doc"] 
     455            name = os.path.basename(gdoc.get_uri()) 
     456            doc_file = None 
     457            for f in res["files"]: 
     458                if f["filename"] == name: 
     459                    doc_file = f 
     460                    break 
     461            # create a new doc 
     462            rep = os.path.join(self.PLUGIN_DIR, doc["type"], doc["reference"], 
     463                               revision) 
     464            try: 
     465                os.makedirs(rep, 0700) 
     466            except os.error: 
     467                # directory already exists, just ignores the exception 
     468                pass 
     469 
     470            self.forget(gdoc) 
     471            path = os.path.join(rep, name) 
     472            gdoc.set_uri("file://" + path) 
     473            def func(): 
     474                #tab = gedit.tab_get_from_document(gdoc) 
     475                #self._window.close_tab(tab) 
     476                gd = self.load_file(new_doc, doc_file["id"], path) 
     477                self.add_managed_file(new_doc, doc_file, path) 
     478                self.check_in(gd, unlock, False) 
     479                self.get_data("api/object/%s/unlock/%s/" % (doc["id"], doc_file_id)) 
     480            save_document(self._window, gdoc, func) 
    417481        else: 
    418482            # TODO 
    419             print 'can not check in' 
    420             pass 
     483            print 'can not revise' 
    421484 
    422485    def revise_cb(self): 
     
    492555        label2 = gtk.Label(filename) 
    493556        self.vbox.pack_start(label2) 
    494         self.unlock_button = gtk.CheckButton("Unlock ?") 
     557        self.unlock_button = gtk.CheckButton(_("Unlock last revision ?")) 
    495558        self.vbox.pack_start(self.unlock_button) 
     559        warn_message = gtk.Label(_("Warning, old revision will be automatically unlocked")) 
     560        self.vbox.pack_start(warn_message) 
    496561        self.vbox.show_all() 
    497562 
Note: See TracChangeset for help on using the changeset viewer.