def test_run_external_python(self): self.start(gsys.func_name()) testpy = os.path.join(os.getcwd(), 'test_python.py') with open(testpy, 'w') as py: py.write("import sys\n") py.write("import geosoft.gxpy as gxpy\n") py.write("import geosoft.gxpy.utility as gxu\n") py.write("gxc = gxpy.gx.GXpy()\n") py.write("d = gxu.get_shared_dict()\n") py.write( "gxpy.utility.set_shared_dict({'a':'letter a', 'b':'letter b', 'c':[1,2,3], 'argv': sys.argv, 'in_dict':d})\n" ) #py.write("input('RUN_EXTERNAL! Press return to continue...')\n") test_result = gxu.run_external_python(testpy, script_args='test1 test2', dict={'howdy': 'hey there'}, console=False) os.remove(testpy) self.assertEqual(test_result['a'], 'letter a') l = test_result['c'] self.assertEqual(len(l), 3) self.assertEqual(l[1], 2) self.assertEqual(test_result['argv'][1], 'test1') self.assertEqual(test_result['argv'][2], 'test2') self.assertEqual(test_result['in_dict']['howdy'], 'hey there') try: gxu.run_external_python(testpy, script_args='test1 test2') self.assertTrue(False) except gxu.UtilityException: pass except: raise
def test_run_external_bad_python(self): self.start() testpy = os.path.join(os.getcwd(), 'test_python.py') with open(testpy, 'w') as py: py.write("import this_module_not_there\n") try: gxu.run_external_python(testpy, script_args='test1 test2') self.assertTrue(False) except gxu.UtilityException as e: self.assertTrue('External python error' in str(e)) except: os.remove(testpy) raise finally: os.remove(testpy)
def rungx(): gxu.check_version('9.2') with gxpj.Geosoft_project() as pj: gdb_name = pj.current_database if not gdb_name: gxpj.message(_('No current database'), _('An open database is required.')) state = pj.current_db_state() # settings settings = gxu.get_parameters('SOM_OM') # if different database, reset database-dependent settings if not _same(gdb_name, settings.get('GDB_NAME', '')): settings['GDB_NAME'] = os.path.normpath(gdb_name) with gxgdb.Geosoft_gdb() as gdb: chans = state['disp_chan_list'] channorm = {} for c in chans: channorm[c] = 0 settings['INPUT_DATA'] = channorm settings.pop('FILTER', None) # analyse data gxapi.GXEDB.un_load(gdb_name) try: script = os.path.join(os.path.split(__file__)[0], 'som_om_qt5.py') results = gxu.run_external_python(script, '', '', settings) except: gxapi.GXEDB.load(gdb_name) raise # save results gxu.save_parameters('SOM_OM', results) gxapi.GXEDB.load(gdb_name)