Example #1
0
    def get_version(quiet=1,_self=cmd):
	'''
DESCRIPTION
 
    "get_version" returns a tuple of length six containing text,
    floating point, and integer representations of the current PyMOL
    version number, build date as unix timestamp, GIT SHA and SVN
    code revision so far available.
   
PYMOL API

    cmd.get_version(int quiet)

	'''
        # get_version doesn't need the _COb and doesn't require a lock
        r = _cmd.get_version()
        if _raising(r,_self):
            raise pymol.CmdException
        else:
            quiet = int(quiet)
            if quiet < 1 and _feedback(fb_module.cmd, fb_mask.results, _self):
                import re
                p = pymol.get_version_message(r)
                print re.sub(r'^', ' ', p, re.M)
                if quiet < 0:
                    if r[3]:
                        print ' build date:', time.strftime('%c %Z', time.localtime(r[3]))
                    if r[4]:
                        print ' git sha:', r[4]
        return r
Example #2
0
    def get_version(quiet=1,_self=cmd):
        '''
DESCRIPTION
 
    "get_version" returns a tuple of length six containing text,
    floating point, and integer representations of the current PyMOL
    version number, build date as unix timestamp, GIT SHA and SVN
    code revision so far available.
   
PYMOL API

    cmd.get_version(int quiet)

        '''
        # get_version doesn't need the _COb and doesn't require a lock
        r = _cmd.get_version()
        if True:
            quiet = int(quiet)
            if quiet < 1 and _feedback(fb_module.cmd, fb_mask.results, _self):
                import re
                p = pymol.get_version_message(r)
                print(re.sub(r'^', ' ', p, re.M))
                if quiet < 0:
                    if r[3]:
                        print(' build date:', time.strftime('%c %Z', time.localtime(r[3])))
                    if r[4]:
                        print(' git sha:', r[4])
        return r
    def parse_args(argv, _pymol=None, options=None, restricted=0):
        if not restricted:
            global _argv
            _argv = copy.deepcopy(argv)  # pymol.invocation._argv
            global global_options
            if options == None:
                if _pymol == None:
                    options = global_options
                else:
                    options = _pymol.invocation.options
        av = copy.deepcopy(argv)
        av = av[1:]  # throw out the executable path
        av.reverse()
        once_dict = {}
        options.deferred = []
        final_actions = []
        loaded_something = 0
        python_script = None
        # append user settings file as an option
        pymolrc = get_user_config()
        while 1:
            if not len(av):
                break
            a = av.pop()
            a = re.sub(r'''^"|"$|^'|'$''', '', a)  # strip extra quotes
            if a[0:1] == '-':
                if (a[1:2] == '-'):
                    if a in ('--version', '--help'):
                        import pymol
                        print(pymol.get_version_message())
                        if a == '--help':
                            print(helptext1)
                            if pymolrc:
                                for filename in pymolrc:
                                    print('  ' + filename)
                            else:
                                print('  (no pymolrc file found)')
                            print(helptext2)
                        sys.exit()
                    elif a == "--retina":
                        options.retina = 1
                    elif a == "--nospnav":
                        print(
                            ' Warning: --nospnav not available in Open-Source PyMOL'
                        )
                    elif a == "--gldebug":
                        options.gldebug = 1
                    elif a == "--testing":
                        options.testing = 1
                    else:
                        # double hypen signals end of PyMOL arguments
                        if python_script == None:
                            python_script = argv[0]
                        rev_av = copy.deepcopy(av)
                        rev_av.reverse()
                        if len(a) > 2:
                            sys.argv = [python_script] + [a] + rev_av
                        else:
                            sys.argv = [python_script] + rev_av
                        break
                    continue
                if ("A" in a) or ("a" in a):  # application configuration
                    new_args = []
                    # ====== mode 1 - simple viewer window ======
                    if a[2:3] == "1":
                        if 'A1' not in once_dict:
                            once_dict['A1'] = 1
                            new_args = [
                                "-qxiF",
                                "-X",
                                "68",
                                "-Y",
                                "100",
                            ]
                    # ====== mode 2 - not available -- clashes with -2 =======
                    # ====== mode 3 - internal GUI only no splash ======
                    if a[2:3] == "3":
                        if 'A3' not in once_dict:
                            once_dict['A3'] = 1
                            new_args = [
                                "-qx",
                                "-X",
                                "68",
                                "-Y",
                                "100",
                            ]
                    # ====== mode 4 - internal GUI only with splash ======
                    if a[2:3] == "4":  # used by PYMOLVIEWER
                        if 'A4' not in once_dict:
                            once_dict['A4'] = 1
                            new_args = [
                                "-X",
                                "68",
                                "-Y",
                                "100",
                            ]
                    # ====== mode 5 - mode 5 helper application ======
                    if a[2:3] == "5":
                        if 'A5' not in once_dict:
                            once_dict['A5'] = 1
                            new_args = [
                                "-QxiICUF",
                                "-X",
                                "68",
                                "-Y",
                                "100",
                            ]
                    # ====== mode 6 - mode 6 presentation (no GUI) ======
                    if a[2:3] == "6":
                        if 'A6' not in once_dict:
                            once_dict['A6'] = 1
                            new_args = [
                                "-qxieICUPF",
                            ]
                    # ===============================================
                    new_args.reverse()
                    av = av + new_args
                if "1" in a[1:2]:
                    options.deferred.append("_do__ config_mouse one_button")
                if "2" in a[1:2]:
                    options.deferred.append("_do__ config_mouse two_button")
                if "q" in a:
                    options.show_splash = 0
                if "i" in a:
                    options.internal_gui = 0
                if "f" in a:
                    options.internal_feedback = int(av.pop())
                if "F" in a:
                    options.internal_feedback = 0
                if "B" in a:
                    options.blue_line = 1
                if "E" in a:
                    options.multisample = int(av.pop())
                if "P" in a:
                    options.presentation = 1
                if "W" in a:
                    options.win_x = int(av.pop())
                    options.win_xy_set = True
                if "H" in a:
                    options.win_y = int(av.pop())
                    options.win_xy_set = True
                if "X" in a:
                    options.win_px = int(av.pop())
                if "y" in a:
                    options.exit_on_error = 1
                if "Y" in a:
                    options.win_py = int(av.pop())
                if "D" in a:
                    options.defer_builds_mode = int(av.pop())
                if "V" in a:
                    options.ext_y = int(av.pop())
                if "N" in a:  # external gui name...
                    options.gui = av.pop()
                if "x" in a:
                    options.external_gui = 0
                if "n" in a:
                    options.incentive_product = 1
                if "t" in a:  # type of stereo to use
                    options.stereo_mode = int(av.pop())
                if "T" in a:  # what skin to use?
                    options.skin = str(av.pop())
                if "w" in a:  # what gui to use
                    options.gui = str(av.pop())
                if "O" in a:
                    options.sphere_mode = int(av.pop())
                if "z" in a:
                    options.window_visible = 0
                if "Z" in a:
                    options.zoom_mode = int(av.pop())
                    if options.zoom_mode == 5:
                        final_actions.append("_do__ zoom")
                if not restricted:
                    if "c" in a:
                        options.no_gui = 1
                        options.external_gui = 0
                    if "m" in a:  # mac external GUI
                        if options.external_gui == 2:
                            options.external_gui = 3
                            if options.win_py == 184:  # mac external GUI default
                                options.win_py = 216
                        else:
                            options.external_gui = 2
                            options.win_py = 184

                    if "e" in a:
                        options.full_screen = 1
                    if "G" in a:  # Game mode (reqd for Mac stereo)
                        options.game_mode = 1
                        options.win_x = 1024
                        options.win_y = 768
                    if "S" in a:  # Force stereo context on stereo-capable hardware
                        options.force_stereo = 1
                        if options.stereo_mode == 0:
                            options.stereo_mode = 1  # quadbuffer
                        if sys.platform == 'darwin':
                            options.deferred.append(
                                "_do__ set stereo_double_pump_mono,1,quiet=1")
                    if "M" in a:  # Force mono on stereo hardware (all)
                        options.force_stereo = -1
                    if "j" in a:  # Geowall: two side-by-side images
                        options.stereo_mode = 4
                        options.deferred.append("_do__ stereo on")
                    if ("d" in a):
                        options.deferred.append("_do_" +
                                                av.pop().replace('%', ' '))
                    if (
                            "J" in a
                    ):  # cd to user's home directory on startup (if possible)
                        path = get_personal_folder()
                        try:
                            # immediatly chdir (was: options.deferred.append(...))
                            os.chdir(path)
                            # clear PYMOL_WD, which may be set by MacPyMOL
                            os.environ.pop('PYMOL_WD', None)
                        except OSError:
                            print(" Error: could not chdir to", repr(path))
                    if ("l" in a):
                        options.deferred.append("_do_spawn %s" % av.pop())
                    if ("r" in a):
                        options.deferred.append("_do_run %s,main" % av.pop())
                    if ("u" in a):
                        options.deferred.append("_do_resume %s" % av.pop())
                    if ("s" in a):
                        options.deferred.append("_do_log_open %s" % av.pop())
                    if ("o" in a):
                        options.security = 0
                    if ("R" in a):
                        options.rpcServer = 1
                    if ("g" in a):
                        filename = av.pop()
                        if '.png' in filename:
                            options.deferred.append("_do__ cmd.png('''%s''')" %
                                                    filename)
                        elif '.mpg' in filename:
                            options.deferred.append(
                                "_do__ movie.produce('''%s''')" % filename)
                    if ("C" in a):
                        options.sigint_handler = 0
                    if ("L" in a):
                        options.after_load_script = av.pop()
                    if ("b" in a):  # CPU benchmark
                        options.deferred.append(
                            "_do__ feedback disable,all,everything")
                        options.deferred.append(
                            "_do__ feedback enable,python,output")
                        options.deferred.append("_do_wizard benchmark")
                        if a[2:] == '':
                            options.deferred.append(
                                "_do__ cmd.get_wizard().run_cpu()")
                        if a[2:] == '0':
                            options.deferred.append(
                                "_do__ cmd.get_wizard().ray_trace0()")
                        if a[2:] == '1':
                            options.deferred.append(
                                "_do__ cmd.get_wizard().ray_trace1()")
                        if a[2:] == '2':
                            options.deferred.append(
                                "_do__ cmd.get_wizard().ray_trace2()")

                    if "p" in a:
                        options.read_stdin = 1
                    if "K" in a:
                        options.keep_thread_alive = 1
                if "k" in a:  # suppress reading of .pymolrc and related files
                    pymolrc = None
                    options.plugins = 0
                if "U" in a:  #
                    options.reuse_helper = 1
                if "Q" in a:
                    options.quiet = 1
                    options.show_splash = 0
                if "I" in a:
                    options.auto_reinitialize = 1
                if "h" in a:  # generic helper application
                    options.internal_gui = 0
                    options.external_gui = 0
                    options.internal_feedback = 0
                    options.show_splash = 1
            elif a in ('+1', '+2', '+3', '+4'):
                print('ignoring PyMOLWin.exe argument', a)
            elif not restricted:
                suffix = a[-4:].lower().split('.')[-1]
                if suffix == "p5m":
                    # mode 5 helper application
                    av.append("-A5")
                elif suffix == "psw":
                    # presentation mode
                    av.append("-A6")
                elif suffix in ['pym', 'py', 'pyc']:
                    python_script = a
                elif suffix in ['pwg']:
                    try:
                        pwg_options = get_pwg_options(a)
                        if pwg_options:
                            parse_args(['pymol'] + pwg_options, _pymol,
                                       options, 1)
                    except:
                        traceback.print_exc()
                options.deferred.append(a)
                loaded_something = 1
        if pymolrc != None:
            options.deferred = [('_do__ @' + a) if script_re.search(a) else a
                                for a in pymolrc] + options.deferred
            options.pymolrc = pymolrc
        if options.rpcServer:
            options.deferred.append(
                '_do__ /import pymol.rpc;pymol.rpc.launch_XMLRPC()')
        if options.plugins == 1:
            # Load plugins independent of PMGApp (will not add menu items)
            options.deferred.append(
                '_do__ /import pymol.plugins;pymol.plugins.initialize(-1)')
        if loaded_something and (options.after_load_script != ""):
            options.deferred.append(options.after_load_script)
        options.deferred.extend(final_actions)
        if options.show_splash and not options.no_gui and not restricted:
            options.deferred.insert(0, "_do__ cmd.splash(1)")
        if options.full_screen:
            options.deferred.append("_do__ full_screen on")
