self.ui.stop_button.setFocus() def stop_button_clicked(self): # Set value self.vehicle_manual_controller.set_velocity_kmph(0.0, 0.0) # Transfer focus self.ui.start_button.setFocus() def closeEvent(self, event): # Stop vehicle for sure self.vehicle_manual_controller.stop_now() if __name__ == '__main__': rospy.init_node('set_run_dialog') app = QApplication(sys.argv) lock_manager = LockManager(LOCK_PATH) if not lock_manager.get_lock(): QMessageBox.warning( None, 'Warning', 'Another same process is running. If not, please delete lock file [ %s ].' % lock_manager.get_lock_path(), QMessageBox.Ok) sys.exit(1) win = SetRunDialog() win.show() ret = app.exec_() lock_manager.release_lock() sys.exit(ret)
def __init__(self, config): self.config = config util.initLogging(config["verbose"], config.get("log_path", ""), config.get("enable_loggers", [])) util.log("Default encoding: %s (file system: %s)" % (sys.getdefaultencoding(), sys.getfilesystemencoding())) # Evaluate configuration and set defaults _checkConfig(config) provider_mapping = self.config["provider_mapping"] # response_trailer = config.get("response_trailer", "") self._verbose = config.get("verbose", 2) lockStorage = config.get("locksmanager") if lockStorage is True: lockStorage = LockStorageDict() if not lockStorage: locksManager = None else: locksManager = LockManager(lockStorage) propsManager = config.get("propsmanager") if not propsManager: # Normalize False, 0 to None propsManager = None elif propsManager is True: propsManager = PropertyManager() mount_path = config.get("mount_path") # Instantiate DAV resource provider objects for every share self.providerMap = {} for (share, provider) in provider_mapping.items(): # Make sure share starts with, or is, '/' share = "/" + share.strip("/") # We allow a simple string as 'provider'. In this case we interpret # it as a file system root folder that is published. if isinstance(provider, basestring): provider = FilesystemProvider(provider) assert isinstance(provider, DAVProvider) provider.setSharePath(share) if mount_path: provider.setMountPath(mount_path) # TODO: someday we may want to configure different lock/prop managers per provider provider.setLockManager(locksManager) provider.setPropManager(propsManager) self.providerMap[share] = { "provider": provider, "allow_anonymous": False } # Define WSGI application stack application = RequestResolver() domain_controller = None dir_browser = config.get("dir_browser", {}) middleware_stack = config.get("middleware_stack", []) # Replace WsgiDavDirBrowser to custom class for backward compatibility only # In normal way you should insert it into middleware_stack if dir_browser.get("enable", True) and "app_class" in dir_browser.keys(): config["middleware_stack"] = [ m if m != WsgiDavDirBrowser else dir_browser['app_class'] for m in middleware_stack ] for mw in middleware_stack: if mw.isSuitable(config): if self._verbose >= 2: print "Middleware %s is suitable" % mw application = mw(application, config) if issubclass(mw, HTTPAuthenticator): domain_controller = application.getDomainController() # check anonymous access for share, data in self.providerMap.items(): if application.allowAnonymousAccess(share): data['allow_anonymous'] = True else: if self._verbose >= 2: print "Middleware %s is not suitable" % mw # Print info if self._verbose >= 2: print "Using lock manager: %r" % locksManager print "Using property manager: %r" % propsManager print "Using domain controller: %s" % domain_controller print "Registered DAV providers:" for share, data in self.providerMap.items(): hint = " (anonymous)" if data['allow_anonymous'] else "" print " Share '%s': %s%s" % (share, provider, hint) if self._verbose >= 1: for share, data in self.providerMap.items(): if data['allow_anonymous']: # TODO: we should only warn here, if --no-auth is not given print "WARNING: share '%s' will allow anonymous access." % share self._application = application
class Site: def __init__(self, site_id): self._id = site_id self._status = SiteStatus.UP self._init_variables() self._lm = LockManager(self._site_variables.keys()) def _init_variables(self): self._site_variables = {} for i in xrange(1, 21): var_id = 'x' + str(i) # value = int('10' + str(i)) value = 10 * i if i % 2 == 0: # Even numbered variables are replicated self._site_variables[var_id] = Variable(var_id, value) elif (i + 1) % 10 == self._id: self._site_variables[var_id] = Variable(var_id, value) def get_id(self): return self._id def dump(self, var=None): if var: if var in self._site_variables: return {var: self._site_variables[var].read_committed()} print 'Variable doesn\'t exist on site' else: var_dict = {} for var, obj in self._site_variables.iteritems(): var_dict[var] = obj.read_committed() return var_dict def dump_state(self): return self._site_variables def _load_state(self, state): for var_id, var_obj in state.iteritems(): if var_id in self._site_variables: uncommitted_values = var_obj.dump_uncommitted() committed_values = var_obj.dump_committed() new_var_obj = Variable(var_id, committed_values[0]) new_var_obj.load_state(committed_values, uncommitted_values) self._site_variables[var_id] = new_var_obj def is_up(self): return self._status == SiteStatus.UP def fail(self): if self.is_up(): self._status = SiteStatus.DOWN self._lm.release_all_locks() def recover(self, state): if not self.is_up(): #self._load_state(state) for var_id, var_obj in self._site_variables.iteritems(): if var_obj.is_replicated(): var_obj.recover() self._status = SiteStatus.UP def write(self, transaction, variable, value): if variable in self._site_variables: self._lm.acquire_write_lock(transaction, variable) self._site_variables[variable].write(transaction, value) else: print 'Variable doesn\'t exist on site' def read(self, transaction, var_id): if var_id in self._site_variables: if self._site_variables[var_id].is_recovering(): return None if self._lm.txn_has_write_lock(transaction, var_id): return self._site_variables[var_id].read_uncommitted( transaction) else: if transaction.get_type() != TransactionType.READ_ONLY: self._lm.acquire_read_lock(transaction, var_id) return self._site_variables[var_id].read_committed(transaction) else: return None def commit(self, transaction, timestamp): for var in self._site_variables.keys(): if self._lm.txn_has_write_lock(transaction, var): self._site_variables[var].commit(timestamp) self._lm.release_all_locks(transaction) def abort(self, transaction): self._lm.release_all_locks(transaction)
def __init__(self, site_id): self._id = site_id self._status = SiteStatus.UP self._init_variables() self._lm = LockManager(self._site_variables.keys())
def __init__(self, config): self.config = config util.initLogging(config["verbose"], config.get("enable_loggers", [])) util.log("Default encoding: %s (file system: %s)" % (sys.getdefaultencoding(), sys.getfilesystemencoding())) # Evaluate configuration and set defaults _checkConfig(config) provider_mapping = self.config["provider_mapping"] # response_trailer = config.get("response_trailer", "") self._verbose = config.get("verbose", 2) lockStorage = config.get("locksmanager") if lockStorage is True: lockStorage = LockStorageDict() if not lockStorage: locksManager = None else: locksManager = LockManager(lockStorage) propsManager = config.get("propsmanager") if not propsManager: # Normalize False, 0 to None propsManager = None elif propsManager is True: propsManager = PropertyManager() mount_path = config.get("mount_path") user_mapping = self.config.get("user_mapping", {}) domainController = config.get( "domaincontroller") or WsgiDAVDomainController(user_mapping) isDefaultDC = isinstance(domainController, WsgiDAVDomainController) # authentication fields authacceptbasic = config.get("acceptbasic", True) authacceptdigest = config.get("acceptdigest", True) authdefaultdigest = config.get("defaultdigest", True) # Check configuration for NTDomainController # We don't use 'isinstance', because include would fail on non-windows boxes. wdcName = "NTDomainController" if domainController.__class__.__name__ == wdcName: if authacceptdigest or authdefaultdigest or not authacceptbasic: util.warn( "WARNING: %s requires basic authentication.\n\tSet acceptbasic=True, acceptdigest=False, defaultdigest=False" % wdcName) # Instantiate DAV resource provider objects for every share self.providerMap = {} for (share, provider) in provider_mapping.items(): # Make sure share starts with, or is, '/' share = "/" + share.strip("/") # We allow a simple string as 'provider'. In this case we interpret # it as a file system root folder that is published. if isinstance(provider, basestring): provider = FilesystemProvider(provider) assert isinstance(provider, DAVProvider) provider.setSharePath(share) if mount_path: provider.setMountPath(mount_path) # TODO: someday we may want to configure different lock/prop managers per provider provider.setLockManager(locksManager) provider.setPropManager(propsManager) self.providerMap[share] = provider if self._verbose >= 2: print "Using lock manager: %r" % locksManager print "Using property manager: %r" % propsManager print "Using domain controller: %s" % domainController print "Registered DAV providers:" for share, provider in self.providerMap.items(): hint = "" if isDefaultDC and not user_mapping.get(share): hint = " (anonymous)" print " Share '%s': %s%s" % (share, provider, hint) # If the default DC is used, emit a warning for anonymous realms if isDefaultDC and self._verbose >= 1: for share in self.providerMap: if not user_mapping.get(share): # TODO: we should only warn here, if --no-auth is not given print "WARNING: share '%s' will allow anonymous access." % share # Define WSGI application stack application = RequestResolver() if config.get("dir_browser") and config["dir_browser"].get( "enable", True): application = WsgiDavDirBrowser(application) application = HTTPAuthenticator(application, domainController, authacceptbasic, authacceptdigest, authdefaultdigest) application = ErrorPrinter(application, catchall=False) application = WsgiDavDebugFilter(application, config) self._application = application
class Site: def __init__(self, site_id): self._id = site_id self._status = SiteStatus.UP self._init_variables() self._lm = LockManager(self._site_variables.keys()) def _init_variables(self): self._site_variables = {} for i in xrange(1, 21): var_id = 'x' + str(i) # value = int('10' + str(i)) value = 10 * i if i % 2 == 0: # Even numbered variables are replicated self._site_variables[var_id] = Variable(var_id, value) elif (i + 1) % 10 == self._id: self._site_variables[var_id] = Variable(var_id, value) def get_id(self): return self._id def dump(self, var=None): if var: if var in self._site_variables: return {var: self._site_variables[var].read_committed()} print 'Variable doesn\'t exist on site' else: var_dict = {} for var, obj in self._site_variables.iteritems(): var_dict[var] = obj.read_committed() return var_dict def dump_state(self): return self._site_variables def _load_state(self, state): for var_id, var_obj in state.iteritems(): if var_id in self._site_variables: uncommitted_values = var_obj.dump_uncommitted() committed_values = var_obj.dump_committed() new_var_obj = Variable(var_id, committed_values[0]) new_var_obj.load_state(committed_values, uncommitted_values) self._site_variables[var_id] = new_var_obj def is_up(self): return self._status == SiteStatus.UP def fail(self): if self.is_up(): self._status = SiteStatus.DOWN self._lm.release_all_locks() def recover(self, state): if not self.is_up(): #self._load_state(state) for var_id, var_obj in self._site_variables.iteritems(): if var_obj.is_replicated(): var_obj.recover() self._status = SiteStatus.UP def write(self, transaction, variable, value): if variable in self._site_variables: self._lm.acquire_write_lock(transaction, variable) self._site_variables[variable].write(transaction, value) else: print 'Variable doesn\'t exist on site' def read(self, transaction, var_id): if var_id in self._site_variables: if self._site_variables[var_id].is_recovering(): return None if self._lm.txn_has_write_lock(transaction, var_id): return self._site_variables[var_id].read_uncommitted(transaction) else: if transaction.get_type() != TransactionType.READ_ONLY: self._lm.acquire_read_lock(transaction, var_id) return self._site_variables[var_id].read_committed(transaction) else: return None def commit(self, transaction, timestamp): for var in self._site_variables.keys(): if self._lm.txn_has_write_lock(transaction, var): self._site_variables[var].commit(timestamp) self._lm.release_all_locks(transaction) def abort(self, transaction): self._lm.release_all_locks(transaction)
QMessageBox.warning(None, 'Error', 'Failed to stop waypoint record!', QMessageBox.Ok) return self.ui.start_button.setEnabled(True) self.ui.stop_button.setEnabled(False) def closeEvent(self, event): self.save_ui_info() def load_ui_info(self): settings = SettingsManager(CONFIG_FILE) settings.load(self.ui.save_path_edit) def save_ui_info(self): settings = SettingsManager(CONFIG_FILE) settings.save(self.ui.save_path_edit) if __name__=='__main__': rospy.init_node('waypoint_recorder') app = QApplication(sys.argv) lock_manager = LockManager(LOCK_PATH) if not lock_manager.get_lock(): QMessageBox.warning(None, 'Warning', 'Another same process is running. If not, please delete lock file [ %s ].' % lock_manager.get_lock_path(), QMessageBox.Ok) sys.exit(1) win = WaypointRecorderDialog() win.show() ret = app.exec_() lock_manager.release_lock() sys.exit(ret)
owner = ET.tostring(owner) else: owner = '<D:owner xmlns:D="DAV:" />' return shared, owner if __name__ == '__main__': print "Unit tests" import tempfile, shutil config.root_dir = tempfile.mkdtemp(prefix = 'easydav-') testfile = os.path.join(config.root_dir, u'testfile%ä') open(testfile, 'w').write('foo') mgr = LockManager() lock = mgr.create_lock(u'testfile%ä', True, '', -1, 100) req = RequestInfo({ 'HTTP_HOST': 'example.com', 'REQUEST_URI': '/webdav.cgi/testfile%25%C3%A4', 'PATH_INFO': '/testfile%\xc3\xa4', 'HTTP_IF': '(<' + lock.urn + '>)', 'wsgi.input': None }) # When holding the lock assert req.get_request_path('r') assert req.get_request_path('w') mgr.release_lock(lock.path, lock.urn)