Esempio n. 1
0
    def _make_download(self, url, destination, cancel=False):
        self.completed_was_called = False
        self.error_was_called = False
        self.canceled_was_called = False
        self.progress_was_called = False
        self.exited_was_called = False

        loop = QEventLoop()

        downloader = QgsFileDownloader(QUrl(url), destination, False)
        downloader.downloadCompleted.connect(
            partial(self._set_slot, 'completed'))
        downloader.downloadExited.connect(partial(self._set_slot, 'exited'))
        downloader.downloadCanceled.connect(partial(self._set_slot,
                                                    'canceled'))
        downloader.downloadError.connect(partial(self._set_slot, 'error'))
        downloader.downloadProgress.connect(partial(self._set_slot,
                                                    'progress'))

        downloader.downloadExited.connect(loop.quit)

        if cancel:
            downloader.downloadProgress.connect(downloader.onDownloadCanceled)

        loop.exec_()
    def testInvalidAuthFileDownload(self):
        """
        Download a protected map tile without authcfg
        """
        qs = "?" + "&".join(["%s=%s" % i for i in list({
            "MAP": urllib.parse.quote(self.project_path),
            "SERVICE": "WMS",
            "VERSION": "1.1.1",
            "REQUEST": "GetMap",
            "LAYERS": "testlayer_èé".replace('_', '%20'),
            "STYLES": "",
            "FORMAT": "image/png",
            "BBOX": "-16817707,-4710778,5696513,14587125",
            "HEIGHT": "500",
            "WIDTH": "500",
            "CRS": "EPSG:3857"
        }.items())])
        url = '%s://%s:%s/%s' % (self.protocol, self.hostname, self.port, qs)

        destination = tempfile.mktemp()
        loop = QEventLoop()

        downloader = QgsFileDownloader(QUrl(url), destination, False)
        downloader.downloadCompleted.connect(partial(self._set_slot, 'completed'))
        downloader.downloadExited.connect(partial(self._set_slot, 'exited'))
        downloader.downloadCanceled.connect(partial(self._set_slot, 'canceled'))
        downloader.downloadError.connect(partial(self._set_slot, 'error'))
        downloader.downloadProgress.connect(partial(self._set_slot, 'progress'))

        downloader.downloadExited.connect(loop.quit)

        loop.exec_()

        self.assertTrue(self.error_was_called)
        self.assertTrue("Download failed: Host requires authentication" in str(self.error_args), "Error args is: %s" % str(self.error_args))
Esempio n. 3
0
    def testValidAuthFileDownload(self):
        """
        Download a map tile with valid authcfg
        """
        qs = "?" + "&".join([
            "%s=%s" % i
            for i in list({
                "MAP": urllib.parse.quote(self.project_path),
                "SERVICE": "WMS",
                "VERSION": "1.1.1",
                "REQUEST": "GetMap",
                "LAYERS": "testlayer_èé".replace('_', '%20'),
                "STYLES": "",
                "FORMAT": "image/png",
                "BBOX": "-16817707,-4710778,5696513,14587125",
                "HEIGHT": "500",
                "WIDTH": "500",
                "CRS": "EPSG:3857"
            }.items())
        ])
        url = '%s://%s:%s/%s' % (self.protocol, self.hostname, self.port, qs)

        destination = tempfile.mktemp()
        loop = QEventLoop()

        downloader = QgsFileDownloader(QUrl(url), destination, False,
                                       self.auth_config.id())
        downloader.downloadCompleted.connect(
            partial(self._set_slot, 'completed'))
        downloader.downloadExited.connect(partial(self._set_slot, 'exited'))
        downloader.downloadCanceled.connect(partial(self._set_slot,
                                                    'canceled'))
        downloader.downloadError.connect(partial(self._set_slot, 'error'))
        downloader.downloadProgress.connect(partial(self._set_slot,
                                                    'progress'))

        downloader.downloadExited.connect(loop.quit)

        loop.exec_()

        # Check the we've got a likely PNG image
        self.assertTrue(self.completed_was_called)
        self.assertTrue(
            os.path.getsize(destination) > 700000,
            "Image size: %s" % os.path.getsize(destination))  # > 1MB
        with open(destination, 'rb') as f:
            self.assertTrue(b'PNG' in f.read())  # is a PNG
Esempio n. 4
0
def get_available_maps(maps_uri):
    """Fetch the list of available and QGIS supported maps from BCS endpoint,
    apparently this API method does not require auth"""
    # For testing purposes, we can also access to a json file directly
    if not maps_uri.startswith('http'):
        j = json.load(open(maps_uri))
    else:
        t = mktemp()
        q = QgsFileDownloader(QUrl(maps_uri), t)
        loop = QEventLoop()
        q.downloadExited.connect(loop.quit)
        loop.exec_()
        if not os.path.isfile(t):
            return []
        with open(t) as f:
            j = json.load(f)
        os.unlink(t)
    return [l for l in j if layer_is_supported(l)]
Esempio n. 5
0
def get_available_providers(providers_uri):
    """Fetch the list of available providers from BCS endpoint,
    apparently this API method does not require auth"""
    # For testing purposes, we can also access to a json file directly
    if not providers_uri.startswith('http'):
        try:
            j = json.load(open(providers_uri, encoding='utf-8'))
        except:
            j = json.load(open(providers_uri))
    else:
        t = mktemp()
        q = QgsFileDownloader(QUrl(providers_uri), t)
        loop = QEventLoop()
        q.downloadExited.connect(loop.quit)
        loop.exec_()
        if not os.path.isfile(t):
            return []
        with open(t) as f:
            j = json.load(f)
        os.unlink(t)
    return j