コード例 #1
0
ファイル: manager.py プロジェクト: mcruse/monotone
 def handle_error(self):
     try:
         msglog.warn("%s handling error. Please check whether the peer is up and supports the %s protocol" % (self, self.protocol))
         msglog.exception(prefix="handled")
         msglog.inform("%s closing due to error." % self)
     finally:
         self.close()
コード例 #2
0
ファイル: calculator.py プロジェクト: mcruse/monotone
 def _evaluate(self, value_map):
     try:
         answer = eval(self.compiled_statement, globals(), value_map)
     except:
         msglog.warn("%s evaluate failed with inputs: %r." % (self, value_map))
         raise
     return answer
コード例 #3
0
ファイル: triggers.py プロジェクト: mcruse/monotone
 def add_target(self, target):
     if not isinstance(target, str):
         targeturl = as_node_url(target)
     else:
         targeturl = target
         try:
             target = self.nodespace.as_node(targeturl)
         except KeyError:
             target = None                
     if targeturl == "/":
         raise ValueError("Invalid trigger target: %r" % target)
     self.synclock.acquire()
     try:
         if targeturl not in self.targets:
             self.targets.add(targeturl)
             if target:
                 self.targetmap[targeturl] = target
             else:
                 message = "Trigger %r added unresolvable target: %r"                    
                 msglog.warn(message % (self.name, targeturl))
             added = True
         else:
             added = False
             message = "Trigger %r not adding target %r: already exists."
             msglog.warn(message % (self.name, targeturl))
     finally: 
         self.synclock.release()
     return added
コード例 #4
0
ファイル: triggers.py プロジェクト: mcruse/monotone
 def get_targets(self, unresolved=False):
     #get targets
     targets = []
     for targeturl in self.targets:
         target = self.targetmap.get(targeturl)
         if target and not target.parent:
             message = "Trigger %s resetting pruned target: %r."
             msglog.warn(message % (self.name, targeturl))
             self.targetmap.pop(targeturl)
             target = None
         if not target:
             try:
                 target = self.nodespace.as_node(targeturl)
             except KeyError:
                 if targeturl not in self.unresolvable:
                     message = "Trigger %s Unable to resolve target: %r."
                     msglog.warn(message % (self.name, targeturl))
                 self.unresolvable.add(targeturl)
             else:
                 self.targetmap[targeturl] = target
                 self.unresolvable.discard(targeturl)
         if target:
             targets.append(target)
         elif unresolved:
             targets.append(targeturl)
     return targets
コード例 #5
0
ファイル: triggers.py プロジェクト: ed-aicradle/monotone
 def add_target(self, target):
     if not isinstance(target, str):
         targeturl = as_node_url(target)
     else:
         targeturl = target
         try:
             target = self.nodespace.as_node(targeturl)
         except KeyError:
             target = None
     if targeturl == "/":
         raise ValueError("Invalid trigger target: %r" % target)
     self.synclock.acquire()
     try:
         if targeturl not in self.targets:
             self.targets.add(targeturl)
             if target:
                 self.targetmap[targeturl] = target
             else:
                 message = "Trigger %r added unresolvable target: %r"
                 msglog.warn(message % (self.name, targeturl))
             added = True
         else:
             added = False
             message = "Trigger %r not adding target %r: already exists."
             msglog.warn(message % (self.name, targeturl))
     finally:
         self.synclock.release()
     return added
コード例 #6
0
ファイル: triggers.py プロジェクト: ed-aicradle/monotone
 def get_targets(self, unresolved=False):
     #get targets
     targets = []
     for targeturl in self.targets:
         target = self.targetmap.get(targeturl)
         if target and not target.parent:
             message = "Trigger %s resetting pruned target: %r."
             msglog.warn(message % (self.name, targeturl))
             self.targetmap.pop(targeturl)
             target = None
         if not target:
             try:
                 target = self.nodespace.as_node(targeturl)
             except KeyError:
                 if targeturl not in self.unresolvable:
                     message = "Trigger %s Unable to resolve target: %r."
                     msglog.warn(message % (self.name, targeturl))
                 self.unresolvable.add(targeturl)
             else:
                 self.targetmap[targeturl] = target
                 self.unresolvable.discard(targeturl)
         if target:
             targets.append(target)
         elif unresolved:
             targets.append(targeturl)
     return targets
