"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "examples/devel/syncmol.py" between
pymol-v1.8.6.0.tar.bz2 and pymol-v2.1.0.tar.bz2

About: PyMOL is a Python-enhanced molecular graphics tool. It excels at 3D visualization of proteins, small molecules, density, surfaces, and trajectories. It also includes molecular editing, ray tracing, and movies. Open Source version.

syncmol.py  (pymol-v1.8.6.0.tar.bz2):syncmol.py  (pymol-v2.1.0.tar.bz2)
skipping to change at line 24 skipping to change at line 24
# pymol syncmol.py -- recv 8001 send 8002 # pymol syncmol.py -- recv 8001 send 8002
# pymol syncmol.py -- send 8001 recv 8002 # pymol syncmol.py -- send 8001 recv 8002
# MUTUAL SYNCHRONIZATION (over a lan): # MUTUAL SYNCHRONIZATION (over a lan):
# on host1: pymol syncmol.py -- recv 8000 send host2:8000 # on host1: pymol syncmol.py -- recv 8000 send host2:8000
# on host2: pymol syncmol.py -- recv 8000 send host1:8000 # on host2: pymol syncmol.py -- recv 8000 send host1:8000
import threading import threading
import socket import socket
import cPickle
import socket # For gethostbyaddr() import socket # For gethostbyaddr()
import SocketServer
import sys import sys
import traceback import traceback
import copy import copy
import os import os
import time import time
import Queue
try:
import cPickle
import SocketServer
import Queue
except ImportError:
import pickle as cPickle
import socketserver as SocketServer
import queue as Queue
class PyMOLWriter: # this class transmits class PyMOLWriter: # this class transmits
def __init__(self, pymol, host='localhost', port=8000): def __init__(self, pymol, host='localhost', port=8000):
host = str(host) host = str(host)
port = int(port) port = int(port)
self.host = host self.host = host
self.port = port self.port = port
self.sock = None self.sock = None
self.cmd = pymol.cmd self.cmd = pymol.cmd
self.fifo = Queue.Queue(0) self.fifo = Queue.Queue(0)
cmd = self.cmd cmd = self.cmd
print " syncmol: writing to %s:%d"%(host,port) print(" syncmol: writing to %s:%d"%(host,port))
pymol.cmd.log_open(self.fifo) pymol.cmd.log_open(self.fifo)
last_view = None last_view = None
last_frame = 0 last_frame = 0
while 1: while 1:
time.sleep(0.1) # update 10x a second time.sleep(0.1) # update 10x a second
view = cmd.get_view(output=4) view = cmd.get_view(output=4)
try: try:
cmd.lock() cmd.lock()
if hasattr(cmd,"_last_view"): if hasattr(cmd,"_last_view"):
skipping to change at line 93 skipping to change at line 99
def _remote_call(self,meth,args=(),kwds={}): def _remote_call(self,meth,args=(),kwds={}):
result = None result = None
while self.sock == None: while self.sock == None:
try: try:
self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.sock.connect((self.host,self.port)) self.sock.connect((self.host,self.port))
self.send = self.sock.makefile('w') self.send = self.sock.makefile('w')
self.recv = self.sock.makefile('r') self.recv = self.sock.makefile('r')
except: except:
self.sock=None self.sock=None
print "retrying..." print("retrying...")
time.sleep(1) time.sleep(1)
cPickle.dump(meth,self.send,1) # binary by default cPickle.dump(meth,self.send,1) # binary by default
cPickle.dump(args,self.send,1) cPickle.dump(args,self.send,1)
cPickle.dump(kwds,self.send,1) cPickle.dump(kwds,self.send,1)
self.send.flush() self.send.flush()
result = cPickle.load(self.recv) result = cPickle.load(self.recv)
return result return result
def remote_set_view(view,_self=cmd): def remote_set_view(view,_self=cmd):
try: try:
skipping to change at line 125 skipping to change at line 131
server_address = ('', port) server_address = ('', port)
ddbs = _PyMOLReader(server_address, _PyMOLRequestHandler) ddbs = _PyMOLReader(server_address, _PyMOLRequestHandler)
# bind pymol instance to the reader # bind pymol instance to the reader
pymol.cmd.remote_set_view = remote_set_view pymol.cmd.remote_set_view = remote_set_view
ddbs.cmd = pymol.cmd ddbs.cmd = pymol.cmd
print " syncmol: reading from port %d"%(port) print(" syncmol: reading from port %d"%(port))
# now serve requests forever # now serve requests forever
ddbs.keep_alive = 1 ddbs.keep_alive = 1
while ddbs.keep_alive: while ddbs.keep_alive:
ddbs.handle_request() ddbs.handle_request()
class _PyMOLReader(SocketServer.ThreadingTCPServer): class _PyMOLReader(SocketServer.ThreadingTCPServer):
def server_bind(self): def server_bind(self):
"""Override server_bind to store the server name.""" """Override server_bind to store the server name."""
SocketServer.ThreadingTCPServer.server_bind(self) SocketServer.ThreadingTCPServer.server_bind(self)
skipping to change at line 159 skipping to change at line 165
self.server_port = port self.server_port = port
class _PyMOLRequestHandler(SocketServer.StreamRequestHandler): class _PyMOLRequestHandler(SocketServer.StreamRequestHandler):
def handle(self): def handle(self):
while self.server.keep_alive: while self.server.keep_alive:
# get method name from client # get method name from client
try: try:
method = cPickle.load(self.rfile) method = cPickle.load(self.rfile)
except EOFError,socket.error: except (EOFError, socket.error):
break break
if method == 'shutdown': if method == 'shutdown':
self.server.keep_alive = 0 self.server.keep_alive = 0
# get arguments from client # get arguments from client
args = cPickle.load(self.rfile) args = cPickle.load(self.rfile)
kw = cPickle.load(self.rfile) kw = cPickle.load(self.rfile)
# get cmd method pointer # get cmd method pointer
meth_obj = getattr(self.server.cmd,method) meth_obj = getattr(self.server.cmd,method)
# call method and return result # call method and return result
cPickle.dump(apply(meth_obj,args,kw),self.wfile,1) # binary by defa ult cPickle.dump(meth_obj(*args, **kw),self.wfile,1) # binary by defaul t
self.wfile.flush() self.wfile.flush()
if __name__=='pymol': if __name__=='pymol':
import os import os
import pymol import pymol
sys.argv.reverse() sys.argv.reverse()
sys.argv.pop() sys.argv.pop()
while len(sys.argv): while len(sys.argv):
tok = sys.argv.pop() tok = sys.argv.pop()
if tok == 'recv': if tok == 'recv':
 End of changes. 8 change blocks. 
8 lines changed or deleted 14 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)