def get(self, fields_array):
        """ Get method """

        # Retrieving for DataSF fields
        datasf_sources = {}
        for field in set(self.datasf_field_opts.keys()) & set(fields_array):
            # setting default null values for possible field options
            self.data[field] = None
            # build DataSF sources array
            field_opt = self.datasf_field_opts[field]
            if field_opt['source'] not in datasf_sources.keys():
                datasf_sources[field_opt['source']] = {}
            datasf_sources[field_opt['source']][field] = field_opt

        for (source_name, fields) in datasf_sources.items():
            self.data.update(self.get_datasf_data(source_name, fields))

        # Retrieving for parcel fields
        field_parcel_request = set(
            self.field_parcel_options) & set(fields_array)
        if field_parcel_request:
            self.data['parcels'] = []
            sfarcgis = SfArcgis()
            sfarcgis.set_layer('parcel', os.environ.get('PLN_ARCGIS_PARCEL'))
            options = {'outFields': ','.join(field_parcel_request)}
            parcels = sfarcgis.get_fields_by_parcel(self.parcel_num, options)
            if parcels:
                parcels = [(self.normalize_parcel_field_names(p))
                           for p in parcels]
                self.data['parcels'] = parcels

        return self.data
Пример #2
0
def test_set_layer():
    """ test set_layer method """
    test_layer_name = "test"

    sfarcgis = SfArcgis()
    sfarcgis.set_layer(test_layer_name, TEST_ARCGIS_LAYER_URL)
    assert sfarcgis.gis_layers[test_layer_name] == TEST_ARCGIS_LAYER_URL
 def on_get(self, _req, _resp, name):
     """ on page GET requests """
     dispatch = None
     if hasattr(self.__class__, name) and callable(
             getattr(self.__class__, name)):
         dispatch = getattr(self, name)
         self.sfarcgis = SfArcgis()
     dispatch(_req, _resp)
class Page():
    """ Page class """
    def __init__(self):
        self.sfarcgis = None

    def on_get(self, _req, _resp, name):
        """ on page GET requests """
        dispatch = None
        if hasattr(self.__class__, name) and callable(
                getattr(self.__class__, name)):
            dispatch = getattr(self, name)
            self.sfarcgis = SfArcgis()
        dispatch(_req, _resp)

    def get_fields_by_address_example(self, req, resp):
        """ example get_fields_by_address with an address response """

        self.sfarcgis.set_layer('parcel',
                                os.environ.get('PLN_ARCGIS_PARCEL_LAYER_URL'))

        if 'address' in req.params:
            address = req.params['address']
            options = {'returnGeometry': False, 'returnSuggestions': False}
            if 'returnSuggestions' in req.params and req.params[
                    'returnSuggestions'] == 'true':
                options['returnSuggestions'] = True
            if 'returnGeometry' in req.params:
                options['returnGeometry'] = req.params['returnGeometry']
            if 'outFields' in req.params:
                options['outFields'] = req.params['outFields']
            self.sfarcgis.set_layer(
                'parcel', os.environ.get('PLN_ARCGIS_PARCEL_LAYER_URL'))
            parcels = self.sfarcgis.get_fields_by_address(address, options)
            response = {'parcels': parcels}
        resp.body = json.dumps(jsend.success(response))
        resp.status = falcon.HTTP_200

    def get_fields_by_parcel_example(self, req, resp):
        """ example get_fields_by_parcel with an parcel number response """

        self.sfarcgis.set_layer('parcel',
                                os.environ.get('PLN_ARCGIS_PARCEL_LAYER_URL'))

        if 'parcel' in req.params:
            parcel = req.params['parcel']
            options = {'returnGeometry': False}
            if 'returnGeometry' in req.params:
                options['returnGeometry'] = req.params['returnGeometry']
            if 'outFields' in req.params:
                options['outFields'] = req.params['outFields']
            self.sfarcgis.set_layer(
                'parcel', os.environ.get('PLN_ARCGIS_PARCEL_LAYER_URL'))
            parcels = self.sfarcgis.get_fields_by_parcel(parcel, options)
            response = {'parcels': parcels}
        resp.body = json.dumps(jsend.success(response))
        resp.status = falcon.HTTP_200
Пример #5
0
    def parcels(self, req, resp):
        """ get parcels """

        missing_env = self.has_missing_env(['PLN_ARCGIS_PARCEL'])
        if missing_env:
            resp.status = falcon.HTTP_404
            msg_error = jsend.error(
                'Missing or invalid environment variable(s): ' +
                ", ".join(missing_env))
            resp.body = json.dumps(msg_error)
            return

        response = {'message': 'parcels'}
        if 'address' in req.params:
            address = req.params['address']
            options = {
                'returnGeometry': False,
                'returnSuggestions': False,
                'outFields': 'blklot,block_num,lot_num,ADDRESS'
            }
            if 'returnSuggestions' in req.params and req.params[
                    'returnSuggestions'] == 'true':
                options['returnSuggestions'] = True
            if 'returnGeometry' in req.params:
                options['returnGeometry'] = req.params['returnGeometry']
            if 'outFields' in req.params:
                options['outFields'] = req.params['outFields']

            sfarcgis = SfArcgis()
            sfarcgis.set_layer('parcel', os.environ.get('PLN_ARCGIS_PARCEL'))
            parcels = sfarcgis.get_fields_by_address(address, options)
            response = {'parcels': parcels}

            with sentry_sdk.configure_scope() as scope:
                scope.set_extra('arcgis.parcels', {
                    'address': address,
                    'options': options,
                    'response': parcels
                })

            blank_response_msg = ""
            if not parcels:
                blank_response_msg = "(blank)"

            sentry_sdk.capture_message(
                ('parcel response ' + blank_response_msg).strip(), 'info')

        resp.body = json.dumps(jsend.success(response))
        resp.status = falcon.HTTP_200
Пример #6
0
def test_get_fields_by_parcel():
    """ test get_fields_by_parcel method """
    with open('tests/mocks/parcel_request.json', 'r') as file_obj:
        mock_request = json.load(file_obj)

    with open('tests/mocks/parcel.json', 'r') as file_obj:
        mock_data = json.load(file_obj)

    sfarcgis = SfArcgis()
    sfarcgis.set_layer("parcel", TEST_ARCGIS_LAYER_URL)

    with patch('sf_arcgis_sdk.sf_arcgis.requests.get') as mock_get:
        mock_get.return_value.status_code = 200
        mock_get.return_value.json.return_value = mock_request
        options = {
            'outFields': 'blklot,block_num,lot_num,ADDRESS',
            'returnGeometry': 'false',
            'f': 'json'
        }
        parcel = sfarcgis.get_fields_by_parcel('3512008', options)
    assert parcel == mock_data
Пример #7
0
def test_query_eror():
    """ test query method
        error state """
    sfarcgis = SfArcgis()
    assert sfarcgis.query("http://test", {}) is None
Пример #8
0
def test_query():
    """ test query method """
    sfarcgis = SfArcgis()
    assert sfarcgis.query("https://jsonplaceholder.typicode.com/posts", {})
Пример #9
0
def test_get_fields_by_parcel_missing_layer():
    """ test get_fields_by_parcel method
        missing layer state """
    test = SfArcgis()
    parcel = test.get_fields_by_parcel('3512008')
    assert parcel is False
Пример #10
0
def test_get_fields_by_address_missing_layer():
    """ test get_fields_by_address method
        missing layer state """
    test = SfArcgis()
    parcel = test.get_fields_by_address('600 MONTGOMERY ST #100')
    assert parcel is False