コード例 #7
0
 def _evaluate(self, value_map):
     try:
         answer = eval(self.compiled_statement, globals(), value_map)
     except:
         msglog.warn("%s evaluate failed with inputs: %r." %
                     (self, value_map))
         raise
     return answer
コード例 #8
0
ファイル: _https.py プロジェクト: mcruse/monotone
 def __getattr__(self, name):
     self.log_debug("__getattr__(%r)", name)
     if self.ssl:
         try:
             attribute = getattr(self.ssl, name)
         except AttributeError:
             msglog.warn("Failed attribute lookup: %r." % name)
         else:
             return attribute
     return HTTPChannel.__getattr__(self, name)
コード例 #9
0
 def parent(self):
     path = self.as_remote_path()
     if path == "/":
         return self.host
     elif path.endswith("/"):
         msglog.warn("Path ends with '/': %r" % path)
         path = path[0: -1]
     head,sep,tail = path.rpartition("/")
     ppath = head if head else "/"
     return self.host.as_remote_node(ppath)
コード例 #10
0
ファイル: calculator.py プロジェクト: mcruse/monotone
 def setup_context(self):
     running = self.inputs.is_running()
     if running:
         self.inputs.stop()
     for child in self.inputs.children_nodes():
         msglog.warn("Pruning input child: %s." % child)
         child.prune()
     context = super(CachingCalculator, self).setup_context()
     if running:
         self.inputs.start()
     return context
コード例 #11
0
 def setup_context(self):
     running = self.inputs.is_running()
     if running:
         self.inputs.stop()
     for child in self.inputs.children_nodes():
         msglog.warn("Pruning input child: %s." % child)
         child.prune()
     context = super(CachingCalculator, self).setup_context()
     if running:
         self.inputs.start()
     return context
コード例 #12
0
 def decode(self, data):
     state = cPickle.loads(data)
     decoder = IPickles(state)
     try:
         obj = decoder(True)
     except:
         message = "Decoder %s failed to decode state: %r."
         msglog.warn(message % (decoder, state))
         msglog.exception()
         raise
     return obj
コード例 #13
0
ファイル: triggers.py プロジェクト: ed-aicradle/monotone
 def clear(self, source, *args, **kw):
     result = self._source_clear(source, *args, **kw)
     if not isinstance(source, str):
         source = as_node_url(source)
     for target in self.get_targets():
         try:
             target.clear(source, *args, **kw)
         except:
             message = "%s failed to clear target: %s."
             msglog.warn(message % (self, target))
             msglog.exception(prefix="handled")
     return result
コード例 #14
0
ファイル: alarm.py プロジェクト: ed-aicradle/monotone
 def _terminate_events(self, events, reason):
     for event in events:
         try:
             event.terminate("Alarm %r" % self.name, reason)
         except:
             message = "Failed to terminate: %s."
             msglog.warn("Failed to terminate: %s." % event)
             msglog.exception(prefix="handled")
         else:
             message = "Alarm %r terminated event %s: %s."
             msglog.inform(message % (self.name, event, reason))
     return events
コード例 #15
0
ファイル: triggers.py プロジェクト: mcruse/monotone
 def clear(self, source, *args, **kw):
     result = self._source_clear(source, *args, **kw)
     if not isinstance(source, str):
         source = as_node_url(source)
     for target in self.get_targets():
         try:
             target.clear(source, *args, **kw)
         except:
             message = "%s failed to clear target: %s."
             msglog.warn(message % (self, target))
             msglog.exception(prefix="handled")
     return result
コード例 #16
0
ファイル: rna.py プロジェクト: mcruse/monotone
 def register_session(self, session):
     try:
         fd = session.socket.fileno()
         host,port = session.socket.getpeername()
     except:
         msglog.warn("Failed to add session: %r" % session)
         msglog.exception(prefix="handled")
         registered = False
     else:
         self.hosts[fd] = host
         self.sessions[fd] = session
         self.connections.setdefault(host, set()).add(fd)
         self.descriptors.add(fd)
         self.notify_poll()
         registered = True
     return registered
