def delete_test_shapefile(self):
        #-----------------------------------------------------------
        msgt("--- Delete Test Shapefile used for Classification Test ---")
        #-----------------------------------------------------------

        api_prep_form = CheckForExistingLayerForm(self.dataverse_test_info)
        self.assertTrue(api_prep_form.is_valid()\
                        , "Error.  Validation failed. (CheckForExistingLayerForm):\n%s" % api_prep_form.errors)

        data_params = api_prep_form.cleaned_data

        msgt('Delete params {0}'.format(data_params))

        try:
            r = requests.post(self.delete_dataverse_layer_url,
                              data=data_params,
                              auth=self.get_creds_for_http_basic_auth(),
                              timeout=5)
        except requests.exceptions.ConnectionError as e:
            msgx('Connection error: %s' % e.message)
            return
        except:
            msgx("Unexpected error: %s" % sys.exc_info()[0])
            return
        msg(r.text)
        msg(r.status_code)

        self.assertEqual(
            r.status_code, 200,
            "Expected status code 200 but received '%s'" % r.status_code)
    def test_workflow_04(self):
        msgt('(4) Try with HttpRequest - GET')

        msg('(a) Try form with HttpRequest object')
        h = HttpRequest()
        h.GET = self.expected_params

        f1 = CheckForExistingLayerForm(h.GET)
        self.assertEqual(f1.is_valid(), True)

        msg('(b) Try signature validity check - break assertion by sending dict, not HttpRequest')
        self.assertRaises(AssertionError, f1.is_signature_valid_check_get, h.GET)


        msg('(c) Try signature check with invalid data--no signature key')
        h_bad_data = HttpRequest()
        h_bad_data.GET = self.test_data 
        self.assertEqual(f1.is_signature_valid_check_get(h_bad_data), False)

        msg('(d) Try signature check with invalid data--bad signature key')
        h_bad_data2 = HttpRequest()
        h_bad_data2.GET = self.expected_params_bad_signature
        self.assertEqual(f1.is_signature_valid_check_get(h_bad_data2), False)

        msg('(e) Try signature check with valid data')
        self.assertEqual(f1.is_signature_valid_check_get(h), True)

        msg('(f) cleaned data.')
        self.assertEqual(f1.cleaned_data, self.expected_clean_data)
    def test_workflow_02(self):
    
        msgt('(2) Generate params for API call')
        
        f1 = CheckForExistingLayerForm(self.test_data)
        self.assertEqual(f1.is_valid(), True)
        

        msg('(a) Generate API call params')        
        self.assertEqual(f1.get_api_params_with_signature(), self.expected_params)

        msg('(b) Validate params in fresh form')
        f2 = CheckForExistingLayerForm(self.expected_params)
        self.assertEqual(f2.is_valid(), True)

        msg('(c) Check signature validity.  Signature length too short')
        self.assertEqual(f2.is_signature_valid_check_val('signature - not long - enough')\
                        , False)

        msg('(d) Check signature validity.  Break assertion: signature is None')
        self.assertRaises(AssertionError, f2.is_signature_valid_check_val, None)
        
        msg('(e) Check signature validity.  Wrong signature')
        signature_str = '12345' * 11 
        self.assertEqual(f2.is_signature_valid_check_val(signature_str), False)
        
        msg('(f) Correct signature.')
        signature_str = '12345' * 11 
        self.assertEqual(f2.is_signature_valid_check_val(f1.get_api_signature()), True)

        msg('(g) cleaned data.')
        self.assertEqual(f2.cleaned_data, self.expected_clean_data)
示例#4
0
文件: models.py 项目: IQSS/geoconnect
    def get_params_to_check_for_existing_layer_metadata(self):
        """Return dict of params used to check WorldMap
        for existing layer metadata"""

        gis_data_info = self.get_gis_data_info()
        assert gis_data_info is not None, "gis_data_info cannot be None"

        f = CheckForExistingLayerForm(gis_data_info.__dict__)
        if not f.is_valid():
            raise forms.ValidationError(\
                'CheckForExistingLayerForm params did not validate: %s'\
                 % f.errors)

        return f.cleaned_data
