Exemplo n.º 1
0
def searchJSON():
    form = ProviderSearchForm(request.args).populate_choices()
    del form.location
    page = request.args.get('page', 1, int)
    if form.validate() or request.args.get('page') is not None:
        location = session['location']
        searchLocation = Location(location['source'], location['address'],
                                  location['coordinates'])
        searchLocation.setRangeCoordinates()
        reviewFilters = {
            "friends": form.friends_filter.data,
            "groups": form.groups_filter.data,
            "reviewed": form.reviewed_filter.data
        }
        filters = {
            "name": form.name.data,
            "category": Category.query.get(form.category.data),
            "location": searchLocation
        }
        sortCriteria = form.sort.data
        providers = Provider.search(filters, sortCriteria, reviewFilters)
        if sortCriteria == "distance":
            providers = sortByDistance(searchLocation.coordinates, providers)
        pagination = Pagination(providers, page,
                                current_app.config.get('PER_PAGE'))
        providers = pagination.paginatedData
        providersDict = [provider._asdict() for provider in providers]
        return jsonify(providersDict, location)
Exemplo n.º 2
0
def providerAutocomplete():
    """Pulls list of providers matching input text."""
    form = ProviderSearchForm(request.args)
    form.populate_choices()
    print(form.data)
    del form.sort
    if form.validate():
        try:
            searchLocation = Location(form.location.data,
                                      form.manual_location.data,
                                      (form.gpsLat.data, form.gpsLong.data))
        except AddressError:
            msg = {"status": "failed", "reason": "invalid address"}
            return jsonify(msg), 422
        searchLocation.setRangeCoordinates()
        filters = {
            "name": form.name.data,
            "category": Category.query.get(form.category.data),
            "location": searchLocation
        }
        sortCriteria = "name"
        providers = Provider.search(filters, sortCriteria, limit=10)
        providers = [{
            "id": provider.id,
            "name": provider.name,
            "line1": provider.line1,
            "city": provider.city,
            "state": provider.state_short
        } for provider in providers]
        return jsonify(providers)
    msg = {"status": "failed", "reason": "invalid form data"}
    return jsonify(msg), 422
Exemplo n.º 3
0
def test_LocationAddToSession(dbSession, activeClient):
    assert 'location' not in session
    location = Location("gps", "", (35.123949, -80.864783))
    session.pop('location')
    assert 'location' not in session
    location.addToSession()
    assert session['location']['source'] == "gps"
    assert session['location']['address'] == ""
    assert session['location']['coordinates'] == (35.123949, -80.864783)
    assert session['location']['latitude'] == 35.123949
    assert session['location']['longitude'] == -80.864783
Exemplo n.º 4
0
def test_LocationSetRangeCoords(dbSession, activeClient, mockGeoResponse):
    location = Location("manual", "8012 Covey Chase Dr, Charlotte, NC 28210")
    location.setRangeCoordinates()
    distance1 = distance.distance(location.coordinates,
                                  (location.latitude, location.maxLong)).miles
    distance2 = distance.distance(location.coordinates,
                                  (location.latitude, location.minLong)).miles
    distance3 = distance.distance(location.coordinates,
                                  (location.maxLat, location.longitude)).miles
    distance4 = distance.distance(location.coordinates,
                                  (location.minLat, location.longitude)).miles
    distanceList = [distance1, distance2, distance3, distance4]
    for d in distanceList:
        assert round(d, 1) == 30.0
Exemplo n.º 5
0
def test_LocationNewGPS(dbSession, activeClient):
    location = Location("gps", "", (35.123949, -80.864783))
    assert location.source == "gps"
    assert location.address == ""
    assert location.coordinates == (35.123949, -80.864783)
    assert session['location']['source'] == "gps"
    assert session['location']['coordinates'] == (35.123949, -80.864783)
Exemplo n.º 6
0
    def generateSearchFilters(self, searchDict):
        """From dict, populate filters used in call to Provider.search"""

        location = Location(searchDict['location'])
        location.setRangeCoordinates(searchDict['searchRange'])
        category = Category.query.get(searchDict['category'])
        filters = {
            "name": searchDict['name'],
            "category": category,
            "location": location,
            "reviewed": bool(searchDict['reviewed_filter']),
            "friends": bool(searchDict['friends_filter']),
            "groups": bool(searchDict['groups_filter'])
        }
        sort = searchDict['sort']
        return filters, sort