コード例 #17
0
ファイル: rna.py プロジェクト: ed-aicradle/monotone
 def register_session(self, session):
     try:
         fd = session.socket.fileno()
         host, port = session.socket.getpeername()
     except:
         msglog.warn("Failed to add session: %r" % session)
         msglog.exception(prefix="handled")
         registered = False
     else:
         self.hosts[fd] = host
         self.sessions[fd] = session
         self.connections.setdefault(host, set()).add(fd)
         self.descriptors.add(fd)
         self.notify_poll()
         registered = True
     return registered
コード例 #18
0
ファイル: request_handler.py プロジェクト: mcruse/monotone
 def find_targets(self, extended=True):
     managers = [self._as_node("/services/Alarm Manager")]
     if extended:
         try:
             remote_managers = self._as_node("/services/Alarm Managers")
         except KeyError:
             msglog.warn("No Alarm Managers container defined.")
         else:
             managers.extend(remote_managers.children_nodes())
     targets = []
     for manager in managers:
         try:
             targets.extend(manager.children_nodes())
         except:
             msglog.warn("Unable to get targets from: %s." % manager)
             msglog.exception(prefix="handled")
     return map(as_node_url, targets)
コード例 #19
0
 def find_targets(self, extended=True):
     managers = [self._as_node("/services/Alarm Manager")]
     if extended:
         try:
             remote_managers = self._as_node("/services/Alarm Managers")
         except KeyError:
             msglog.warn("No Alarm Managers container defined.")
         else:
             managers.extend(remote_managers.children_nodes())
     targets = []
     for manager in managers:
         try:
             targets.extend(manager.children_nodes())
         except:
             msglog.warn("Unable to get targets from: %s." % manager)
             msglog.exception(prefix="handled")
     return map(as_node_url, targets)
コード例 #20
0
 def __exit__(self, type, error, traceback):
     """
         Catch ERNATimeout type exceptions and automatically 
         set resource status to unavailable; else, set status 
         to available.
         
         RNA commands invoked within Resource context are 
         leveraged to update resource availability.
     """
     try:
         if isinstance(error, ERNATimeout):
             msglog.warn("Resource %s operation timed out." % self)
             self.notify_unavailable()
         else:
             self.notify_available()
     finally:
         self.unlock()
コード例 #21
0
 def refresh_children(self):
     # See CSCtq56038 re: assumptions to reduce network chattiness.
     communicating = False
     present_value = self.get().values()
     was_online = present_value[0] and present_value[1]
     for node in [self.lic_node, self.fw_node, self.net_node]:
         try:
             communicating = node.refresh_value()
         except:
             msglog.warn("Failed to refresh host information: %s" % node)
         if communicating and was_online:
             # we can break early, remains online.
             break
     self.refreshed(True)
     if not self._scheduled or not self._scheduled.executable():
         self.schedule_refresh(self.period)
     self.update_cache()
コード例 #22
0
ファイル: rna.py プロジェクト: mcruse/monotone
 def handle_session_input(self, fd):
     pfx = 'RNA_Scan_Thread.handle_session_input'
     unregister = False
     session = self.get_session(fd)
     try:
         rna_header = RNAHeader(session.socket)
         protocol = _protocol_factory(rna_header.protocol)
         protocol.setup(session, rna_header)
         command = protocol.recv_command()
         result = _invoke_command(command)
         protocol.send_result(command, result)
     except EInvalidMessage, error:
         if not error.message:
             unregister = True
             msglog.warn("Removing client-closed session: %s" % session)
         else:
             unregister = False
             msglog.exception(prefix="handled")
コード例 #23
0
ファイル: rna.py プロジェクト: ed-aicradle/monotone
 def handle_session_input(self, fd):
     pfx = 'RNA_Scan_Thread.handle_session_input'
     unregister = False
     session = self.get_session(fd)
     try:
         rna_header = RNAHeader(session.socket)
         protocol = _protocol_factory(rna_header.protocol)
         protocol.setup(session, rna_header)
         command = protocol.recv_command()
         result = _invoke_command(command)
         protocol.send_result(command, result)
     except EInvalidMessage, error:
         if not error.message:
             unregister = True
             msglog.warn("Removing client-closed session: %s" % session)
         else:
             unregister = False
             msglog.exception(prefix="handled")
