Hi everyone, Could someone help explain what I am doing wrong in this code block?
This code block is an excerpt from a larger file that receives transmitted files via IBM WebSphere MQSeries an drops it to the local file system. Transmission of the file works as designed but it has a flaw. If the file cannot be created for whatever reason, the transmitted message is lost. What I am trying to do is ensure that a file transmit is considered successful only after the created file's checksum matches. If not, the code should treat it as an error and roll back the message to MQSeries without a commit. The basis for this should be around the pymqi.QueueManager class which is named mq in the block listed below. On execution, I get the traceback of: Traceback (most recent call last): File "M:\MQ\MQ\Scripts\receiver.py", line 269, in ? receiver.run() File "M:\MQ\MQ\Scripts\receiver.py", line 109, in run self.connect() File "M:\MQ\MQ\Scripts\receiver.py", line 118, in connect self.qm.begin() File "c:\python24\lib\site-packages\pymqi.py", line 738, in begin raise MQMIError(rv[0], rv[1]) pymqi.MQMIError: MQI Error. Comp: 1, Reason 2121: WARNING: MQRC_NO_EXTERNAL_PARTICIPANTS Do you have any idea why this might be occurring? class Receiver(object): def __init__(self,qm_name,queue_name): self.qm_name = qm_name self.queue_name = queue_name # Will be set later self.qm = None self.message = None def run(self): self.connect() self.get() def connect(self): """ Connect to queue manager """ try: self.qm = mq.QueueManager(options.qmanager.upper() ) self.qm.begin() except mq.PYIFError, err: mqevlog.event("error",err) sys.exit(1) def get(self): """ Get a message from queue. """ queue = mq.Queue(self.qm, self.queue_name) pmo = mq.pmo(Options = CMQC.MQPMO_SYNCPOINT) md = mq.md() while True: try: var = queue.get(self.message, md, pmo ) except mq.MQMIError,e: if e.reason != CMQC.MQRC_NO_MSG_AVAILABLE: mqevlog.event("error",e) sys.exit(1) break else: buff = StringIO(var) tree = ElementTree(file=buff) # Extract required elements and assign to local variables key = "this should be a well-kept secret" file_name = tree.find("dest").text creation_time = tree.find("creation_time").text contents = tree.find("contents").text check = tree.find("checksum").text #Decode temp file original = file_encoder.decode(contents) # Drop file to disk if os.path.exists(file_name) is False: open(file_name,"wb").write(original) else: mqevlog.event(sys.argv[0],"error","Output file path/name already exists") sys.exit(1) # Get checksum of newly created file sum=csums.getsum(file_name) # Compare checksum of created file with value transmitted if csums.checksum_compare(sys.argv[0],sum,check,file_name) == True: queue.commit() sys.exit(0) else: queue.backout() mqevlog.event("error","CheckSums of received/transmitted files do not match") sys.exit(1) Any help/insight you can provide on this would be greatly appreciated. -- http://mail.python.org/mailman/listinfo/python-list