示例#5
0
    def test_06_good_delete_geotiff_from_worldmap(self):

        #-----------------------------------------------------------
        msgn("(6a) Send GeoTIFF delete request - Good parameters")
        #-----------------------------------------------------------
        api_prep_form = CheckForExistingLayerForm(self.geotiff_test_info)
        self.assertTrue(api_prep_form.is_valid()\
                        , "Error.  Validation failed. (CheckForExistingLayerForm):\n%s" % api_prep_form.errors)

        data_params = api_prep_form.cleaned_data

        try:
            r = requests.post(self.delete_dataverse_layer_url,
                              data=data_params,
                              auth=self.get_creds_for_http_basic_auth())
        except requests.exceptions.ConnectionError as e:
            msgx('Connection error: %s' % e.message)
        except:
            msgx("Unexpected error: %s" % sys.exc_info()[0])

        self.assertEqual(
            r.status_code, 200,
            "Expected status code 200 but received '%s'" % r.status_code)

        msg(r.status_code)
        msg(r.text)

        #-----------------------------------------------------------
        msgn("(6b) Examine JSON result from WorldMap GeoTIFF delete API")
        #-----------------------------------------------------------
        try:
            json_resp = r.json()
        except:
            self.assertTrue(
                False,
                "Failed to convert response to JSON. Received: %s" % r.text)

        msg(r.status_code)

        #   Expect 'success' key to be True
        #
        self.assertTrue(
            json_resp.has_key('success'),
            'JSON should have key "success".  But found keys: %s' %
            json_resp.keys())
        self.assertEqual(json_resp.get('success'), True,
                         "'success' value should be 'True'")
        expected_msg = "Layer deleted"
        self.assertEqual(json_resp.get('message'), expected_msg,
                         'Message should be "%s"' % expected_msg)
示例#6
0
    def get_params_to_check_for_existing_layer_metadata(self):
        """Return dict of params used to check WorldMap
        for existing layer metadata"""

        gis_data_info = self.get_gis_data_info()
        assert gis_data_info is not None, "gis_data_info cannot be None"

        f = CheckForExistingLayerForm(gis_data_info.__dict__)
        if not f.is_valid():
            raise forms.ValidationError(\
                'CheckForExistingLayerForm params did not validate: %s'\
                 % f.errors)

        return f.cleaned_data
    def test_workflow_01(self):

        msgt('(1) geoconnect, prepare initial data')
        f1 = CheckForExistingLayerForm(self.test_data)

        msg('(a) Is data valid')
        self.assertEqual(f1.is_valid(), True)

        msg('(b) check validation field names')
        #msg(f.get_validation_field_names())
        self.assertEqual(f1.get_validation_field_names(),
                         ('datafile_id', 'dataverse_installation_name'))

        msg('(c) check signature generated with fake key')
        valid_signature = f1.get_api_signature()
        self.assertEqual(
            valid_signature,
            '0068e42806f42ed64ca1ba3e9f3f1549c9bef3fcd84dacaf79ea18e7')

        msg('(d) check valid signature against data used to generate it')
        self.assertEqual(f1.is_signature_valid_check_val(valid_signature),
                         True)

        msg('(e) cleaned data')
        self.assertEqual(f1.cleaned_data, self.expected_clean_data)

        msg('(f) cleaned data with signature key')
        self.assertEqual(f1.get_api_params_with_signature(),
                         self.expected_params)
    def test_workflow_04(self):
        msgt('(4) Try with HttpRequest - GET')

        msg('(a) Try form with HttpRequest object')
        h = HttpRequest()
        h.GET = self.expected_params

        f1 = CheckForExistingLayerForm(h.GET)
        self.assertEqual(f1.is_valid(), True)

        msg('(b) Try signature validity check - break assertion by sending dict, not HttpRequest'
            )
        self.assertRaises(AssertionError, f1.is_signature_valid_check_get,
                          h.GET)

        msg('(c) Try signature check with invalid data--no signature key')
        h_bad_data = HttpRequest()
        h_bad_data.GET = self.test_data
        self.assertEqual(f1.is_signature_valid_check_get(h_bad_data), False)

        msg('(d) Try signature check with invalid data--bad signature key')
        h_bad_data2 = HttpRequest()
        h_bad_data2.GET = self.expected_params_bad_signature
        self.assertEqual(f1.is_signature_valid_check_get(h_bad_data2), False)

        msg('(e) Try signature check with valid data')
        self.assertEqual(f1.is_signature_valid_check_get(h), True)

        msg('(f) cleaned data.')
        self.assertEqual(f1.cleaned_data, self.expected_clean_data)
    def test_workflow_01(self):
    
        msgt('(1) geoconnect, prepare initial data')
        f1 = CheckForExistingLayerForm(self.test_data)

        msg('(a) Is data valid')
        self.assertEqual(f1.is_valid(), True)

        msg('(b) check validation field names')
        #msg(f.get_validation_field_names())
        self.assertEqual(f1.get_validation_field_names(), ('datafile_id', 'dataverse_installation_name'))

        msg('(c) check signature generated with fake key')
        valid_signature = f1.get_api_signature()
        self.assertEqual(valid_signature, '0068e42806f42ed64ca1ba3e9f3f1549c9bef3fcd84dacaf79ea18e7')


        msg('(d) check valid signature against data used to generate it')
        self.assertEqual(f1.is_signature_valid_check_val(valid_signature), True)

        msg('(e) cleaned data')
        self.assertEqual(f1.cleaned_data, self.expected_clean_data)

        msg('(f) cleaned data with signature key')
        self.assertEqual(f1.get_api_params_with_signature(), self.expected_params)