コード例 #24
0
 def __call__(self, local=False):
     if self.__source is None:
         state = self.__state
         if local:
             state["origin"] = Event.LOCALORIGIN
         if state['type'] == 'EventSource':
             self.__source = state['source']
         elif state['type'] == 'Event':
             self.__source = Event.get_event(state['GUID'])
             if local and not self.__source.is_local():
                 message = "%s overriding source %s origin to local."
                 msglog.warn(message % (self, self.__source))
                 self.__source.set_local()
         elif state['origin'] == Event.LOCALORIGIN:
             self.__source = as_node(state['URL'])
         else:
             self.__dict__.update(state['config'])
             self.__source = self
     return self.__source
コード例 #25
0
ファイル: _compact.py プロジェクト: mcruse/monotone
def compact():
    storages = []
    for storagemap in MapStorage.filesysmap.values():
        for storage in storagemap.values():
            if isinstance(storage, MapStorage):
                storages.append(storage)
    for storage in storages:
        if storage.opened() and hasattr(storage.database, "reorganize"):
            storage.storagelock.acquire()
            try:
                packed = storage.database.reorganize()
            except:
                msglog.warn("Compact DBM file %r failed." % storage.filepath)
                msglog.exception(prefix="handled")
            else:
                msglog.inform("Compacted DBM file %r." % storage.filepath)
            finally:
                storage.storagelock.release()
    return len(storages)
コード例 #26
0
ファイル: _compact.py プロジェクト: ed-aicradle/monotone
def compact():
    storages = []
    for storagemap in MapStorage.filesysmap.values():
        for storage in storagemap.values():
            if isinstance(storage, MapStorage):
                storages.append(storage)
    for storage in storages:
        if storage.opened() and hasattr(storage.database, "reorganize"):
            storage.storagelock.acquire()
            try:
                packed = storage.database.reorganize()
            except:
                msglog.warn("Compact DBM file %r failed." % storage.filepath)
                msglog.exception(prefix="handled")
            else:
                msglog.inform("Compacted DBM file %r." % storage.filepath)
            finally:
                storage.storagelock.release()
    return len(storages)
コード例 #27
0
ファイル: store.py プロジェクト: mcruse/monotone
 def _trim_events(self):
     trimmed = []
     expiration = uptime.secs() - self.ttl
     while self.closed and self.closed[0][0] < expiration:
         closed,guid = self.closed.popleft()
         try:
             item = self.items.pop(guid)
         except KeyError:
             msglog.warn("Failed to remove closed event.  Error follows: ")
             msglog.exception(prefix="handled")
         else:
             self.created.remove(guid)
             self.byname[item["name"]].remove(guid)
             self.bystate[item["state"]].remove(guid)
             self.byorigin[item["origin"]].remove(guid)
             self.bypriority[item["priority"]].remove(guid)
             for client in self.clients.values():
                 client.remove(item)
             trimmed.append(guid)
     return trimmed
コード例 #28
0
ファイル: manager.py プロジェクト: mcruse/monotone
 def connect_ssl(self, address):
     """
         Deprecated: trying to fix other issue by pulling 
         SSL wrapping out of handle-connect.  Left here in 
         case it's useful.
     """
     self.connected = False
     self.socket.setblocking(1)
     try:
         self.socket.connect(address)
     except:
         msglog.warn("%s connect failed.")
         self.handle_error()
     else:
         self.addr = address
         self.ssl = socket.ssl(self.socket)
         self.message("%s set up SSL wrapper: %s." % (self, self.ssl))
         self.handle_connect()
     finally:
         self.socket.setblocking(0)
コード例 #29
0
ファイル: calculator.py プロジェクト: mcruse/monotone
 def as_node_input(self, name, node):
     if not node.has_method("get"):
         # The above if statement fails when nodes don't resolve.
         raise ValueError("node has no 'get' method: %s" % node)
     source = as_node_url(node)
     if self.inputs.has_child(name):
         node = self.inputs.get_child(name)
         if source != node.source:
             raise ValueError("Input with name exists: %r" % name)
         msglog.warn("Input exists: %r, %r" % (name, source))
     else:
         running = self.inputs.is_running()
         if running:
             self.inputs.stop()
         node = CachedPoint()
         node.configure({"name": name, 
                         "source": source, 
                         "parent": self.inputs})
         if running:
             self.inputs.start()
     return super(CachingCalculator, self).as_node_input(name, node)
