예제 #1
0
    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
예제 #2
0
    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)
예제 #3
0
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)