示例#10
0
    def test02_good_shapefile_import(self):

        #-----------------------------------------------------------
        msgt("--- Shapefile import (good) ---")
        #-----------------------------------------------------------
        api_url = self.add_shapefile_url

        #-----------------------------------------------------------
        msgn("(2a) Test WorldMap shapefile import API -- with GOOD data/file")
        #-----------------------------------------------------------
        # Get basic shapefile info
        shapefile_api_form = ShapefileImportDataForm(self.shapefile_test_info)
        self.assertTrue(shapefile_api_form.is_valid())

        test_shapefile_info = shapefile_api_form.cleaned_data

        # add dv info
        test_shapefile_info.update(self.dataverse_test_info)

        # prep file
        files = {'file': open(self.test_shapefile_name, 'rb')}

        #   Test WorldMap shapefile import API
        #
        msg('api url: %s' % api_url)
        #r = requests.post(api_url\
        #                    , data=test_shapefile_info\
        #                    , files=files)

        try:
            r = requests.post(api_url,
                              data=test_shapefile_info,
                              files=files,
                              auth=self.get_creds_for_http_basic_auth())
        except requests.exceptions.ConnectionError as e:
            msgx('Connection error: %s' % e.message)
            return
        except:
            msgx("Unexpected error: %s" % sys.exc_info()[0])
            return

        msg(r.status_code)
        msg(r.text)

        #open('/Users/rmp553/Desktop/page_out.html', 'w').write(r.text)
        #return
        #   Expect HTTP 200 - success
        #
        self.assertEqual(
            r.status_code, 200,
            "Should receive 200 message.  Received: %s\n%s" %
            (r.status_code, r.text))

        #-----------------------------------------------------------
        msgn("(2b) Examine JSON result from WorldMap shapefile import API")
        #-----------------------------------------------------------
        try:
            json_resp = r.json()
        except:
            self.assertTrue(
                False,
                "Failed to convert response to JSON. Received: %s" % r.text)

        #   Expect 'success' key to be True
        #
        self.assertTrue(
            'success' in json_resp,
            'JSON should have key "success".  But found keys: %s' %
            json_resp.keys())
        self.assertEqual(json_resp.get('success'), True,
                         "'success' value should be 'true'")

        #   Expect data key in JSON
        #
        self.assertTrue(
            'data' in json_resp,
            'JSON should have key "data".  But found keys: %s' %
            json_resp.keys())

        #-----------------------------------------------------------
        msgn(
            "(2c) Use MapLayerMetadataValidationForm to validate JSON result from WorldMap shapefile import API"
        )
        #-----------------------------------------------------------
        #   Validate JSON data using MapLayerMetadataValidationForm
        #
        map_layer_metadata_data = json_resp.get('data')
        f3_dataverse_info = MapLayerMetadataValidationForm(
            map_layer_metadata_data)

        self.assertTrue(f3_dataverse_info.is_valid(),
                        "Failed to validate JSON data using MapLayerMetadataValidationForm.  Found errors: %s" \
                        % f3_dataverse_info.errors
                )

        #-----------------------------------------------------------
        msgn("(2d) Retrieve layer details - successfully")
        #-----------------------------------------------------------
        #   Validate JSON data using MapLayerMetadataValidationForm
        #
        existing_layer_form = CheckForExistingLayerForm(
            self.dataverse_test_info)
        self.assertTrue(existing_layer_form.is_valid()\
                        , "Error.  Validation failed:\n%s" % existing_layer_form.errors)

        data_params = existing_layer_form.cleaned_data

        try:
            r = requests.post(self.dataverse_map_layer_detail,
                              data=data_params,
                              auth=self.get_creds_for_http_basic_auth())
        except requests.exceptions.ConnectionError as e:
            msgx('Connection error: %s' % e.message)
            return
        except:
            msgx("Unexpected error: %s" % sys.exc_info()[0])
            return

        msg(r.text)

        self.assertEqual(
            r.status_code, 200,
            "Expected status code 200 but received '%s'" % r.status_code)

        try:
            json_resp = r.json()
        except:
            self.assertTrue(
                False,
                "Failed to convert response to JSON. Received: %s" % r.text)

        self.assertTrue(
            'success' in json_resp,
            'JSON should include key "success".  But found keys: %s' %
            json_resp.keys())
        self.assertTrue(
            json_resp.get('success', False) is True,
            "'success' value should be 'True'")
        self.assertTrue(
            'data' in json_resp,
            'JSON should include key "data".  But found keys: %s' %
            json_resp.keys())
    def test01_good_classification(self):

        # Note: This has to be imported AFTER WorldMapBaseTest setUp creates a test table
        #
        #-----------------------------------------------------------
        msgn(
            "(1a) Retrieve layer information based on datafile_id and dv_user_id"
        )
        #-----------------------------------------------------------
        msg('api_layer_info_url: %s' % self.api_layer_info_url)

        f = CheckForExistingLayerForm(self.dataverse_test_info)
        self.assertTrue(f.is_valid(),
                        'Validation failed using CheckForExistingLayerForm')

        # Retrieve Layer metata using datafile_id and dv_user_id
        # e.g.  {'datafile_id': 1388, 'dv_user_id': 1}
        params = f.cleaned_data  #()

        msgn('PARAMS: %s' % params)
        try:
            r = requests.post(self.api_layer_info_url,
                              data=params,
                              auth=self.get_creds_for_http_basic_auth())
        except requests.exceptions.ConnectionError as e:
            msg('Connection error: %s' % e.message)
            self.assertTrue(False, 'Connection error: %s' % e.message)
        except:
            msg("Unexpected error: %s" % sys.exc_info()[0])
            self.assertTrue(False, "Unexpected error: %s" % sys.exc_info()[0])

        print r.text
        print r.status_code

        self.assertEquals(
            r.status_code, 200,
            "Expected status code of 200 but received '%s'" % r.status_code)

        #-----------------------------------------------------------
        msgn("(1b) Convert response to JSON")
        #-----------------------------------------------------------
        try:
            rjson = r.json()
        except:
            self.assertTrue(
                False,
                "Failed to convert response text to JSON. Text:\n%s" % r.text)

        #-----------------------------------------------------------
        msgn("(1c) Check for key fields in JSON")
        #-----------------------------------------------------------
        #msg(rjson)
        self.assertTrue(
            rjson.has_key('success'),
            "JSON did not have key 'success'. Keys found:\n %s" % rjson.keys())
        self.assertTrue(
            rjson.has_key('data'),
            "JSON did not have key 'data'. Keys found:\n %s" % rjson.keys())

        self.assertEquals(
            rjson.get('success'), True,
            "Expected 'success' value to be 'True'.  Found: '%s'" %
            rjson.get('success'))

        #-----------------------------------------------------------
        msgn(
            "(1d) Validate returned data using WorldMapToGeoconnectMapLayerMetadataValidationForm\n(includes layer name)"
        )
        #-----------------------------------------------------------
        f = WorldMapToGeoconnectMapLayerMetadataValidationForm(
            rjson.get('data', {}))

        self.assertTrue(
            f.is_valid(),
            'Validation failed using WorldMapToGeoconnectMapLayerMetadataValidationForm. Errors: %s'
            % f.errors)

        #-----------------------------------------------------------
        msgn(
            "(1e) Get layer name from data (confirmed by previous validation)")
        #-----------------------------------------------------------
        self.existing_layer_name = rjson.get('data',
                                             {}).get('layer_name', None)

        self.assertTrue(self.existing_layer_name is not None,
                        'self.existing_layer_name cannot be None')
        self.assertTrue(
            len(self.existing_layer_name) > 0,
            'self.existing_layer_name cannot be length 0')

        #-----------------------------------------------------------
        msgn("(1f) Prepare classification call")
        #-----------------------------------------------------------
        msg('existing_layer_name: %s' % self.existing_layer_name)
        #self.dataverse_test_info

        classify_params = self.dataverse_test_info

        classify_params.update({
            'reverse': False,
            'attribute': u'SocStrif_2',
            'ramp': 'Blue',
            'endColor': '#08306b',
            'intervals': 5,
            'layer_name': self.existing_layer_name,
            'startColor': '#f7fbff',
            'method': u'equalInterval'
        })
        """
import requests
classify_params =  {'reverse': False,
            'attribute': u'SocStrife1',
            'dataverse_installation_name': u'http://localhost:8000',
            'ramp': u'Custom', 'endColor': u'#f16913',
            'datafile_id': 7775,
            'intervals': 5,
            'layer_name': u'social_disorder_hy4',
            'startColor': u'#fff5eb',
            'method': u'jenks'}

r = requests.post('http://127.0.0.1:8000/dataverse/classify-layer/',data=classify_params, auth=('rp','123'))

print r.text

print r.status_code

        """
        f_classify = ClassifyRequestDataForm(classify_params)
        self.assertTrue(
            f_classify.is_valid(),
            'ClassifyRequestDataForm did not validate. Errors:\n %s' %
            f_classify.errors)

        formatted_classify_params = f_classify.cleaned_data  #get_api_params_with_signature()
        msgt('classify_params: %s' % formatted_classify_params)
        #self.assertTrue(classify_params.has_key(SIGNATURE_KEY)\
        #                , 'classify_params did not have SIGNATURE_KEY: "%s"' % SIGNATURE_KEY)

        #-----------------------------------------------------------
        msgn("(1g) Make classification request")
        #-----------------------------------------------------------
        msg('classify url: %s' % self.classify_layer_url)
        msg('creds: {0}'.format(self.get_creds_for_http_basic_auth()))
        try:
            r = requests.post(self.classify_layer_url,
                              data=formatted_classify_params,
                              auth=self.get_creds_for_http_basic_auth())
        except requests.exceptions.ConnectionError as e:
            msgx('Connection error: %s' % e.message)
        except:
            msgx("Unexpected error: %s" % sys.exc_info()[0])

        print r.text
        print r.status_code

        self.assertEquals(
            r.status_code, 200,
            "Expected status code of 200 but received '%s'" % r.status_code)

        #-----------------------------------------------------------
        msgn("(1h) Convert response to JSON")
        #-----------------------------------------------------------
        try:
            json_resp = r.json()
        except:
            self.assertTrue(
                False,
                "Failed to convert response text to JSON. Text:\n%s" % r.text)

        print 'json_resp: %s' % json_resp

        self.assertTrue(
            json_resp.has_key('success'),
            'JSON should have key "success".  But found keys: %s' %
            json_resp.keys())
        self.assertEqual(json_resp.get('success'), True,
                         "'success' value should be 'True'")

        f_metadata_check = WorldMapToGeoconnectMapLayerMetadataValidationForm(
            json_resp.get('data', None))
        self.assertTrue(
            f_metadata_check.is_valid(),
            "Validation failed for WorldMapToGeoconnectMapLayerMetadataValidationForm. Errors: %s"
            % f_metadata_check.errors)

        #-----------------------------------------------------------
        msgn("(1i) Retrieve classification params")
        #-----------------------------------------------------------
        params_for_attr_request = self.dataverse_test_info
        params_for_attr_request['layer_name'] = self.existing_layer_name
        f_attrs = LayerAttributeRequestForm(params_for_attr_request)
        self.assertTrue(
            f_attrs.is_valid(),
            'ClassifyRequestDataForm did not validate. Errors:\n %s' %
            f_attrs.errors)

        retrieve_attribute_params = f_attrs.cleaned_data  #get_api_params_with_signature()
        #msgt('retrieve_attribute_params: %s' % retrieve_attribute_params)
        #self.assertTrue(retrieve_attribute_params.has_key(SIGNATURE_KEY)\
        #                , 'classify_params did not have SIGNATURE_KEY: "%s"' % SIGNATURE_KEY)

        #-----------------------------------------------------------
        msgn("(1i) Make classification param request")
        #-----------------------------------------------------------
        GET_CLASSIFY_ATTRIBUTES_API_PATH = reverse(
            'view_layer_classification_attributes', args=())
        try:
            r = requests.post(GET_CLASSIFY_ATTRIBUTES_API_PATH,\
                        data=retrieve_attribute_params,\
                        auth=self.get_creds_for_http_basic_auth())
        except requests.exceptions.ConnectionError as e:
            msgx('Connection error: %s' % e.message)
        except:
            msgx("Unexpected error: %s" % sys.exc_info()[0])

        print r.status_code
        self.assertEquals(
            r.status_code, 200,
            "Expected status code of 200 but received '%s'" % r.status_code)

        try:
            json_resp = r.json()
        except:
            self.assertTrue(
                False,
                "Failed to convert response text to JSON. Text:\n%s" % r.text)

        self.assertTrue(
            json_resp.has_key('success'),
            'JSON should have key "success".  But found keys: %s' %
            json_resp.keys())
        self.assertEqual(json_resp.get('success'), True,
                         "'success' value should be 'True'")

        self.assertTrue(
            json_resp.has_key('data'),
            'JSON should have key "success".  But found keys: %s' %
            json_resp.keys())

        attribute_info = json_resp['data'].get('attribute_info', None)
        self.assertTrue(attribute_info is not None, "attribute_info was None")

        attribute_info = eval(attribute_info)
        msgt('attribute_info')
        msg(attribute_info)
        self.assertEqual(len(attribute_info), 53,\
            "Should be 54 attributes but found %s" % len(attribute_info))