コード例 #30
0
ファイル: triggers.py プロジェクト: mcruse/monotone
 def remove_target(self, target):
     if not isinstance(target, str):
         targeturl = as_node_url(target)
     else:
         targeturl = target
     self.synclock.acquire()
     try: 
         self.targets.remove(targeturl)
     except KeyError:
         removed = False
         message = "Target %s not removed from %s: does not exist."
         msglog.warn(message % (target, self))
     else:
         try:
             self.targetmap.pop(targeturl)
         except KeyError:
             pass
         removed = True
         msglog.inform("Target %s removed from %s." % (target, self))
     finally: 
         self.synclock.release()
     return removed
コード例 #31
0
ファイル: triggers.py プロジェクト: ed-aicradle/monotone
 def remove_target(self, target):
     if not isinstance(target, str):
         targeturl = as_node_url(target)
     else:
         targeturl = target
     self.synclock.acquire()
     try:
         self.targets.remove(targeturl)
     except KeyError:
         removed = False
         message = "Target %s not removed from %s: does not exist."
         msglog.warn(message % (target, self))
     else:
         try:
             self.targetmap.pop(targeturl)
         except KeyError:
             pass
         removed = True
         msglog.inform("Target %s removed from %s." % (target, self))
     finally:
         self.synclock.release()
     return removed
コード例 #32
0
ファイル: rna.py プロジェクト: mcruse/monotone
 def run(self):
     rna_service = self.rna_service
     msglog.log('broadway', msglog.types.INFO, 'RNA thread starting.')
     try:
         rna_service.transport.listen()
     except:
         msglog.exception()
         self._cleanup()
         return
     nexceptions = 0
     texceptions = 0
     if rna_service.state is rna_service.PENDING:
         rna_service.state = rna_service.RUNNING
     while rna_service.state is rna_service.RUNNING:
         if not self.rna_scan_thread.is_running():
             msglog.warn("%s scan thread not running: exiting." % self)
             break
         try:
             session = rna_service.transport.accept_session()
             self.rna_scan_thread.register_session(session)
         except:
             msglog.exception(prefix='handled')
     self._cleanup(msglog.types.INFO)
コード例 #33
0
ファイル: batch.py プロジェクト: mcruse/monotone
 def destroy(self, manager=None):
     if not manager:
         manager = self.subscription_manager
     if manager and self.subscribed():
         if self.timeout_occurred:
             message = ("Batch %s destruction leaving remote"
                        " subscription: timeout had occurred.")
             msglog.warn(message % self)
         else:
             try:
                 manager.destroy(self.sid)
             except:
                 message = "%s failed to destroy subscription %s on %s."
                 msglog.log("broadway", msglog.types.WARN, 
                            message % (self, self.sid, manager))
                 msglog.exception(prefix="handled")
             else:
                 if debug:
                     message = "Batch %s destroyed remote subscription."
                     msglog.debug(message % self)
     self.clear()
     self.sid = None
     self.subscription_manager = None
コード例 #34
0
 def as_node_input(self, name, node):
     if not node.has_method("get"):
         # The above if statement fails when nodes don't resolve.
         raise ValueError("node has no 'get' method: %s" % node)
     source = as_node_url(node)
     if self.inputs.has_child(name):
         node = self.inputs.get_child(name)
         if source != node.source:
             raise ValueError("Input with name exists: %r" % name)
         msglog.warn("Input exists: %r, %r" % (name, source))
     else:
         running = self.inputs.is_running()
         if running:
             self.inputs.stop()
         node = CachedPoint()
         node.configure({
             "name": name,
             "source": source,
             "parent": self.inputs
         })
         if running:
             self.inputs.start()
     return super(CachingCalculator, self).as_node_input(name, node)
コード例 #35
0
ファイル: rna.py プロジェクト: ed-aicradle/monotone
 def run(self):
     rna_service = self.rna_service
     msglog.log('broadway', msglog.types.INFO, 'RNA thread starting.')
     try:
         rna_service.transport.listen()
     except:
         msglog.exception()
         self._cleanup()
         return
     nexceptions = 0
     texceptions = 0
     if rna_service.state is rna_service.PENDING:
         rna_service.state = rna_service.RUNNING
     while rna_service.state is rna_service.RUNNING:
         if not self.rna_scan_thread.is_running():
             msglog.warn("%s scan thread not running: exiting." % self)
             break
         try:
             session = rna_service.transport.accept_session()
             self.rna_scan_thread.register_session(session)
         except:
             msglog.exception(prefix='handled')
     self._cleanup(msglog.types.INFO)
