Example #1
0
def webpage(qnam):
    """Get a new QWebPage object."""
    from PyQt5.QtWebKitWidgets import QWebPage

    page = QWebPage()
    page.networkAccessManager().deleteLater()
    page.setNetworkAccessManager(qnam)
    return page
Example #2
0
def webpage(qnam):
    """Get a new QWebPage object."""
    from PyQt5.QtWebKitWidgets import QWebPage

    page = QWebPage()
    page.networkAccessManager().deleteLater()
    page.setNetworkAccessManager(qnam)
    return page
Example #3
0
class Browser(object):

    def __init__(self):
        self.network_manager = QNetworkAccessManager()
        self.network_manager.createRequest = self._create_request
        self.network_manager.finished.connect(self._request_finished)

        self.web_page = QWebPage()
        self.web_page.setNetworkAccessManager(self.network_manager)

        self.web_view = QWebView()
        self.web_view.setPage(self.web_page)

    def _create_request(self, operation, request, data):
        print(data.readAll())
        reply = QNetworkAccessManager.createRequest(self.network_manager,
                                                    operation,
                                                    request,
                                                    data)
        return reply

    def _request_finished(self, reply):
        if not reply.error() == QNetworkReply.NoError:
            # request probably failed
            print(reply.error())
            print(reply.errorString())

    def _make_request(self, url):
        request = QNetworkRequest()
        request.setUrl(QUrl(url))
        return request

    def _urlencode_post_data(self, post_data):
        post_params = QUrl()
        for (key, value) in post_data.items():
            post_params.addQueryItem(key, value)

        return post_params.encodedQuery()

    def perform(self, url, method='GET', post_data=dict()):
        request = self._make_request(url)

        if method == 'GET':
            self.web_view.load(request)
        else:
            encoded_data = self._urlencode_post_data(post_data)
            request.setRawHeader('Content-Type',
                                 QByteArray('application/x-www-form-urlencoded'))
            self.web_view.load(request,
                               QNetworkAccessManager.PostOperation,
                               encoded_data)
Example #4
0
class Browser(object):
    def __init__(self):
        self.network_manager = QNetworkAccessManager()
        self.network_manager.createRequest = self._create_request
        self.network_manager.finished.connect(self._request_finished)

        self.web_page = QWebPage()
        self.web_page.setNetworkAccessManager(self.network_manager)

        self.web_view = QWebView()
        self.web_view.setPage(self.web_page)

    def _create_request(self, operation, request, data):
        print(data.readAll())
        reply = QNetworkAccessManager.createRequest(self.network_manager,
                                                    operation, request, data)
        return reply

    def _request_finished(self, reply):
        if not reply.error() == QNetworkReply.NoError:
            # request probably failed
            print(reply.error())
            print(reply.errorString())

    def _make_request(self, url):
        request = QNetworkRequest()
        request.setUrl(QUrl(url))
        return request

    def _urlencode_post_data(self, post_data):
        post_params = QUrl()
        for (key, value) in post_data.items():
            post_params.addQueryItem(key, value)

        return post_params.encodedQuery()

    def perform(self, url, method='GET', post_data=dict()):
        request = self._make_request(url)

        if method == 'GET':
            self.web_view.load(request)
        else:
            encoded_data = self._urlencode_post_data(post_data)
            request.setRawHeader(
                'Content-Type',
                QByteArray('application/x-www-form-urlencoded'))
            self.web_view.load(request, QNetworkAccessManager.PostOperation,
                               encoded_data)