Exemplo n.º 7
0
def test_LocationNewManual(dbSession, activeClient):
    location = Location("manual", "7708 Covey Chase Dr Charlotte, NC 28210")
    assert location.source == "manual"
    assert location.address == "7708 Covey Chase Dr, Charlotte, NC 28210"
    assert location.coordinates == (35.123949, -80.864783)
    assert session['location']['source'] == "manual"
    assert session['location'][
        'address'] == "7708 Covey Chase Dr, Charlotte, NC 28210"
Exemplo n.º 8
0
 def test_populateChoicesLocationSession(self, baseProviderSearch,
                                         mockGeoResponse):
     searchLocation = Location("manual",
                               "8012 Covey Chase Dr, Charlotte, NC",
                               ("", ""))
     baseProviderSearch['location'] = "manualExisting"
     formdata = ImmutableMultiDict(baseProviderSearch)
     form = ProviderSearchForm(formdata=formdata)
     form.populate_choices()
     assert form.location.choices[0] == (
         "manualExisting", "8012 Covey Chase Dr, Charlotte, NC")
Exemplo n.º 9
0
 def test_initialize(self, baseProviderSearch, mockGeoResponse):
     searchLocation = Location("manual",
                               "8012 Covey Chase Dr, Charlotte, NC",
                               ("", ""))
     baseProviderSearch.update({
         "location":
         "manual",
         "manual_location":
         "8012 Covey Chase Dr, Charlotte, NC"
     })
     formdata = ImmutableMultiDict(baseProviderSearch)
     form = ProviderSearchForm(formdata=formdata)
     form.initialize()
     assert form.location.choices[0] == (
         "manualExisting", "8012 Covey Chase Dr, Charlotte, NC")
     assert form.manual_location.data == ""
Exemplo n.º 10
0
def test_LocationNewHome(dbSession, activeClient):
    location = Location("home")
    assertEqualsTolerance(location.latitude, 35.123949, 5)
    assertEqualsTolerance(location.longitude, -80.864783, 5)
Exemplo n.º 11
0
def search():
    form = ProviderSearchForm(request.args)
    form.populate_choices()
    page = request.args.get('page', 1, int)
    form_dict = json.dumps(form.data)
    if form.validate() or request.args.get('page') is not None:
        try:
            searchLocation = Location(form.location.data,
                                      form.manual_location.data,
                                      (form.gpsLat.data, form.gpsLong.data))
        except AddressError:
            flash("Invalid address submitted. Please re-enter and try again.")
            if form.manual_location.data not in [None, ""]:
                msg = "Invalid Address. Please updated."
                form.manual_location.errors.append(msg)
            return render_template("index.html",
                                   form_dict=form_dict,
                                   form=form,
                                   title="Search"), 422

        searchLocation.setRangeCoordinates(form.searchRange.data)
        filters = {
            "name": form.name.data,
            "category": Category.query.get(form.category.data),
            "location": searchLocation,
            "friends": form.friends_filter.data,
            "groups": form.groups_filter.data,
            "reviewed": form.reviewed_filter.data
        }
        sortCriteria = form.sort.data
        providers = Provider.search(filters, sortCriteria)

        if providers == []:
            flash("No results found. Please try a different search.")
            providersDict = simplejson.dumps([], sort_keys=True)
            summary = None
            pag_urls = None
            locationDict = None

        else:
            summary = Review.summaryStatSearch(filters)
            if sortCriteria == "distance":
                providers = sortByDistance(searchLocation.coordinates,
                                           providers)
            pagination = Pagination(providers, page,
                                    current_app.config.get('PER_PAGE'))
            pag_urls = pagination.get_urls('main.search', request.args)
            providers = pagination.paginatedData
            providersDict = [provider._asdict() for provider in providers]
            providersDict = simplejson.dumps(providersDict, sort_keys=True)
            if session.get('location'):
                locationDict = session['location']
                locationDict = simplejson.dumps(locationDict, sort_keys=True)
            else:
                locationDict = None

        filter_fields = [
            form.reviewed_filter, form.friends_filter, form.groups_filter
        ]
        reviewFilter = {}
        for field in filter_fields:
            if field.data is True:
                reviewFilter[field.name] = 'y'
        form.initialize()

        return render_template("index.html",
                               form=form,
                               title="Search",
                               providers=providers,
                               pag_urls=pag_urls,
                               form_dict=form_dict,
                               reviewFilter=reviewFilter,
                               locationDict=locationDict,
                               providersDict=providersDict,
                               summary=summary)
    return render_template("index.html",
                           form=form,
                           form_dict=form_dict,
                           title="Search"), 422