コード例 #36
0
ファイル: rna.py プロジェクト: mcruse/monotone
 def run(self):
     pfx = 'RNA_Scan_Thread.run:'
     cmdfd = self.trigger_channel.fileno()
     enqueue = self.work_queue.queue_noresult
     handle_session = self.handle_session_input
     clear_notifications = self.clear_notifications
     while self.bPollRun:
         try:
             descriptors = self.descriptors.copy()
             if cmdfd not in descriptors:
                 msglog.warn("Command channel FD removed!")
                 descriptors.add(cmdfd)
             r,w,e = select.select(descriptors, [], descriptors, 1)
             for fd in e:
                 if fd == cmdfd:
                     message = "%s internal polling error.  Must restart."
                     msglog.error(message % pfx)
                     raise TypeError("command channel OOB data")
                 try:
                     self.unregister_session(self.get_session(fd))
                 except:
                     msglog.warn("%s I/O event handling error." % pfx)
                     msglog.exception(prefix="handled")
             for fd in r:
                 if fd in self.descriptors:
                     try:
                         if fd == cmdfd:
                             clear_notifications()
                         else:
                             self.descriptors.discard(fd)
                             enqueue(handle_session, fd)
                     except:
                         msglog.warn("%s I/O event handling error." % pfx)
                         msglog.exception(prefix="handled")
         except:
             msglog.warn("%s loop error." % pfx)
             msglog.exception(prefix="handled")
     msglog.inform("%s exiting." % pfx)
コード例 #37
0
ファイル: rna.py プロジェクト: ed-aicradle/monotone
 def run(self):
     pfx = 'RNA_Scan_Thread.run:'
     cmdfd = self.trigger_channel.fileno()
     enqueue = self.work_queue.queue_noresult
     handle_session = self.handle_session_input
     clear_notifications = self.clear_notifications
     while self.bPollRun:
         try:
             descriptors = self.descriptors.copy()
             if cmdfd not in descriptors:
                 msglog.warn("Command channel FD removed!")
                 descriptors.add(cmdfd)
             r, w, e = select.select(descriptors, [], descriptors, 1)
             for fd in e:
                 if fd == cmdfd:
                     message = "%s internal polling error.  Must restart."
                     msglog.error(message % pfx)
                     raise TypeError("command channel OOB data")
                 try:
                     self.unregister_session(self.get_session(fd))
                 except:
                     msglog.warn("%s I/O event handling error." % pfx)
                     msglog.exception(prefix="handled")
             for fd in r:
                 if fd in self.descriptors:
                     try:
                         if fd == cmdfd:
                             clear_notifications()
                         else:
                             self.descriptors.discard(fd)
                             enqueue(handle_session, fd)
                     except:
                         msglog.warn("%s I/O event handling error." % pfx)
                         msglog.exception(prefix="handled")
         except:
             msglog.warn("%s loop error." % pfx)
             msglog.exception(prefix="handled")
     msglog.inform("%s exiting." % pfx)
コード例 #38
0
ファイル: triggers.py プロジェクト: ed-aicradle/monotone
def Trigger(*args, **kw):
    """
        Factory method for reverse compatibility.
    """
    msglog.warn("Depcreated Trigger factory used: use Calculated instead.")
    return Calculated(*args, **kw)