Example #5
0
class GISCloudQgisWebBrowserDialog(QDialog):
    """Web browser used for Google/Facebook SSO"""
    def __init__(self, parent, size, url):
        super(GISCloudQgisWebBrowserDialog,
              self).__init__(parent.manager.main_widget)
        self.parent = parent
        self.setModal(True)

        self.cookies = None
        self.url = QUrl(url)
        self.nam = QtNetwork.QNetworkAccessManager()

        self.web_page = QWebPage()
        self.web_page.setNetworkAccessManager(self.nam)
        self.web_page.loadFinished.connect(self.loading_finished)

        def customuseragent(url):
            """setting up our own user agent"""
            # pylint: disable=W0613
            return ("Mozilla/5.0 " + GISCloudNetworkHandler.app_id.encode(
                "unicode_escape").decode("latin-1"))

        self.web_page.userAgentForUrl = customuseragent

        self.web_view = QWebView(self)
        self.web_view.setPage(self.web_page)

        self.resize(size)

    def resizeEvent(self, event):
        """As we resize dialog, we should resize browser as well"""
        # pylint: disable=C0103
        QDialog.resizeEvent(self, event)
        self.web_view.resize(self.size())

    def showEvent(self, event):
        """Loading URL once dialog has shown, also reseting cookie jar"""
        # pylint: disable=C0103
        QDialog.showEvent(self, event)
        self.cookies = QtNetwork.QNetworkCookieJar()
        self.nam.setCookieJar(self.cookies)
        self.web_view.load(self.url)

    def hideEvent(self, event):
        """Once dialog has closed, cleaning up cookie-jar"""
        # pylint: disable=C0103
        self.cookies = QtNetwork.QNetworkCookieJar()
        self.nam.setCookieJar(self.cookies)
        QDialog.hideEvent(self, event)

    def loading_finished(self, finished_ok):
        """This method retrieves session id and passes it on for login """
        # pylint: disable=W0613
        url = self.web_view.url().toString()
        url = url.split("/auth/get_session#")
        if len(url) != 2:
            return

        if url[1]:
            self.parent.api.user.session = url[1]
        else:
            # for some reason # params can be truncated
            # so fallbacking to find session in cookies
            for cookie in self.cookies.allCookies():
                if cookie.domain() == "editor.giscloud.com" and \
                   cookie.name() == "PHPSESSID":
                    self.parent.api.user.session = \
                        cookie.value().data().decode("utf-8")
                    break
        self.parent.web_browser.hide()
        self.parent.login()
