Module mcremote
[hide private]
[frames] | no frames]

Source Code for Module mcremote

 1  # -*- coding: utf-8 -*- 
 2   
 3  ############################################################################ 
 4  # mcremote.py 
 5  # 
 6  # Remotely callable class base definition. 
 7  # 
 8  # (C) 2008 Likya Software Ltd. 
 9  ############################################################################ 
10   
11  import os, sys 
12   
13  from twisted.internet import defer 
14   
15  from util import Util 
16  from constants import Constants 
17  from clientrequest import ClientRequest 
18  from mcerror import * 
19 20 21 -class MCRemote(object):
22 ''' 23 Base class for remotely callable objects, classes derived from this 24 are created by the worker class. 25 '''
26 - def __init__(self, worker, clientRequest, session):
27 ''' 28 Initilizes the Mobile Code Sender Object 29 30 @param worker: L{Worker} object creating this object 31 @type worker: C{Worker} 32 @param clientRequest: Client request of this call 33 @type clientRequest: ClientRequest 34 @param session: Current database session 35 @type session: Sqlalchemy session 36 ''' 37 self._worker = worker 38 self._cr = clientRequest 39 self._session = session
40
41 - def domain(self):
42 ''' 43 Returns the domain object of the current request's user. 44 ''' 45 return self._cr.domain()
46 47 @staticmethod
48 - def checkAuth(authCode):
49 ''' 50 Class method used as a decorator function to check user authorization. 51 ''' 52 def deco(func): 53 54 def wrapper(self, *args, **kw): 55 56 authList = self._cr.user().authList() 57 58 if not authCode in authList: 59 raise MCUnauthorizedCallError 60 61 return func(self, *args, **kw)
62 63 return wrapper
64 65 return deco 66
67 - def log(self, msg):
68 ''' 69 Logs the given message to the application server. 70 71 @param msg: Message to be logged 72 @type msg: str 73 @return: A deferred that will fire when log message is delivered to server. 74 ''' 75 return self._worker.workerServices().callRemote('log', 'WorkerProcess: %s' % msg)
76 77 @defer.inlineCallbacks
78 - def sendMsg(self, taskPath, *args, **kw):
79 ''' 80 Sends a message to clients connected to this domain. 81 NOTE: This method should *always* be yielded. Otherwise memory 82 mapped file related problems may occur. 83 84 @param taskPath: Message identifier, should be similar to 'a.b.c' 85 @type taskPath: C{string} 86 @param args: Message parameters 87 @param kw: Message keyword parameters 88 ''' 89 reqID = Util.uniq() 90 # Create a message containing ClientRequest object. 91 cr = ClientRequest(self._cr.domainName(), taskPath, *args, **kw) 92 # First inform server about the incoming message 93 yield self._worker.initSendMsg(reqID) 94 # Then send the actual message via memory mapped file 95 yield self._worker.resultReady(reqID, cr.dumps())
96