示例#12
0
def get_existing_layer_data(request):
    """
    Given a POST with a 'dataverse_installation_name' and 'datafile_id'

    Check if a DataverseLayerMetadata record exists for this information.

    returns JSON
    """

    #   Is it a POST?
    #
    if not request.POST:
        json_msg = MessageHelperJSON.get_json_msg(success=False, msg="The request must be a POST, not GET")
        return HttpResponse(status=401, content=json_msg, content_type="application/json")


    #   Does the request contain the correct params?
    #
    f = CheckForExistingLayerForm(request.POST)

    if not f.is_valid():
        logger.error("Unexpected form validation error in CheckForExistingLayerFormWorldmap. Errors: %s" % f.errors)
        json_msg = MessageHelperJSON.get_json_msg(success=False\
                            , msg="Invalid data for retrieving an existing layer.")
        return HttpResponse(status=400, content=json_msg, content_type="application/json")

    #   Does a DataverseLayerMetadata object exist for the given params?
    #
    dataverse_layer_metadata = retrieve_dataverse_layer_metadata_by_kwargs_installation_and_file_id(**request.POST.dict())

    #   Nope, we are mapping a new file to the WorldMap
    #
    if dataverse_layer_metadata is None:
        json_msg = MessageHelperJSON.get_json_msg(success=False, msg="This layer does not exist")
        return HttpResponse(status=200, content=json_msg, content_type="application/json")

    # Prepare a JSON response
    #
    map_layer = dataverse_layer_metadata.map_layer
    layer_metadata_obj = LayerMetadata(map_layer)

    data_dict = layer_metadata_obj.get_metadata_dict()

    # Is this a TableJoin, if so, add more data
    if map_layer.join_layer.count() > 0:
        join_layer = map_layer.join_layer.all()[0]
        #data_dict.update(join_layer.as_json())

        data_dict.update(\
            TableJoinResultForm.get_cleaned_data_from_table_join(join_layer)\
            )

    # Was this a Datatable mapped by Lat/Lng
    if LatLngTableMappingRecord.objects.filter(layer=map_layer).count() > 0:
        latlng_record = LatLngTableMappingRecord.objects.filter(layer=map_layer).all()[0]
        data_dict.update(latlng_record.as_json())

    # Return the response!
    json_msg = MessageHelperJSON.get_json_msg(success=True,\
                                            msg='worked',\
                                            data_dict=data_dict)

    return HttpResponse(status=200, content=json_msg, content_type="application/json")
