예제 #1
0
    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)
예제 #2
0
 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)
예제 #3
0
    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)
예제 #4
0
 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)
예제 #5
0
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(
예제 #6
0
    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)
예제 #7
0
 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)
예제 #8
0
    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)
예제 #9
0
 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)