Example #4
0
 def parse_args(argv, _pymol=None, options=None, restricted=0):
     if not restricted:
         global _argv
         _argv = copy.deepcopy(argv) # pymol.invocation._argv
         global global_options
         if options == None:
             if _pymol==None:
                 options = global_options
             else:
                 options = _pymol.invocation.options
     av = copy.deepcopy(argv)
     av = av[1:] # throw out the executable path
     av.reverse()
     once_dict = {}
     options.deferred = []
     final_actions = []
     loaded_something = 0
     python_script = None
     # append user settings file as an option
     pymolrc = get_user_config()
     while 1:
         if not len(av):
             break
         a = av.pop()
         a = re.sub(r'''^"|"$|^'|'$''','',a) # strip extra quotes
         if a[0:1]=='-':
             if (a[1:2]=='-'):
                 if a in ('--version', '--help'):
                     import pymol
                     print pymol.get_version_message()
                     if a == '--help':
                         print helptext1
                         if pymolrc:
                             for filename in pymolrc:
                                 print '  ' + filename
                         else:
                             print '  (no pymolrc file found)'
                         print helptext2
                     sys.exit()
                 else:
                     # double hypen signals end of PyMOL arguments
                     if python_script == None:
                         python_script = argv[0]
                     rev_av = copy.deepcopy(av)
                     rev_av.reverse()
                     if len(a)>2:
                         sys.argv = [python_script] + [a] + rev_av
                     else:
                         sys.argv = [python_script] + rev_av
                     break
                 continue
             if ("A" in a) or ("a" in a): # application configuration
                 new_args = []
                 # ====== mode 1 - simple viewer window ======
                 if a[2:3] == "1": 
                     if not once_dict.has_key('A1'):
                         once_dict['A1'] = 1
                         new_args = ["-qxiF",
                             "-X","68",
                             "-Y","100",
                             ]
                 # ====== mode 2 - not available -- clashes with -2 =======
                 # ====== mode 3 - internal GUI only no splash ======
                 if a[2:3] == "3": 
                     if not once_dict.has_key('A3'):
                         once_dict['A3'] = 1
                         new_args = ["-qx",
                             "-X","68",
                             "-Y","100",
                             ]
                 # ====== mode 4 - internal GUI only with splash ======
                 if a[2:3] == "4": # used by PYMOLVIEWER
                     if not once_dict.has_key('A4'):
                         once_dict['A4'] = 1
                         new_args = [
                             "-X","68",
                             "-Y","100",
                             ]
                 # ====== mode 5 - mode 5 helper application ======
                 if a[2:3] == "5": 
                     if not once_dict.has_key('A5'):
                         once_dict['A5'] = 1
                         new_args = ["-QxiICUF",
                             "-X","68",
                             "-Y","100",
                             ]
                 # ====== mode 6 - mode 6 presentation (no GUI) ======
                 if a[2:3] == "6": 
                     if not once_dict.has_key('A6'):
                         once_dict['A6'] = 1
                         new_args = ["-qxieICUPF",
                             ]
                 # ===============================================
                 new_args.reverse()
                 av = av + new_args
             if "1" in a[1:2]:
                 options.deferred.append("_do__ config_mouse one_button")
             if "2" in a[1:2]:
                 options.deferred.append("_do__ config_mouse two_button")
             if "q" in a:
                 options.show_splash = 0
             if "i" in a:
                 options.internal_gui = 0
             if "f" in a:
                 options.internal_feedback = int(av.pop())
             if "F" in a:
                 options.internal_feedback = 0
             if "B" in a:
                 options.blue_line = 1
             if "E" in a:
                 options.multisample = int(av.pop())
             if "P" in a:
                 options.presentation = 1 
             if "W" in a:
                 options.win_x = int(av.pop())
             if "H" in a:
                 options.win_y = int(av.pop())
             if "X" in a:
                 options.win_px = int(av.pop())
             if "y" in a:
                 options.exit_on_error = 1
             if "Y" in a:
                 options.win_py = int(av.pop())
             if "D" in a:
                 options.defer_builds_mode = int(av.pop())
             if "V" in a:
                 options.ext_y = int(av.pop())
             if "N" in a: # external gui name...
                 options.gui = av.pop()
             if "x" in a:
                 options.external_gui = 0
             if "n" in a:
                 options.incentive_product = 1
             if "t" in a: # type of stereo to use
                 options.stereo_mode = int(av.pop())
             if "T" in a: # what skin to use? 
                 options.skin = str(av.pop())
             if "w" in a: # what gui to use
                 options.gui = str(av.pop())
             if "O" in a:
                 options.sphere_mode = int(av.pop())
             if "z" in a:
                 options.window_visible = 0
             if "Z" in a:
                 options.zoom_mode = int(av.pop())
                 if options.zoom_mode==5:
                     final_actions.append("_do__ zoom")
             if not restricted:
                 if "c" in a:
                     options.no_gui=1
                     options.external_gui=0
                 if "m" in a: # mac external GUI
                     if options.external_gui == 2:
                         options.external_gui = 3
                         if options.win_py == 184: # mac external GUI default
                             options.win_py = 216
                     else:
                         options.external_gui = 2
                         options.win_py = 184 
                 
                 if "e" in a:
                     options.full_screen = 1
                 if "G" in a: # Game mode (reqd for Mac stereo)
                     options.game_mode = 1
                     options.win_x = 1024
                     options.win_y = 768
                 if "S" in a: # Force stereo context on stereo-capable hardware
                     options.force_stereo = 1
                     if sys.platform=='darwin': 
                         options.deferred.append(
                           "_do__ set stereo_double_pump_mono,1,quiet=1")
                 if "M" in a: # Force mono on stereo hardware (all)
                     options.force_stereo = -1
                 if "j" in a: # Geowall: two side-by-side images
                     options.stereo_mode = 4
                     options.deferred.append("_do__ stereo on")
                 if ("d" in a):
                     options.deferred.append(
                         "_do_%s"%string.replace(av.pop(),'%',' '))
                 if ("J" in a): # cd to user's home directory on startup (if possible)
                     path = get_personal_folder()
                     try:
                         # immediatly chdir (was: options.deferred.append(...))
                         os.chdir(path)
                         # clear PYMOL_WD, which may be set by MacPyMOL
                         os.environ.pop('PYMOL_WD', None)
                     except OSError:
                         print " Error: could not chdir to", repr(path)
                 if ("l" in a):
                     options.deferred.append("_do_spawn %s"%av.pop())
                 if ("r" in a):
                     options.deferred.append("_do_run %s,main"%av.pop())
                 if ("u" in a):
                     options.deferred.append("_do_resume %s"%av.pop())
                 if ("s" in a):
                     options.deferred.append("_do_log_open %s"%av.pop())
                 if ("o" in a):
                     options.security = 0
                 if ("R" in a):
                     options.rpcServer = 1
                 if ("g" in a):
                     filename = av.pop()
                     if '.png' in filename:
                         options.deferred.append("_do__ cmd.png('''%s''')"%filename)
                     elif '.mpg' in filename:
                         options.deferred.append("_do__ movie.produce('''%s''')"%filename)
                 if ("C" in a):
                     options.sigint_handler = 0
                 if ("L" in a):
                     options.after_load_script = av.pop()
                 if ("b" in a): # CPU benchmark
                     options.deferred.append("_do__ feedback disable,all,everything")
                     options.deferred.append("_do__ feedback enable,python,output")
                     options.deferred.append("_do_wizard benchmark")
                     if a[2:]=='':
                         options.deferred.append("_do__ cmd.get_wizard().run_cpu()")
                     if a[2:]=='0':
                         options.deferred.append("_do__ cmd.get_wizard().ray_trace0()")
                     if a[2:]=='1':
                         options.deferred.append("_do__ cmd.get_wizard().ray_trace1()")
                     if a[2:]=='2':
                         options.deferred.append("_do__ cmd.get_wizard().ray_trace2()")
                     
                 if "p" in a:
                     options.read_stdin = 1
                 if "K" in a:
                     options.keep_thread_alive = 1
             if "k" in a: # suppress reading of .pymolrc and related files
                 pymolrc = None
                 options.plugins = 0
             if "U" in a: #
                 options.reuse_helper = 1
             if "Q" in a:
                 options.quiet = 1
                 options.show_splash = 0
             if "I" in a:
                 options.auto_reinitialize = 1
             if "h" in a: # generic helper application
                 options.internal_gui = 0
                 options.external_gui = 0
                 options.internal_feedback = 0
                 options.show_splash = 1
         elif not restricted:
             suffix = string.split(string.lower(a[-4:]),'.')[-1]
             if suffix == "p5m":
                 # mode 5 helper application 
                 av.append("-A5")
             elif suffix == "psw":
                 # presentation mode
                 av.append("-A6")
             elif suffix in [ 'pym' ,'py', 'pyc' ]:
                 python_script = a
             elif suffix in [ 'pwg' ]:
                 try:
                     pwg_options = get_pwg_options(a)
                     if pwg_options:
                         parse_args(['pymol'] + pwg_options, _pymol, options, 1)
                 except:
                     traceback.print_exc()
             options.deferred.append(a)
             loaded_something = 1
     if pymolrc != None:
         options.deferred = [('_do__ @' + a) if script_re.search(a) else a
                 for a in pymolrc] + options.deferred
         options.pymolrc = pymolrc
     if options.plugins == 1:
         # Load plugins independent of PMGApp (will not add menu items)
         options.deferred.append('_do__ /import pymol.plugins;pymol.plugins.initialize(-1)')
     if loaded_something and (options.after_load_script!=""):
         options.deferred.append(options.after_load_script)
     options.deferred.extend(final_actions)
     if options.show_splash and not options.no_gui and not restricted:
         options.deferred.insert(0,"_do__ cmd.splash(1)")
     if options.full_screen:
         options.deferred.append("_do__ full_screen on")