コード例 #39
0
 def handle_request(self, request):
     exceptions = []
     userobject = request.user_object()
     if not userobject:
         username = request.get_cookie("NBMUSER", None)
         if not username:
             raise Unauthorized("User unknown")
         address = request.get_address()
         if not self._cloud_manager.is_host_in_formation(address):
             raise Unauthorized("Address unrecognized: " + address)
         message = "Getting user because address/usrename: %r, %r"
         msglog.debug(message % (address, username))
         userobject = self.user_manager.get_user(username)
     request_data = request.get_post_data_as_dictionary()
     request_data.update(request.get_query_string_as_dictionary())
     if request_data.has_key('command') and request_data.has_key('guid'):
         exceptions = []
         path = request.get_path()
         username = userobject.name()
         method = request.get_command()
         protocol = request.get_protocol()
         command = request_data['command'][0]
         user = self.user_service.user_from_object(userobject)
         origins = {}
         for guid in request_data['guid']:
             try:
                 event = AlarmEvent.get_event(guid)
             except KeyError:
                 msglog.warn("Attempt to get event %r failed." % guid)
             else:
                 origins.setdefault(event.origin, []).append(event)
         for origin, events in origins.items():
             if origin == AlarmEvent.LOCALORIGIN:
                 for event in events:
                     message = "User '%s'" % username
                     if self.secured:
                         event = query_multi_adapter((event, user), ISecure)
                     try:
                         event.notify(command, self, time.time(), message)
                     except Exception, error:
                         msg = "Notify %r of %r failed." % (event, command)
                         msglog.log("broadway", msglog.types.WARN, msg)
                         msglog.exception(prefix="handled")
                         # CSCte94039 - form the proper error msg
                         exceptions.append((command, str(error)))
             else:
                 headers = {"Cookie": "NBMUSER=%s" % userobject.name()}
                 guids = [event.GUID for event in events]
                 parameters = [("command", command)]
                 parameters.extend([("guid", guid) for guid in guids])
                 data = urllib.urlencode(parameters)
                 url = '%s://%s%s' % (protocol, origin, path)
                 if method == "GET":
                     url = "?".join([url, data])
                     data = None
                 redirect = urllib2.Request(url, data, headers)
                 try:
                     urllib2.urlopen(redirect).read()
                 except Exception, error:
                     message = "'%s' remote events on '%s' failed."
                     msglog.warn(message % (command, origin))
                     msglog.exception(prefix="handled")
                     exceptions.append((origin, command, error))
コード例 #40
0
                    resolved = False
                    exceptions.append(sys.exc_info())
            else:
                value = self.as_node_input(name, node)
        else:
            if isinstance(definition, str):
                # Attempt integer conversion because float worked.
                try:
                    value = int(definition)
                except ValueError:
                    pass
        if not resolved:
            # Log input resolution for definition once.
            if self._failed.get(name) != definition:
                message = "%s cannot resolve %r: %r.  Exceptions follow."
                msglog.warn(message % (self, name, definition))
                while exceptions:
                    error = exceptions.pop()
                    msglog.exception(prefix="handled", exc_info=error)
            self._failed[name] = definition
            raise ValueError("Unable to resolve definition: %r" % definition)
        else:
            self._failed.pop(name, None)
        return value

    def setup_context(self):
        context = {}
        for variable in self.variables:
            name = variable['vn']
            definition = variable['node_reference']
            if context.has_key(name):
コード例 #41
0
ファイル: jsonrpc.py プロジェクト: ed-aicradle/monotone
                     position = int(name)
                     if position >= 0 and position <= 9:
                         # Property name is integer position,
                         # strip from params dict and place in
                         # args sequence.
                         value = params.pop(name)
                         argitems.append((position, value))
             # Place remaining properties into kwargs.
             kwargs.update(params)
             # Create sequence of positional args specified
             # by digit property name in params hash map.
             args.extend([val for pos, val in sorted(argitems)])
         elif isinstance(params, (list, tuple)):
             args.extend(params)
         else:
             msglog.warn("Unknown param type: %r" % (params, ))
         try:
             result = method(*args, **kwargs)
         except ValueError, error:
             response["error"] = {"code": -32602}
             msglog.exception(prefix="handled")
         except Exception, error:
             response["error"] = {"code": -32603}
             msglog.exception(prefix="handled")
 if error:
     errordict = response.setdefault("error", {"code": -32603})
     message = error.message
     if not message:
         # Some silly internal errors don't include
         # a message.  This should be fixed.  Example:
         # as_node("/interfaces/relay1").set('a').
コード例 #42
0
ファイル: triggers.py プロジェクト: mcruse/monotone
def Trigger(*args, **kw):
    """
        Factory method for reverse compatibility.
    """
    msglog.warn("Depcreated Trigger factory used: use Calculated instead.")
    return Calculated(*args, **kw)