def get_layer_info_using_dv_info(params_dict):
    """
    Retrieve WorldMap layer information via API

    params_dict needs to include:
        - dataverse_installation_name
        - datafile_id

    Fail: (False, error message)
    Success: (True, python dict)
    """
    f = CheckForExistingLayerForm(params_dict)
    if not f.is_valid():
        err_msg = """Sorry! Failed to validate the request to retrieve WorldMap layer metadata."""
        LOGGER.error(err_msg + \
        "  Validation failure for CheckForExistingLayerForm.  Errors: %s" % f.errors)
        return False, err_msg

    #--------------------------------------
    # Prepare the data
    #--------------------------------------
    data_params = f.cleaned_data

    #--------------------------------------
    # Make the request
    #--------------------------------------
    try:
        resp = requests.post(GET_LAYER_INFO_BY_DATAVERSE_INSTALLATION_AND_FILE_API_PATH\
                        , data=data_params\
                        , auth=settings.WORLDMAP_ACCOUNT_AUTH\
                        , timeout=settings.WORLDMAP_SHORT_TIMEOUT)
    except requests.exceptions.ConnectionError as exception_obj:

        err_msg = """Sorry! Failed to retrieve data from the WorldMap.
                    <p><b>Details for administrator:</b> Could not contact the
                    WorldMap server: %s</p>"""\
                    % (GET_LAYER_INFO_BY_DATAVERSE_INSTALLATION_AND_FILE_API_PATH)
        LOGGER.error(err_msg)
        LOGGER.error('ConnectionError: %s', exception_obj.error)
        return False, err_msg
    except:
        # Error with request
        #
        err_msg = "Unexpected error: %s" % sys.exc_info()[0]
        LOGGER.error(err_msg)
        return False, err_msg

    print(resp.text)
    print(resp.status_code)

    #--------------------------------------
    # Response looks good
    #--------------------------------------
    if resp.status_code == 200:
        try:
            response_dict = resp.json()
        except ValueError:
            err_msg = "Failed to convert response to JSON."
            LOGGER.error(err_msg +
                         "Status code: 200.\nResponse text: %s" % resp.text)
            return False, err_msg

        return response_dict.get('success', False), response_dict

    #--------------------------------------
    # Response doesn't look good
    #--------------------------------------
    err_msg = "Status code: %s\nError: %s" % (resp.status_code, resp.text)
    return False, err_msg
