1
2
3
4
5
6
7
8
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 *
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
42 '''
43 Returns the domain object of the current request's user.
44 '''
45 return self._cr.domain()
46
47 @staticmethod
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
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
91 cr = ClientRequest(self._cr.domainName(), taskPath, *args, **kw)
92
93 yield self._worker.initSendMsg(reqID)
94
95 yield self._worker.resultReady(reqID, cr.dumps())
96