def test_connstring(self) -> None: """Test to provide a connstring.""" # format: "user:passwd:driver_alias@host:port/database" options = parse_options(["pineboo", "--connect", "user:[email protected]:5433/mydb"]) cfg1 = config_dbconn(options) cfg2 = ProjectConfig( database="mydb", username="******", password="******", host="127.0.0.1", port=5433, type="PostgreSQL (PSYCOPG2)", ) self.assertEqual(cfg1, cfg2) options = parse_options(["pineboo", "--connect", "mydb"]) cfg1 = config_dbconn(options) cfg2 = ProjectConfig( database="mydb", username="******", password="", host="127.0.0.1", port=5432, type="PostgreSQL (PSYCOPG2)", ) self.assertEqual(cfg1, cfg2)
def test_read_write2(self, mock_urandom: Mock, mock_time: Mock) -> None: """Test we can read and write and stays equal (slightly more complicated).""" # NOTE: urandom and time need to be mocked so hashes and ciphers always return the same value mock_urandom.side_effect = lambda n: b"1234567890123456789012345678901234567890"[: n ] mock_time.side_effect = lambda: 10000 project_test2 = fixture_read("project_test2.xml") project_test3 = fixture_read("project_test3.xml") with tempfile.TemporaryDirectory() as tmpdirname: # Verify Version 1.1 cfg = ProjectConfig( database="postgres_testdb", description="Postgres Test DB", type="PostgreSQL (PSYCOPG2)", host="192.168.1.101", port=5432, username="******", password="******", project_password="******", filename=os.path.join(tmpdirname, "test.xml"), ) cfg.SAVE_VERSION = VERSION_1_1 cfg.save_projectxml(False) self.assertEqual(open(cfg.filename).read(), project_test2) with self.assertRaises(PasswordMismatchError): ProjectConfig(load_xml=cfg.filename, project_password="******") cfg2 = ProjectConfig(load_xml=cfg.filename, project_password="******") cfg2.SAVE_VERSION = cfg2.version cfg2.save_projectxml(True) self.assertEqual(open(cfg2.filename).read(), project_test2) # Verify Version 1.2 cfg2.SAVE_VERSION = VERSION_1_2 cfg2.save_projectxml(True) # print(open(cfg2.filename).read()) self.assertEqual(open(cfg2.filename).read(), project_test3) with self.assertRaises(PasswordMismatchError): ProjectConfig(load_xml=cfg2.filename, project_password="******") cfg3 = ProjectConfig(load_xml=cfg2.filename, project_password="******") cfg3.SAVE_VERSION = VERSION_1_2 cfg3.save_projectxml(True) self.assertEqual(open(cfg3.filename).read(), project_test3)
def test_read_write(self) -> None: """Test that we can read a file, save it back, read it again and stays the same.""" project_test1 = fixture_read("project_test1.xml") with tempfile.TemporaryDirectory() as tmpdirname: cfg = ProjectConfig( database="mydb", type="SQLite3 (SQLITE3)", filename=os.path.join(tmpdirname, "test.xml"), ) cfg.SAVE_VERSION = VERSION_1_1 cfg.save_projectxml(False) self.assertEqual(open(cfg.filename).read(), project_test1) cfg2 = ProjectConfig(load_xml=cfg.filename) cfg2.SAVE_VERSION = cfg2.version cfg2.save_projectxml(True) self.assertEqual(open(cfg2.filename).read(), project_test1)
def test_project_passwd(self, mock_get_pass: Mock) -> None: """Test to provide a project template with password.""" mock_get_pass.return_value = "myhardtoguesspassword" options = parse_options(["pineboo", "--load", fixture_path("project_test2")]) cfg1 = config_dbconn(options) cfg2 = ProjectConfig( database="postgres_testdb", type="PostgreSQL (PSYCOPG2)", host="192.168.1.101", port=5432, username="******", password="******", description="Postgres Test DB", project_password="******", ) self.assertEqual(cfg1, cfg2)
def loadProfiles(self) -> None: """ Update ComboBox of profiles. """ if not os.path.exists(self.profile_dir): # os.mkdir(filedir(self.profile_dir)) return self._user_interface.cbProfiles.clear() self.profiles.clear() with os.scandir(self.profile_dir) as profile: for entry in profile: if entry.name.startswith("."): continue if not entry.name.endswith(".xml"): continue if not entry.is_file(): continue pconf = ProjectConfig( filename=os.path.join(self.profile_dir, entry.name), database="unset", type="unset", ) try: pconf.load_projectxml() except PasswordMismatchError: LOGGER.trace("Profile %r [%r] requires a password", pconf.description, entry.name) except Exception: LOGGER.exception( "Unexpected error trying to read profile %r", entry.name) continue self.profiles[pconf.description] = pconf for name in sorted(self.profiles.keys()): self._user_interface.cbProfiles.addItem(name) last_profile = settings.value("DBA/last_profile", None) if last_profile: self._user_interface.cbProfiles.setCurrentText(last_profile)
from pineboolib.loader import main from pineboolib.application.parsers import parser_qsa as qsaparser #from pineboolib.application.parsers import qsaparser from pineboolib.application.utils import path qsaparser.USE_THREADS = False def nombre_session(): return get_current_user() pineboolib_app.PROJECT.set_session_function(nombre_session) SQL_CONN = ProjectConfig(database=DATABASES["default"]["NAME"], host=DATABASES["default"]["HOST"], port=DATABASES["default"]["PORT"], type="PostgreSQL (PSYCOPG2)", username=DATABASES["default"]["USER"], password=DATABASES["default"]["PASSWORD"]) if StaticLoader: CONFIG.set_value("StaticLoader/%s/enabled" % (DATABASES["default"]["NAME"]), True) # Para activar carga estática CONFIG.set_value( "StaticLoader/%s/dirs" % DATABASES["default"]["NAME"], dirs ) # Directorios para carga estatica(Configurar en local.py, Ej: dirs = [True, "/home/modulos/api/scripts", True, "/home/modulos/libreria/scripts"]) CONFIG.set_value("ebcomportamiento/SLConsola", True) # Muestra debug por consola CONFIG.set_value("application/dbadmin_enabled", True) # para dbadmin (comprobación de mtd's) else: CONFIG.set_value(
def saveProfile(self) -> None: """ Save the connection. """ if self._user_interface.leDescription.text() == "": QtWidgets.QMessageBox.information( self._user_interface, "Pineboo", "La descripción no se puede dejar en blanco") self._user_interface.leDescription.setFocus() return if self._user_interface.leDBPassword.text( ) != self._user_interface.leDBPassword2.text(): QtWidgets.QMessageBox.information( self._user_interface, "Pineboo", "La contraseña de la BD no coincide") self._user_interface.leDBPassword.setText("") self._user_interface.leDBPassword2.setText("") return if (self._user_interface.leProfilePassword.text() != self._user_interface.leProfilePassword2.text()): QtWidgets.QMessageBox.information( self._user_interface, "Pineboo", "La contraseña del perfil no coincide") self._user_interface.leProfilePassword.setText("") self._user_interface.leProfilePassword2.setText("") return if self.edit_mode: pconf = self.getProjectConfig( self._user_interface.cbProfiles.currentText()) if pconf is None: return pconf.description = self._user_interface.leDescription.text() else: pconf = ProjectConfig( description=self._user_interface.leDescription.text(), database="unset", type="unset", ) if not os.path.exists(self.profile_dir): Path(self.profile_dir).mkdir(parents=True, exist_ok=True) if os.path.exists(pconf.filename) and not self.edit_mode: QtWidgets.QMessageBox.information(self._user_interface, "Pineboo", "El perfil ya existe") return pconf.type = self._user_interface.cbDBType.currentText() pconf.host = self._user_interface.leURL.text() pconf.port = int(self._user_interface.lePort.text()) pconf.username = self._user_interface.leDBUser.text() pconf.password = self._user_interface.leDBPassword.text() pconf.database = self._user_interface.leDBName.text() pass_profile_text = "" if not self._user_interface.cbAutoLogin.isChecked(): pass_profile_text = self._user_interface.leProfilePassword.text() pconf.project_password = pass_profile_text pconf.save_projectxml(overwrite_existing=self.edit_mode) # self.cleanProfileForm() self.loadProfiles() self._user_interface.cbProfiles.setCurrentText(pconf.description)
def test_project(self) -> None: """Test to provide a project template.""" options = parse_options(["pineboo", "--load", fixture_path("project_test1")]) cfg1 = config_dbconn(options) cfg2 = ProjectConfig(database="mydb", type="SQLite3 (SQLITE3)") self.assertEqual(cfg1, cfg2)
def test_basic(self) -> None: """Test to create projectConfig class.""" cfg = ProjectConfig(database="mydb", type="SQLite3 (SQLITE3)") self.assertTrue(cfg) self.assertEqual(cfg.SAVE_VERSION, VERSION_1_2)