def create_func(fname): """File creation callback""" if osp.splitext(fname)[1] in ('.py', '.pyw', '.ipy'): create_script(fname) else: with open(fname, 'wb') as f: f.write(to_binary_string(''))
def create_new_folder(self, current_path, title, subtitle, is_package): """Create new folder""" if current_path is None: current_path = '' if osp.isfile(current_path): current_path = osp.dirname(current_path) name, valid = QInputDialog.getText(self, title, subtitle, QLineEdit.Normal, "") if valid: dirname = osp.join(current_path, to_text_string(name)) try: os.mkdir(dirname) except EnvironmentError as error: QMessageBox.critical( self, title, _("<b>Unable " "to create folder <i>%s</i></b>" "<br><br>Error message:<br>%s") % (dirname, to_text_string(error))) finally: if is_package: fname = osp.join(dirname, '__init__.py') try: with open(fname, 'wb') as f: f.write(to_binary_string('#')) return dirname except EnvironmentError as error: QMessageBox.critical( self, title, _("<b>Unable " "to create file <i>%s</i></b>" "<br><br>Error message:<br>%s") % (fname, to_text_string(error)))
def _install_deb_dependencies(worker, output, error): cmd = ['sudo', '-kS', 'apt-get', 'install', '-f'] worker = wm.create_process_worker(cmd) worker.sig_partial.connect(dummy_worker.sig_partial) worker.sig_finished.connect(_install_extensions) worker.sig_partial.emit( dummy_worker, {'message': 'Installing dependencies...'}, None, ) worker.start() stdin = to_binary_string(password + '\n') worker.write(stdin)
def accept2(self): """Handle accept.""" stdin = to_binary_string(self.password + '\n') if self.worker is not None: self.worker.terminate() self.worker = self.wm.create_process_worker(['sudo', '-kS', 'ls']) self.worker.sig_partial.connect(self._output) self.worker.sig_finished.connect(self._output) self._valid = False self._timer.start() self.worker.start() self.worker.write(stdin) self.lineedit.setEnabled(False) self.button_ok.setEnabled(False)
def _update_rpm_manager(worker, output, error): logger.debug('update rpm manager') if is_opensuse: cmd = ['sudo', '-kS', 'zypper', 'refresh'] elif LINUX_DNF: cmd = ['dnf', 'check-update'] else: cmd = ['yum', 'check-update'] logger.debug(' '.join(cmd)) worker = wm.create_process_worker(cmd) worker.sig_partial.connect(dummy_worker.sig_partial) worker.sig_finished.connect(_install_rpm_package) worker.sig_partial.emit( dummy_worker, {'message': 'Updating manager...'}, None, ) worker.start() if is_opensuse: stdin = to_binary_string(password + '\n') worker.write(stdin)
def _install_rpm_repodata(worker, output, error): logger.debug('install rpm repodata') distro = 'opensuse' if is_opensuse else 'fedora' cmd = [ 'sudo', '-kS', sys.executable, scripts.INSTALL_SCRIPT, distro, ] logger.debug(' '.join(cmd)) worker = wm.create_process_worker(cmd) worker.sig_partial.connect(dummy_worker.sig_partial) worker.sig_finished.connect(_update_rpm_manager) worker.sig_partial.emit( dummy_worker, {'message': 'Installing repodata...'}, None, ) worker.start() stdin = to_binary_string(password + '\n') worker.write(stdin)
def create_new_folder(self, current_path, title, subtitle, is_package): """Create new folder.""" if current_path is None: current_path = '' if osp.isfile(current_path): current_path = osp.dirname(current_path) dlg = InputDialog(title=title, text=subtitle, value='') if dlg.exec_(): name = dlg.text.text() dirname = osp.join(current_path, to_text_string(name)) try: os.mkdir(dirname) except EnvironmentError as error: msg_box = MessageBoxError( text="<b>Unable " "to create folder <i>%s</i></b>" "<br><br>Error message:<br>%s" % (dirname, to_text_string(error)), title=title, ) msg_box.exec_() finally: if is_package: fname = osp.join(dirname, '__init__.py') try: with open(fname, 'wb') as f: f.write(to_binary_string('#')) return dirname except EnvironmentError as error: msg_box = MessageBoxError( text="<b>Unable " "to create file <i>%s</i></b>" "<br><br>Error message:<br>%s" % (fname, to_text_string(error)), title=title, ) msg_box.exec_()
def _install_rpm_package(worker, output, error): logger.debug('install rpm package') if is_opensuse: cmd = [ 'sudo', '-kS', 'zypper', '--non-interactive', 'install', 'code' ] elif LINUX_DNF: cmd = ['sudo', '-kS', 'dnf', '--assumeyes', 'install', 'code'] else: cmd = ['sudo', '-kS', 'yum', '--assumeyes', 'install', 'code'] logger.debug(' '.join(cmd)) worker = wm.create_process_worker(cmd) worker.sig_partial.connect(dummy_worker.sig_partial) worker.sig_finished.connect(_install_extensions) worker.sig_partial.emit( dummy_worker, {'message': 'Installing rpm package...'}, None, ) worker.start() stdin = to_binary_string(password + '\n') worker.write(stdin)
def remove(self, password=None): logger.debug('Removing app') wm = self._process_api dummy_worker = DummyWorker() locations = [] uninstall_cmd = [] is_opensuse = 'opensuse' in self._DISTRO_NAME is_deb = self._DISTRO_NAME in ['ubuntu', 'debian'] is_rpm = self._DISTRO_NAME in ['centos', 'rhel', 'fedora'] if MAC: locations = [self._INST_DIR] elif WIN: locations = [self._INST_DIR] uninstaller_path = os.path.join( self._INST_DIR, self.win_uninstaller(), ) if ' ' in uninstaller_path: uninstaller_path = '"' + uninstaller_path + '"' command = [uninstaller_path] # Create temp batch file and run that cmd = ' '.join(command) bat_path = os.path.join(CONF_PATH, 'temp', 'app-uninstall.bat') base_temp_path = os.path.dirname(bat_path) if not os.path.isdir(base_temp_path): os.makedirs(base_temp_path) mode = 'w' if PY3 else 'wb' with io.open(bat_path, mode) as f: f.write(cmd) uninstall_cmd = [bat_path] elif LINUX: if LINUX_DEB and is_deb: uninstall_cmd = [ 'sudo', '-kS', 'apt-get', '--yes', 'remove', 'code', ] elif LINUX_RPM and is_rpm: if is_opensuse: uninstall_cmd = [ 'sudo', '-kS', 'zypper', '--non-interactive', 'remove', 'code', ] elif LINUX_DNF: uninstall_cmd = [ 'sudo', '-kS', 'dnf', '--assumeyes', 'remove', 'code', ] else: uninstall_cmd = [ 'sudo', '-kS', 'yum', '--assumeyes', 'remove', 'code', ] def _remove_locations(locations, dummy_worker): """Remove location.""" for location in locations: if os.path.isdir(location): logger.debug('Removing location: {}'.format(location)) try: shutil.rmtree(location) except Exception as e: logger.debug(e) # Wait and check the folder has been indeed removed dummy_worker.sig_finished.emit(dummy_worker, {}, None) return locations def _uninstall_finished(worker, output, error): """Remove location callback.""" new_worker = wm.create_python_worker( _remove_locations, locations, dummy_worker, ) new_worker.sig_partial.connect(dummy_worker.sig_partial) new_worker.sig_finished.connect(_finished) new_worker.start() def _finished(worker, output, error): # Check uninstall log! log_data = self.log_data() if error or not log_data['successful']: out = {'error': error} else: out = output dummy_worker.sig_finished.emit(dummy_worker, out, None) if uninstall_cmd: logger.debug(' '.join(uninstall_cmd)) worker = wm.create_process_worker(uninstall_cmd) worker.sig_partial.connect(dummy_worker.sig_partial) worker.sig_finished.connect(_uninstall_finished) worker.start() if LINUX: if password: stdin = to_binary_string(password + '\n') worker.write(stdin) else: _uninstall_finished(dummy_worker, None, None) else: _uninstall_finished(dummy_worker, None, None) return dummy_worker
def _download_finished(worker, output, error): """Download callback.""" logger.debug('Finished App download') if error: dummy_worker.sig_finished.emit(dummy_worker, output, error) return if MAC: try: os.makedirs(self._INST_DIR) except OSError as e: if e.errno != errno.EEXIST: logger.error(e) logger.debug('Decompressing app application') # Unzip using Mac defalut command/application command = [ '/usr/bin/unzip', '-qo', self._INSTFILE, '-d', self._INST_DIR, ] worker = wm.create_process_worker(command) worker.sig_partial.connect(dummy_worker.sig_partial) worker.sig_partial.emit( dummy_worker, {'message': 'Uncompressing file...'}, None, ) worker.sig_finished.connect(_install_extensions) worker.start() elif WIN: # Run windows installer silently # When quotes are used with START the first param is the title # that is why we add an empty string and then the actual # executable after the /WAIT. The quotes are for users with # spaces command = [ 'START', '/WAIT', '""', '"{}"'.format(self._INSTFILE), '/VERYSILENT', '/MERGETASKS=!runcode', '/SUPPRESSMSGBOXES', '/NORESTART', '/LOG="{}"'.format(self.log_path(delete=True)), '/DIR="{0}\\"'.format(self._INST_DIR), ] # Create temp batch file and run that cmd = u' '.join(command) # The u'... is important on py27! logger.debug(cmd) bat_path = os.path.join( CONF_PATH, 'temp', 'app-install.bat', ) base_temp_path = os.path.dirname(bat_path) if not os.path.isdir(base_temp_path): os.makedirs(base_temp_path) with io.open(bat_path, 'w') as f: f.write(cmd) worker = wm.create_process_worker([bat_path]) worker.sig_partial.connect(dummy_worker.sig_partial) worker.sig_finished.connect(_install_extensions) worker.start() elif LINUX: # See: https://code.visualstudio.com/docs/setup/linux if LINUX_DEB and is_deb: cmd = ['sudo', '-kS', 'dpkg', '-i', self._INSTFILE] worker = wm.create_process_worker(cmd) worker.sig_partial.connect(dummy_worker.sig_partial) worker.sig_finished.connect(_install_deb_dependencies) worker.start() stdin = to_binary_string(password + '\n') worker.write(stdin) elif LINUX_RPM and is_rpm: # Add key cmd = [ 'sudo', '-kS', 'rpm', '--import', self.rpm_asc_file_url ] worker = wm.create_process_worker(cmd) worker.sig_partial.connect(dummy_worker.sig_partial) worker.sig_finished.connect(_install_rpm_repodata) worker.start() stdin = to_binary_string(password + '\n') worker.write(stdin) else: dummy_worker.sig_finished.emit(dummy_worker, None, None)