def delete_map_layer(gis_data_info, worldmap_layer_info):
    """
    Delete a Layer from the WorldMap, using the WorldMap API

    returns (True, None)
        or (False, 'error message of some type')
    """
    assert isinstance(
        gis_data_info,
        GISDataFile), "gis_data_file must be a GISDataFile object"
    #assert isinstance(worldmap_layer_info, WorldMapLayerInfo),\
    #        "worldmap_layer_info must be a WorldMapLayerInfo object"

    #--------------------------------------
    # Does the GISDataFile object correspond
    #    to the WorldMapLayerInfo object?
    #--------------------------------------
    if worldmap_layer_info.get_gis_data_info() != gis_data_info:
        err_msg = ('Error the GISDataFile does not correspond'
                   ' to the WorldMapLayerInfo object.')
        LOGGER.error(err_msg)
        return (False, err_msg)

    #   For join layers, remove the TableJoin object
    #
    if worldmap_layer_info.is_join_layer():
        return delete_worldmap_tablejoin(worldmap_layer_info)

    #--------------------------------------
    # Prepare params for WorldMAP API call
    #--------------------------------------
    data_params = get_dataverse_info_dict(gis_data_info)
    existing_layer_form = CheckForExistingLayerForm(data_params)
    if not existing_layer_form.is_valid():
        err_msg = """Error.  Validation failed. (CheckForExistingLayerForm)"""
        LOGGER.error(err_msg)
        return (False, err_msg)

    #
    data_params = existing_layer_form.cleaned_data

    #data_params[settings.WORLDMAP_TOKEN_NAME_FOR_DV] = settings.WORLDMAP_TOKEN_FOR_DATAVERSE
    print('DELETE_LAYER_API_PATH: %s' % DELETE_LAYER_API_PATH)
    print("data_params: %s" % data_params)
    try:
        r = requests.post(DELETE_LAYER_API_PATH\
                        , data=data_params\
                        , auth=settings.WORLDMAP_ACCOUNT_AUTH\
                        , timeout=settings.WORLDMAP_SHORT_TIMEOUT)
    except requests.exceptions.ConnectionError as exception_obj:

        err_msg = ('Failed to retrieve data from the WorldMap.'
                   '<p><b>Details for administrator:</b>'
                   ' Could not contact the WorldMap'
                   ' server: {0}</p>').format(DELETE_LAYER_API_PATH)
        LOGGER.error(err_msg + '\nConnectionError:' + exception_obj.message)
        return (False, err_msg)

    print(r.text)
    print(r.status_code)

    #--------------------------------------
    # Check Response
    #--------------------------------------
    if r.status_code == 200:
        #response_dict = r.json()
        return (True, None)

    #--------------------------------------
    # Response doesn't look good
    #--------------------------------------
    err_msg = "Status code: %s\nError: %s" % (r.status_code, r.text)
    LOGGER.error(err_msg)

    return (False, err_msg)
    def test_workflow_02(self):

        msgt('(2) Generate params for API call')

        f1 = CheckForExistingLayerForm(self.test_data)
        self.assertEqual(f1.is_valid(), True)

        msg('(a) Generate API call params')
        self.assertEqual(f1.get_api_params_with_signature(),
                         self.expected_params)

        msg('(b) Validate params in fresh form')
        f2 = CheckForExistingLayerForm(self.expected_params)
        self.assertEqual(f2.is_valid(), True)

        msg('(c) Check signature validity.  Signature length too short')
        self.assertEqual(f2.is_signature_valid_check_val('signature - not long - enough')\
                        , False)

        msg('(d) Check signature validity.  Break assertion: signature is None'
            )
        self.assertRaises(AssertionError, f2.is_signature_valid_check_val,
                          None)

        msg('(e) Check signature validity.  Wrong signature')
        signature_str = '12345' * 11
        self.assertEqual(f2.is_signature_valid_check_val(signature_str), False)

        msg('(f) Correct signature.')
        signature_str = '12345' * 11
        self.assertEqual(
            f2.is_signature_valid_check_val(f1.get_api_signature()), True)

        msg('(g) cleaned data.')
        self.assertEqual(f2.cleaned_data, self.expected_clean_data)
