def mock_doStartPrepare(self): PredictionManagerTest.request_urls.append(self.url()) query = QUrlQuery(QUrl(self.url())) query_date = query.queryItemValue('begin_date').replace(' ', 'T') query_vel_type = query.queryItemValue('vel_type') query_interval = query.queryItemValue('interval') query_station = query.queryItemValue('station') query_bin = query.queryItemValue('bin') filename = '{}_{}-{}-{}-{}.xml'.format(query_station, query_bin, query_date, query_vel_type, query_interval) self.fetcher = Mock(QgsNetworkContentFetcherTask) with open(os.path.join(os.path.dirname(__file__), 'data', filename), 'r') as dataFile: self.content = dataFile.read()
def __init__(self, uri='', providerOptions=QgsDataProvider.ProviderOptions()): """ :param uri: <app>.<model>[?geofield=<name>] :param providerOptions: """ super().__init__(uri) self._is_valid = False self.setNativeTypes(( # TODO QgsVectorDataProvider.NativeType('Integer', 'integer', QVariant.Int, -1, -1, 0, 0), QgsVectorDataProvider.NativeType('Text', 'text', QVariant.String, -1, -1, -1, -1), )) self._uri = uri url = QUrl(uri) url_query = QUrlQuery(url) self._full_model_name = url.path() self._app_label, self._model_name = self._full_model_name.split('.') self._model = apps.get_model(self._app_label, self._model_name) # Django model self._meta = self._model._meta self._qgis_fields = QgsFields() self._django_fields = [] # Django fields represented by provider in the same order as QgsFields for django_field in self._meta.get_fields(): # TODO: more field types qgis_field = self._get_qgis_field_from_django_field(django_field) if qgis_field: self._qgis_fields.append(qgis_field) self._django_fields.append(django_field) self._geo_field_name = url_query.queryItemValue('geofield') self._geo_field = None # Django geometry field if self._geo_field_name: self._meta.get_field(self._geo_field_name) else: # If geometry field was not specified in uri, use the first one if any. for field in self._meta.get_fields(): if isinstance(field, models.GeometryField): self._geo_field = field self._geo_field_name = field.name break self._wkbType = QgsWkbTypes.NoGeometry if self._geo_field: for geo_field_class in wkb_types.keys(): if isinstance(self._geo_field, geo_field_class): self._wkbType = wkb_types[geo_field_class] break self._extent = QgsRectangle() self._crs = None if self._geo_field: self._crs = QgsCoordinateReferenceSystem.fromEpsgId(self._geo_field.srid) self._provider_options = providerOptions self._is_valid = True