def Run(self, filename, d, odir): if not self.isReady(): return False print("starting tar....(save)") try: tarname = self.make_tar(filename, d) except PermissionError: message(wx.GetApp().TopWindow, 'Permission error', 'Error', 0) return False except: showtraceback(wx.GetApp().TopWindow, txt=traceback.format_exc()) return False print("starting tar.gz....(save)") MPTarzip.worker = Process(target=do_zip, args=(filename, tarname, d)) try: MPTarzip.worker.start() except: showtraceback(wx.GetApp().TopWindow, txt=traceback.format_exc()) return False self.odir = odir self.d = d wx.CallLater(100, self.CheckFinished) return True
def onBuildAll(self, evt): dlg = evt.GetEventObject().GetTopLevelParent() viewer = dlg.GetParent() engine = viewer.engine engine.build_ns() try: od = os.getcwd() os.chdir(viewer.model.owndir()) self.build_geom(finalize=True, gui_parent=dlg) os.chdir(od) except: import ifigure.widgets.dialog as dialog dialog.showtraceback(parent=dlg, txt='Failed to build geometry', title='Error', traceback=traceback.format_exc()) dlg.OnRefreshTree() filename = os.path.join(viewer.model.owndir(), self.name()) self.onUpdateGeoView(evt, filename=filename) ''' if not use_gmsh_api: fid = open(filename + '.geo_unrolled', 'w') fid.write('\n'.join(self._txt_unrolled)) fid.close() ''' self.geom_finalized = True self.geom_timestamp = time.ctime() evt.Skip()
def onBuildAll(self, evt): dlg = evt.GetEventObject().GetTopLevelParent() dlg.import_selected_panel_value() viewer = dlg.GetParent() engine = viewer.engine engine.build_ns() geom_root = self.geom_root if not geom_root.is_finalized: geom_root.onBuildAll(evt) do_clear = True try: filename = os.path.join(viewer.model.owndir(), self.name()) + '.msh' count = self.build_mesh(geom_root, finalize=True, filename=filename, gui_parent=dlg) do_clear = count == 0 except: import ifigure.widgets.dialog as dialog dialog.showtraceback(parent=dlg, txt='Failed to generate mesh script', title='Error', traceback=traceback.format_exc()) dlg.OnRefreshTree() self.update_meshview(dlg, viewer, clear=do_clear)
def _doPlotExpr(self, value): model = self.parent.model.param.getvar('mfem_model') if model is None: return expr = str(value[0]) phys = str(value[3]) use_2dplot = model['Phys'][phys].dim == 1 from petram.utils import eval_expr try: engine = self.parent.engine d = eval_expr(model, engine, expr, value[1], phys=phys) except: dialog.showtraceback(parent=self, txt='Failed to evauate expression', title='Error', traceback=traceback.format_exc()) return from ifigure.interactive import figure v = figure() v.update(False) v.suptitle(expr) if use_2dplot: for k in d.keys(): v.plot(d[k][0][:, 0, 0].flatten(), d[k][1][:, 0].flatten()) v.update(True) else: from petram.pi.dlg_plot_sol import setup_figure setup_figure(v, self.GetParent()) for k in d.keys(): v.solid(d[k][0], cz=True, cdata=d[k][1]) v.update(True) v.view('noclip') v.lighting(light=0.5)
def _do_make_hg(self, value): app = wx.GetApp().TopWindow try: self.setvar('include', [x.strip() for x in str(value[0]).split(',')]) self.setvar('exclude', [x.strip() for x in str(value[1]).split(',')]) except: dialog.showtraceback(parent=app, txt='Failed to set include/exclude', title='Failure', traceback=traceback.format_exc()) return repo = hgapi.Repo(self.owndir()) repo.hg_init() self.update_hgsub() addfile, rmfile, skipfile, txt = hg_add_no_binary( repo, self.owndir(), include=self.getvar('include'), exclude=self.getvar('exclude')) dlg = wx.MessageDialog(None, txt, "HG add/remove", wx.OK) ret = dlg.ShowModal() dlg.Destroy() self._image_update = False _add_include_exclude(self) tv = app.proj_tree_viewer tv.update_widget()
def onButton(self, evt, mode): from ifigure.ifigure_config import vv_scratch import ifigure.utils.pickle_wrapper as pickle idx = self.grid.GetSelectedRows() if len(idx) == 0 and mode != 'paste': return gt = self.grid.GetTable() obj = gt.GetTreeDict() if mode == 'copy': name = str(self.grid.GetRowLabelValue(idx[0])) self.GetTopLevelParent().set_status_text('Copy ' + name, timeout=3000) try: fid = open(vv_scratch, 'wb') data = {name: obj.getvar(name)} pickle.dump(data, fid) fid.close() except: dialog.showtraceback(parent=self, txt='Failed to copy', title='Failed to copy', traceback=traceback.format_exc()) elif mode == 'paste': if not os.path.exists(vv_scratch): dialog.showtraceback(parent=self, txt='paste data does not exists', title='Failed to paste', traceback='') return fid = open(vv_scratch, 'rb') data = pickle.load(fid) fid.close() for key in data: if obj.hasvar(key): dlg = wx.MessageDialog( None, 'Do you want to overwrite ' + key + '?', 'Variable already existws', wx.OK | wx.CANCEL) ret = dlg.ShowModal() dlg.Destroy() if ret != wx.ID_OK: continue self.GetTopLevelParent().set_status_text('Paste tree variable', timeout=3000) obj.setvar(key, data[key]) obj._var_changed = True self.update() elif mode == 'trash': name = str(self.grid.GetRowLabelValue(idx[0])) dlg = wx.MessageDialog(None, 'Do you want to delete ' + name + '?', 'Deleting variable', wx.OK | wx.CANCEL) ret = dlg.ShowModal() dlg.Destroy() if ret == wx.ID_OK: obj.delvar(name) obj._var_changed = True self.GetTopLevelParent().set_status_text('Deltete ' + name, timeout=3000) wx.CallAfter(self.update)
def _onBuildThis(self, evt, **kwargs): dlg = evt.GetEventObject().GetTopLevelParent() viewer = dlg.GetParent() engine = viewer.engine engine.build_ns() geom_root = self.root()['Geometry'][self.parent.geom_group] do_clear = True if not geom_root.is_finalized: geom_root.onBuildAll(evt) try: filename = os.path.join(viewer.model.owndir(), self.name()) + '.msh' kwargs['gui_parent'] = dlg kwargs['filename'] = filename count = self.parent.build_mesh(geom_root, **kwargs) do_clear = (count == 0) except: import ifigure.widgets.dialog as dialog dialog.showtraceback(parent=dlg, txt='Failed to generate meshing script', title='Error', traceback=traceback.format_exc()) dlg.OnRefreshTree() self.parent.update_meshview(dlg, viewer, clear=do_clear)
def _onBuildThis(self, evt, **kwargs): dlg = evt.GetEventObject().GetTopLevelParent() viewer = dlg.GetParent() engine = viewer.engine engine.build_ns() kwargs['gui_parent'] = dlg try: p = self.parent if isinstance(p, GmshGeom): rootg = p else: # work plane rootg = p.parent rootg._geom_finalized = False od = os.getcwd() os.chdir(viewer.model.owndir()) rootg.build_geom(**kwargs) os.chdir(od) except: import ifigure.widgets.dialog as dialog dialog.showtraceback(parent=dlg, txt='Failed to build geometry', title='Error', traceback=traceback.format_exc()) dlg.OnRefreshTree() rootg.onUpdateGeoView(evt)
def _do_make_hg(self, value): app = wx.GetApp().TopWindow try: self.setvar('include', [x.strip() for x in str(value[0]).split(',')]) self.setvar('exclude', [x.strip() for x in str(value[1]).split(',')]) except: dialog.showtraceback(parent = app, txt='Failed to set include/exclude', title='Failure', traceback=traceback.format_exc()) return repo = hgapi.Repo(self.owndir()) repo.hg_init() self.update_hgsub() addfile, rmfile, skipfile, txt = hg_add_no_binary(repo, self.owndir(), include=self.getvar('include'), exclude=self.getvar('exclude')) dlg=wx.MessageDialog(None, txt, "HG add/remove", wx.OK) ret=dlg.ShowModal() dlg.Destroy() self._image_update = False _add_include_exclude(self) tv = app.proj_tree_viewer tv.update_widget()
def onClearMesh(self, evt): dlg = evt.GetEventObject().GetTopLevelParent() viewer = dlg.GetParent() engine = viewer.engine engine.build_ns() geom_root = self.geom_root if not geom_root.is_finalized: geom_root.onBuildAll(evt) do_clear = True try: count = self.build_mesh(geom_root, nochild=True, gui_parent=dlg) do_clear = (count == 0) except: import ifigure.widgets.dialog as dialog dialog.showtraceback(parent=dlg, txt='Failed to generate meshing script', title='Error', traceback=traceback.format_exc()) dlg.OnRefreshTree() self.update_meshview(dlg, viewer, clear=do_clear) viewer._view_mode_group = '' viewer.set_view_mode('mesh', self)
def add_func(evt, cls=cls, indices=indices, tree=tree, namebase=txt2, model=self.model): parent = model.GetItem(indices) # build stop is a flag for precedual construction of geom/mesh if hasattr(parent, '_build_stop'): before, after = parent.build_stop elif hasattr(parent.parent, 'build_stop'): before, after = parent.parent.build_stop else: before, after = None, None try: name = parent.add_item(namebase, cls, before=before, after=after) except: dialog.showtraceback( parent=self, txt="Failed to add child", title='Error', traceback=traceback.format_exc()) return child = parent[name] try: child.on_created_in_tree() except: del parent[name] dialog.showtraceback( parent=self, txt="Failed to add child", title='Error', traceback=traceback.format_exc()) return viewer = self.GetParent() viewer.model.scripts.helpers.rebuild_ns() engine = viewer.engine model.GetItem(indices)[name].postprocess_after_add( engine) tree.RefreshItems() viewer.engine.run_mesh_extension_prep(reset=True) old_item = tree.GetItemByIndex(parent.GetIndices()) tree.Expand(old_item) tree.SelectItem(old_item, select=False) new_item = tree.GetItemByIndex(child.GetIndices()) tree.SelectItem(new_item) evt.Skip()
def handle_hg_setting(self, value, event = None): app = wx.GetApp().TopWindow try: self.setvar('include', [x.strip() for x in str(value[0]).split(',')]) self.setvar('exclude', [x.strip() for x in str(value[1]).split(',')]) except: dialog.showtraceback(parent = app, txt='Failed to set include/exclude', title='Failure', traceback=traceback.format_exc())
def onHGclone(self, evt): app = wx.GetApp().TopWindow name = self.getvar('mercurial_path') if name is None: name = self._name l2 = [ ["commit message", '', 0, None], ] list6 = [ ["root repository", None, 304, dlg_s()], ["name", name, 0, None], # [None, (False, ['change #1']), 27, # ({"text": 'commit modification'}, # {"elp": l2},)], [ None, True, 3, { "text": 'change source tree to the new clone' } ] ] value = DialogEditList(list6, modal=True, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, tip=None, parent=app, title='HG clone') if not value[0]: return if not self.update_hgsub(): return # if value[1][2][0]: # if not self.do_commit(str(value[1][2][1])): return url = rootpath2url(str(value[1][0]), str(value[1][1])) ocwd = os.getcwd() os.chdir(self.owndir()) try: repo = hgapi.Repo(self.owndir()) if not url.startswith('ssh://'): # for local repo, check if directory exists dirname = os.path.dirname(url) if not os.path.exists(dirname): os.makedirs(dirname) repo.hg_clone('.', url) except: dialog.showtraceback(parent=app, txt='Failed to clone subtree to ' + url, title='Failed to clone', traceback=traceback.format_exc()) if value[1][2]: self.set_mercurial_url(str(value[1][0]), str(value[1][1])) os.chdir(ocwd)
def handle_hg_setting(self, value, event=None): app = wx.GetApp().TopWindow try: self.setvar('include', [x.strip() for x in str(value[0]).split(',')]) self.setvar('exclude', [x.strip() for x in str(value[1]).split(',')]) except: dialog.showtraceback(parent=app, txt='Failed to set include/exclude', title='Failure', traceback=traceback.format_exc())
def onButton(self, evt, mode): from ifigure.ifigure_config import vv_scratch import cPickle as pickle idx = self.grid.GetSelectedRows() if len(idx)==0 and mode != 'paste': return gt=self.grid.GetTable() obj=gt.GetTreeDict() if mode == 'copy': name = str(self.grid.GetRowLabelValue(idx[0])) self.GetTopLevelParent().set_status_text('Copy '+ name, timeout = 3000) try: fid = open(vv_scratch, 'wb') data = {name:obj.getvar(name)} pickle.dump(data, fid) fid.close() except: dialog.showtraceback(parent = self, txt='Failed to copy', title='Failed to copy', traceback=traceback.format_exc()) elif mode == 'paste': fid = open(vv_scratch, 'rb') data = pickle.load(fid) fid.close() for key in data: if obj.hasvar(key): dlg=wx.MessageDialog(None, 'Do you want to overwrite '+key + '?', 'Variable already existws', wx.OK|wx.CANCEL) ret=dlg.ShowModal() dlg.Destroy() if ret != wx.ID_OK: continue self.GetTopLevelParent().set_status_text('Paste tree variable', timeout = 3000) obj.setvar(key, data[key]) obj._var_changed = True self.update() elif mode == 'trash': name = str(self.grid.GetRowLabelValue(idx[0])) dlg=wx.MessageDialog(None, 'Do you want to delete '+ name + '?', 'Deleting variable', wx.OK|wx.CANCEL) ret=dlg.ShowModal() dlg.Destroy() if ret == wx.ID_OK: obj.delvar(name) obj._var_changed = True self.GetTopLevelParent().set_status_text('Deltete '+name, timeout = 3000) wx.CallAfter(self.update)
def onHGDiff(self, evt=None): app = wx.GetApp().TopWindow repo = self.get_repo() latest = repo.revisions(slice(-1, -1))[0].rev current = repo.hg_rev() ll = [ [None, 'Enter revision numbers to compare', 2, None], ["revision (older)", str(current), 0, None], ["revision (newer)", str(latest), 0, None], [None, 'newer == "", diff against working dir.', 2, None], [ None, 'older == newer, diff between the latest and current', 2, None ], ] value = DialogEditList(ll, modal=True, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, tip=None, parent=app, title='HG diff') if not value[0]: return a = str(value[1][1]) b = str(value[1][2]) if b == '': args = (str(a), ) elif int(a) != int(b): args = ( str(a), str(b), ) elif int(a) == int(b): args = tuple() try: res = repo.hg_diff(*args) except: dialog.showtraceback(parent=app, txt='Failed to hg_diff', title='Failed to hg_diff', traceback=traceback.format_exc()) if globals()['diffwindow'] is not None: try: globals()['diffwindow'].Destroy() except PyDeadObjectError: pass globals()['diffwindow'] = None from ifigure.widgets.hgdiff_window import HGDiffWindow globals()['diffwindow'] = HGDiffWindow(res, wx.GetApp().TopWindow)
def OnMoveItemTo(self, evt): from ifigure.utils.edit_list import DialogEditList import ifigure.widgets.dialog as dialog if self.tree.GetSelection() is None: return indices = self.tree.GetIndexOfItem(self.tree.GetSelection()) mm = self.model.GetItem(indices) p = mm.parent names = list(p._contents) idx = names.index(mm.name()) list6 = [ ["New parent", p.name(), 0], ["Index (0-base)", str(idx), 0], ] value = DialogEditList(list6, modal=True, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, tip=None, parent=self, title='Move item to...') if not value[0]: return if value[1][0] != p.name(): try: assert False, "Moving under diffent parent is not supported" except AssertionError: dialog.showtraceback( parent=self, txt='Moving under diffent parent is not supported', title='Error', traceback=traceback.format_exc()) return new_idx = int(value[1][1]) names = list(p._contents) new_idx = max([0, new_idx]) new_idx = min([len(names) - 1, new_idx]) idx = names.index(mm.name()) new_names = self.MoveItemInList(names, idx, new_idx) p._contents = OrderedDict((k, p._contents[k]) for k in new_names) self.tree.RefreshItems() indices = self.tree.GetIndexOfItem(self.tree.GetSelection()) mm = self.model.GetItem(indices) self.show_panel(mm)
def onHGpush(self, evt): app = wx.GetApp().TopWindow url, root, path = self.get_mercurial_url() if url is not None: root = root name = path else: root = None name = self._name list6 = [ ["root repository", root, 304, dlg_s()], ["name", name, 0, None], [None, True, 3, { "text": 'Perform HG update' }], ] value = DialogEditList(list6, modal=True, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, tip=None, parent=app, title='HG push') if not value[0]: return if not self.update_hgsub(): return url = rootpath2url(str(value[1][0]), str(value[1][1])) ocwd = os.getcwd() os.chdir(self.owndir()) try: urlbk, rootbk, pathbk = self.get_mercurial_url() repo = hgapi.Repo(self.owndir()) self.set_mercurial_url(str(value[1][0]), str(value[1][1])) repo.hg_push(url) if value[1][2] and not url.startswith('ssh'): repo2 = hgapi.Repo(url) latest = repo2.revisions(slice(-1, -1))[0].rev repo2.hg_update(int(latest)) except: dialog.showtraceback(parent=app, txt='Failed to push', title='Failed to push', traceback=traceback.format_exc()) self.set_mercurial_url(rootbk, pathbk) os.chdir(ocwd)
def onExportMsh(self, evt): dlg = evt.GetEventObject().GetTopLevelParent() viewer = dlg.GetParent() src = os.path.join(viewer.model.owndir(), self.name()) + '.msh' from ifigure.widgets.dialog import write parent = evt.GetEventObject() dst = write(parent, message='Enter .msh file name', wildcard='*.msh') if dst == '': return try: import shutil shutil.copyfile(src, dst) except: import ifigure.widgets.dialog as dialog dialog.showtraceback(parent=dlg, txt='Failed to export msh file', title='Error', traceback=traceback.format_exc())
def onHGpush(self, evt): app = wx.GetApp().TopWindow url, root, path = self.get_mercurial_url() if url is not None: root = root name = path else: root = None name = self._name list6 = [ ["root repository", root, 304, dlg_s()], ["name", name, 0, None], [None, True, 3, {"text":'Perform HG update'}],] value = DialogEditList(list6, modal = True, style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER, tip = None, parent=app, title = 'HG push') if not value[0]: return if not self.update_hgsub(): return url = rootpath2url(str(value[1][0]), str(value[1][1])) ocwd = os.getcwd() os.chdir(self.owndir()) try: urlbk, rootbk, pathbk = self.get_mercurial_url() repo = hgapi.Repo(self.owndir()) self.set_mercurial_url(str(value[1][0]), str(value[1][1])) repo.hg_push(url) if value[1][2] and not url.startswith('ssh'): repo2 = hgapi.Repo(url) latest = repo2.revisions(slice(-1,-1))[0].rev repo2.hg_update(long(latest)) except: dialog.showtraceback(parent = app, txt='Failed to push', title='Failed to push', traceback=traceback.format_exc()) self.set_mercurial_url(rootbk, pathbk) os.chdir(ocwd)
def onHGpull(self, evt): url, root, path = self.get_mercurial_url() if url is not None: root = root name = path else: root = None name = self._name app = wx.GetApp().TopWindow list6 = [ ["root repository", root, 304, dlg_s()], ["name", name, 0, None], ] value = DialogEditList(list6, modal=True, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, tip=None, parent=app, title='HG pull') if not value[0]: return url = rootpath2url(str(value[1][0]), str(value[1][1])) ocwd = os.getcwd() os.chdir(self.owndir()) try: repo = hgapi.Repo(self.owndir()) repo.hg_pull(url) except: dialog.showtraceback(parent=app, txt='Failed to pull', title='Failed to pull', traceback=traceback.format_exc()) os.chdir(ocwd) self.set_mercurial_url(str(value[1][0]), str(value[1][1])) self.hg_set_projtreeviewer_status(repo=repo) # self.setvar('mercurial_url', url evt.Skip()
def onClearMeshSq(self, evt): dlg = evt.GetEventObject().GetTopLevelParent() viewer = dlg.GetParent() engine = viewer.engine import ifigure.widgets.dialog as dialog ret = dialog.message( parent=dlg, message='Are you sure to delete all Mesh sequence', title='Mesh Sequence Delete', style=2) if ret == 'ok': dialog.showtraceback(parent=dlg, txt='Failed to generate meshing script', title='Error', traceback=traceback.format_exc()) for x in self.keys(): del self[x] dlg.tree.RefreshItems()
def do_commit(self, m, user='', no_treedata = False): if not no_treedata: if not self._save_tree_data(): return app = wx.GetApp().TopWindow repo = hgapi.Repo(self.owndir()) try: addfile, rmfile, skipfile, txt = hg_add_no_binary(repo, self.owndir(), include=self.getvar('include'), exclude=self.getvar('exclude')) dlg=wx.MessageDialog(None, txt, "HG add/remove", wx.OK) ret=dlg.ShowModal() dlg.Destroy() repo.hg_commit('"'+m+'"', user=user) except: dialog.showtraceback(parent = app, txt='Failed to commit changes', title='Failed to commit', traceback=traceback.format_exc()) return False return True
def onHGclone(self, evt): app = wx.GetApp().TopWindow name = self.getvar('mercurial_path') if name is None: name = self._name l2 = [["commit message", '', 0, None ],] list6 = [ ["root repository", None, 304, dlg_s()], ["name", name, 0, None], # [None, (False, ['change #1']), 27, # ({"text": 'commit modification'}, # {"elp": l2},)], [None, True, 3, {"text":'change source tree to the new clone'}]] value = DialogEditList(list6, modal = True, style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER, tip = None, parent=app, title='HG clone') if not value[0]: return if not self.update_hgsub(): return # if value[1][2][0]: # if not self.do_commit(str(value[1][2][1])): return url = rootpath2url(str(value[1][0]), str(value[1][1])) ocwd = os.getcwd() os.chdir(self.owndir()) try: repo = hgapi.Repo(self.owndir()) if not url.startswith('ssh://'): # for local repo, check if directory exists dirname = os.path.dirname(url) if not os.path.exists(dirname): os.makedirs(dirname) repo.hg_clone('.', url) except: dialog.showtraceback(parent = app, txt='Failed to clone subtree to '+url, title='Failed to clone', traceback=traceback.format_exc()) if value[1][2]: self.set_mercurial_url(str(value[1][0]), str(value[1][1])) os.chdir(ocwd)
def import_panel1_value(self, v): import ifigure.widgets.dialog as dialog v = super(WF, self).import_panel1_value(v) self.ind_vars = str(v[0]) self.is_complex_valued = bool(v[1]) self.dep_vars_suffix = str(v[2]) if len(v[3].split(',')) > 1: if (self.element.startswith('RT') or self.element.startswith('ND')): dialog.showtraceback(parent = None, txt="RT/ND element can not be vectorized", title="Error", traceback="No vector dim for RT/ND") self.element = "H1_FECollection" self.dep_vars_base_txt = ','.join([x.strip() for x in str(v[3]).split(',')]) if self.element.startswith("H1") or self.element.startswith("L2"): self.vdim = len(str(v[3]).split(',')) else: self.vdim = 1 self.generate_dt_fespace = bool(v[6])
def onExport(self, evt): import ifigure.widgets.dialog as dialog flags = self.model.export_flag dataset = self.model.dataset metadata = self.model.metadata path = self.filepicker.GetPath() try: hdf_data_export(data=dataset, metadata=metadata, export_flag=flags, filename=path, verbose=True) print('HDF export finished : ' + path) except: dialog.showtraceback(parent=self, txt='Failed to export HDF', title='Error during HDF export', traceback=traceback.format_exc()) dialog.message(parent=self, style=0, message='Export finished') # self.Close() evt.Skip()
def onHGDiff(self, evt=None): app = wx.GetApp().TopWindow repo = self.get_repo() latest = repo.revisions(slice(-1,-1))[0].rev current = repo.hg_rev() ll= [[None, 'Enter revision numbers to compare', 2, None], ["revision (older)", str(current), 0, None], ["revision (newer)", str(latest), 0, None], [None, 'newer == "", diff against working dir.' , 2, None], [None, 'older == newer, diff between the latest and current' , 2, None],] value = DialogEditList(ll, modal = True, style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER, tip = None, parent=app, title = 'HG diff') if not value[0]: return a = str(value[1][1]) b = str(value[1][2]) if b == '': args = (str(a),) elif long(a) != long(b): args = (str(a), str(b),) elif long(a) == long(b): args = tuple() try: res = repo.hg_diff(*args) except: dialog.showtraceback(parent = app, txt='Failed to hg_diff', title='Failed to hg_diff', traceback=traceback.format_exc()) if globals()['diffwindow'] is not None: try: globals()['diffwindow'].Destroy() except PyDeadObjectError: pass globals()['diffwindow'] = None from ifigure.widgets.hgdiff_window import HGDiffWindow globals()['diffwindow']= HGDiffWindow(res, wx.GetApp().TopWindow)
def onExport(self, evt): import ifigure.widgets.dialog as dialog flags = self.model.export_flag dataset = self.model.dataset metadata = self.model.metadata path = self.filepicker.GetPath() try: hdf_data_export(data = dataset, metadata = metadata, export_flag = flags, filename = path, verbose = True) print('HDF export finished : '+path) except: dialog.showtraceback(parent = self, txt='Failed to export HDF', title='Error during HDF export', traceback=traceback.format_exc()) dialog.message(parent = self, style = 0, message = 'Export finished') #self.Close() evt.Skip()
def do_commit(self, m, user='', no_treedata=False): if not no_treedata: if not self._save_tree_data(): return app = wx.GetApp().TopWindow repo = hgapi.Repo(self.owndir()) try: addfile, rmfile, skipfile, txt = hg_add_no_binary( repo, self.owndir(), include=self.getvar('include'), exclude=self.getvar('exclude')) dlg = wx.MessageDialog(None, txt, "HG add/remove", wx.OK) ret = dlg.ShowModal() dlg.Destroy() repo.hg_commit('"' + m + '"', user=user) except: dialog.showtraceback(parent=app, txt='Failed to commit changes', title='Failed to commit', traceback=traceback.format_exc()) return False return True
def onHGpull(self, evt): url, root, path = self.get_mercurial_url() if url is not None: root = root name = path else: root = None name = self._name app = wx.GetApp().TopWindow list6 = [ ["root repository", root, 304, dlg_s()], ["name", name, 0, None],] value = DialogEditList(list6, modal = True, style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER, tip = None, parent=app, title = 'HG pull') if not value[0]: return url = rootpath2url(str(value[1][0]), str(value[1][1])) ocwd = os.getcwd() os.chdir(self.owndir()) try: repo = hgapi.Repo(self.owndir()) repo.hg_pull(url) except: dialog.showtraceback(parent = app, txt='Failed to pull', title='Failed to pull', traceback=traceback.format_exc()) os.chdir(ocwd) self.set_mercurial_url(str(value[1][0]), str(value[1][1])) self.hg_set_projtreeviewer_status(repo=repo) # self.setvar('mercurial_url', url evt.Skip()
def onHGIncoming(self, evt): url, root, path = self.get_mercurial_url() if url is not None: root = root name = path else: root = None name = self._name app = wx.GetApp().TopWindow list6 = [ ["root repository", root, 304, dlg_s()], ["name", name, 0, None], ] value = DialogEditList(list6, modal=True, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, tip=None, parent=app, title='HG incoming') if not value[0]: return url = rootpath2url(str(value[1][0]), str(value[1][1])) ocwd = os.getcwd() os.chdir(self.owndir()) try: repo = hgapi.Repo(self.owndir()) l1, l2 = self.hg_incoming_outgoing_changesets_list(repo, url) if len(l1) > 0: self._status = '!' out = repo.hg_command('incoming', url) dialog.showtraceback(parent=app, txt=out, title='Incoming changeset', traceback=traceback.format_exc()) else: self._status = '' dialog.showtraceback(parent=app, txt='No incoming change', title='Incoming changeset', traceback=traceback.format_exc()) except: dialog.showtraceback(parent=app, txt='Failed to hg_command', title='Failed to hg_command', traceback=traceback.format_exc()) os.chdir(ocwd) # self.set_mercurial_url(str(value[1][0]), str(value[1][1])) self.hg_set_projtreeviewer_status(repo=repo) evt.Skip()
def onHGIncoming(self, evt): url, root, path = self.get_mercurial_url() if url is not None: root = root name = path else: root = None name = self._name app = wx.GetApp().TopWindow list6 = [ ["root repository", root, 304, dlg_s()], ["name", name, 0, None],] value = DialogEditList(list6, modal = True, style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER, tip = None, parent=app, title = 'HG incoming') if not value[0]: return url = rootpath2url(str(value[1][0]), str(value[1][1])) ocwd = os.getcwd() os.chdir(self.owndir()) try: repo = hgapi.Repo(self.owndir()) l1, l2 = self.hg_incoming_outgoing_changesets_list(repo, url) if len(l1) > 0: self._status = '!' out = repo.hg_command('incoming', url) dialog.showtraceback(parent = app, txt=out, title='Incoming changeset', traceback=traceback.format_exc()) else: self._status = '' dialog.showtraceback(parent = app, txt='No incoming change', title='Incoming changeset', traceback=traceback.format_exc()) except: dialog.showtraceback(parent = app, txt='Failed to hg_command', title='Failed to hg_command', traceback=traceback.format_exc()) os.chdir(ocwd) # self.set_mercurial_url(str(value[1][0]), str(value[1][1])) self.hg_set_projtreeviewer_status(repo=repo) evt.Skip()
def load_subtree_hg(parent, root = '', path='', name = '', overwrite=False, run_setup=False, launch_gui=False): app = wx.GetApp().TopWindow if root == '': list6 = [ ["root repository", None, 304, dlg_s()], ["source ", path, 0], ["destination", '', 0], [None, True, 3, {"text":'Run setup script'}],] value = DialogEditList(list6, modal = True, style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER, tip = None, parent=app, title = 'retrieve subtree from HG repo.') if not value[0]: return if not parent.has_owndir(): parent.mk_owndir() # url = rootpath2url( root = str(value[1][0]) path = str(value[1][1]) name = str(value[1][2]) run_setup = value[1][3] if name.strip() == '': name = value[1][1].split('/')[-1] else: if not parent.has_owndir(): parent.mk_owndir() if name == '': name = path.split('/')[-1] if parent.has_child(name): if overwrite: parent.get_child(name = name).destroy() else: print(parent.get_full_path()+'.'+name + ' already exists.') obj = parent.get_child(name = name) _add_include_exclude(obj) return obj if path.startswith('/'): path = path[1:] url = rootpath2url(root, path) dpath = os.path.join(parent.owndir(), name) repo = hgapi.Repo(parent.owndir()) try: repo2 = repo.hg_clone(url, dpath) except: print url, dpath dialog.showtraceback(parent = app, txt='Failed to clone subtree from '+url, title='Failed to clone', traceback=traceback.format_exc()) return load_fpath = True fpath=os.path.join(dpath, ".tree_data_hg") if not os.path.exists(fpath): fpath=os.path.join(dpath, ".tree_data") if not os.path.exists(fpath): # # In this case, it makes a containing folder # and gather *.py to make PyScript # I should be handling other files here too? # td = handle_pure_file_repo(parent, name, dpath) load_fpath = False else: dlg=wx.MessageDialog(None, 'HG update succeeded but .tree_data_hg is not found.', 'Old style for HG repo', wx.OK) ret=dlg.ShowModal() dlg.Destroy() del_old_treedata = True else: del_old_treedata = False if load_fpath: fid= open(fpath, 'rb') td, olist, nlist = TreeDict().load(fid, keep_zorder=True) fid.close() parent.add_child(name, td, keep_zorder = True) ### for sub repo subrepos = [] for name, child in td.get_children(): # print child for obj in child.walk_tree(): if has_repo(obj): #print 'subrepo', obj load_repo_treedata(obj) if del_old_treedata: os.remove(fpath) for obj in td.walk_tree(): obj.init_after_load(olist, nlist) td.set_mercurial_url(root, path) for name, child in td.get_children(): # print child for obj in child.walk_tree(): if has_repo(obj): r = hgapi.Repo(obj.owndir()) latest = r.revisions(slice(-1,-1))[0].rev current = r.hg_rev() if latest > current: dprint1('updating ' + str(obj)+ ' ' + str(r.hg_rev()) + '->' + str(latest)) obj.onHGupdate(evt=None, m=latest) if run_setup: # try: if (td.has_child("scripts") and td.scripts.has_child("setup")): # wx.CallAfter(td.scripts.setup.Run) td.scripts.setup.Run() # except: # dialog.showtraceback(parent = td.get_root_parent().app, # txt='Failed to run setup script', # title='Setup script failced', # traceback=traceback.format_exc()) _add_include_exclude(td) return td
def load_subtree_hg(parent, root='', path='', name='', overwrite=False, run_setup=False, launch_gui=False): app = wx.GetApp().TopWindow if root == '': list6 = [ ["root repository", None, 304, dlg_s()], ["source ", path, 0], ["destination", '', 0], [None, True, 3, { "text": 'Run setup script' }], ] value = DialogEditList(list6, modal=True, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, tip=None, parent=app, title='retrieve subtree from HG repo.') if not value[0]: return if not parent.has_owndir(): parent.mk_owndir() # url = rootpath2url( root = str(value[1][0]) path = str(value[1][1]) name = str(value[1][2]) run_setup = value[1][3] if name.strip() == '': name = value[1][1].split('/')[-1] else: if not parent.has_owndir(): parent.mk_owndir() if name == '': name = path.split('/')[-1] if parent.has_child(name): if overwrite: parent.get_child(name=name).destroy() else: print(parent.get_full_path() + '.' + name + ' already exists.') obj = parent.get_child(name=name) _add_include_exclude(obj) return obj if path.startswith('/'): path = path[1:] url = rootpath2url(root, path) dpath = os.path.join(parent.owndir(), name) repo = hgapi.Repo(parent.owndir()) try: repo2 = repo.hg_clone(url, dpath) except: print url, dpath dialog.showtraceback(parent=app, txt='Failed to clone subtree from ' + url, title='Failed to clone', traceback=traceback.format_exc()) return load_fpath = True fpath = os.path.join(dpath, ".tree_data_hg") if not os.path.exists(fpath): fpath = os.path.join(dpath, ".tree_data") if not os.path.exists(fpath): # # In this case, it makes a containing folder # and gather *.py to make PyScript # I should be handling other files here too? # td = handle_pure_file_repo(parent, name, dpath) load_fpath = False else: dlg = wx.MessageDialog( None, 'HG update succeeded but .tree_data_hg is not found.', 'Old style for HG repo', wx.OK) ret = dlg.ShowModal() dlg.Destroy() del_old_treedata = True else: del_old_treedata = False if load_fpath: fid = open(fpath, 'rb') td, olist, nlist = TreeDict().load(fid, keep_zorder=True) fid.close() parent.add_child(name, td, keep_zorder=True) ### for sub repo subrepos = [] for name, child in td.get_children(): # print child for obj in child.walk_tree(): if has_repo(obj): #print 'subrepo', obj load_repo_treedata(obj) if del_old_treedata: os.remove(fpath) for obj in td.walk_tree(): obj.init_after_load(olist, nlist) td.set_mercurial_url(root, path) for name, child in td.get_children(): # print child for obj in child.walk_tree(): if has_repo(obj): r = hgapi.Repo(obj.owndir()) latest = r.revisions(slice(-1, -1))[0].rev current = r.hg_rev() if latest > current: dprint1('updating ' + str(obj) + ' ' + str(r.hg_rev()) + '->' + str(latest)) obj.onHGupdate(evt=None, m=latest) if run_setup: # try: if (td.has_child("scripts") and td.scripts.has_child("setup")): # wx.CallAfter(td.scripts.setup.Run) td.scripts.setup.Run() # except: # dialog.showtraceback(parent = td.get_root_parent().app, # txt='Failed to run setup script', # title='Setup script failced', # traceback=traceback.format_exc()) _add_include_exclude(td) return td