示例#16
0
def get_layer_info_using_dv_info(params_dict):
    """
    Retrieve WorldMap layer information via API

    params_dict needs to include:
        - dataverse_installation_name
        - datafile_id

    Fail: (False, error message)
    Success: (True, python dict)
    """
    f = CheckForExistingLayerForm(params_dict)
    if not f.is_valid():
        err_msg = """Sorry! Failed to validate the request to retrieve WorldMap layer metadata."""
        LOGGER.error(err_msg + \
        "  Validation failure for CheckForExistingLayerForm.  Errors: %s" % f.errors)
        return False, err_msg


    #--------------------------------------
    # Prepare the data
    #--------------------------------------
    data_params = f.cleaned_data

    #--------------------------------------
    # Make the request
    #--------------------------------------
    try:
        resp = requests.post(GET_LAYER_INFO_BY_DATAVERSE_INSTALLATION_AND_FILE_API_PATH\
                        , data=data_params\
                        , auth=settings.WORLDMAP_ACCOUNT_AUTH\
                        , timeout=settings.WORLDMAP_SHORT_TIMEOUT)
    except requests.exceptions.ConnectionError as exception_obj:

        err_msg = """Sorry! Failed to retrieve data from the WorldMap.
                    <p><b>Details for administrator:</b> Could not contact the
                    WorldMap server: %s</p>"""\
                    % (GET_LAYER_INFO_BY_DATAVERSE_INSTALLATION_AND_FILE_API_PATH)
        LOGGER.error(err_msg)
        LOGGER.error('ConnectionError: %s', exception_obj)
        return False, err_msg
    except:
        # Error with request
        #
        err_msg = "Unexpected error: %s" % sys.exc_info()[0]
        LOGGER.error(err_msg)
        return False, err_msg

    print (resp.text)
    print (resp.status_code)

    #--------------------------------------
    # Response looks good
    #--------------------------------------
    if resp.status_code == 200:
        try:
            response_dict = resp.json()
        except ValueError:
            err_msg = "Failed to convert response to JSON."
            LOGGER.error(err_msg + "Status code: 200.\nResponse text: %s" % resp.text)
            return False, err_msg

        return response_dict.get('success', False), response_dict

    #--------------------------------------
    # Response doesn't look good
    #--------------------------------------
    err_msg = "Status code: %s\nError: %s" % (resp.status_code, resp.text)
    return False, err_msg
