def send_comment(self, userid, prefix, comment): self.lock.acquire() # only send one comment at a time (since we're hitting multiple rootids) try: sent_to = {} for sessionid, rootid in self.sessions.items(): # get the session; if the session has expired, remove and move on session = Directory.get_session(sessionid) if not session: del self.sessions[sessionid] continue # if we've already sent to this rootid, skip and move on if sent_to.has_key(rootid): continue sent_to[rootid] = rootid # find the actual parent of this comment root = datagate.get_item(rootid) if not root: print "RatingProxy couldn't find rootid:", rootid continue parentid = self.find_parent(root, prefix) or rootid # create and send the event to the system (goes to all interested users) # I'm using a blank windowid so it goes to anyone looking at this rootid item = datagate.create_item(parentid=parentid, creatorid=userid) item.text = comment item.save() event = BaseView.views['rating']._create_event(item, 'processAdd') Events.send_event(rootid, event) finally: self.lock.release()
def log_it(self, request): '''Logs the information in a request''' # first create the request info = [] info.append('Date: ' + time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())) session = Directory.get_session(request.getvalue('z', '')) if session and session.user: info.append('User: '******'a') f.write('\n'.join(info) + '\n\n') f.close() finally: log_sync_lock.release()
def handle_cgi_request(self): """Handles a cgi request. This is the main entry point for client requests, whether POST or GET, that are cgi-bin requests. They all share the same memory space (i.e. this singleton object).""" # parse the form parameters to the form object # if a post request, encode everything (post requests can't encode on the client side because they come from forms) # get requests should encode on the client side (to handle special characters in the URL) if self.method.lower() == "get": for item in self.form.list: item.value = Constants.decode(item.value) # set the window id self.windowid = self.getvalue("global_windowid") # send the headers self.send_headers() try: # get the view viewst = self.getvalue("global_view", "meetingchooser").lower() # get the session, if there is one self.session = Directory.get_session(self.form.getvalue("z", "")) # if session is none, try logging the user in based upon their username and password parameters if self.session == None: self.session = Directory.login(self.form.getvalue("username", ""), self.form.getvalue("password", "")) # if the view is login, log the session out if (viewst == "login" or viewst == "logout") and self.session != None: Directory.logout(self.session) self.session = None # if session is still None, send them to the login page if self.session == None: viewst = "login" # process actions if self.session: Events.process_actions(self) # send events xml or send to view processing if self.getvalue("gm_internal_action") == "send_events_xml": Events.send_events_xml(self) else: # get the view if not BaseView.views.has_key(viewst): self.writeln("<html><body>Error! No view named " + viewst + " found.</body></html>") return view = BaseView.views[viewst] self.view = view # send processing to the view Constants.log.debug("Sending processing to view: " + viewst) view.handle_request(self, viewst) except: self.writeln("<html><body>") self.writeln("<hr>") self.writeln("<b>The following error has occurred in the GroupMind application:</b>") self.writeln("<pre><tt>") traceback.print_exc(file=self.out) traceback.print_exc() self.writeln("</pre></tt>") self.writeln("</body></html>")
def clearsession_action(self, request): session = Directory.get_session(request.getvalue('sessionid')) Directory.logout(session)