Beispiel #1
0
    def get_connection(self) -> AlchemyConnection:
        """
        Builds an AlchemyConnection as described by the user
        in the line edits/combo boxes.
        :return:
        """
        con_name = self.lineEditConnectionName.text()
        db_type = self.comboBoxDatabaseType.currentText()
        uri = self.lineEditConnectionURL.text()
        if db_type == 'sqlite' and uri == '':
            uri = self.lineEditHost.text()

        a = AlchemyConnection(name=con_name)

        if uri is '':
            port = self.lineEditPort.text()
            host = self.lineEditHost.text()
            username = self.lineEditUsername.text()
            password = self.lineEditPassword.text()
            database = self.lineEditDefaultDatabase.text()
            db_api = self.comboBoxDatabaseAPI.currentText()
            DATABASE = {
                'drivername': "{}+{}".format(db_type, db_api),
                'host': host or None,
                'port': port or None,
                'username': username or None,
                'password': password or None,
                'database': database or None
            }
            try:
                __import__(db_api)
            except ImportError:
                logging.error(
                    "Unable to import DBAPI: {} - you need to pip install it.".
                    format(db_api))
                DATABASE['drivername'] = db_type
            uri = URL(**DATABASE)

        else:
            if db_type == 'sqlite' and not uri.startswith('sqlite'):
                uri = uri.replace("\\", "/").replace("//",
                                                     "/").replace("/", "\\\\")
                uri = URL('sqlite', database=uri)
        a.configure_from_url(uri)
        return a
Beispiel #2
0
def check_sqlalchemy_uri(uri: URL) -> None:
    if uri.startswith("sqlite"):
        # sqlite creates a local DB, which allows mapping server's filesystem
        raise DBSecurityException(
            "SQLite database cannot be used as a data source for security reasons."
        )