示例#17
0
    def test03_bad_delete_shapefile_from_worldmap(self):
        #-----------------------------------------------------------
        msgt("--- Delete shapefile ---")
        #-----------------------------------------------------------

        #-----------------------------------------------------------
        msgn("(3a) Send delete request - Missing parameter")
        #-----------------------------------------------------------
        existing_layer_form = CheckForExistingLayerForm(
            self.dataverse_test_info)
        self.assertTrue(existing_layer_form.is_valid()\
                        , "Error.  Validation failed. (CheckForExistingLayerForm):\n%s" % existing_layer_form.errors)

        data_params = existing_layer_form.cleaned_data
        data_params.pop('datafile_id')

        try:
            r = requests.post(self.delete_dataverse_layer_url,
                              data=data_params,
                              auth=self.get_creds_for_http_basic_auth())
        except requests.exceptions.ConnectionError as e:
            msgx('Connection error: %s' % e.message)
            return
        except:
            msgx("Unexpected error: %s" % sys.exc_info()[0])
            return

        self.assertEqual(
            r.status_code, 400,
            "Expected status code 400 but received '%s'" % r.status_code)

        try:
            json_resp = r.json()
        except:
            self.assertTrue(
                False,
                "Failed to convert response to JSON. Received: %s" % r.text)

            #   Expect 'success' key to be False
        #
        self.assertTrue(
            json_resp.has_key('success'),
            'JSON should have key "success".  But found keys: %s' %
            json_resp.keys())
        self.assertEqual(json_resp.get('success'), False,
                         "'success' value should be 'False'")
        expected_msg = 'Invalid data for delete request.'
        self.assertEqual(json_resp.get('message'), expected_msg,
                         'Message should be "%s"' % expected_msg)

        #-----------------------------------------------------------
        msgn("(3b) Send delete request - Bad dataverse_installation_name")
        #-----------------------------------------------------------
        api_prep_form = CheckForExistingLayerForm(self.dataverse_test_info)
        self.assertTrue(api_prep_form.is_valid()\
                        , "Error.  Validation failed. (CheckForExistingLayerForm):\n%s" % api_prep_form.errors)

        data_params = api_prep_form.cleaned_data

        # Chnange key used to search for map layer
        #
        data_params['dataverse_installation_name'] = 'bah bah black sheep'

        try:
            r = requests.post(self.delete_dataverse_layer_url,
                              data=data_params,
                              auth=self.get_creds_for_http_basic_auth())
        except requests.exceptions.ConnectionError as e:
            msgx('Connection error: %s' % e.message)
            return
        except:
            msgx("Unexpected error: %s" % sys.exc_info()[0])
            return

        self.assertEqual(
            r.status_code, 404,
            "Expected status code 404 but received '%s'" % r.status_code)
示例#18
0
def delete_map_layer(gis_data_info, worldmap_layer_info):
    """
    Delete a Layer from the WorldMap, using the WorldMap API

    returns (True, None)
        or (False, 'error message of some type')
    """
    assert isinstance(gis_data_info, GISDataFile), "gis_data_file must be a GISDataFile object"
    #assert isinstance(worldmap_layer_info, WorldMapLayerInfo),\
    #        "worldmap_layer_info must be a WorldMapLayerInfo object"

    #--------------------------------------
    # Does the GISDataFile object correspond
    #    to the WorldMapLayerInfo object?
    #--------------------------------------
    if worldmap_layer_info.get_gis_data_info() != gis_data_info:
        err_msg = ('Error the GISDataFile does not correspond'
                   ' to the WorldMapLayerInfo object.')
        LOGGER.error(err_msg)
        return (False, err_msg)

    #--------------------------------------
    # Prepare params for WorldMAP API call
    #--------------------------------------
    data_params = get_dataverse_info_dict(gis_data_info)
    existing_layer_form = CheckForExistingLayerForm(data_params)
    if not existing_layer_form.is_valid():
        err_msg = """Error.  Validation failed. (CheckForExistingLayerForm)"""
        LOGGER.error(err_msg)
        return (False, err_msg)

    #
    data_params = existing_layer_form.cleaned_data

    LOGGER.info('make delete request: %s', DELETE_LAYER_API_PATH)
    try:
        r = requests.post(DELETE_LAYER_API_PATH\
                        , data=data_params\
                        , auth=settings.WORLDMAP_ACCOUNT_AUTH\
                        , timeout=settings.WORLDMAP_SHORT_TIMEOUT)
    except requests.exceptions.ConnectionError as exception_obj:

        err_msg = ('Failed to retrieve data from the WorldMap.'
                   '<p><b>Details for administrator:</b>'
                   ' Could not contact the WorldMap'
                   ' server: {0}</p>').format(DELETE_LAYER_API_PATH)

        LOGGER.error(err_msg + '\nConnectionError:' + exception_obj.message)

        return (False, err_msg)

    LOGGER.debug(r.text)
    LOGGER.debug(r.status_code)

    #--------------------------------------
    # Check Response
    #--------------------------------------
    if r.status_code == 200:
        #response_dict = r.json()
        return (True, None)

    #--------------------------------------
    # Response doesn't look good
    #--------------------------------------
    err_msg = "Status code: %s\nError: %s" % (r.status_code, r.text)
    LOGGER.error(err_msg)

    return (False, err_msg)