コード例 #43
0
ファイル: jsonrpc.py プロジェクト: mcruse/monotone
                     position = int(name)
                     if position >= 0 and position <= 9:
                         # Property name is integer position, 
                         # strip from params dict and place in 
                         # args sequence.
                         value = params.pop(name)
                         argitems.append((position, value))
             # Place remaining properties into kwargs.
             kwargs.update(params)
             # Create sequence of positional args specified 
             # by digit property name in params hash map.
             args.extend([val for pos,val in sorted(argitems)])
         elif isinstance(params, (list, tuple)):
             args.extend(params)
         else:
             msglog.warn("Unknown param type: %r" % (params,))
         try:
             result = method(*args, **kwargs)
         except ValueError, error:
             response["error"] = {"code": -32602}
             msglog.exception(prefix="handled")
         except Exception, error:
             response["error"] = {"code": -32603}
             msglog.exception(prefix="handled")
 if error:
     errordict = response.setdefault("error", {"code": -32603})
     message = error.message
     if not message:
         # Some silly internal errors don't include 
         # a message.  This should be fixed.  Example: 
         # as_node("/interfaces/relay1").set('a').
コード例 #44
0
 def handle_request(self, request):
     exceptions = []
     userobject = request.user_object()
     if not userobject:
         username = request.get_cookie("NBMUSER", None)
         if not username:
             raise Unauthorized("User unknown")
         address = request.get_address()
         if not self._cloud_manager.is_host_in_formation(address):
             raise Unauthorized("Address unrecognized: " + address)
         message = "Getting user because address/usrename: %r, %r"
         msglog.debug(message % (address, username))
         userobject = self.user_manager.get_user(username)
     request_data = request.get_post_data_as_dictionary()
     request_data.update(request.get_query_string_as_dictionary())
     if request_data.has_key("command") and request_data.has_key("guid"):
         exceptions = []
         path = request.get_path()
         username = userobject.name()
         method = request.get_command()
         protocol = request.get_protocol()
         command = request_data["command"][0]
         user = self.user_service.user_from_object(userobject)
         origins = {}
         for guid in request_data["guid"]:
             try:
                 event = AlarmEvent.get_event(guid)
             except KeyError:
                 msglog.warn("Attempt to get event %r failed." % guid)
             else:
                 origins.setdefault(event.origin, []).append(event)
         for origin, events in origins.items():
             if origin == AlarmEvent.LOCALORIGIN:
                 for event in events:
                     message = "User '%s'" % username
                     if self.secured:
                         event = query_multi_adapter((event, user), ISecure)
                     try:
                         event.notify(command, self, time.time(), message)
                     except Exception, error:
                         msg = "Notify %r of %r failed." % (event, command)
                         msglog.log("broadway", msglog.types.WARN, msg)
                         msglog.exception(prefix="handled")
                         # CSCte94039 - form the proper error msg
                         exceptions.append((command, str(error)))
             else:
                 headers = {"Cookie": "NBMUSER=%s" % userobject.name()}
                 guids = [event.GUID for event in events]
                 parameters = [("command", command)]
                 parameters.extend([("guid", guid) for guid in guids])
                 data = urllib.urlencode(parameters)
                 url = "%s://%s%s" % (protocol, origin, path)
                 if method == "GET":
                     url = "?".join([url, data])
                     data = None
                 redirect = urllib2.Request(url, data, headers)
                 try:
                     urllib2.urlopen(redirect).read()
                 except Exception, error:
                     message = "'%s' remote events on '%s' failed."
                     msglog.warn(message % (command, origin))
                     msglog.exception(prefix="handled")
                     exceptions.append((origin, command, error))
コード例 #45
0
ファイル: calculator.py プロジェクト: mcruse/monotone
                 resolved = False
                 exceptions.append(sys.exc_info())
         else:
             value = self.as_node_input(name, node)
     else:
         if isinstance(definition, str):
             # Attempt integer conversion because float worked.
             try:
                 value = int(definition)
             except ValueError:
                 pass    
     if not resolved:
         # Log input resolution for definition once.
         if self._failed.get(name) != definition:
             message = "%s cannot resolve %r: %r.  Exceptions follow."
             msglog.warn(message % (self, name, definition))
             while exceptions:
                 error = exceptions.pop()
                 msglog.exception(prefix="handled", exc_info=error)
         self._failed[name] = definition
         raise ValueError("Unable to resolve definition: %r" % definition)
     else:
         self._failed.pop(name, None)
     return value
 def setup_context(self):
     context = {}
     for variable in self.variables:
         name = variable['vn']
         definition = variable['node_reference']
         if context.has_key(name):
             raise EInvalidValue('variable', name, 'Duplicate name')