Example #6
0
class PageThumbnailer(QObject):
    """
    Class implementing a thumbnail creator for web sites.
    
    @signal thumbnailCreated(QPixmap) emitted after the thumbnail has been
        created
    """
    thumbnailCreated = pyqtSignal(QPixmap)
    
    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent object (QObject)
        """
        super(PageThumbnailer, self).__init__(parent)
        
        self.__page = QWebPage(self)
        self.__size = QSize(231, 130)
        self.__loadTitle = False
        self.__title = ""
        self.__url = QUrl()
        
        self.__proxy = NetworkAccessManagerProxy(self)
        import Helpviewer.HelpWindow
        self.__proxy.setPrimaryNetworkAccessManager(
            Helpviewer.HelpWindow.HelpWindow.networkAccessManager())
        self.__page.setNetworkAccessManager(self.__proxy)
        
        self.__page.mainFrame().setScrollBarPolicy(
            Qt.Horizontal, Qt.ScrollBarAlwaysOff)
        self.__page.mainFrame().setScrollBarPolicy(
            Qt.Vertical, Qt.ScrollBarAlwaysOff)
        
        # Full HD
        # Every page should fit in this resolution
        self.__page.setViewportSize(QSize(1920, 1080))
    
    def setSize(self, size):
        """
        Public method to set the size of the image.
        
        @param size size of the image (QSize)
        """
        if size.isValid():
            self.__size = QSize(size)
    
    def setUrl(self, url):
        """
        Public method to set the URL of the site to be thumbnailed.
        
        @param url URL of the web site (QUrl)
        """
        if url.isValid():
            self.__url = QUrl(url)
    
    def url(self):
        """
        Public method to get the URL of the thumbnail.
        
        @return URL of the thumbnail (QUrl)
        """
        return QUrl(self.__url)
    
    def loadTitle(self):
        """
        Public method to check, if the title is loaded from the web site.
        
        @return flag indicating, that the title is loaded (boolean)
        """
        return self.__loadTitle
    
    def setLoadTitle(self, load):
        """
        Public method to set a flag indicating to load the title from
        the web site.
        
        @param load flag indicating to load the title (boolean)
        """
        self.__loadTitle = load
    
    def title(self):
        """
        Public method to get the title of the thumbnail.
        
        @return title of the thumbnail (string)
        """
        return self.__title
    
    def start(self):
        """
        Public method to start the thumbnailing action.
        """
        self.__page.loadFinished.connect(self.__createThumbnail)
        self.__page.mainFrame().load(self.__url)
    
    def __createThumbnail(self, status):
        """
        Private slot creating the thumbnail of the web site.
        
        @param status flag indicating a successful load of the web site
            (boolean)
        """
        if not status:
            self.thumbnailCreated.emit(QPixmap())
            return
        
        self.__title = self.__page.mainFrame().title()
        
        image = QImage(self.__page.viewportSize(), QImage.Format_ARGB32)
        painter = QPainter(image)
        self.__page.mainFrame().render(painter)
        painter.end()
        
        scaledImage = image.scaled(self.__size,
                                   Qt.KeepAspectRatioByExpanding,
                                   Qt.SmoothTransformation)
        
        self.thumbnailCreated.emit(QPixmap.fromImage(scaledImage))
Example #7
0
class PageThumbnailer(QObject):
    """
    Class implementing a thumbnail creator for web sites.
    
    @signal thumbnailCreated(QPixmap) emitted after the thumbnail has been
        created
    """
    thumbnailCreated = pyqtSignal(QPixmap)

    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent object (QObject)
        """
        super(PageThumbnailer, self).__init__(parent)

        self.__page = QWebPage(self)
        self.__size = QSize(231, 130)
        self.__loadTitle = False
        self.__title = ""
        self.__url = QUrl()

        self.__proxy = NetworkAccessManagerProxy(self)
        import Helpviewer.HelpWindow
        self.__proxy.setPrimaryNetworkAccessManager(
            Helpviewer.HelpWindow.HelpWindow.networkAccessManager())
        self.__page.setNetworkAccessManager(self.__proxy)

        self.__page.mainFrame().setScrollBarPolicy(Qt.Horizontal,
                                                   Qt.ScrollBarAlwaysOff)
        self.__page.mainFrame().setScrollBarPolicy(Qt.Vertical,
                                                   Qt.ScrollBarAlwaysOff)

        # Full HD
        # Every page should fit in this resolution
        self.__page.setViewportSize(QSize(1920, 1080))

    def setSize(self, size):
        """
        Public method to set the size of the image.
        
        @param size size of the image (QSize)
        """
        if size.isValid():
            self.__size = QSize(size)

    def setUrl(self, url):
        """
        Public method to set the URL of the site to be thumbnailed.
        
        @param url URL of the web site (QUrl)
        """
        if url.isValid():
            self.__url = QUrl(url)

    def url(self):
        """
        Public method to get the URL of the thumbnail.
        
        @return URL of the thumbnail (QUrl)
        """
        return QUrl(self.__url)

    def loadTitle(self):
        """
        Public method to check, if the title is loaded from the web site.
        
        @return flag indicating, that the title is loaded (boolean)
        """
        return self.__loadTitle

    def setLoadTitle(self, load):
        """
        Public method to set a flag indicating to load the title from
        the web site.
        
        @param load flag indicating to load the title (boolean)
        """
        self.__loadTitle = load

    def title(self):
        """
        Public method to get the title of the thumbnail.
        
        @return title of the thumbnail (string)
        """
        return self.__title

    def start(self):
        """
        Public method to start the thumbnailing action.
        """
        self.__page.loadFinished.connect(self.__createThumbnail)
        self.__page.mainFrame().load(self.__url)

    def __createThumbnail(self, status):
        """
        Private slot creating the thumbnail of the web site.
        
        @param status flag indicating a successful load of the web site
            (boolean)
        """
        if not status:
            self.thumbnailCreated.emit(QPixmap())
            return

        self.__title = self.__page.mainFrame().title()

        image = QImage(self.__page.viewportSize(), QImage.Format_ARGB32)
        painter = QPainter(image)
        self.__page.mainFrame().render(painter)
        painter.end()

        scaledImage = image.scaled(self.__size, Qt.KeepAspectRatioByExpanding,
                                   Qt.SmoothTransformation)

        self.thumbnailCreated.emit(QPixmap.fromImage(scaledImage))